diff -r 000000000000 -r 7f656887cf89 libraries/btrace_parser/src/btrace_generic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libraries/btrace_parser/src/btrace_generic.cpp Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,126 @@ +// btrace_generic.cpp +// +// Copyright (c) 2008 - 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "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: +// Accenture - Initial contribution +// + +#include "btrace_parser.h" + +EXPORT_C CBtraceGeneric* CBtraceGeneric::NewL(CBtraceReader& aReader) + { + CBtraceGeneric* self = new (ELeave) CBtraceGeneric(aReader); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + + +CBtraceGeneric::CBtraceGeneric(CBtraceReader& aReader) +: iReader(aReader) + { + + } + + +EXPORT_C CBtraceGeneric::~CBtraceGeneric() + { + iReader.RemoveObserver(KAmTraceCategory, *this); + iObservers.Close(); + } + + +void CBtraceGeneric::ConstructL() + { + iReader.AddObserverL(KAmTraceCategory, *this); + } + + +EXPORT_C void CBtraceGeneric::NotifyGenericEventL + (MBtraceGenericObserver& aObserver) + { + iObservers.AppendL(&aObserver); + } + + +void CBtraceGeneric::HandleBtraceFrameL(const TBtraceFrame& aFrame) + { + if (aFrame.iCategory == KAmTraceCategory && aFrame.iSubCategory > EAmTraceSubCategoryDomainEventBase) + { + const TInt length = aFrame.iData.Length(); + const TUint32* data = reinterpret_cast(aFrame.iData.Ptr()); + + switch(length) + { + case 0: + SeenGeneric0L(aFrame.iTickCount, aFrame.iSubCategory); + break; + + case 4: + SeenGeneric1L(aFrame.iTickCount, aFrame.iSubCategory, *data); + break; + + case 8: + SeenGeneric2L(aFrame.iTickCount, aFrame.iSubCategory, *data, *(data+1)); + break; + + case 12: + SeenGeneric3L(aFrame.iTickCount, aFrame.iSubCategory, *data, *(data+1), *(data+2)); + break; + } + } + } + + +void CBtraceGeneric::SeenGeneric0L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory) + { + TInt ii = iObservers.Count(); + while (--ii >= 0) + { + iObservers[ii]->HandleGenericEvent0L(aTickCount, aSubCategory); + iObservers.Remove(ii); + } + } + + +void CBtraceGeneric::SeenGeneric1L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1) + { + TInt ii = iObservers.Count(); + while (--ii >= 0) + { + iObservers[ii]->HandleGenericEvent1L(aTickCount, aSubCategory, aData1); + iObservers.Remove(ii); + } + } + + +void CBtraceGeneric::SeenGeneric2L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1, TUint32 aData2) + { + TInt ii = iObservers.Count(); + while (--ii >= 0) + { + iObservers[ii]->HandleGenericEvent2L + (aTickCount, aSubCategory, aData1, aData2); + iObservers.Remove(ii); + } + } + + +void CBtraceGeneric::SeenGeneric3L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1, TUint32 aData2, TUint32 aData3) + { + TInt ii = iObservers.Count(); + while (--ii >= 0) + { + iObservers[ii]->HandleGenericEvent3L + (aTickCount, aSubCategory, aData1, aData2, aData3); + iObservers.Remove(ii); + } + } + +