piprofiler/plugins/DebugOutputWriterPlugin/src/DebOutWriterPlugin.cpp
changeset 48 516af714ebb4
parent 45 185201be11b0
child 55 f2950aff7424
--- a/piprofiler/plugins/DebugOutputWriterPlugin/src/DebOutWriterPlugin.cpp	Thu Sep 02 22:05:40 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,542 +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:  
-*
-*/
-
-
-//  Include Files  
-
-#include "DebOutWriterPlugin.h"	
-#include <e32base.h>
-//#include <piprofiler/EngineUIDs.h>
-#include <piprofiler/ProfilerTraces.h>
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include <OpenSystemTrace.h>
-#include "DebOutWriterPluginTraces.h"
-#endif
-
-// engine properties
-const TUid KEngineStatusPropertyCat={0x2001E5AD};
-enum TEnginePropertyKeys
-    {
-    EProfilerEngineStatus = 8,
-    EProfilerErrorStatus
-    };
-
-// CONSTANTS
-// own UID
-const TUid KDebOutWriterPluginUid = { 0x2001E5BA };
-
-//  Member Functions
-/*
- *
- *	Class CDebOutWriterPlugin implementation
- *
- */
-
-CDebOutWriterPlugin* CDebOutWriterPlugin::NewL(const TUid /*aImplementationUid*/, TAny* /*aInitParams*/)
-{
-	LOGTEXT(_L("CDebOutWriterPlugin::NewL() - entry"));
-	CDebOutWriterPlugin* self = new (ELeave) CDebOutWriterPlugin(KDebOutWriterPluginUid);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-	LOGTEXT(_L("CDebOutWriterPlugin::NewL() - exit"));
-    return self;
-}
-
-CDebOutWriterPlugin::CDebOutWriterPlugin(const TUid aImplementationUid) :
-	iWriterType(aImplementationUid.iUid)
-    {
-    LOGTEXT(_L("CDebOutWriterPlugin::CDebOutWriterPlugin - entry"));
-    isEnabled = EFalse;
-    iWriterId = Id().iUid;
-    LOGTEXT(_L("CDebOutWriterPlugin::CDebOutWriterPlugin - exit"));
-    }
-
-CDebOutWriterPlugin::~CDebOutWriterPlugin()
-    {
-    LOGTEXT(_L("CDebOutWriterPlugin::~CDebOutWriterPlugin - entry"));
-
-    iErrorStatus.Close();
-    
-    if(iWriterHandler)
-        {
-        iWriterHandler->Cancel();
-        delete iWriterHandler;
-        }
-    LOGTEXT(_L("CDebOutWriterPlugin::~CDebOutWriterPlugin - exit"));
-    }    
-    
-void CDebOutWriterPlugin::ConstructL()
-	{
-	// second phase constructor, anything that may leave must be constructed here
-
-	LOGTEXT(_L("CDebOutWriterPlugin::ConstructL() - entry"));
-	iWriterHandler = CDebOutWriterHandler::NewL(this);
-    User::LeaveIfError(iErrorStatus.Attach(KEngineStatusPropertyCat, EProfilerErrorStatus));
-    
-	LOGTEXT(_L("CDebOutWriterPlugin::ConstructL() - exit"));
-	}
-
-TInt CDebOutWriterPlugin::Start()
-	{
-	LOGTEXT(_L("CDebOutWriterPlugin::Start() - entry"));
-	
-#ifdef OST_TRACE_COMPILER_IN_USE
-    TInt err(KErrNone);
-	// activate traces on TraceCore
-    RTcDriverParameters tcdp_ThreadIdentification;
-    tcdp_ThreadIdentification.iComponentId = KOstTraceComponentID;
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64START;
-    err = tcldd.ActivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64LINE;
-    err = tcldd.ActivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64FIN;
-    err = tcldd.ActivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64END;
-    err = tcldd.ActivateTrace(tcdp_ThreadIdentification);
-
-    RDebug::Print(_L("Debug output activated"));
-    if(err != KErrNone)
-        RDebug::Print(_L("TraceCore LDD API responded: %d"), err);
-#endif
-
-	LOGTEXT(_L("CDebOutWriterPlugin::Start() - exit"));
-	return KErrNone;
-	}
-
-void CDebOutWriterPlugin::Stop()
-	{
-	LOGTEXT(_L("CDebOutWriterPlugin::Stop() - entry"));
-	iWriterHandler->Stop();
-#ifdef OST_TRACE_COMPILER_IN_USE
-	TInt err(KErrNone);
-    // activate traces on TraceCore
-    RTcDriverParameters tcdp_ThreadIdentification;
-    tcdp_ThreadIdentification.iComponentId = KOstTraceComponentID;
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64START;
-    err = tcldd.DeactivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64LINE;
-    err = tcldd.DeactivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64FIN;
-    err = tcldd.DeactivateTrace(tcdp_ThreadIdentification);
-
-    tcdp_ThreadIdentification.iGroupId = CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64END;
-    err = tcldd.DeactivateTrace(tcdp_ThreadIdentification);
-
-    RDebug::Print(_L("Debug output deactivated"));
-    if(err != KErrNone)
-        RDebug::Print(_L("TraceCore LDD API responded: %d"), err);
-#endif
-	LOGTEXT(_L("CDebOutWriterPlugin::Stop() - exit"));
-	}
-
-TUid CDebOutWriterPlugin::Id() const
-	{
-    LOGSTRING2("CDebOutWriterPlugin::Id(): 0x%X", KDebOutWriterPluginUid.iUid );
-    return KDebOutWriterPluginUid;
-	//return iDtor_ID_Key;
-	}
-
-TBool CDebOutWriterPlugin::GetEnabled()
-	{
-	return isEnabled;
-	}
-
-void CDebOutWriterPlugin::SetValue( const TWriterPluginValueKeys aKey,
-                                    TDes& aValue )
-    {
-    TRAP_IGNORE( SetValueL( aKey, aValue ) );
-    }
-
-
-void CDebOutWriterPlugin::GetValue( const TWriterPluginValueKeys aKey,
-                                    TDes& aValue )
-    {
-    TRAP_IGNORE( GetValueL( aKey, aValue ) );
-    }
-
-
-
-void CDebOutWriterPlugin::SetValueL( const TWriterPluginValueKeys aKey, TDes& /*aValue*/ )
-{
-	LOGTEXT(_L("CDebOutWriterPlugin::SetValueL - entry"));	
-	
-    switch( aKey )
-        {
-        case EWriterPluginEnabled:
-            isEnabled = ETrue;
-        	LOGTEXT(_L("CDebOutWriterPlugin::SetValueL - plugin enabled"));
-        	break;
-        case EWriterPluginDisabled:
-            isEnabled = EFalse;
-        	LOGTEXT(_L("CDebOutWriterPlugin::SetValueL - plugin disabled"));	
-            break;
-        case EWriterPluginSettings:
-        	//result = StringLoader::LoadL(PROFILER_KERNEL_MODE_SAMPLER);
-        	LOGTEXT(_L("CDebOutWriterPlugin::SetValueL - setting plugin settings"));	
-        	break;
-        default:
-        	break;
-        }
-	LOGTEXT(_L("CDebOutWriterPlugin::SetValueL - exit"));	
-
-}
-
-TUint32 CDebOutWriterPlugin::GetWriterType()
-	{
-	return iWriterType;
-	}
-
-
-void CDebOutWriterPlugin::GetValueL( const TWriterPluginValueKeys aKey, TDes& aValue )
-    {
-    switch( aKey )
-        {
-        case EWriterPluginVersion:
-
-        	GetWriterVersion(&aValue);
-        	break;
-        case EWriterPluginType:
-        	break;
-           default:
-                break;
-        }
-    }
-
-void CDebOutWriterPlugin::GetWriterVersion(TDes* aDes)
-	{
-	_LIT(KDebugOutputWriterVersion, "1.0.0");
-	aDes->Append(KDebugOutputWriterVersion);
-	}
-
-void CDebOutWriterPlugin::DoCancel()
-{
-	LOGTEXT(_L("CDebOutWriterPlugin::DoCancel - entry"));
-}
-
-void CDebOutWriterPlugin::WriteData()
-    {
-    // Activate handler to write data from buffer to output
-    LOGTEXT(_L("CDiskWriterPlugin::WriteData() - entry"));
-    TRAP_IGNORE(iWriterHandler->StartL());
-    LOGTEXT(_L("CDiskWriterPlugin::WriteData() - exit"));
-    }
-
-void CDebOutWriterPlugin::HandleError(TInt aError)
-    {
-    TInt err(KErrNone);
-    err = iErrorStatus.Set(aError);
-    if(err != KErrNone)
-        {
-        RDebug::Print(_L("CDiskWriterPlugin::HandleError() - error: %d"), err);
-        }
-    }
-
-void CDebOutWriterPlugin::PrintDescriptorAsBase64(	TDesC8& aDes,
-                                                    TRequestStatus* aStatus,
-													TUint32 sampleTime,
-													TBool aEmptying)
-{
-	LOGTEXT(_L("CDebOutWriterPlugin::PrintDescriptorAsBase64() - entry"));
-	TUint len = aDes.Length();
-
-	// we must wait for the sample tick to be printed, in case
-	// prints are performed at user side, otherwise the kernel
-	// prints will corrupt the data
-	if(sampleTime != 0xffffffff)
-	{
-		TUint32 remains = sampleTime%1000;
-	
-		if(remains > 800) 
-		{
-			TTimeIntervalMicroSeconds32 timeToWait = ((1050-remains)*1000);
-			User::After(timeToWait);
-		}
-	}
-	
-	TBuf16<75> buf;
-
-	// Header
-#ifdef OST_TRACE_COMPILER_IN_USE
-    OstTrace0( PIPROFILER_TRACE_OUT, CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64START, 
-            "<PIPROF>=================================================================" );
-#else
-	RDebug::Print(_L("<PIPROF>================================================================="));
-#endif
-	buf.Zero();
-
-	// base64 encoding table
-	const char uu_base64[64] =
-	{
-		'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-		'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-		'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-		'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
-		'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
-		'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
-		'w', 'x', 'y', 'z', '0', '1', '2', '3',
-		'4', '5', '6', '7', '8', '9', '+', '/'
-	};
-
-	TChar byte1, byte2, byte3, byte4;
-	TUint8 count = 0x30;
-	// base64 encoding 
-	for(TUint i = 0, j = 0; i < len; i += 3, j = (j + 1) % 18) 
-	{
-    // byte 1
-		byte1 = uu_base64[(aDes[i] >> 2) & 0x3F];
-		
-		// byte 2
-		if(i+1 < len)
-			byte2 = uu_base64[(aDes[i] << 4) & 0x3f | (aDes[i+1] >> 4)];
-		else
-			byte2 = uu_base64[(aDes[i] << 4) & 0x3f];
-
-		// byte 3
-		if(i+1 < len && i+2 < len)
-			byte3 = uu_base64[(aDes[i+1] << 2) & 0x3f | (aDes[i+2] >> 6)];
-		else if(i+1 < len)
-			byte3 = uu_base64[(aDes[i+1] << 2) & 0x3f];
-		else
-			byte3 = '=';
-
-		// byte 4
-		if(i+2 < len) 
-			byte4 = uu_base64[aDes[i+2] & 0x3f];
-		else
-			byte4 = '=';
-	
-		// append to buffer
-		buf.Append(byte1);
-		buf.Append(byte2);
-		buf.Append(byte3);
-		buf.Append(byte4);
-
-		// output 72 chars / line
-		if(j == 17) 
-		{		
-			// add check number at the end of line
-			buf.Append(count);
-#ifdef OST_TRACE_COMPILER_IN_USE
-			OstTraceExt1( PIPROFILER_TRACE_OUT, CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64LINE, "<PIPROF>%S", &buf );
-#else
-			RDebug::Print(_L("<PIPROF>%S"),&buf);
-#endif
-			count++;
-			if(count > 0x39)
-				count = 0x30;
-			buf.Zero();
-		}
-	}
-	
-#ifdef OST_TRACE_COMPILER_IN_USE
-	OstTraceExt1( PIPROFILER_TRACE_OUT, CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64FIN, "<PIPROF>%S", &buf );
-#else
-	RDebug::Print(_L("<PIPROF>%S"),&buf);
-#endif
-	buf.Zero();
-
-	// footer
-#ifdef OST_TRACE_COMPILER_IN_USE
-	OstTrace0( PIPROFILER_TRACE_OUT, CDEBOUTWRITERPLUGIN_PRINTDESCRIPTORASBASE64END, 
-	        "<PIPROF>=================================================================" );
-#else
-	RDebug::Print(_L("<PIPROF>================================================================="));
-#endif
-
-	if(!aEmptying)
-	    {
-        if(aStatus != 0) 
-            User::RequestComplete(aStatus,0);
-	    }
-	
-	LOGTEXT(_L("CDebOutWriterPlugin::PrintDescriptorAsBase64() - exit"));
-}
-
-
-
-/*
- * 
- * Implementation of class CDebOutWriterHandler
- * 
- */
-CDebOutWriterHandler::CDebOutWriterHandler(CDebOutWriterPlugin* aWriter) :
-    CActive(EPriorityStandard)
-    {
-    LOGTEXT(_L("CDebOutWriterHandler::CDebOutWriterHandler - entry"));
-    iWriter = aWriter;
-    
-    // set initial mode to non-stopping
-    iStopping = EFalse;
-    
-    // add the handler to the active scheduler
-    CActiveScheduler::Add(this);
-    LOGTEXT(_L("CDebOutWriterHandler::CDebOutWriterHandler - exit"));
-    }
-
-CDebOutWriterHandler* CDebOutWriterHandler::NewL(CDebOutWriterPlugin* aWriter)
-{
-	LOGTEXT(_L("CDebOutWriterHandler::NewL() - entry"));
-	CDebOutWriterHandler* self = new (ELeave) CDebOutWriterHandler(aWriter);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop();
-	LOGTEXT(_L("CDebOutWriterHandler::NewL() - exit"));
-    return self;
-}
-
-CDebOutWriterHandler::~CDebOutWriterHandler()
-    {
-	LOGTEXT(_L("CDebOutWriterHandler::~CDebOutWriterHandler - entry"));
-    
-    LOGTEXT(_L("CDebOutWriterHandler::~CDebOutWriterHandler - exit"));
-    }    
-    
-void CDebOutWriterHandler::ConstructL()
-	{
-
-	}
-
-void CDebOutWriterHandler::StartL()
-	{
-	LOGTEXT(_L("CDebOutWriterHandler::StartL - entry"));
-    if(!IsActive())
-        {
-        LOGTEXT(_L("CDiskWriterHandler::StartL - is not active"));
-    
-        TBapBuf* nextBuf = iWriter->iStream->GetNextFilledBuffer();
-        LOGSTRING2("CDiskWriterHandler::StartL - got next filled 0x%x",nextBuf);
-    
-        if(nextBuf != 0)
-            {
-            LOGTEXT(_L("CDiskWriterHandler::StartL - writing to file"));
-            WriteBufferToOutput(nextBuf);
-            }
-        }
-	LOGTEXT(_L("CDebOutWriterHandler::StartL - entry"));
-	}
-
-void CDebOutWriterHandler::Stop()
-	{
-	LOGTEXT(_L("CDebOutWriterHandler::Stop - entry"));
-   
-	// do write once more to write the logged data to output
-    // set to stopping mode, needed for emptying the remaining full buffers
-    iStopping = ETrue;
-
-    // stop the timer
-    Reset();
-
-    // set mode back to non-stopping
-    iStopping = EFalse;
-	LOGTEXT(_L("CDebOutWriterHandler::Stop - exit"));
-	}
-
-void CDebOutWriterHandler::Reset()
-    {
-  
-    // start writing new buffer if there is one available
-    TBapBuf* nextBuf = iWriter->iStream->GetNextFilledBuffer();
-    
-    // empty the rest of the buffers synchronously
-    while(nextBuf != 0)
-        {
-        if(nextBuf->iDataSize != 0)
-            {
-            LOGTEXT(_L("CDiskWriterHandler::Reset - writing to file"));
-            iWriter->PrintDescriptorAsBase64(*(nextBuf->iBufDes),&iStatus,0xffffffff, iStopping);
-            }
-        
-        // empty buffers when profiling stopped
-        iWriter->iStream->AddToFreeBuffers(nextBuf);
-
-        LOGTEXT(_L("CDiskWriterHandler::Reset - get next full buffer"));
-        // start writing new buffer if there is one available
-        nextBuf = iWriter->iStream->GetNextFilledBuffer();
-        LOGSTRING2("CDiskWriterHandler::Reset - got next filled 0x%x",nextBuf);
-        }
-    }
-
-void CDebOutWriterHandler::HandleFullBuffers()
-    {
-    LOGTEXT(_L("CDiskWriterHandler::HandleFullBuffers - entry"));
-    // previous write operation has finished
-    // release the previous buffer 
-    iWriter->iStream->AddToFreeBuffers(iBufferBeingWritten);
-
-    LOGTEXT(_L("CDiskWriterHandler::HandleFullBuffers - get next full buffer"));
-    // start writing new buffer if there is one available
-    TBapBuf* nextBuf = iWriter->iStream->GetNextFilledBuffer();
-
-    if(nextBuf != 0)
-        {
-        LOGTEXT(_L("CDiskWriterHandler::HandleFullBuffers - writing to file"));
-        if(nextBuf->iDataSize != 0)
-            {
-            WriteBufferToOutput(nextBuf);
-            }
-        } 
-    LOGTEXT(_L("CDiskWriterHandler::HandleFullBuffers - exit"));
-    }
-
-void CDebOutWriterHandler::RunL()
-    {
-    // call function to complete full buffer handling
-    HandleFullBuffers();
-    }
-
-void CDebOutWriterHandler::DoCancel()
-    {
-    
-    }
-
-void CDebOutWriterHandler::WriteBufferToOutput(TBapBuf* aBuf)
-    {
-    LOGTEXT(_L("CDebOutWriterHandler::WriteBufferToOutput - entry"));
-    iBufferBeingWritten = aBuf;
-
-    // set the data length just to be sure
-    iBufferBeingWritten->iBufDes->SetLength(aBuf->iDataSize);
-
-    LOGTEXT(_L("CDiskWriterPlugin::WriteBufferToOutput - writing to file"));
-//    PrintBufferToOutput(iBufferBeingWritten, iStatus);
-    iWriter->PrintDescriptorAsBase64(*(iBufferBeingWritten->iBufDes),&iStatus,0xffffffff, iStopping);
-    // set AO back to active, until filled buffers are emptied 
-    SetActive();
-    
-    LOGTEXT(_L("CDebOutWriterHandler::WriteBufferToOutput - exit"));
-    }
-
-// private
-void CDebOutWriterHandler::PrintBufferToOutput(TBapBuf* aBuffer, TRequestStatus& aStatus)
-    {
-    LOGTEXT(_L("CDebOutWriterHandler::WriteBufferToOutput() - debug out writer tick activated"));
-
-    TPtrC8& aDes = (TPtrC8&)*(aBuffer->iBufDes);
-#ifdef BAPPEA_SAMPLE_MARKS
-    TUint32 time = iSampler->GetSampleTime();
-#else
-    TUint32 time = 0xffffffff;
-#endif
-    iWriter->PrintDescriptorAsBase64(aDes,&aStatus,time, iStopping);
-    }
-