--- a/perfsrv/piprofiler/piprofiler_plat/inc/ProfilerGenericClassesKrn.h Fri Oct 08 14:56:39 2010 +0300
+++ b/perfsrv/piprofiler/piprofiler_plat/inc/ProfilerGenericClassesKrn.h Tue Oct 26 16:20:32 2010 +0300
@@ -19,71 +19,77 @@
#ifndef PROFILERGENERICCLASSESKRN_H
#define PROFILERGENERICCLASSESKRN_H
- #include <piprofiler/ProfilerGenericClassesCommon.h>
- #include <piprofiler/ProfilerTraces.h>
+ #include <piprofiler/ProfilerGenericClassesCommon.h>
+ #include <piprofiler/ProfilerTraces.h>
- #include <e32cmn.h>
+ #include <e32cmn.h>
- #define PROFILER_KERNEL_MODE
+ #define PROFILER_KERNEL_MODE
#ifdef PROFILER_KERNEL_MODE
+
+#ifdef __SMP__
+static TSpinLock BufferStateSpinLock = TSpinLock(TSpinLock::EOrderGenericIrqLow3);
+static TSpinLock WriteSpinLock = TSpinLock(TSpinLock::EOrderGenericIrqLow3);
+#endif
+
class DProfilerSampleBuffer;
class DProfilerSampleStream
{
public:
- DProfilerSampleStream();
- ~DProfilerSampleStream();
+ DProfilerSampleStream();
+ ~DProfilerSampleStream();
- void InsertCurrentClient(DThread* aClient);
- void AddSampleBuffer(TBapBuf* aBuffer,TRequestStatus* aStatus);
- void ReleaseIfPending();
+ void InsertCurrentClient(DThread* aClient);
+ void AddSampleBuffer(TBapBuf* aBuffer,TRequestStatus* aStatus);
+ void ReleaseIfPending();
- void AddSamples(DProfilerSampleBuffer& aBuffer, TInt aSamplerId);
- TInt EndSampling(DProfilerSampleBuffer& aBuffer,TInt aSamplerId);
+ void AddSamples(DProfilerSampleBuffer& aBuffer, TInt aSamplerId);
+ TInt EndSampling(DProfilerSampleBuffer& aBuffer,TInt aSamplerId);
- void PerformCopy(TUint8 aSamplerId,TUint8* aSrc,TPtr8* dst,TInt aOffset,TInt aAmount);
+ void PerformCopy(TUint8 aSamplerId,TUint8* aSrc,TPtr8* dst,TInt aOffset,TInt aAmount);
private:
- TBapBuf* iCurrentBuffer;
- TRequestStatus* iPendingRequest;
- DThread* iClient;
- TInt iAddingSamples;
+ TBapBuf* iCurrentBuffer;
+ TRequestStatus* iPendingRequest;
+ DThread* iClient;
+ TInt iAddingSamples;
};
class DProfilerSampleBuffer : public DBase
{
- friend class DProfilerSampleStream;
+ friend class DProfilerSampleStream;
public:
- enum ProfilerBufferStatus
- {
- BufferOk,
- BufferCopyAsap,
- BufferBeingCopied,
- BufferFull,
- BufferDataEnd
- };
+ enum ProfilerBufferStatus
+ {
+ BufferOk,
+ BufferCopyAsap,
+ BufferBeingCopied,
+ BufferFull,
+ BufferDataEnd
+ };
- DProfilerSampleBuffer(TUint8* aBuffer, TUint8* aDblBuffer, TUint32 aSize);
- ~DProfilerSampleBuffer();
- TInt AddSample(TUint8* aSample, TUint32 aLength);
- TUint32 GetBufferStatus();
- void ClearBuffer();
- void EndSampling();
- void DataCopied();
+ DProfilerSampleBuffer(TUint8* aBuffer, TUint8* aDblBuffer, TUint32 aSize);
+ ~DProfilerSampleBuffer();
+ TInt AddSample(TUint8* aSample, TUint32 aLength);
+ TUint32 GetBufferStatus();
+ void ClearBuffer();
+ void EndSampling();
+ void DataCopied();
- TUint32 iBufferStatus;
private:
- TUint32 iBytesWritten;
- TUint32 iDblBytesWritten;
- TUint32 iDblBytesRead;
+ TUint32 iBufferStatus;
+ TUint32 iBytesWritten;
+ TUint32 iDblBytesWritten;
+ TUint32 iDblBytesRead;
- TUint32 iBufferDataSize;
- TUint32 iBufferRealSize;
+ TUint32 iBufferDataSize;
+ TUint32 iBufferRealSize;
- TProfilerSampleBufStruct* iDblBufStruct;
- TProfilerSampleBufStruct* iBufStruct;
+ TProfilerSampleBufStruct* iDblBufStruct;
+ TProfilerSampleBufStruct* iBufStruct;
};
#endif
@@ -91,44 +97,44 @@
/*
- *
- * Abstract class CProfilerSamplerBase definition
- *
+ *
+ * Abstract class CProfilerSamplerBase definition
+ *
*/
#ifdef PROFILER_KERNEL_MODE
class DProfilerSamplerBase : public DBase
{
public:
- DProfilerSamplerBase();
- virtual ~DProfilerSamplerBase();
+ DProfilerSamplerBase();
+ virtual ~DProfilerSamplerBase();
- virtual TInt Initialise() = 0;
- virtual void Sample() = 0;
- virtual TBool PostSampleNeeded() = 0;
- virtual TInt PostSample() = 0;
- virtual TInt EndSampling() = 0;
+ virtual TInt Initialise() = 0;
+ virtual void Sample(TAny* aPtr) = 0;
+ virtual TBool PostSampleNeeded() = 0;
+ virtual TInt PostSample() = 0;
+ virtual TInt EndSampling() = 0;
- virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0) = 0;
+ virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0) = 0;
- virtual void SetEnabledFlag(TBool aFlag) = 0;
- virtual TBool GetEnabledFlag() = 0;
- virtual void SetOutputCombination(TInt aSettings) = 0;
- virtual void SetSamplingPeriod(TInt aSettings) = 0;
- virtual void SetAdditionalSettings(TInt aSettings) = 0;
- virtual void SetAdditionalSettings2(TInt aSettings) = 0;
- virtual void SetAdditionalSettings3(TInt aSettings) = 0;
- virtual void SetAdditionalSettings4(TInt aSettings) = 0;
+ virtual void SetEnabledFlag(TBool aFlag) = 0;
+ virtual TBool GetEnabledFlag() = 0;
+ virtual void SetOutputCombination(TInt aSettings) = 0;
+ virtual void SetSamplingPeriod(TInt aSettings) = 0;
+ virtual void SetAdditionalSettings(TInt aSettings) = 0;
+ virtual void SetAdditionalSettings2(TInt aSettings) = 0;
+ virtual void SetAdditionalSettings3(TInt aSettings) = 0;
+ virtual void SetAdditionalSettings4(TInt aSettings) = 0;
- TInt iSamplerId;
- TInt iOutputCombination;
- TBool iEnabled;
+ TInt iSamplerId;
+ TInt iOutputCombination;
+ TBool iEnabled;
};
/*
- *
- * Template abstract class CProfilerGenericSampler definition
- *
+ *
+ * Template abstract class CProfilerGenericSampler definition
+ *
*/
// size parameter given defines the explicit buffer size in bytes for this sampler
@@ -136,89 +142,90 @@
class DProfilerGenericSampler : public DProfilerSamplerBase
{
public:
- DProfilerGenericSampler(TInt aSamplerId);
- virtual ~DProfilerGenericSampler();
+ DProfilerGenericSampler(TInt aSamplerId);
+ virtual ~DProfilerGenericSampler();
- TInt Initialise();
- virtual void Sample() = 0;
- TBool PostSampleNeeded();
- TInt PostSample();
- TInt EndSampling();
- virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0);
+ TInt Initialise();
+ virtual void Sample(TAny* aPtr) = 0;
+ TBool PostSampleNeeded();
+ TInt PostSample();
+ TInt EndSampling();
+ virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0);
- void SetEnabledFlag(TBool aFlag);
- TBool GetEnabledFlag();
- void SetOutputCombination(TInt aComb);
- void SetSamplingPeriod(TInt aSettings);
- void SetAdditionalSettings(TInt aSettings);
- void SetAdditionalSettings2(TInt aSettings);
- void SetAdditionalSettings3(TInt aSettings);
- void SetAdditionalSettings4(TInt aSettings);
+ void SetEnabledFlag(TBool aFlag);
+ TBool GetEnabledFlag();
+ void SetOutputCombination(TInt aComb);
+ void SetSamplingPeriod(TInt aSettings);
+ void SetAdditionalSettings(TInt aSettings);
+ void SetAdditionalSettings2(TInt aSettings);
+ void SetAdditionalSettings3(TInt aSettings);
+ void SetAdditionalSettings4(TInt aSettings);
- DProfilerSampleBuffer* iSampleBuffer;
- DProfilerSampleStream* iStream;
+ DProfilerSampleBuffer* iSampleBuffer;
+ DProfilerSampleStream* iStream;
- // for right alignment
- TUint8 iBuffer[BufferSize+4];
- TUint8 iDblBuffer[BufferSize+4];
-
- TInt iSamplingPeriod;
- TInt iAdditionalSettings;
- TInt iAdditionalSettings2;
- TInt iAdditionalSettings3;
- TInt iAdditionalSettings4;
+ // for right alignment
+ TUint8 iBuffer[BufferSize+4];
+ TUint8 iDblBuffer[BufferSize+4];
+
+ TInt iSamplingPeriod;
+ TInt iAdditionalSettings;
+ TInt iAdditionalSettings2;
+ TInt iAdditionalSettings3;
+ TInt iAdditionalSettings4;
};
/*
- *
- * Template abstract class CProfilerGenericSampler implementation
+ *
+ * Template abstract class CProfilerGenericSampler implementation
*
*/
template <int BufferSize>
DProfilerGenericSampler<BufferSize>::DProfilerGenericSampler(TInt aSamplerId)
{
- iSamplerId = aSamplerId;
- iEnabled = false;
- iSampleBuffer = 0;
- iAdditionalSettings = 0;
- iAdditionalSettings2 = 0;
+ iSamplerId = aSamplerId;
+ iEnabled = false;
+ iSampleBuffer = 0;
+ iAdditionalSettings = 0;
+ iAdditionalSettings2 = 0;
iAdditionalSettings3 = 0;
iAdditionalSettings4 = 0;
- iStream = 0;
- Initialise();
+ iStream = 0;
+ Initialise();
}
template <int BufferSize>
DProfilerGenericSampler<BufferSize>::~DProfilerGenericSampler()
{
- LOGSTRING2("CProfilerGenericSampler<%d>::CProfilerGenericSampler",BufferSize);
-
- if(iSampleBuffer != 0)
- delete iSampleBuffer;
-
+ LOGSTRING2("DProfilerGenericSampler<%d>::CProfilerGenericSampler",BufferSize);
+
+ if(iSampleBuffer != 0)
+ {
+ delete iSampleBuffer;
+ }
}
template <int BufferSize>
TInt DProfilerGenericSampler<BufferSize>::Initialise()
{
- LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - chunk option",BufferSize);
+ LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - chunk option",BufferSize);
- // stream is not used in chunk mode
- iStream = 0;
+ // stream is not used in chunk mode
+ iStream = 0;
- // create the sample buffer object with the buffers
- if(iSampleBuffer == 0)
- {
- iSampleBuffer = new DProfilerSampleBuffer(iBuffer,iDblBuffer,BufferSize);
+ // create the sample buffer object with the buffers
+ if(iSampleBuffer == 0)
+ {
+ iSampleBuffer = new DProfilerSampleBuffer(iBuffer,iDblBuffer,BufferSize);
}
- else
- {
- LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - ERROR 1",BufferSize);
+ else
+ {
+ LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - ERROR 1",BufferSize);
}
- return KErrNone;
+ return KErrNone;
}
@@ -226,73 +233,75 @@
template <int BufferSize>
TInt DProfilerGenericSampler<BufferSize>::Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset)
{
- LOGSTRING4("CProfilerGenericSampler<%d>::Reset %d, sync offset %d",BufferSize,aStream,aSyncOffset);
- // reset the sample buffer and resolve the chunk again
+ LOGSTRING4("DProfilerGenericSampler<%d>::Reset %d, sync offset %d",BufferSize,aStream,aSyncOffset);
+ // reset the sample buffer and resolve the chunk again
- // CURRENT VERSION SUPPORTS ONLY STREAM MODE!
- LOGSTRING2("CProfilerGenericSampler<%d>::Reset - stream option",BufferSize);
+ // CURRENT VERSION SUPPORTS ONLY STREAM MODE!
+ LOGSTRING2("DProfilerGenericSampler<%d>::Reset - stream option",BufferSize);
- // initialise the sampler with the stream option
- iStream = aStream;
+ // initialise the sampler with the stream option
+ iStream = aStream;
- // clear the sample buffer
- if(iSampleBuffer != 0)
- {
- iSampleBuffer->ClearBuffer();
+ // clear the sample buffer
+ if(iSampleBuffer != 0)
+ {
+ iSampleBuffer->ClearBuffer();
}
- else
- {
- LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - ERROR no buffer",BufferSize);
+ else
+ {
+ LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - ERROR no buffer",BufferSize);
}
- return KErrNone;
+ return KErrNone;
}
template <int BufferSize>
TBool DProfilerGenericSampler<BufferSize>::PostSampleNeeded()
{
- LOGSTRING4("CProfilerGenericSampler<%d>::PostSampleNeeded - ID %d, state %d",iSamplerId,BufferSize,iSampleBuffer->GetBufferStatus());
+ LOGSTRING4("DProfilerGenericSampler<%d>::PostSampleNeeded - ID %d, state %d",BufferSize ,iSamplerId ,iSampleBuffer->GetBufferStatus());
- TUint32 status = iSampleBuffer->iBufferStatus;
+ TUint32 status(iSampleBuffer->GetBufferStatus());
- if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull)
- {
- return true;
+ if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull)
+ {
+ return true;
}
-
- return false;
+
+ return false;
}
template <int BufferSize>
TInt DProfilerGenericSampler<BufferSize>::PostSample()
{
- LOGSTRING4("CProfilerGenericSampler<%d>::PostSample - ID %d, state %d",iSamplerId,BufferSize,iSampleBuffer->GetBufferStatus());
+ LOGSTRING4("DProfilerGenericSampler<%d>::PostSample - ID %d, state %d",BufferSize,iSamplerId,iSampleBuffer->GetBufferStatus());
- TUint32 status = iSampleBuffer->iBufferStatus;
+ TUint32 status(iSampleBuffer->GetBufferStatus());
- if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull)
- {
+ if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull)
+ {
// write data to the stream
- iStream->AddSamples(*iSampleBuffer,iSamplerId);
- }
-
- return KErrNone;
+ iStream->AddSamples(*iSampleBuffer,iSamplerId);
+ }
+
+ return KErrNone;
}
template <int BufferSize>
TInt DProfilerGenericSampler<BufferSize>::EndSampling()
{
- LOGSTRING3("CProfilerGenericSampler<%d>::EndSampling, ID %d",BufferSize,iSamplerId);
+ LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d",BufferSize,iSamplerId);
// only if write to stream option is selected
if(iStream->EndSampling(*iSampleBuffer,iSamplerId) == 0)
{
+ LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d - ok",BufferSize,iSamplerId);
return KErrNone;
}
else
{
+ LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d - still data to copy",BufferSize,iSamplerId);
// there is still data to copy
return KErrNotReady;
}
@@ -301,117 +310,117 @@
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetEnabledFlag(TBool aFlag)
{
- LOGSTRING2("CProfilerGenericSampler<%d>::SetEnabledFlag",BufferSize);
- iEnabled = aFlag;
+ LOGSTRING2("CProfilerGenericSampler<%d>::SetEnabledFlag",BufferSize);
+ iEnabled = aFlag;
}
template <int BufferSize>
TBool DProfilerGenericSampler<BufferSize>::GetEnabledFlag()
{
- LOGSTRING2("CProfilerGenericSampler<%d>::GetEnabledFlag",BufferSize);
- return iEnabled;
+ LOGSTRING2("CProfilerGenericSampler<%d>::GetEnabledFlag",BufferSize);
+ return iEnabled;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetOutputCombination(TInt aComb)
{
- LOGSTRING2("CProfilerGenericSampler<%d>::SetOutputCombination",BufferSize);
- iOutputCombination = aComb;
+ LOGSTRING2("CProfilerGenericSampler<%d>::SetOutputCombination",BufferSize);
+ iOutputCombination = aComb;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings(TInt aSettings)
{
- LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings to 0x%x",BufferSize,aSettings);
- iAdditionalSettings = aSettings;
+ LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings to 0x%x",BufferSize,aSettings);
+ iAdditionalSettings = aSettings;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings2(TInt aSettings)
{
- LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings2 to 0x%x",BufferSize,aSettings);
- iAdditionalSettings2 = aSettings;
+ LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings2 to 0x%x",BufferSize,aSettings);
+ iAdditionalSettings2 = aSettings;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings3(TInt aSettings)
{
- LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings3 to 0x%x",BufferSize,aSettings);
- iAdditionalSettings3 = aSettings;
+ LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings3 to 0x%x",BufferSize,aSettings);
+ iAdditionalSettings3 = aSettings;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings4(TInt aSettings)
{
- LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings4 to 0x%x",BufferSize,aSettings);
- iAdditionalSettings4 = aSettings;
+ LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings4 to 0x%x",BufferSize,aSettings);
+ iAdditionalSettings4 = aSettings;
}
template <int BufferSize>
void DProfilerGenericSampler<BufferSize>::SetSamplingPeriod(TInt aSettings)
{
- LOGSTRING3("CProfilerGenericSampler<%d>::SetSamplingPeriod to 0x%x",BufferSize,aSettings);
- iSamplingPeriod = aSettings;
+ LOGSTRING3("CProfilerGenericSampler<%d>::SetSamplingPeriod to 0x%x",BufferSize,aSettings);
+ iSamplingPeriod = aSettings;
}
/*
- *
- * Just a test class that is derived from CProfilerGenericSampler
- *
+ *
+ * Just a test class that is derived from CProfilerGenericSampler
+ *
*/
template <int BufferSize>
class DProfilerExampleSampler : public DProfilerGenericSampler<BufferSize>
{
public:
- TUint32 iSampleNumber;
+ TUint32 iSampleNumber;
- DProfilerExampleSampler(TInt aSamplerId);
- ~DProfilerExampleSampler();
+ DProfilerExampleSampler(TInt aSamplerId);
+ ~DProfilerExampleSampler();
- void Sample();
- void Sample(TInt aCount, TInt aLastPc);
+ void Sample();
+ void Sample(TInt aCount, TInt aLastPc);
};
/*
- *
- * Just a test class that is derived from CProfilerGenericSampler
- *
+ *
+ * Just a test class that is derived from CProfilerGenericSampler
+ *
*/
template <int BufferSize>
DProfilerExampleSampler<BufferSize>::DProfilerExampleSampler(TInt aSamplerId) :
- DProfilerGenericSampler<BufferSize>(aSamplerId)
+ DProfilerGenericSampler<BufferSize>(aSamplerId)
{
iSampleNumber = 0;
- LOGSTRING2("CProfilerExampleSampler<%d>::CProfilerExampleSampler",BufferSize);
+ LOGSTRING2("CProfilerExampleSampler<%d>::CProfilerExampleSampler",BufferSize);
}
template <int BufferSize>
void DProfilerExampleSampler<BufferSize>::Sample()
{
- LOGSTRING2("CProfilerExampleSampler<%d>::Sample",BufferSize);
- TBuf8<20>* testiBuf = new TBuf8<20>;
+ LOGSTRING2("CProfilerExampleSampler<%d>::Sample",BufferSize);
+ TBuf8<20>* testiBuf = new TBuf8<20>;
- testiBuf->AppendNum((TInt)iSampleNumber);
- iSampleNumber++;
+ testiBuf->AppendNum((TInt)iSampleNumber);
+ iSampleNumber++;
- this->iSampleBuffer->AddSample((TUint8*)testiBuf->Ptr(),testiBuf->Length());
- delete testiBuf;
- return;
+ this->iSampleBuffer->AddSample((TUint8*)testiBuf->Ptr(),testiBuf->Length());
+ delete testiBuf;
+ return;
}
template <int BufferSize>
void DProfilerExampleSampler<BufferSize>::Sample(TInt aCount, TInt aLastPc)
{
- return;
+ return;
}
template <int BufferSize>
DProfilerExampleSampler<BufferSize>::~DProfilerExampleSampler()
{
- LOGSTRING2("CProfilerExampleSampler<%d>::~CProfilerExampleSampler",BufferSize);
+ LOGSTRING2("CProfilerExampleSampler<%d>::~CProfilerExampleSampler",BufferSize);
}
#include <piprofiler/ProfilerGenericClassesKrn.inl>