--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/piprofiler/piprofiler_plat/inc/SamplerPluginInterface.inl Tue May 25 14:22:58 2010 +0300
@@ -0,0 +1,215 @@
+/*
+* 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:
+*
+*/
+
+
+// LITERALS
+_LIT8(KTrue, "true");
+_LIT8(KFalse, "false");
+
+inline CSamplerPluginInterface::CSamplerPluginInterface()
+ : iOrder( KSamplerPluginNotIndexed )
+ {
+ iBuffer = 0;
+ iStream = 0;
+ }
+
+// -----------------------------------------------------------------------------
+// CSamplerPluginInterface::~CSamplerPluginInterface()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+inline CSamplerPluginInterface::~CSamplerPluginInterface()
+ {
+ iBuffer = 0;
+ REComSession::DestroyedImplementation(iDtor_ID_Key);
+ }
+
+
+inline CSamplerPluginInterface* CSamplerPluginInterface::NewL(const TUid aImplementationUid, TAny* aInitParams)
+ {
+ // Define options, how the default resolver will find appropriate
+ // implementation.
+ return REINTERPRET_CAST(CSamplerPluginInterface*,
+ REComSession::CreateImplementationL(aImplementationUid,
+ _FOFF( CSamplerPluginInterface, iDtor_ID_Key ),
+ aInitParams));
+ }
+
+inline void CSamplerPluginInterface::ListAllImplementationsL(RImplInfoPtrArray& aImplInfoArray)
+ {
+ REComSession::ListImplementationsL(KSamplerPluginInterfaceUid, aImplInfoArray);
+ }
+
+inline void CSamplerPluginInterface::SetOrder( TInt aOrder )
+ {
+ iOrder = aOrder;
+ }
+
+inline TInt CSamplerPluginInterface::Flush()
+ {
+ // complete the header
+ TUint32 header;
+ header = (iBuffer->iDataSize & 0x00ffffff) - 4;
+ header += (iSamplerId << 24);
+
+ // flush the header info
+ iBuffer->iBuffer[0] = header;
+ iBuffer->iBuffer[1] = header >> 8;
+ iBuffer->iBuffer[2] = header >> 16;
+ iBuffer->iBuffer[3] = header >> 24;
+
+ // write data to filled buffers
+ iStream->AddToFilledBuffers(iBuffer);
+ // notify selected writer plugin to write data to output
+ iStream->NotifyWriter();
+
+ iBuffer = 0;
+
+ return KErrNone;
+}
+
+
+inline TInt CSamplerPluginInterface::AddSample(TUint8* aSample, TUint32 aLength, TInt aLimitSize)
+ {
+ LOGTEXT(_L("CSamplerPluginInterface::AddSample - entry"));
+ if(iBuffer == 0)
+ {
+ // get next free buffer where to write data
+ iBuffer = iStream->GetNextFreeBuffer();
+ iBuffer->iBufDes->Zero();
+
+ // get space for the header
+ TUint32 header = 0;
+ iBuffer->iBufDes->Append((TUint8*)&header, 4);
+ iBuffer->iDataSize += 4;
+ }
+
+ // add data to the buffer...
+ // if all data fit to the current buffer
+ if(iBuffer->iBufferSize - iBuffer->iDataSize >= (TInt)aLength)
+ {
+ iBuffer->iBufDes->Append(aSample, (TInt)aLength);
+ iBuffer->iDataSize += (TInt)aLength;
+ }
+ else
+ {
+ // fill in the buffer
+ TUint32 rest = iBuffer->iBufferSize - iBuffer->iDataSize;
+ iBuffer->iBufDes->Append(aSample, rest);
+ iBuffer->iDataSize += (TInt)rest;
+
+ // The buffer is full now, complete the header
+ TUint32 header;
+ header = (iBuffer->iDataSize & 0x00ffffff) - 4;
+ header += (iSamplerId << 24);
+ iBuffer->iBuffer[0] = header;
+ iBuffer->iBuffer[1] = header >> 8;
+ iBuffer->iBuffer[2] = header >> 16;
+ iBuffer->iBuffer[3] = header >> 24;
+
+ // write data to filled buffers
+ iStream->AddToFilledBuffers(iBuffer);
+ // notify selected writer plugin to write data to output
+ iStream->NotifyWriter();
+
+ // Fetch an empty buffer and reserve space for the header
+ iBuffer = iStream->GetNextFreeBuffer();
+ iBuffer->iBufDes->Zero();
+ header = 0;
+ iBuffer->iBufDes->Append((TUint8*)&header, 4);
+ iBuffer->iDataSize += 4;
+
+ // copy the rest of data to the new buffer
+ iBuffer->iBufDes->Append(aSample+rest, aLength-rest);
+ iBuffer->iDataSize += (TInt)aLength-rest;
+ }
+
+ // Once iBuffer->dataSize reaches the limitSize, data from iBuffer is flushed to file/debug port.
+ // If limitSize is set to zero, buffer is not changed until iBuffer gets full.
+ if(aLimitSize != 0)
+ {
+ if(iBuffer->iDataSize >= aLimitSize)
+ {
+ // The buffer is full now, complete the header
+ TUint32 header;
+ header = (iBuffer->iDataSize & 0x00ffffff) - 4;
+ header += (iSamplerId << 24);
+ iBuffer->iBuffer[0] = header;
+ iBuffer->iBuffer[1] = header >> 8;
+ iBuffer->iBuffer[2] = header >> 16;
+ iBuffer->iBuffer[3] = header >> 24;
+
+
+ // write data to filled buffers
+ iStream->AddToFilledBuffers(iBuffer);
+ // notify selected writer plugin to write data to output
+ iStream->NotifyWriter();
+
+ // Fetch an empty buffer and reserve space for the header
+ iBuffer = iStream->GetNextFreeBuffer();
+ iBuffer->iBufDes->Zero();
+ header = 0;
+ iBuffer->iBufDes->Append((TUint8*)&header, 4);
+ iBuffer->iDataSize += 4;
+ }
+ }
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// Converts given descriptor into TBool value.
+// ----------------------------------------------------------------------------
+//
+inline void CSamplerPluginInterface::Str2Bool(const TDesC8& aBuf, TBool& aValue)
+ {
+ if (aBuf.CompareF(KFalse) == 0)
+ aValue = EFalse;
+ else
+ aValue = ETrue;
+ }
+
+// ----------------------------------------------------------------------------
+// Converts given descriptor into TInt value.
+// ----------------------------------------------------------------------------
+//
+inline void CSamplerPluginInterface::Str2Int(const TDesC8& aBuf, TInt& aValue)
+ {
+ TLex8 conv;
+ conv.Assign(aBuf);
+
+ if (conv.Val(aValue) != KErrNone)
+ aValue = 0;
+ }
+
+// ----------------------------------------------------------------------------
+// Converts given descriptor into TInt value.
+// ----------------------------------------------------------------------------
+//
+inline void CSamplerPluginInterface::Str2Int(const TDesC8& aBuf, TUint32& aValue)
+ {
+ TInt temp(0);
+
+ TLex8 conv;
+ conv.Assign(aBuf);
+
+ if (conv.Val(temp) != KErrNone)
+ aValue = 0;
+ else
+ aValue = (TUint32)temp;
+ }
+
+// End of file