--- a/userlibandfileserver/fileserver/sfile/sf_file_cache.cpp Tue Oct 26 11:12:58 2010 +0100
+++ b/userlibandfileserver/fileserver/sfile/sf_file_cache.cpp Tue Oct 26 12:49:20 2010 +0100
@@ -241,6 +241,7 @@
CleanupClosePushL(*fileCache);
fileCache->ConstructL(aShare);
CleanupStack::Pop(1, fileCache);
+
return fileCache;
}
@@ -305,6 +306,8 @@
delete iCacheClient;
delete iFileNameF;
+
+ OstTraceExt2(TRACE_FILECACHE, FILECACHE_DELETE, "fileCache %x fileCB %x", (TUint) this, (TUint) iFileCB);
}
@@ -316,6 +319,8 @@
TInt CFileCache::DirtyTimerEvent(TAny* aFileCache)
{
+ OstTrace1(TRACE_FILECACHE, FILECACHE_DIRTY_DATA_TIMER_EXPIRY, "fileCache %x", (TUint) aFileCache);
+
// Cannot report errors here
// coverity [unchecked_value]
(void)((CFileCache*) aFileCache)->FlushDirty();
@@ -340,7 +345,9 @@
__ASSERT_DEBUG(!iDirtyDataOwner, Fault(EClosingDirtyFile));
}
#endif
-
+
+ // there should be no dirty data (see assert above) but clean up just in case
+ MarkFileClean();
__CACHE_PRINT2(_L("CFileCache::Close() iFileCB %08X IsClosed %d"),
iFileCB, TClosedFileUtils::IsClosed(this));
@@ -350,6 +357,8 @@
!TClosedFileUtils::IsClosed(this) &&
IsDriveThread())
{
+ OstTrace1(TRACE_FILECACHE, FILECACHE_MODE_TO_CLOSEQ, "Moving to close queue, fileCache %x", (TUint) this);
+
// add to ClosedFiles container
__CACHE_PRINT1(_L("CLOSEDFILES: Adding %S\n"), &iFileCB->FileNameF() );
TRAP(r, TClosedFileUtils::AddL(this, ETrue));
@@ -567,6 +576,10 @@
if (r != KErrNone)
return;
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_AHEAD, "Issue read ahead, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(iReadAheadPos), (TUint) I64LOW(iReadAheadPos), iReadAheadLen);
+
r = newRequest->PushOperation(
iReadAheadPos,
iReadAheadLen,
@@ -840,6 +853,11 @@
if (totalLen > iCacheSize)
{
TInt len = totalLen - iCacheSize;
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_UNCACHED1, "Read, media to client, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) len);
+
TInt r = aMsgRequest.PushOperation(
currentPos, len,
(TDesC8*) currentOperation->iReadWriteArgs.iData, currentOffset,
@@ -891,6 +909,11 @@
// read into cache segment(s)
__CACHE_PRINT2(_L("CACHEFILE: read pos %ld, readLen %d"), segmentStartPos, readLen);
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_CACHED1, "Read, media to cache, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(segmentStartPos), (TUint) I64LOW(segmentStartPos), (TUint) readLen);
+
TInt r = aMsgRequest.PushOperation(
segmentStartPos, readLen, addr, 0,
CompleteRead,
@@ -924,6 +947,10 @@
// if addr is NULL then this is a read ahead request
if (currentOperation->iReadWriteArgs.iData != NULL)
{
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_COPY, "Read, cache to client, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) len);
+
if (currentOperation->iClientRequest)
{
__ASSERT_DEBUG (aMsgRequest.Message().Handle() != NULL, Fault(EMsgAlreadyCompleted));
@@ -978,6 +1005,10 @@
addr = (TUint8*) currentOperation->iScratchValue0;
readLen = (TInt) currentOperation->iScratchValue1;
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt3(TRACE_FILECACHE, FILECACHE_READ_COMPLETE, "Read, media to cache, clientThreadId %x fileCache %x r %d",
+ (TUint) threadId, (TUint) this, (TUint) (TUint) lastError);
+
aMsgRequest.CurrentOperation().iState = EStCopyToClient;
}
break;
@@ -1027,6 +1058,11 @@
aMsgRequest.ReStart();
UpdateSharePosition(aMsgRequest, *currentOperation);
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_UNCACHED2, "Read media to client, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) totalLen);
+
return retCode;
@@ -1205,6 +1241,11 @@
iCacheClient->Purge(ETrue);
TInt len = totalLen - iCacheSize;
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_WRITE_UNCACHED1, "Write, client to media, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) len);
+
TInt r = aMsgRequest.PushOperation(
currentPos, len,
(TDesC8*) currentOperation->iReadWriteArgs.iData, currentOffset,
@@ -1394,6 +1435,11 @@
#pragma warning( default : 4244 )
#endif
__ASSERT_DEBUG (aMsgRequest.Message().Handle() != NULL, Fault(EMsgAlreadyCompleted));
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_READ_CACHED2, "Read, media to cache, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(readPos), (TUint) I64LOW(readPos), (TUint) readLen);
+
TInt r = aMsgRequest.PushOperation(
readPos, readLen, readAddr, 0,
CompleteWrite,
@@ -1446,6 +1492,11 @@
__ASSERT_DEBUG (aMsgRequest.Message().Handle() != NULL, Fault(EMsgAlreadyCompleted));
// copy from user buffer to cache buffer
TInt writeError = KErrNone;
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_WRITE_COPY, "Write, client to cache, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) writeLen);
+
if (currentOperation->iClientRequest)
{
TPtr8 ptr(addr+offset, writeLen, writeLen);
@@ -1549,14 +1600,20 @@
currentOperation->iState = EStReStart;
case EStReStart:
-
+ {
__ASSERT_DEBUG(retCode == CFsRequest::EReqActionBusy || retCode == CFsRequest::EReqActionContinue, Fault(EBadRetCode));
aMsgRequest.ReStart();
UpdateSharePosition(aMsgRequest, *currentOperation);
if (currentOperation->iClientRequest)
currentOperation->iReadWriteArgs.iPos = currentOperation->iClientPosition; // NB maybe KCurrentPosition64
+
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_WRITE_UNCACHED2, "Write, client to media, clientThreadId %x fileCache %x pos %x:%x len %d",
+ (TUint) threadId, (TUint) this, (TUint) I64HIGH(currentPos), (TUint) I64LOW(currentPos), (TUint) totalLen);
+
return retCode;
+ }
case EStEnd:
return retCode;
@@ -1604,6 +1661,15 @@
CFsClientMessageRequest* newRequest = NULL;
+#if defined (OST_TRACE_COMPILER_IN_USE)
+ RMessage2 msgOld;
+ if (aOldRequest)
+ msgOld = const_cast<RMessage2&> (aOldRequest->Message());
+ TRACETHREADID(msgOld);
+ OstTraceExt2(TRACE_FILECACHE, FILECACHE_FLUSH_DIRTY, "clientThreadId %x fileCache %x", (TUint) threadId, (TUint) this);
+#endif // if defined (OST_TRACE_COMPILER_IN_USE)
+
+
TInt r = DoFlushDirty(newRequest, aOldRequest, EFlushAll);
iLock.Signal();
@@ -1883,6 +1949,9 @@
currentOperation->Set(pos, len, addr, 0, EStWriteToDiskComplete);
if (pos < iSize64)
{
+ OstTraceExt4(TRACE_FILECACHE, FILECACHE_WRITE_DIRTY, "Write, cache to media, fileCache %x pos %x:%x len %d",
+ (TUint) this, (TUint) I64HIGH(pos), (TUint) I64LOW(pos), (TUint) len);
+
TInt r = aMsgRequest.PushOperation(
pos, len, addr, 0,
CompleteFlushDirty,
@@ -1909,6 +1978,10 @@
iDrive->Dismount();
}
#endif
+ TRACETHREADID(aMsgRequest.Message());
+ OstTraceExt3(TRACE_FILECACHE, FILECACHE_FLUSH_DIRTY_COMPLETE, "Write, cache to media, clientThreadId %x fileCache %x r %d",
+ (TUint) threadId, (TUint) this, (TUint) lastError);
+
pos = currentOperation->iReadWriteArgs.iPos;
iCacheClient->UnlockSegments(pos);
}
@@ -2129,7 +2202,11 @@
CDriveThread* driveThread=NULL;
TInt r = FsThreadManager::GetDriveThread(iDriveNum, &driveThread);
if(r == KErrNone && driveThread != NULL)
+ {
+ OstTrace1(TRACE_FILECACHE, FILECACHE_STARTING_DIRTY_DATA_TIMER, "Starting dirty data timer() fileCache %x", (TUint) this);
+
iDirtyTimer.Start(driveThread, iDirtyDataFlushTime);
+ }
}
//----------------------------------------------------------------------------
@@ -2294,6 +2371,14 @@
driveCacheSettings->iClosedFileKeepAliveTime,
driveCacheSettings->iDirtyDataFlushTime);
+ OstTraceExt5(TRACE_FILECACHE, FILECACHE_SETTINGS,
+ "Drive %d Flags %x CacheSize %d FileCacheReadAsync %d FairSchedulingLen %d ",
+ (TUint) aDriveNumber,
+ (TUint) driveCacheSettings->iFlags,
+ (TUint) driveCacheSettings->iCacheSize,
+ (TUint) driveCacheSettings->iFileCacheReadAsync,
+ (TUint) driveCacheSettings->iFairSchedulingLen);
+
return KErrNone;
}