libraries/btrace_parser/src/btrace_generic.cpp
changeset 0 7f656887cf89
equal deleted inserted replaced
-1:000000000000 0:7f656887cf89
       
     1 // btrace_generic.cpp
       
     2 // 
       
     3 // Copyright (c) 2008 - 2010 Accenture. All rights reserved.
       
     4 // This component and the accompanying materials are made available
       
     5 // under the terms of the "Eclipse Public License v1.0"
       
     6 // which accompanies this distribution, and is available
       
     7 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 // 
       
     9 // Initial Contributors:
       
    10 // Accenture - Initial contribution
       
    11 //
       
    12 
       
    13 #include "btrace_parser.h"
       
    14 
       
    15 EXPORT_C CBtraceGeneric* CBtraceGeneric::NewL(CBtraceReader& aReader)
       
    16 	{
       
    17 	CBtraceGeneric* self = new (ELeave) CBtraceGeneric(aReader);
       
    18 	CleanupStack::PushL(self);
       
    19 	self->ConstructL();
       
    20 	CleanupStack::Pop(self);
       
    21 	return self;
       
    22 	}
       
    23 
       
    24 
       
    25 CBtraceGeneric::CBtraceGeneric(CBtraceReader& aReader)
       
    26 :	iReader(aReader)
       
    27 	{
       
    28 	
       
    29 	}
       
    30 
       
    31 
       
    32 EXPORT_C CBtraceGeneric::~CBtraceGeneric()
       
    33 	{
       
    34 	iReader.RemoveObserver(KAmTraceCategory, *this);
       
    35 	iObservers.Close();
       
    36 	}
       
    37 
       
    38 
       
    39 void CBtraceGeneric::ConstructL()
       
    40 	{
       
    41 	iReader.AddObserverL(KAmTraceCategory, *this);
       
    42 	}
       
    43 
       
    44 
       
    45 EXPORT_C void CBtraceGeneric::NotifyGenericEventL
       
    46 	(MBtraceGenericObserver& aObserver)
       
    47 	{
       
    48 	iObservers.AppendL(&aObserver);
       
    49 	}
       
    50 
       
    51 
       
    52 void CBtraceGeneric::HandleBtraceFrameL(const TBtraceFrame& aFrame)
       
    53 	{
       
    54 	if (aFrame.iCategory == KAmTraceCategory && aFrame.iSubCategory > EAmTraceSubCategoryDomainEventBase)
       
    55 		{
       
    56 		const TInt length = aFrame.iData.Length();
       
    57 		const TUint32* data = reinterpret_cast<const TUint32*>(aFrame.iData.Ptr());
       
    58 		
       
    59 		switch(length)
       
    60 			{
       
    61 			case 0:
       
    62 				SeenGeneric0L(aFrame.iTickCount, aFrame.iSubCategory);
       
    63 				break;
       
    64 			
       
    65 			case 4:
       
    66 				SeenGeneric1L(aFrame.iTickCount, aFrame.iSubCategory, *data);
       
    67 				break;
       
    68 				
       
    69 			case 8:
       
    70 				SeenGeneric2L(aFrame.iTickCount, aFrame.iSubCategory, *data, *(data+1));
       
    71 				break;
       
    72 				
       
    73 			case 12:
       
    74 				SeenGeneric3L(aFrame.iTickCount, aFrame.iSubCategory, *data, *(data+1), *(data+2));
       
    75 				break;
       
    76 			}
       
    77 		}
       
    78 	}
       
    79 
       
    80 
       
    81 void CBtraceGeneric::SeenGeneric0L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory)
       
    82 	{
       
    83 	TInt ii = iObservers.Count();
       
    84 	while (--ii >= 0)
       
    85 		{
       
    86 		iObservers[ii]->HandleGenericEvent0L(aTickCount, aSubCategory);
       
    87 		iObservers.Remove(ii);
       
    88 		}	
       
    89 	}
       
    90 
       
    91 
       
    92 void CBtraceGeneric::SeenGeneric1L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1)
       
    93 	{
       
    94 	TInt ii = iObservers.Count();
       
    95 	while (--ii >= 0)
       
    96 		{
       
    97 		iObservers[ii]->HandleGenericEvent1L(aTickCount, aSubCategory, aData1);
       
    98 		iObservers.Remove(ii);
       
    99 		}	
       
   100 	}
       
   101 
       
   102 
       
   103 void CBtraceGeneric::SeenGeneric2L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1, TUint32 aData2)
       
   104 	{
       
   105 	TInt ii = iObservers.Count();
       
   106 	while (--ii >= 0)
       
   107 		{
       
   108 		iObservers[ii]->HandleGenericEvent2L
       
   109 			(aTickCount, aSubCategory, aData1, aData2);
       
   110 		iObservers.Remove(ii);
       
   111 		}	
       
   112 	}
       
   113 
       
   114 
       
   115 void CBtraceGeneric::SeenGeneric3L(const TBtraceTickCount& aTickCount, TUint8 aSubCategory, TUint32 aData1, TUint32 aData2, TUint32 aData3)
       
   116 	{
       
   117 	TInt ii = iObservers.Count();
       
   118 	while (--ii >= 0)
       
   119 		{
       
   120 		iObservers[ii]->HandleGenericEvent3L
       
   121 			(aTickCount, aSubCategory, aData1, aData2, aData3);
       
   122 		iObservers.Remove(ii);
       
   123 		}	
       
   124 	}
       
   125 
       
   126