piprofiler/plugins/GeneralsPlugin/inc/IttSamplerImpl.h
changeset 48 516af714ebb4
parent 45 185201be11b0
child 55 f2950aff7424
--- a/piprofiler/plugins/GeneralsPlugin/inc/IttSamplerImpl.h	Thu Sep 02 22:05:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,327 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  
-*
-*/
-
-#ifndef PROFILER_ITT_SAMPLER_H
-#define PROFILER_ITT_SAMPLER_H
-
-#include "GeneralsConfig.h"
-
-#include <kern_priv.h>
-
-#include <piprofiler/ProfilerGenericClassesKrn.h>
-#include <piprofiler/ProfilerTraces.h>
-#include "GppSamplerImpl.h"
-#include "IttEventHandler.h"
-
-// CONSTANTS
-const TInt KITTSampleBufferSize = 256;
-
-// flags
-#define ITT_EVENT_HANDLER   // enable event based ITT sampling
-
-/*
- *	
- *	ITT sampler definition
- *	
- */
-class DIttEventHandler;
-
-/*
- * User side ITT sampler
- */
-class IttSamplerImpl
-{
-public:
-	IttSamplerImpl();
-	~IttSamplerImpl();
-
-	TInt	SampleImpl(TUint32 pc,TUint32 sampleNum);
-	TBool	SampleNeeded(TUint32 sampleNum);
-	TInt 	CreateFirstSample();
-	void	Reset();
-	TInt    ProcessEvent();
-	
-	TUint8*         itt_sample;
-	TInt            iIttSamplingPeriod;
-	TInt            iIttSamplingPeriodDiv2;
-	TBool           iTimeToSample;
-#ifdef ITT_EVENT_HANDLER
-    TBool           iEventReceived;
-    TBool           iFirstSampleTaken;
-#endif
-	
-private:
-#ifdef ITT_EVENT_HANDLER    
-    TInt            iCount;
-#endif
-    TInt            currentLibCount;
-    TInt            currentProcCount;
-    
-	TUint8          sample[KITTSampleBufferSize ];
-	TPtr8           sampleDescriptor;
-		
-	TBuf8<64>		iVersionData;
-	SDblQue* 		codeSegList;
-
-};
-
-/*
- * ITT sampler kernel part
- * 
- */
-template <int BufferSize>
-class DProfilerIttSampler : public DProfilerGenericSampler<BufferSize>
-{
-public:
-	DProfilerIttSampler(struct TProfilerGppSamplerData* gppSamplerDataIn);
-	~DProfilerIttSampler();
-
-	void	Sample();
-	TInt	Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset);
-	TInt	PostSample();
-	TBool	PostSampleNeeded();
-
-private:
-#ifdef ITT_EVENT_HANDLER
-    DIttEventHandler*               iEventHandler;
-#endif
-	IttSamplerImpl					ittSamplerImpl;
-	struct TProfilerGppSamplerData*     gppSamplerData;
-	TBool							sampleInProgress;
-	TBool							sampleNeeded;
-};
-
-/*  
- *	ITT sampler implementation
- *	
- */ 
-template <int BufferSize>
-DProfilerIttSampler<BufferSize>::DProfilerIttSampler(struct TProfilerGppSamplerData* gppSamplerDataIn) :
-	DProfilerGenericSampler<BufferSize>(PROFILER_ITT_SAMPLER_ID)
-{
-	this->gppSamplerData = (struct TProfilerGppSamplerData*)gppSamplerDataIn;
-	this->sampleInProgress = false;
-	LOGSTRING2("CProfilerIttSampler<%d>::CProfilerIttSampler",BufferSize);	
-}
-
-/*
- *  DProfilerIttSampler::Reset()
- *  
- *  @param DProfilerSampleStream* sample stream
- *  @param TUint32 Offset 
- */
-template <int BufferSize>
-TInt DProfilerIttSampler<BufferSize>::Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset)
-{
-    Kern::Printf("DProfilerIttSampler<%d>::Reset - calling superclass reset",BufferSize);
-    DProfilerGenericSampler<BufferSize>::Reset(aStream);
-
-    // check if reset called in stop (by driver)
-    if(aSyncOffset != 999999)
-        {
-#ifdef ITT_EVENT_HANDLER
-        // Itt event handler
-        if(iEventHandler)
-            {
-            // stop previous sampling if still running
-            Kern::Printf("Stopping DIttEventHandler");
-            iEventHandler->Stop();
-            iEventHandler->Close();
-            iEventHandler = NULL;
-            }
-    
-        Kern::Printf("Initiating DIttEventHandler");
-        iEventHandler = new DIttEventHandler(this->iSampleBuffer, this->gppSamplerData);
-        if(iEventHandler)
-            {
-            Kern::Printf("Creating DIttEventHandler");
-            TInt err(iEventHandler->Create());
-            if(err != KErrNone)
-                {
-                Kern::Printf("Error in creation of DIttEventHandler, error %d", err);
-                return err;
-                }
-            }
-        else
-            {
-            Kern::Printf("Could not initiate DIttEventHandler");
-            return KErrGeneral;
-            }
-    
-        // set first sample at the 10 ms, should be enough
-        this->ittSamplerImpl.iIttSamplingPeriod = 10;
-#else
-        this->ittSamplerImpl.iIttSamplingPeriod = this->iSamplingPeriod;
-#endif
-        this->ittSamplerImpl.iIttSamplingPeriodDiv2 = (TInt)(this->ittSamplerImpl.iIttSamplingPeriod / 2);
-        LOGSTRING3("CProfilerIttSampler<%d>::Reset - set ITT sampling period to %d",
-                                BufferSize,this->ittSamplerImpl.iIttSamplingPeriod);
-        }
-    else
-        {
-        LOGSTRING2("DProfilerIttSampler<%d>::Reset - reset in stop", BufferSize);
-#ifdef ITT_EVENT_HANDLER
-        // destroy memory event handler
-        if(iEventHandler)
-            {
-            // stop previous sampling if still running
-            iEventHandler->Stop();
-            iEventHandler->Close();
-            iEventHandler = NULL;
-            }
-#endif
-        return KErrNone;    // return if reset called in stop
-        }
-
-    TInt length(ittSamplerImpl.CreateFirstSample());
-    this->iSampleBuffer->AddSample((TUint8*)&length,1);
-    this->iSampleBuffer->AddSample(ittSamplerImpl.itt_sample, length);
-    this->sampleInProgress = false;
-    this->sampleNeeded = false;
-    //LOGSTRING("DProfilerIttSampler::Reset - exit");
-	this->ittSamplerImpl.Reset();
-    return KErrNone;
-
-}
-
-/*
- * DProfilerIttSampler::PostSample
- * 
- * Function for finishing sample
- */
-template <int BufferSize> 
-TInt DProfilerIttSampler<BufferSize>::PostSample()
-{
-#ifdef ITT_EVENT_HANDLER
-    if(!ittSamplerImpl.iFirstSampleTaken)   // if we haven't read the initial state
-    {
-#endif
-        if(sampleNeeded)
-        {
-            this->sampleNeeded = false;
-            //LOGSTRING3("CProfilerIttSampler<%d>::PostSample - state %d",BufferSize,this->iSampleBuffer->GetBufferStatus());
-            //Kern::Printf("DProfilerIttSampler<%d>::PostSample - state %d",BufferSize,this->iSampleBuffer->GetBufferStatus());
-    
-            TInt length = this->ittSamplerImpl.SampleImpl(this->gppSamplerData->lastPcValue,
-                                                          this->gppSamplerData->sampleNumber);
-            if(length != 0)
-            {		
-                LOGSTRING("ITT sampler PostSample - starting to sample");
-    
-                while(length > 0)
-                {
-                    this->iSampleBuffer->AddSample(ittSamplerImpl.itt_sample,length);
-                    length = this->ittSamplerImpl.SampleImpl( this->gppSamplerData->lastPcValue,
-                                                          this->gppSamplerData->sampleNumber );	
-                    if(length == 0) 
-                    {
-                        LOGSTRING("MEM sampler PostSample - all samples generated!");
-                    }
-                }
-                LOGSTRING("ITT sampler PostSample - finished sampling");
-            }
-            this->sampleInProgress = false;
-        }
-#ifdef ITT_EVENT_HANDLER
-    }   
-        if(!iEventHandler->Tracking())
-            {
-            iEventHandler->Start();
-            Kern::Printf("DProfilerITTSampler<%d>::PostSample - ITT handler started",BufferSize);
-            }
-
-#endif    
-	
-    LOGSTRING2("ITT sampler PostSample - finished sampling, time: %d", gppSamplerData->sampleNumber);
-    
-	// finally perform superclass postsample
-	TInt i(this->DProfilerGenericSampler<BufferSize>::PostSample());
-	return i;
-}
-
-/*
- *  DProfilerIttSampler::PostSampleNeeded()
- *  
- *  Function for deciding if sample handling is needed 
- */
-template <int BufferSize> 
-TBool DProfilerIttSampler<BufferSize>::PostSampleNeeded()
-{
-	LOGSTRING3("CProfilerIttSampler<%d>::PostSampleNeeded - state %d",BufferSize,this->iSampleBuffer->GetBufferStatus());
-
-	TUint32 status = this->iSampleBuffer->iBufferStatus;
-
-	if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull || this->sampleNeeded == true)
-	{
-		return true;
-	}
-	
-	return false;
-}
-
-/*
- * DProfilerIttSampler::Sample
- * 
- * Function for initiating sampling
- */
-template <int BufferSize>
-void DProfilerIttSampler<BufferSize>::Sample()
-{
-	LOGSTRING2("CProfilerIttSampler<%d>::Sample",BufferSize);	
-	
-	//#ifdef ITT_TEST
-	LOGSTRING2("CProfilerIttSampler<%d>::Sample",BufferSize);	
-	
-	if(ittSamplerImpl.SampleNeeded(this->gppSamplerData->sampleNumber) && this->sampleInProgress == false) 
-	{
-		this->sampleInProgress = true;
-		this->sampleNeeded = true;
-
-		LOGSTRING2("CProfilerIttSampler<%d>::Sample - sample needed",BufferSize);	
-	}	
-#ifdef ITT_EVENT_HANDLER
-    // call this to increase the time stamp
-    else if(iEventHandler->SampleNeeded())
-        {
-        // set the flag for post sampling
-        this->sampleNeeded = true;
-        }
-#endif
-
-	LOGSTRING2("CProfilerIttSampler<%d>::Sample",BufferSize);
-	return;
-}
-
-/*
- * Destructor
- */
-template <int BufferSize>
-DProfilerIttSampler<BufferSize>::~DProfilerIttSampler()
-{
-	LOGSTRING2("CProfilerIttSampler<%d>::~CProfilerIttSampler",BufferSize);
-#ifdef ITT_EVENT_HANDLER
-     if(iEventHandler)
-         {
-         // stop previous sampling if still running
-         iEventHandler->Stop();
-         iEventHandler->Close();
-         iEventHandler = NULL;
-         }
-#endif
-}
-#endif
-// end of file