os/kernelhwsrv/kernel/eka/include/opensystemtrace.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     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