userlibandfileserver/fileserver/sfile/sf_file_cache.h
branchRCL_3
changeset 43 c1f20ce4abcf
parent 41 0ffb4e86fcc9
child 44 3e88ff8f41d5
equal deleted inserted replaced
42:a179b74831c9 43:c1f20ce4abcf
    26 
    26 
    27 #include "sf_cache_client.h"
    27 #include "sf_cache_client.h"
    28 
    28 
    29 //#define _DEBUG_READ_AHEAD
    29 //#define _DEBUG_READ_AHEAD
    30 
    30 
       
    31 // if writing sequentially, start flushing dirty data when the cache is half full
       
    32 //#define DOUBLE_BUFFERED_WRITING
       
    33 
    31 
    34 
    32 NONSHARABLE_CLASS(CFileCache) : public CFsDispatchObject
    35 NONSHARABLE_CLASS(CFileCache) : public CFsDispatchObject
    33 	{
    36 	{
    34 public:
    37 public:
    35 	static CFileCache* NewL(CFileShare& aShare);
    38 	static CFileCache* NewL(CFileShare& aShare);
    73 	
    76 	
    74 	void SetFileCacheFlags(CFileShare& aShare);
    77 	void SetFileCacheFlags(CFileShare& aShare);
    75 
    78 
    76 	TInt DoReadBuffered(CFsMessageRequest& aMsgRequest, TUint aMode, CFsClientMessageRequest*& aNewRequest);
    79 	TInt DoReadBuffered(CFsMessageRequest& aMsgRequest, TUint aMode, CFsClientMessageRequest*& aNewRequest);
    77 	TInt DoWriteBuffered(CFsMessageRequest& aMsgRequest, CFsClientMessageRequest*& aNewRequest, TUint aMode);
    80 	TInt DoWriteBuffered(CFsMessageRequest& aMsgRequest, CFsClientMessageRequest*& aNewRequest, TUint aMode);
    78 	enum TFlushMode {EFlushSingle, EFlushAll};
    81 	enum TFlushMode {EFlushSingle, EFlushHalf, EFlushAll};
    79 	TInt DoFlushDirty(CFsClientMessageRequest*& aNewRequest, CFsRequest* aOldRequest, TFlushMode aFlushMode);
    82 	TInt DoFlushDirty(CFsClientMessageRequest*& aNewRequest, CFsRequest* aOldRequest, TFlushMode aFlushMode);
    80 
    83 
    81 
    84 
    82 	inline TInt SegmentSize() const;
    85 	inline TInt SegmentSize() const;
    83 	inline TInt SegmentSizeLog2() const;
    86 	inline TInt SegmentSizeLog2() const;
   155 	TInt64 iLastReadPos;
   158 	TInt64 iLastReadPos;
   156 	TInt iLastReadLen;
   159 	TInt iLastReadLen;
   157 	TBool iFileCacheReadAsync;
   160 	TBool iFileCacheReadAsync;
   158 	CFsClientMessageRequest* iReadAheadRequest;
   161 	CFsClientMessageRequest* iReadAheadRequest;
   159 
   162 
       
   163 #ifdef DOUBLE_BUFFERED_WRITING
       
   164 	// sequential append-write detection
       
   165 	TInt iSequentialAppends;
       
   166 #endif
       
   167 
   160 	friend class TClosedFileUtils;
   168 	friend class TClosedFileUtils;
   161 	friend class TFsFileWriteDirty;
   169 	friend class TFsFileWriteDirty;
   162 	};
   170 	};
   163 
   171 
   164 
   172