perfsrv/piprofiler/plugins/GeneralsPlugin/inc/GppSamplerImpl.h
changeset 62 1c2bb2fc7c87
parent 51 98307c651589
--- a/perfsrv/piprofiler/plugins/GeneralsPlugin/inc/GppSamplerImpl.h	Fri Oct 08 14:56:39 2010 +0300
+++ b/perfsrv/piprofiler/plugins/GeneralsPlugin/inc/GppSamplerImpl.h	Tue Oct 26 16:20:32 2010 +0300
@@ -96,6 +96,7 @@
 	TInt 		iIsaEnd;
 	TUint32     iMask;
 	TUint32     iCpuSelector;
+	TInt        iPrevTS;   // previous sample's timestamp
 };
 
 struct TProfilerGppSamplerData
@@ -118,13 +119,13 @@
 	~DProfilerGppSampler();
 
 	struct TProfilerGppSamplerData* GetExportData();
-	void	Sample();
+	void	Sample(TAny* aPtr);
 	TInt	Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset);
 	TInt 	GetPeriod();
 	
 private:
-	DGppSamplerImpl gppSamplerImpl;
-	struct TProfilerGppSamplerData exportData;
+	DGppSamplerImpl iGppSamplerImpl;
+	struct TProfilerGppSamplerData iExportData;
 #ifdef __SMP__
 	TInt   iCpuNumber;
 #endif
@@ -140,97 +141,91 @@
 DProfilerGppSampler<BufferSize>::DProfilerGppSampler() :
 	DProfilerGenericSampler<BufferSize>(PROFILER_GPP_SAMPLER_ID) 
     {
-	LOGSTRING2("CProfilerGppSampler<%d>::CProfilerGppSampler",BufferSize);
+	LOGSTRING2("DProfilerGppSampler<%d>::CProfilerGppSampler",BufferSize);
     }
 #else
 template <int BufferSize>
 DProfilerGppSampler<BufferSize>::DProfilerGppSampler(TInt aCpuNumber) :
     DProfilerGenericSampler<BufferSize>(PROFILER_GPP_SAMPLER_ID+(aCpuNumber*20)), iCpuNumber(aCpuNumber) 
     {
-    LOGSTRING2("CProfilerGppSampler<%d>::CProfilerGppSampler",BufferSize);
+    LOGSTRING3("DProfilerGppSampler<%d>::DProfilerGppSampler, cpu %d",BufferSize, iCpuNumber);
     }
 #endif
 
 template <int BufferSize>
 DProfilerGppSampler<BufferSize>::~DProfilerGppSampler()
     {
-	LOGSTRING2("CProfilerGppSampler<%d>::~CProfilerGppSampler",BufferSize);		
+	LOGSTRING2("DProfilerGppSampler<%d>::~CProfilerGppSampler",BufferSize);		
     }
 
 template <int BufferSize>
 TInt DProfilerGppSampler<BufferSize>::Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset)
         {
-	LOGSTRING2("CProfilerGppSampler<%d>::Reset - calling superclass reset",BufferSize);
+	LOGSTRING2("DProfilerGppSampler<%d>::Reset - calling superclass reset",BufferSize);
 	DProfilerGenericSampler<BufferSize>::Reset(aStream, 0);
-	LOGSTRING2("CProfilerGppSampler<%d>::Reset - called superclass reset",BufferSize);
+	LOGSTRING2("DProfilerGppSampler<%d>::Reset - called superclass reset",BufferSize);
 
-	this->gppSamplerImpl.Reset();
+	iGppSamplerImpl.Reset();
 	
 #ifdef __SMP__
-	this->gppSamplerImpl.iCpuNumber = this->iCpuNumber;
+	iGppSamplerImpl.iCpuNumber = iCpuNumber;
 	
 	// set common start time for all CPU samplers
-	this->gppSamplerImpl.iStartTime = aSyncOffset;
+	iGppSamplerImpl.iStartTime = aSyncOffset;
 #endif
-	this->gppSamplerImpl.iGppSamplingPeriod = this->iSamplingPeriod;
-	this->gppSamplerImpl.iSampleCount = 0;
-	this->exportData.sampleNumber = 0;
-	this->exportData.lastPcValue = 0;
-    this->exportData.samplingPeriod = this->gppSamplerImpl.iGppSamplingPeriod;
+	iGppSamplerImpl.iGppSamplingPeriod = DProfilerGenericSampler<BufferSize>::iSamplingPeriod;
+	iGppSamplerImpl.iSampleCount = 0;
+	iExportData.sampleNumber = 0;
+	iExportData.lastPcValue = 0;
+    iExportData.samplingPeriod = iGppSamplerImpl.iGppSamplingPeriod;
 
-	TInt length = gppSamplerImpl.CreateFirstSample();
-	LOGSTRING3("CProfilerGPPSampler<%d>::Reset - got first sample, size %d",BufferSize,length);	
+	TInt length = iGppSamplerImpl.CreateFirstSample();
+
+	LOGSTRING3("DProfilerGPPSampler<%d>::Reset - got first sample, size %d",BufferSize,length);
 	
-	this->iSampleBuffer->AddSample(gppSamplerImpl.tempBuf,length);
+	//DProfilerGenericSampler<BufferSize>::iSampleBuffer->AddSample(iGppSamplerImpl.tempBuf,length);
+	this->iSampleBuffer->AddSample(iGppSamplerImpl.tempBuf,length);
 
 	// check if sampling period > 1 ms
 	// NOTE: feature supported in Performance Investigator 2.01 and above
-	if(this->gppSamplerImpl.iGppSamplingPeriod > 1)
+	if(iGppSamplerImpl.iGppSamplingPeriod > 1)
 	    {
         // For Address/Thread (GPP) version 2.01 or above, the first word is the sampling period in milliseconds
-        TUint8* w = gppSamplerImpl.tempBuf;
+        TUint8* w(iGppSamplerImpl.tempBuf);
         
-        (*w++) = (this->gppSamplerImpl.iGppSamplingPeriod >> 24) & 0xFF;
-        (*w++) = (this->gppSamplerImpl.iGppSamplingPeriod >> 16) & 0xFF;
-        (*w++) = (this->gppSamplerImpl.iGppSamplingPeriod >>  8) & 0xFF;
-        (*w++) = (this->gppSamplerImpl.iGppSamplingPeriod) & 0xFF;
+        (*w++) = (iGppSamplerImpl.iGppSamplingPeriod >> 24) & 0xFF;
+        (*w++) = (iGppSamplerImpl.iGppSamplingPeriod >> 16) & 0xFF;
+        (*w++) = (iGppSamplerImpl.iGppSamplingPeriod >>  8) & 0xFF;
+        (*w++) = (iGppSamplerImpl.iGppSamplingPeriod) & 0xFF;
         
-        this->iSampleBuffer->AddSample(gppSamplerImpl.tempBuf,4);
+        //DProfilerGenericSampler<BufferSize>::iSampleBuffer->AddSample(iGppSamplerImpl.tempBuf,4);
+        this->iSampleBuffer->AddSample(iGppSamplerImpl.tempBuf,4);
 	    }
 	
-	LOGSTRING2("CProfilerGPPSampler<%d>::Reset finished",BufferSize);
+	LOGSTRING2("DProfilerGPPSampler<%d>::Reset finished",BufferSize);
 	return KErrNone;
     }
 
 template <int BufferSize>
