kernel/eka/include/opensystemtrace.h
changeset 0 a41df078684a
child 90 947f0dc9f7a8
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Trace API
       
    15 //
       
    16 
       
    17 #ifndef OPENSYSTEMTRACEV2_H
       
    18 #define OPENSYSTEMTRACEV2_H
       
    19 
       
    20 #include <opensystemtrace_types.h>
       
    21 
       
    22 
       
    23 /**
       
    24 Methods for tracing from user side.
       
    25 
       
    26 These methods are used to output trace packets.
       
    27 Each trace packet consists of attributes and the user defined payload.
       
    28 
       
    29 In order to output trace packets, tracing needs to be
       
    30 included and enabled at compile time in the executable,
       
    31 as well as be filtered at run-time.
       
    32 
       
    33 Note:
       
    34 OSTv2 does not enforce any security. It is the developer's responsibility
       
    35 to ensure that trace packets do not contain any sensitive information that
       
    36 may undermine platform security.
       
    37 
       
    38 @file
       
    39 @publishedPartner
       
    40 @prototype
       
    41 */
       
    42 
       
    43 /**
       
    44 Class used to encapsulate the context of a trace point.
       
    45 For more information about the attributes please @see opensystemtrace_types.h.
       
    46 
       
    47 The attributes in @see TTraceContext are used to identify and filter the trace packet.
       
    48 @see opensystemtrace.mmh
       
    49 @see RUlogger for information on how to filter at run-time
       
    50 
       
    51 @deprecated
       
    52 */
       
    53 NONSHARABLE_CLASS(TTraceContext)
       
    54     {
       
    55 public:
       
    56     inline TTraceContext(const TGroupId aGroupId);
       
    57     inline TTraceContext(const TGroupId aGroupId, const THasThreadIdentification aHasThreadIdentification, const THasProgramCounter aHasProgramCounter);
       
    58 
       
    59     inline TTraceContext(const TComponentId aComponentId, const TGroupId aGroupId);
       
    60     inline TTraceContext(const TComponentId aComponentId, const TGroupId aGroupId, const THasThreadIdentification aHasThreadIdentification, const THasProgramCounter aHasProgramCounter);
       
    61 
       
    62     IMPORT_C TComponentId               ComponentId() const;
       
    63     IMPORT_C TClassification            Classification() const;
       
    64     IMPORT_C TGroupId                   GroupId() const;
       
    65     IMPORT_C THasThreadIdentification   HasThreadIdentification() const;
       
    66     IMPORT_C THasProgramCounter         HasProgramCounter() const;
       
    67     IMPORT_C static TComponentId        DefaultComponentId();
       
    68 private:
       
    69     inline TTraceContext(){};
       
    70 private:
       
    71     TComponentId                iComponentId;               ///<@see TComponentId
       
    72     TGroupId                    iGroupId;                   ///<@see TGroupId
       
    73     THasThreadIdentification    iHasThreadIdentification;   ///<@see THasThreadIdentification
       
    74     THasProgramCounter          iHasProgramCounter;         ///<@see THasProgramCounter
       
    75     TUint32                     iReserved1;                 //Reserved for future use
       
    76     TUint32                     iReserved2;                 //Reserved for future use
       
    77     };
       
    78 
       
    79 	IMPORT_C TBool OstPrint(const TTraceContext& aContext, const TDesC8& aDes);
       
    80     IMPORT_C TBool OstPrintf(const TTraceContext& aContext, const char* aFmt, ...);
       
    81     IMPORT_C TBool OstPrintf(const TTraceContext& aContext, TRefByValue<const TDesC8> aFmt,...);
       
    82     #ifndef  __KERNEL_MODE__
       
    83     IMPORT_C TBool OstPrint(const TTraceContext& aContext, const TDesC16& aDes);
       
    84     IMPORT_C TBool OstPrintf(const TTraceContext& aContext, TRefByValue<const TDesC16> aFmt,...);
       
    85     #endif //__KERNEL_MODE__
       
    86 
       
    87     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId);
       
    88     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TUint8 aData);
       
    89     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TUint16 aData);
       
    90     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TUint32 aData);
       
    91     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TUint32 aData1, const TUint32 aData2);
       
    92     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TDesC8& aData);
       
    93     #ifndef __KERNEL_MODE__
       
    94     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TDesC16& aData);
       
    95     #endif
       
    96     template<typename T>
       
    97     static inline TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const T& aData);
       
    98     IMPORT_C TBool OstTrace(const TTraceContext& aContext, const TTraceId aTraceId, const TAny* aData, const TInt aDataSize);
       
    99 
       
   100     IMPORT_C TBool IsTraceActive(const TTraceContext& aContext);
       
   101 
       
   102 
       
   103 /**
       
   104 The following trace APIs require a TraceCompiler to be present in the build system. 
       
   105 This TraceCompiler is used to generate additional information for each trace point 
       
   106 in order for traces to be generated at runtime.
       
   107 */
       
   108 
       
   109 #include <opensystemtrace.inl>
       
   110 
       
   111 // Macros
       
   112 
       
   113 /**
       
   114 Preprocessor category for all traces off.
       
   115 This should not be used from traces
       
   116 */
       
   117 #define OST_TRACE_CATEGORY_NONE 0x00000000
       
   118 
       
   119 /**
       
   120 Preprocessor category for production traces
       
   121 */
       
   122 #define OST_TRACE_CATEGORY_PRODUCTION 0x00000001
       
   123 
       
   124 /**
       
   125 Preprocessor category for RnD traces
       
   126 */
       
   127 #define OST_TRACE_CATEGORY_RND 0x00000002
       
   128 
       
   129 /**
       
   130 Preprocessor category for performance measurement traces
       
   131 */
       
   132 #define OST_TRACE_CATEGORY_PERFORMANCE_MEASUREMENT 0x00000004
       
   133 
       
   134 /**
       
   135 Preprocessor level for all traces on.
       
   136 This should not be used from traces
       
   137 */
       
   138 #define OST_TRACE_CATEGORY_ALL 0xFFFFFFFF
       
   139 
       
   140 
       
   141 /**
       
   142 A flag, which specifies if the compiler has been run for the component
       
   143 */
       
   144 #if defined( OST_TRACE_COMPILER_IN_USE )
       
   145 
       
   146 
       
   147 /**
       
   148 The default preprocessor category is RND
       
   149 Component may override this by defining
       
   150 OST_TRACE_CATEGORY before including this file
       
   151 */
       
   152 #if !defined( OST_TRACE_CATEGORY )
       
   153 #define OST_TRACE_CATEGORY OST_TRACE_CATEGORY_RND
       
   154 #endif
       
   155 
       
   156 /**
       
   157 Trace with no parameters
       
   158 
       
   159 @param aCategory Preprocessor category for the trace
       
   160 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   161                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   162                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   163 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   164 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   165                   The text itself is not sent in the trace packet
       
   166 */
       
   167 #define OstTraceDef0( aCategory, aGroupName, aTraceName, aTraceText ) \
       
   168     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   169     BTraceFilteredContext8( EXTRACT_GROUP_ID(aTraceName), \
       
   170                         EOstTrace, \
       
   171                         KOstTraceComponentID, \
       
   172                         aTraceName );} while (0)
       
   173 
       
   174 
       
   175 /**
       
   176 Trace with one 32-bit parameter
       
   177 
       
   178 @param aCategory Preprocessor category for the trace
       
   179 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   180                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   181                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   182 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   183 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   184                   The text itself is not sent in the trace packet
       
   185 @param aParam The 32-bit value to be traced
       
   186 */
       
   187 #define OstTraceDef1( aCategory, aGroupName, aTraceName, aTraceText, aParam ) \
       
   188     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   189     BTraceFilteredContext12( EXTRACT_GROUP_ID(aTraceName), \
       
   190                          EOstTrace, \
       
   191                          KOstTraceComponentID, \
       
   192                          aTraceName, \
       
   193                          aParam );} while (0)
       
   194 
       
   195 
       
   196 /**
       
   197 Trace with more than 32 bits of data
       
   198 
       
   199 @param aCategory Preprocessor category for the trace
       
   200 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   201                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   202                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   203 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   204 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   205                   The text itself is not sent in the trace packet
       
   206 @param aPtr Pointer to the data to be traced
       
   207 @param aLength Length of the data to be traced
       
   208 */
       
   209 #define OstTraceDefData( aCategory, aGroupName, aTraceName, aTraceText, aPtr, aLength ) \
       
   210     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   211         OstSendNBytes( EXTRACT_GROUP_ID(aTraceName), \
       
   212                        EOstTrace, \
       
   213                        KOstTraceComponentID, \
       
   214                        aTraceName, \
       
   215                        aPtr, \
       
   216                        aLength );} while (0)
       
   217 
       
   218 
       
   219 /**
       
   220 Trace with one parameter that is not 32-bit integer. This calls OstTraceGen1,
       
   221 which is generated by the trace compiler. The generated function will pack the
       
   222 parameter into a stack-allocated buffer and call OstTraceData with the buffer.
       
   223 
       
   224 @param aCategory Preprocessor category for the trace
       
   225 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   226                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   227                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   228 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   229 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   230                   The text itself is not sent in the trace packet
       
   231 @param aParam The parameter to be traced
       
   232 */
       
   233 #define OstTraceDefExt1( aCategory, aGroupName, aTraceName, aTraceText, aParam ) \
       
   234     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   235         OstTraceGen1( aTraceName, aParam );} while (0)
       
   236 
       
   237 
       
   238 /**
       
   239 Trace with two parameters. This calls OstTraceGen2, which is generated by trace compiler.
       
   240 The generated function will pack the parameters into a stack-allocated buffer and
       
   241 call OstTraceData with the buffer.
       
   242 
       
   243 @param aCategory Preprocessor category for the trace
       
   244 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   245                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   246                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   247 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   248 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   249                   The text itself is not sent in the trace packet
       
   250 @param aParam1 The first parameter to be traced
       
   251 @param aParam2 The second parameter to be traced
       
   252 */
       
   253 #define OstTraceDefExt2( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2 ) \
       
   254     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   255         OstTraceGen2( aTraceName, aParam1, aParam2 );} while (0)
       
   256 
       
   257 
       
   258 /**
       
   259 Trace with three parameters. This calls OstTraceGen3, which is generated by trace compiler.
       
   260 The generated function will pack the parameters into a stack-allocated buffer and
       
   261 call OstTraceData with the buffer.
       
   262 
       
   263 @param aCategory Preprocessor category for the trace
       
   264 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   265                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   266                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   267 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   268 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   269                   The text itself is not sent in the trace packet
       
   270 @param aParam1 The first parameter to be traced
       
   271 @param aParam2 The second parameter to be traced
       
   272 @param aParam3 The third parameter to be traced
       
   273 */
       
   274 #define OstTraceDefExt3( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3 ) \
       
   275     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   276         OstTraceGen3( aTraceName, aParam1, aParam2, aParam3 );} while (0)
       
   277 
       
   278 
       
   279 /**
       
   280 Trace with four parameters. This calls OstTraceGen4, which is generated by trace compiler.
       
   281 The generated function will pack the parameters into a stack-allocated buffer and
       
   282 call OstTraceData with the buffer.
       
   283 
       
   284 @param aCategory Preprocessor category for the trace
       
   285 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   286                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   287                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   288 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   289 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   290                   The text itself is not sent in the trace packet
       
   291 @param aParam1 The first parameter to be traced
       
   292 @param aParam2 The second parameter to be traced
       
   293 @param aParam3 The third parameter to be traced
       
   294 @param aParam4 The fourth parameter to be traced
       
   295 */
       
   296 #define OstTraceDefExt4( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4 ) \
       
   297     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   298         OstTraceGen4( aTraceName, aParam1, aParam2, aParam3, aParam4 );} while (0)
       
   299 
       
   300 
       
   301 /**
       
   302 Trace with five parameters. This calls OstTraceGen5, which is generated by trace compiler.
       
   303 The generated function will pack the parameters into a stack-allocated buffer and
       
   304 call OstTraceData with the buffer.
       
   305 
       
   306 @param aCategory Preprocessor category for the trace
       
   307 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   308                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   309                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   310 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   311 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   312                   The text itself is not sent in the trace packet
       
   313 @param aParam1 The first parameter to be traced
       
   314 @param aParam2 The second parameter to be traced
       
   315 @param aParam3 The third parameter to be traced
       
   316 @param aParam4 The fourth parameter to be traced
       
   317 @param aParam5 The fifth parameter to be traced
       
   318 */
       
   319 #define OstTraceDefExt5( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4, aParam5 ) \
       
   320     do {if ( aCategory & OST_TRACE_CATEGORY ) \
       
   321         OstTraceGen5( aTraceName, aParam1, aParam2, aParam3, aParam4, aParam5 );} while (0)
       
   322 
       
   323 
       
   324 /**
       
   325 *************** Trace macros which use RnD as default preprocessor category ***************
       
   326 */
       
   327 
       
   328 /**
       
   329 RnD trace with no parameters
       
   330 
       
   331 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   332                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   333                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   334 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   335 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   336                   The text itself is not sent in the trace packet
       
   337 */
       
   338 #define OstTrace0( aGroupName, aTraceName, aTraceText ) \
       
   339     OstTraceDef0( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText )
       
   340 
       
   341 
       
   342 /**
       
   343 RnD trace with one 32-bit parameter
       
   344 
       
   345 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   346                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   347                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   348 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   349 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   350                   The text itself is not sent in the trace packet
       
   351 @param aParam The 32-bit value to be traced
       
   352 */
       
   353 #define OstTrace1( aGroupName, aTraceName, aTraceText, aParam ) \
       
   354     OstTraceDef1( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam )
       
   355 
       
   356 
       
   357 /**
       
   358 RnD trace with more than 32 bits of data
       
   359 
       
   360 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   361                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   362                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   363 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   364 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   365                   The text itself is not sent in the trace packet
       
   366 @param aPtr Pointer to the data to be traced
       
   367 @param aLength Length of the data to be traced
       
   368 */
       
   369 #define OstTraceData( aGroupName, aTraceName, aTraceText, aPtr, aLength ) \
       
   370     OstTraceDefData( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aPtr, aLength )
       
   371 
       
   372 
       
   373 /**
       
   374 RnD trace with one parameter that is not 32-bit integer. This calls OstTraceGen1,
       
   375 which is generated by the trace compiler. The generated function will pack the
       
   376 parameter into a stack-allocated buffer and call OstTraceData with the buffer.
       
   377 
       
   378 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   379                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   380                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   381 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   382 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   383                   The text itself is not sent in the trace packet
       
   384 @param aParam The parameter to be traced
       
   385 */
       
   386 #define OstTraceExt1( aGroupName, aTraceName, aTraceText, aParam ) \
       
   387     OstTraceDefExt1( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam )
       
   388 
       
   389 
       
   390 /**
       
   391 RnD trace with two parameters. This calls OstTraceGen2, which is generated by trace compiler.
       
   392 The generated function will pack the parameters into a stack-allocated buffer and
       
   393 call OstTraceData with the buffer.
       
   394 
       
   395 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   396                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   397                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   398 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   399 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   400                   The text itself is not sent in the trace packet
       
   401 @param aParam1 The first parameter to be traced
       
   402 @param aParam2 The second parameter to be traced
       
   403 */
       
   404 #define OstTraceExt2( aGroupName, aTraceName, aTraceText, aParam1, aParam2 ) \
       
   405     OstTraceDefExt2( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam1, aParam2 )
       
   406 
       
   407 
       
   408 /**
       
   409 RnD trace with three parameters. This calls OstTraceGen3, which is generated by trace compiler.
       
   410 The generated function will pack the parameters into a stack-allocated buffer and
       
   411 call OstTraceData with the buffer.
       
   412 
       
   413 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   414                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   415                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   416 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   417 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   418                   The text itself is not sent in the trace packet
       
   419 @param aParam1 The first parameter to be traced
       
   420 @param aParam2 The second parameter to be traced
       
   421 @param aParam3 The third parameter to be traced
       
   422 */
       
   423 #define OstTraceExt3( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3 ) \
       
   424     OstTraceDefExt3( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3 )
       
   425 
       
   426 
       
   427 /**
       
   428 RnD trace with four parameters. This calls OstTraceGen4, which is generated by trace compiler.
       
   429 The generated function will pack the parameters into a stack-allocated buffer and
       
   430 call OstTraceData with the buffer.
       
   431 
       
   432 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   433                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   434                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   435 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   436 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   437                   The text itself is not sent in the trace packet
       
   438 @param aParam1 The first parameter to be traced
       
   439 @param aParam2 The second parameter to be traced
       
   440 @param aParam3 The third parameter to be traced
       
   441 @param aParam4 The fourth parameter to be traced
       
   442 */
       
   443 #define OstTraceExt4( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4 ) \
       
   444     OstTraceDefExt4( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4 )
       
   445 
       
   446 
       
   447 /**
       
   448 RnD trace with five parameters. This calls OstTraceGen5, which is generated by trace compiler.
       
   449 The generated function will pack the parameters into a stack-allocated buffer and
       
   450 call OstTraceData with the buffer.
       
   451 
       
   452 @param aGroupName Name of the trace group. Trace Compiler associates the group name with a 16-bit integer.
       
   453                   Then, it combines the group name with a unique trace id (16-bit integer) to produce the trace name
       
   454                   (aTraceName 32-bit integer). Only the trace name is sent in the trace packet.
       
   455 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   456 @param aTraceText The trace text, which is parsed by the trace compiler.
       
   457                   The text itself is not sent in the trace packet
       
   458 @param aParam1 The first parameter to be traced
       
   459 @param aParam2 The second parameter to be traced
       
   460 @param aParam3 The third parameter to be traced
       
   461 @param aParam4 The fourth parameter to be traced
       
   462 @param aParam5 The fifth parameter to be traced
       
   463 */
       
   464 #define OstTraceExt5( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4, aParam5 ) \
       
   465     OstTraceDefExt5( OST_TRACE_CATEGORY_RND, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4, aParam5 )
       
   466 
       
   467 
       
   468 /**
       
   469 Function entry trace without extra parameters.
       
   470 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   471 
       
   472 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   473 */
       
   474 #define OstTraceFunctionEntry0( aTraceName ) \
       
   475     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   476     BTraceFilteredContext8( EXTRACT_GROUP_ID(aTraceName), \
       
   477                         EOstTrace, \
       
   478                         KOstTraceComponentID, \
       
   479                         aTraceName );} while (0)
       
   480 
       
   481 
       
   482 /**
       
   483 Function entry trace with a parameter representing the instance identifier.
       
   484 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   485 
       
   486 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   487 @param aInstance The instance identifier, for example "this" pointer
       
   488 */
       
   489 #define OstTraceFunctionEntry1( aTraceName, aInstance ) \
       
   490     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   491     BTraceFilteredContext12( EXTRACT_GROUP_ID(aTraceName), \
       
   492                          EOstTrace, \
       
   493                          KOstTraceComponentID, \
       
   494                          aTraceName, \
       
   495                          (TUint32) aInstance );} while (0)
       
   496 
       
   497 
       
   498 /**
       
   499 Function entry trace, which traces function parameters.
       
   500 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   501 
       
   502 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   503 @param aInstance Name of the instance identifier
       
   504 */
       
   505 #define OstTraceFunctionEntryExt( aTraceName, aInstance ) \
       
   506     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   507         OstTraceGenExt( aTraceName, ( TUint )aInstance );} while (0)
       
   508 
       
   509 
       
   510 /**
       
   511 Function exit trace without extra parameters.
       
   512 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   513 
       
   514 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   515 */
       
   516 #define OstTraceFunctionExit0( aTraceName ) \
       
   517     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   518     BTraceFilteredContext8( EXTRACT_GROUP_ID(aTraceName), \
       
   519                         EOstTrace, \
       
   520                         KOstTraceComponentID, \
       
   521                         aTraceName );} while (0)
       
   522 
       
   523 
       
   524 /**
       
   525 Function exit trace with a parameter representing the instance identifier.
       
   526 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   527 
       
   528 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   529 @param aInstance The instance identifier, for example "this" pointer
       
   530 */
       
   531 #define OstTraceFunctionExit1( aTraceName, aInstance ) \
       
   532     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   533     BTraceFilteredContext12( EXTRACT_GROUP_ID(aTraceName), \
       
   534                          EOstTrace, \
       
   535                          KOstTraceComponentID, \
       
   536                          aTraceName, \
       
   537                          (TUint32) aInstance );} while (0)
       
   538 
       
   539 
       
   540 /**
       
   541 Function exit trace with a parameters representing the instance identifier and return value.
       
   542 The trace is mapped to TRACE_FLOW or TRACE_API group by the trace compiler
       
   543 
       
   544 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   545 @param aInstance The instance identifier, for example "this" pointer
       
   546 @param aRetval The function return value
       
   547 */
       
   548 #define OstTraceFunctionExitExt( aTraceName, aInstance, aRetval ) \
       
   549     do {if ( OST_TRACE_CATEGORY_RND & OST_TRACE_CATEGORY ) \
       
   550         OstTraceGen2( aTraceName, ( TUint )aInstance, aRetval );} while (0)
       
   551 
       
   552 
       
   553 /**
       
   554 Performance measurement event start trace without extra parameters.
       
   555 The trace is mapped to TRACE_PERFORMANCE group by the trace compiler
       
   556 
       
   557 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   558 @param aEventName The name of the event. A corresponding OstTraceEventStop call must be made later in code
       
   559 */
       
   560 #define OstTraceEventStart0( aTraceName, aEventName ) \
       
   561         OstTraceDef1( OST_TRACE_CATEGORY_RND, "TRACE_PERFORMANCE", aTraceName, null, (TInt32)1 )
       
   562 
       
   563 
       
   564 /**
       
   565 Performance measurement event start trace with single 32-bit parameter.
       
   566 The trace is mapped to TRACE_PERFORMANCE group by the trace compiler
       
   567 
       
   568 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   569 @param aEventName The name of the event. A corresponding OstTraceEventStop call must be made later in code
       
   570 @param aParam The parameter to be associated to the event
       
   571 */
       
   572 #define OstTraceEventStart1( aTraceName, aEventName, aParam ) \
       
   573         OstTraceDef1( OST_TRACE_CATEGORY_RND, "TRACE_PERFORMANCE", aTraceName, null, aParam )
       
   574 
       
   575 
       
   576 /**
       
   577 Performance measurement event end trace.
       
   578 The trace is mapped to TRACE_PERFORMANCE group by the trace compiler
       
   579 
       
   580 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   581 @param aEventName The name of the event. Must match a name passed to OstTraceEventStart
       
   582 @param aStartTraceName Event start trace name. Must match a Trace Name of OstTraceEventStart trace
       
   583 */
       
   584 #define OstTraceEventStop( aTraceName, aEventName, aStartTraceName ) \
       
   585         OstTraceDefExt2( OST_TRACE_CATEGORY_RND, "TRACE_PERFORMANCE", aTraceName, null, (TInt32)0, (TUint32)(aStartTraceName & 0xFFFF) ) 
       
   586 
       
   587 
       
   588 /**
       
   589 State transition event.
       
   590 The trace is mapped to TRACE_STATE group by the trace compiler
       
   591 
       
   592 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   593 @param aStateName The name of the state, literal string (for example "name")
       
   594 @param aNewState The new value for the state, literal string (for example "value")
       
   595 */
       
   596 #define OstTraceState0( aTraceName, aStateName, aNewState ) \
       
   597         OstTraceDefExt2( OST_TRACE_CATEGORY_RND, "TRACE_STATE", aTraceName, null, _L8(aStateName), _L8(aNewState) ) 
       
   598 
       
   599 
       
   600 /**
       
   601 State transition event with instance identifier.
       
   602 The trace is mapped to TRACE_STATE group by the trace compiler
       
   603 
       
   604 @param aTraceName Name of the trace. The name is mapped to a 32-bit identifier and thus must be unique
       
   605 @param aStateName The name of the state, literal string (for example "name")
       
   606 @param aNewState The new value for the state, literal string (for example "value")
       
   607 @param aInstance The instance identifier, for example "this" pointer
       
   608 */
       
   609 #define OstTraceState1( aTraceName, aStateName, aNewState, aInstance ) \
       
   610         OstTraceDefExt3( OST_TRACE_CATEGORY_RND, "TRACE_STATE", aTraceName, null, _L8(aStateName), _L8(aNewState), (TUint32) aInstance ) 
       
   611        
       
   612 #else // OST_TRACE_COMPILER_IN_USE
       
   613 
       
   614 /**
       
   615 API is defined empty if the trace compiler has not been run
       
   616 */
       
   617 
       
   618 #define OstTraceDef0( aCategory, aGroupName, aTraceName, aTraceText )
       
   619 #define OstTraceDef1( aCategory, aGroupName, aTraceName, aTraceText, aParam )
       
   620 #define OstTraceDefData( aCategory, aGroupName, aTraceName, aTraceText, aPtr, aLength )
       
   621 #define OstTraceDefExt1( aCategory, aGroupName, aTraceName, aTraceText, aParam )
       
   622 #define OstTraceDefExt2( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2 )
       
   623 #define OstTraceDefExt3( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3 )
       
   624 #define OstTraceDefExt4( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4 )
       
   625 #define OstTraceDefExt5( aCategory, aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4, aParam5 )
       
   626 
       
   627 #define OstTrace0( aGroupName, aTraceName, aTraceText )
       
   628 #define OstTrace1( aGroupName, aTraceName, aTraceText, aParam )
       
   629 #define OstTraceData( aGroupName, aTraceName, aTraceText, aPtr, aLength )
       
   630 #define OstTraceExt1( aGroupName, aTraceName, aTraceText, aParam )
       
   631 #define OstTraceExt2( aGroupName, aTraceName, aTraceText, aParam1, aParam2 )
       
   632 #define OstTraceExt3( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3 )
       
   633 #define OstTraceExt4( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4 )
       
   634 #define OstTraceExt5( aGroupName, aTraceName, aTraceText, aParam1, aParam2, aParam3, aParam4, aParam5 )
       
   635 
       
   636 #define OstTraceFunctionEntry0( aTraceName )
       
   637 #define OstTraceFunctionEntry1( aTraceName, aInstance )
       
   638 #define OstTraceFunctionEntryExt(aTraceName, aInstance)
       
   639 #define OstTraceFunctionExit0( aTraceName )
       
   640 #define OstTraceFunctionExit1( aTraceName, aInstance )
       
   641 #define OstTraceEventStart0( aTraceName, aEventName )
       
   642 #define OstTraceEventStart1( aTraceName, aEventName, aParam )
       
   643 #define OstTraceFunctionExitExt(aTraceName, aInstance, aRetval)
       
   644 #define OstTraceEventStop( aTraceName, aEventName, aStartTraceName )
       
   645 #define OstTraceState0( aTraceName, aStateName, aNewState )
       
   646 #define OstTraceState1( aTraceName, aStateName, aNewState, aInstance )
       
   647 
       
   648 #endif // OST_TRACE_COMPILER_IN_USE
       
   649 
       
   650 
       
   651 // Data types
       
   652 
       
   653 /**
       
   654 BTrace sub-category IDs for OpenSystemTrace category
       
   655 */
       
   656 enum TSubcategoryOpenSystemTrace
       
   657     {
       
   658     /**
       
   659      * Normal trace
       
   660      */
       
   661     EOstTrace                   = 0,
       
   662 
       
   663     /**
       
   664      * Queries if trace is active without sending it
       
   665      */
       
   666     EOstTraceActivationQuery    = 1
       
   667     };
       
   668 
       
   669 // Forward declarations
       
   670 
       
   671 /**
       
   672 Template class for array parameter types
       
   673 For example, to wrap an integer array to a trace:
       
   674 TInt arr[5];
       
   675 OstTraceExt( GRP, TRC, "Array: %{int32[]}", TOstArray< TInt >( arr, 5 ) );
       
   676 */
       
   677 template< class T >
       
   678 class TOstArray
       
   679     {
       
   680 public:
       
   681     /**
       
   682      * Constructor
       
   683      *
       
   684      * @param aArray the array data
       
   685      * @param aLength the number of elements in the array
       
   686      */
       
   687     TOstArray( const T* aArray, TInt aLength ) : iArray( aArray ), iLength( aLength ) {}
       
   688 
       
   689     /**
       
   690      * Gets the array data pointer.
       
   691      * Used from the functions generated by trace compiler
       
   692      * 
       
   693      * @return The array data pointer.
       
   694      */
       
   695     const T* Ptr() const { return iArray; }
       
   696 
       
   697     /**
       
   698      * Gets the number of elements in the array.
       
   699      * Used from the functions generated by trace compiler
       
   700      * 
       
   701      * @return The number of elements in the array.
       
   702      */
       
   703     TInt Length() const { return iLength; }
       
   704 
       
   705     /**
       
   706      * Gets the number of bytes occupied by the array.
       
   707      * Used from the functions generated by trace compiler
       
   708      * 
       
   709      * @return The number of bytes occupied by the array.
       
   710      */
       
   711     TInt Size() const { return sizeof( T ) * iLength; }
       
   712 
       
   713 private:
       
   714     /**
       
   715      * Array data
       
   716      */
       
   717     const T* iArray;
       
   718 
       
   719     /**
       
   720      * Array length, as number of elements
       
   721      */
       
   722     TInt iLength;
       
   723     };
       
   724 
       
   725 
       
   726 // Class declaration
       
   727 
       
   728 #endif //OPENSYSTEMTRACEV2_H