diff -r a151135b0cf9 -r aa2539c91954 tracesrv/tracecore/btrace_handler/inc/BTraceOstCategoryBitmap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tracesrv/tracecore/btrace_handler/inc/BTraceOstCategoryBitmap.h Fri Oct 08 14:56:39 2010 +0300 @@ -0,0 +1,187 @@ +// Copyright (c) 2007-2010 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: +// Tracks the activation of BTrace OST categories +// + +#ifndef __BTRACEOSTCATEGORYBITMAP_H__ +#define __BTRACEOSTCATEGORYBITMAP_H__ + + +// Include files +#include +#include "TraceCoreActivationBase.h" + +class DBTraceOstCategoryHandler; + +/** + * OST trace component. + */ +class TOstComponent + { +public: + TUint32 iComponentId; + RArray< TUint > iGroups; //TODO: implement this as a bitmap rather than RArray + }; + + +/** + * OST Trace bitmap (dynamic). This extends the subscriber base class to receive bitmap updates + */ +NONSHARABLE_CLASS( DBTraceOstCategoryBitmap ) : public DTraceCoreActivationBase + { +public: + + /** + * Constructor + * @param aBTraceOstCategoryHandler Pointer to CBTraceOstCategoryHandler + */ + DBTraceOstCategoryBitmap(DBTraceOstCategoryHandler* aBTraceOstCategoryHandler); + + /** + * Destructor + */ + ~DBTraceOstCategoryBitmap(); + + /** + * Initializes this bitmap. This subscribes to the bitmap update message + */ + TInt Init(); + + /** + * Checks if trace points with a specific component ID and group ID are + * currently active + * + * @param aComponentId The component ID + * @param aTraceWord The trace word containing the group ID to check + * @return ETrue if trace is active, EFalse if not + */ + TBool IsTraceActivated( const TUint32 aComponentId, TUint32 aTraceWord ); + + /** + * Activate trace group + * + * @param aComponentId The component ID + * @param aGroupId The group ID + */ + void ActivateTrace( const TUint32 aComponentId, const TUint32 aGroupId ); + + /** + * Deactivate trace group + * + * @param aComponentId The component ID + * @param aGroupId The group ID + */ + void DeactivateTrace( const TUint32 aComponentId, const TUint32 aGroupId ); + + /** + * Deactivates all groups from a component + * + * @param aComponentId The component ID + */ + void DeactivateAll( const TUint32 aComponentId ); + + /** + * Updates this activation object from the given settings + * + * @param aSettings the settings to be read + */ + void ReadFromSettings( DTraceCoreSettings& aSettings ); + + /** + * Updates the settings with the content of this activation object + * + * @param aSettings the settings to be written + */ + void WriteToSettings( DTraceCoreSettings& aSettings ); + + /** + * Gets activated groups for this component ID + * @param aComponentId the component ID + */ + RArray< TUint > GetActivatedGroups( const TUint32 aComponentId ); + + /** + * Reactivate all currently activated traces + * + * This function deactivates all groups currently active and re-activates them. + * This results in kernel priming data being generated for all active kernel groups. + * + * @return KErrNone if refresh successful + */ + TInt RefreshActivations(); + +private: + + TInt FindComponentId( TUint32 aComponentId, RArray& aOstComponents ); + TInt AddComponentId( TUint32 aComponentId, RArray& aOstComponents ); + TInt RemoveComponentId( TUint32 aComponentId, TBool aNotifyActivationListeners, + RArray& aOstComponents, RArray< TOstComponent >& aChangedArray ); + TInt AddGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, + RArray& aOstComponents, RArray< TOstComponent >& aChangedArray ); + TInt RemoveGroupId( TUint32 aComponentId, TGroupId aGroupId, TInt aIndex, + RArray& aOstComponents, RArray< TOstComponent >& aChangedArray ); + TInt OverwriteGroups (const TUint8* aFrameStart, + TInt aComponentIndex, TUint32 aComponentId , TUint32 numberOfGroups, + RArray& aOstComponents, RArray< TOstComponent >& aChangedArray); + TInt ReadOstProtocolFrame(const TDesC8& aMessage, TUint32 aFrameStartIndex); + TInt ReadOstProtocolFrameGroups(const TDesC8& aMessage, + TInt aFrameStartIndex, TUint8 aActivationInfo, TInt aComponentIndex, + TUint32 aComponentId, RArray& aOstComponents, RArray< TOstComponent >& aChangedArray); + TInt ReadOstFrame( const TDesC8& aMessage, TUint32 aFrameStartIndex ); + TInt ReadOstFrameGroups( const TDesC8& aMessage, TInt aFrameStartIndex, + TUint8 aActivationInfo, TInt aComponentIndex, TUint32 aComponentId, + RArray& aOstComponents, RArray< TOstComponent >& aChangedArray ); + void MessageReceived( TTraceMessage &aMsg ); + void OstProtocolMessage( TTraceMessage &aMsg ); + TBool IsComponentSupported( TUint32 /*aComponentID*/ ); + TInt AllocateActivationBuffer(); + TUint32 Read32FromBuffer(TUint8*& aPtr); + TUint16 Read16FromBuffer(TUint8*& aPtr); + void WriteToBuffer(TUint8*& aPtr, TUint32 aData32); + void WriteToBuffer(TUint8*& aPtr, TUint16 aData16); + void HandleTraceActivationChanges(RArray< TOstComponent >& aChangedArray); + + //used by locking mechanism + template void CopyArray(RArray* aSrc, RArray* aDst); + void SetNewComponentsArrayPtr(RArray*& aNewPtr); + + //utility methods + void CleanupComponentsArray(RArray< TOstComponent >& aComponentArray); + void CleanupComponentsArrays(); + void AddGroupToChangedArray(RArray< TOstComponent >& aChangedArray, TUint32 aComponentId, TGroupId aGroupId); + +private: + + /** + * OST Components + */ + RArray< TOstComponent >* iOstComponents; + + //temporary array used in activation/deactivation methods + RArray< TOstComponent >* iTmpArray; + + //array used in to store changed components + RArray< TOstComponent >* iChangedArray; + + /** + * Buffer for saving and loading activations + */ + TUint8* iActivationBuffer; + DBTraceOstCategoryHandler* iBTraceOstCategoryHandler; + + }; + +#endif // __BTRACEOSTCATEGORYBITMAP_H__ + +// End of File