userlibandfileserver/fileserver/sfile/sf_file_cache.h
changeset 201 43365a9b78a3
parent 0 a41df078684a
child 299 b5a01337d018
equal deleted inserted replaced
200:73ea206103e6 201:43365a9b78a3
    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 	TInt DoFlushDirty(CFsClientMessageRequest*& aNewRequest, CFsRequest* aOldRequest, TBool aFlushAll);
    81 	enum TFlushMode {EFlushSingle, EFlushHalf, EFlushAll};
       
    82 	TInt DoFlushDirty(CFsClientMessageRequest*& aNewRequest, CFsRequest* aOldRequest, TFlushMode aFlushMode);
    79 
    83 
    80 
    84 
    81 	inline TInt SegmentSize() const;
    85 	inline TInt SegmentSize() const;
    82 	inline TInt SegmentSizeLog2() const;
    86 	inline TInt SegmentSizeLog2() const;
    83 	inline TInt64 SegmentSizeMask() const;
    87 	inline TInt64 SegmentSizeMask() const;
   154 	TInt64 iLastReadPos;
   158 	TInt64 iLastReadPos;
   155 	TInt iLastReadLen;
   159 	TInt iLastReadLen;
   156 	TBool iFileCacheReadAsync;
   160 	TBool iFileCacheReadAsync;
   157 	CFsClientMessageRequest* iReadAheadRequest;
   161 	CFsClientMessageRequest* iReadAheadRequest;
   158 
   162 
       
   163 #ifdef DOUBLE_BUFFERED_WRITING
       
   164 	// sequential append-write detection
       
   165 	TInt iSequentialAppends;
       
   166 #endif
       
   167 
   159 	friend class TClosedFileUtils;
   168 	friend class TClosedFileUtils;
   160 	friend class TFsFileWriteDirty;
   169 	friend class TFsFileWriteDirty;
   161 	};
   170 	};
   162 
   171 
   163 
   172