--- 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;
}