diff -r aa2539c91954 -r 1c2bb2fc7c87 perfsrv/piprofiler/plugins/GeneralsPlugin/src/MemoryEventHandler.cpp --- a/perfsrv/piprofiler/plugins/GeneralsPlugin/src/MemoryEventHandler.cpp Fri Oct 08 14:56:39 2010 +0300 +++ b/perfsrv/piprofiler/plugins/GeneralsPlugin/src/MemoryEventHandler.cpp Tue Oct 26 16:20:32 2010 +0300 @@ -25,22 +25,20 @@ #include "MemoryEventHandler.h" -DMemoryEventHandler::DMemoryEventHandler(DProfilerSampleBuffer* aSampleBuffer) +DMemoryEventHandler::DMemoryEventHandler(DProfilerSampleBuffer* aSampleBuffer, TProfilerGppSamplerData* aGppSamplerDataIn) : DKernelEventHandler(EventHandler, this), iSampleBuffer(aSampleBuffer), - iSampleDescriptor(&(this->iSample[1]),0,256) + iSampleDescriptor(&(this->iSample[1]),0,256), + gppSamplerData(aGppSamplerDataIn) { -// Kern::Printf("DMemoryEventHandler::DMemoryEventHandler()"); - iCount = 0; iPreviousCount = 0; + iSampleAvailable = false; } TInt DMemoryEventHandler::Create() { -// Kern::Printf("DMemoryEventHandler::Create()"); - - TInt err(Kern::MutexCreate(iLock, _L("MemoryEventHandlerLock"), KMutexOrdGeneral0)); + TInt err(Kern::MutexCreate(iLock, _L("MemoryEventHandlerLock"), KMutexOrdResourceManager)); if (err != KErrNone) return err; @@ -50,8 +48,6 @@ DMemoryEventHandler::~DMemoryEventHandler() { -// Kern::Printf("DMemoryEventHandler::~DMemoryEventHandler()"); - if (iLock) iLock->Close(NULL); @@ -60,8 +56,6 @@ TInt DMemoryEventHandler::Start() { -// Kern::Printf("DMemoryEventHandler::Start()"); - iTracking = ETrue; return KErrNone; } @@ -69,8 +63,6 @@ TInt DMemoryEventHandler::Stop() { -// Kern::Printf("DMemoryEventHandler::Stop()"); - iTracking = EFalse; return KErrNone; } @@ -79,14 +71,22 @@ { LOGTEXT("DMemoryEventHandler::SampleNeeded()"); - // increase the coutner by one on each round - iCount++; - // check if event handler was not running -// if(!iTracking) -// return false; // return false - - return true; + if(!iTracking) + return false; // return false + // check if a new sample is available + if(iSampleAvailable) + { + return true; + } + else + { + return false; + } + } +void DMemoryEventHandler::SampleHandled() + { + iSampleAvailable = false; } @@ -100,11 +100,10 @@ TUint DMemoryEventHandler::HandleEvent(TKernelEvent aType, TAny* a1, TAny* a2) { // debug -// Kern::Printf("New kernel event received, %d", aType); + // Kern::Printf("New kernel event received, %d", aType); - if (iTracking/* && iCount != iPreviousCount*/) + if (iTracking) { -// iPreviousCount = iCount; iCounters[aType]++; switch (aType) { @@ -163,11 +162,6 @@ break; } } -// else if(iTracking && iCount == iPreviousCount) -// { -// // if time stamp is not updated profiling has stopped -// Stop(); -// } return DKernelEventHandler::ERunNext; } @@ -208,12 +202,12 @@ TInt err(KErrNone); TUint8 number(4); // mem sampler id - + TUint32 sampleNum= this->gppSamplerData->sampleNumber; // check if iCount bigger than previous, i.e. at least 1 ms has passed from the previous sample - if(iCount > iPreviousCount) + if(sampleNum > iPreviousCount) { err = this->iSampleBuffer->AddSample(&number,1); - err = this->iSampleBuffer->AddSample((TUint8*)&(iCount),4); + err = this->iSampleBuffer->AddSample((TUint8*)&(sampleNum),4); // add data chunk header TInt length(EncodeUpdateCode()); @@ -224,11 +218,12 @@ err = iSampleBuffer->AddSample(iSample, length); AddFooter(); // end mark for total memory sample } - iPreviousCount = iCount; + iPreviousCount = sampleNum; // add actual sample err = this->iSampleBuffer->AddSample(&number,1); - err = this->iSampleBuffer->AddSample((TUint8*)&(iCount),4); + err = this->iSampleBuffer->AddSample((TUint8*)&(sampleNum),4); + LOGSTRING2("handler timestamp : 0x%04x", sampleNum); return err; } @@ -284,8 +279,6 @@ // handle chunk activity TBool DMemoryEventHandler::HandleAddChunk(DChunk* aChunk) { -// Kern::Printf("New DChunk created: 0x%08x, time: %d", aChunk, iCount); - NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -293,6 +286,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -320,8 +315,6 @@ TBool DMemoryEventHandler::HandleUpdateChunk(DChunk* aChunk) { -// Kern::Printf("DChunk updated: 0x%08x, time: %d", aChunk, iCount); - NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -329,6 +322,9 @@ if(err != KErrNone) { + Kern::Printf("DChunk update error: %d", err); + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -348,7 +344,6 @@ TBool DMemoryEventHandler::HandleDeleteChunk(DChunk* aChunk) { -// Kern::Printf("DChunk deleted: 0x%08x, time: %d", aChunk, iCount); NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -356,6 +351,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -392,7 +389,6 @@ // handle thread activity TBool DMemoryEventHandler::HandleAddThread(DThread* aThread) { -// Kern::Printf("DThread added: 0x%08x, time: %d", aThread->iId, iCount); NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -400,6 +396,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -427,7 +425,6 @@ TBool DMemoryEventHandler::HandleUpdateThread(DThread* aThread) { -// Kern::Printf("DThread updated: 0x%08x, time: %d", aThread->iId, iCount); NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -435,6 +432,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -454,7 +453,6 @@ TBool DMemoryEventHandler::HandleDeleteThread(DThread* aThread) { -// Kern::Printf("DThread deleted: 0x%08x, time: %d", aThread->iId, iCount); NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -462,6 +460,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -482,7 +482,6 @@ TBool DMemoryEventHandler::HandleAddLibrary(DLibrary* aLibrary, DThread* aThread) { LOGTEXT("DMemoryEventHandler::HandleAddLibrary"); - Kern::Printf("DLibrary added: 0x%08x, time: %d", aLibrary, iCount); // add header first NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); @@ -490,6 +489,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -517,7 +518,7 @@ TBool DMemoryEventHandler::HandleDeleteLibrary(DLibrary* aLibrary) { - Kern::Printf("DLibrary deleted: 0x%08x, time: %d", aLibrary, iCount); + LOGTEXT("DMemoryEventHandler::HandleDeleteLibrary"); NKern::ThreadEnterCS(); Kern::MutexWait(*iLock); // add header first @@ -525,6 +526,8 @@ if(err != KErrNone) { + Kern::MutexSignal(*iLock); + NKern::ThreadLeaveCS(); return EFalse; } @@ -640,7 +643,7 @@ iSampleDescriptor.Append((TUint8*)&(t.iUserStackSize),sizeof(TInt)); *size += sizeof(TInt); -// Kern::Printf("TData -> %d",*size); + LOGSTRING2("TData -> %d",*size); return ((TInt)(*size))+1; } @@ -656,7 +659,7 @@ TInt zero(0); TUint32 address((TUint32)&c); - + LOGSTRING2("DMemoryEventHandler::EncodeChunkDataC - address 0x%x", *&address); iSampleDescriptor.Append((TUint8*)&address,sizeof(TUint32)); *size += sizeof(TUint); @@ -676,7 +679,7 @@ iSampleDescriptor.Append((TUint8*)&(zero),sizeof(TInt)); *size += sizeof(TInt); -// Kern::Printf("CData - %d",*size); + LOGSTRING2("CData - %d",*size); return ((TInt)(*size))+1; }