-void DProfilerGppSampler<BufferSize>::Sample()
+void DProfilerGppSampler<BufferSize>::Sample(TAny* aPtr)
     {
-	LOGSTRING2("CProfilerGppSampler<%d>::Sample",BufferSize);
-//	if(this->gppSamplerImpl.iSampleCount % 1000 == 0) 
-//	    {
-//#ifdef __SMP__
-//	    if(this->iCpuNumber == 0)  // print sample tick only from CPU 0 context
-//	        {
-//#endif
-//	        Kern::Printf(("PIPROF SAMPLE TICK, #%d"),exportData.sampleNumber);
-//#ifdef __SMP__
-//	        }
-//#endif
-//	    }
-	
-	TInt length(gppSamplerImpl.SampleImpl());
+    LOGSTRING2("DProfilerGppSampler<%d>::Sample",BufferSize);
+
+	TInt length(iGppSamplerImpl.SampleImpl());
 
-    this->gppSamplerImpl.iSampleCount++;
-	this->exportData.sampleNumber += this->gppSamplerImpl.iGppSamplingPeriod;
-	this->exportData.lastPcValue = gppSamplerImpl.iLastPc;
+    iGppSamplerImpl.iSampleCount++;
+	iExportData.sampleNumber += iGppSamplerImpl.iGppSamplingPeriod;
+	iExportData.lastPcValue = iGppSamplerImpl.iLastPc;
 
 	if(length > 0)
         {
-        this->iSampleBuffer->AddSample(gppSamplerImpl.tempBuf,length);
+	    TInt ret(this->iSampleBuffer->AddSample(iGppSamplerImpl.tempBuf,length));
+        if (ret != 0)
+            {
+            Kern::Printf(("DProfilerGppSampler<%d>::Sample() - add to sample buffer failed, loosing data, error = %d"),BufferSize,ret);
+            }
         }
-
-	LOGSTRING3("CProfilerGppSampler<%d>::Sample - length %d",BufferSize,length);
-
+	LOGSTRING3("DProfilerGppSampler<%d>::Sample - length %d",BufferSize,length);
 	return;
     }
 
@@ -238,14 +233,14 @@
 template <int BufferSize>
 struct TProfilerGppSamplerData* DProfilerGppSampler<BufferSize>::GetExportData()
     {
-	LOGSTRING2("CProfilerGppSampler<%d>::GetExportData",BufferSize);
-	return &(this->exportData);	
+	LOGSTRING2("DProfilerGppSampler<%d>::GetExportData",BufferSize);
+	return &(iExportData);	
     }
 
 template <int BufferSize>
 TInt DProfilerGppSampler<BufferSize>::GetPeriod()
     {
-	return this->gppSamplerImpl.iGppSamplingPeriod;
+	return iGppSamplerImpl.iGppSamplingPeriod;
     }
 
 #endif