analyzetool/dynamicmemoryhook/inc/customuser.h
author hgs
Mon, 28 Jun 2010 15:36:07 +0300
changeset 30 86a2e675b80a
parent 20 a71a3e32a2ae
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Declaration of the class CustomUser containing overloaded User static functions.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef CUSTOMUSER_H
hgs
parents:
diff changeset
    20
#define CUSTOMUSER_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDES
hgs
parents:
diff changeset
    23
#include <u32std.h>
30
hgs
parents: 20
diff changeset
    24
#include <e32svr.h>
20
hgs
parents:
diff changeset
    25
// CONSTANTS
hgs
parents:
diff changeset
    26
const TInt KATVersionLength = 20;
hgs
parents:
diff changeset
    27
const TInt KATDefaultLogOption = 0;
hgs
parents:
diff changeset
    28
const TInt KATDefaultDebug = 1;
hgs
parents:
diff changeset
    29
const TInt KATDefaultAllocCallStackSize = 40;
hgs
parents:
diff changeset
    30
const TInt KATDefaultFreeCallStackSize = 0;
hgs
parents:
diff changeset
    31
    
hgs
parents:
diff changeset
    32
// TYPEDEFS
hgs
parents:
diff changeset
    33
typedef TBuf<KATVersionLength> TATVersion;
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// Argument list for SetupThreadHeap function parameters. (currently not used)
hgs
parents:
diff changeset
    36
// When needed, update the argument type directly inside _LIT macro.
hgs
parents:
diff changeset
    37
_LIT( KATArgumentList, "%i%i" ); //etc. 
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
// CLASS DECLARATION
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
/**
hgs
parents:
diff changeset
    42
*  Class which overloads the User functions and provides access to 
hgs
parents:
diff changeset
    43
*  the overloaded functions  
hgs
parents:
diff changeset
    44
*/
hgs
parents:
diff changeset
    45
class CustomUser
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
    public: // Enumerations
hgs
parents:
diff changeset
    48
        enum TATOptions
hgs
parents:
diff changeset
    49
            {
hgs
parents:
diff changeset
    50
            /** Acquiring the log filename */
hgs
parents:
diff changeset
    51
            ELogFileName = 1,   
hgs
parents:
diff changeset
    52
            /** Acquiring the version number */
hgs
parents:
diff changeset
    53
            EVersion,
hgs
parents:
diff changeset
    54
            /** Acquiring logging option */
hgs
parents:
diff changeset
    55
            ELogOption,
hgs
parents:
diff changeset
    56
            /** Acquiring UDEB/UREL information */  
hgs
parents:
diff changeset
    57
            EDebug,
hgs
parents:
diff changeset
    58
            /** Acquiring max allocation call stack size */
hgs
parents:
diff changeset
    59
            EAllocCallStackSize,
hgs
parents:
diff changeset
    60
            /** Acquiring max free call stack size */
hgs
parents:
diff changeset
    61
            EFreeCallStackSize
hgs
parents:
diff changeset
    62
            };
hgs
parents:
diff changeset
    63
        
hgs
parents:
diff changeset
    64
    public:
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
        /**
hgs
parents:
diff changeset
    67
        * Overloaded version of User::Exit()
hgs
parents:
diff changeset
    68
        * Terminates the current thread, specifying a reason. All child 
hgs
parents:
diff changeset
    69
        * threads are terminated and all resources are cleaned up.If the 
hgs
parents:
diff changeset
    70
        * current thread is the main thread in a process, the process is
hgs
parents:
diff changeset
    71
        * also terminated.
hgs
parents:
diff changeset
    72
        * @param aReason The reason code.
hgs
parents:
diff changeset
    73
        */
hgs
parents:
diff changeset
    74
        IMPORT_C static void Exit( TInt aReason );
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
        /**
hgs
parents:
diff changeset
    77
        * Overloaded version of User::Panic()
hgs
parents:
diff changeset
    78
        * Panics the current thread, specifying a category name and panic
hgs
parents:
diff changeset
    79
        * number. Keep the length of the category name small;
hgs
parents:
diff changeset
    80
        * a length of 16 is ideal.
hgs
parents:
diff changeset
    81
        * @param aCategory A reference to the descriptor containing the text 
hgs
parents:
diff changeset
    82
        * that defines the category for this panic.
hgs
parents:
diff changeset
    83
        * @param aReason The panic number. 
hgs
parents:
diff changeset
    84
        */   
hgs
parents:
diff changeset
    85
        IMPORT_C static void Panic( const TDesC& aCategory, TInt aReason );
hgs
parents:
diff changeset
    86
hgs
parents:
diff changeset
    87
        /**
hgs
parents:
diff changeset
    88
        * Overloaded version of UserHeap::SetupThreadHeap()
hgs
parents:
diff changeset
    89
        * Setups the threads heap.
hgs
parents:
diff changeset
    90
        * @param aNotFirst Is this first thread using specified heap
hgs
parents:
diff changeset
    91
        * @param aInfo Specifies the thread heap properties
hgs
parents:
diff changeset
    92
        * @param aFileName The name of the log file
hgs
parents:
diff changeset
    93
        * @param aLogOption The logging option for storage server
hgs
parents:
diff changeset
    94
        * @param aIsDebug Determines whether a binary is UDEB or UREL
hgs
parents:
diff changeset
    95
        * @param aVersion Atool version number
hgs
parents:
diff changeset
    96
        * @param aAllocCallStackSize Max number of stored callstack items when memory allocated
hgs
parents:
diff changeset
    97
        * @param aFreeCallStackSize Max number of stored callstack items when memory freed
hgs
parents:
diff changeset
    98
        * @param aFmt A descriptor containing the format string
hgs
parents:
diff changeset
    99
        * @return TInt KErrNone, if the insertion is successful, otherwise 
hgs
parents:
diff changeset
   100
        * one of the system wide error codes.
hgs
parents:
diff changeset
   101
        */   
hgs
parents:
diff changeset
   102
        IMPORT_C static TInt SetupThreadHeap( 
hgs
parents:
diff changeset
   103
                             TBool aNotFirst, 
hgs
parents:
diff changeset
   104
                             SStdEpocThreadCreateInfo& aInfo,
hgs
parents:
diff changeset
   105
                             const TFileName& aFileName,
hgs
parents:
diff changeset
   106
                             TUint32 aLogOption, TUint32 aIsDebug,
hgs
parents:
diff changeset
   107
                             const TATVersion& aVersion,
hgs
parents:
diff changeset
   108
                             TUint32 aAllocCallStackSize,
hgs
parents:
diff changeset
   109
                             TUint32 aFreeCallStackSize,
hgs
parents:
diff changeset
   110
                             TRefByValue<const TDesC> aFmt, ... );
hgs
parents:
diff changeset
   111
                             
hgs
parents:
diff changeset
   112
        /**
hgs
parents:
diff changeset
   113
        * Overloaded version of UserHeap::SetCritical()
hgs
parents:
diff changeset
   114
        * Sets up or changes the effect that termination of the current 
hgs
parents:
diff changeset
   115
        * thread has, either on its owning process, or on the whole system.
hgs
parents:
diff changeset
   116
        * The precise effect of thread termination is defined by the following
hgs
parents:
diff changeset
   117
        *  specific values of the TCritical enum:
hgs
parents:
diff changeset
   118
        * ENotCritical
hgs
parents:
diff changeset
   119
        * EProcessCritical
hgs
parents:
diff changeset
   120
        * EProcessPermanent
hgs
parents:
diff changeset
   121
        * ESystemCritical
hgs
parents:
diff changeset
   122
        * ESystemPermanent
hgs
parents:
diff changeset
   123
        * Notes: The enum value EAllThreadsCritical cannot be set using this
hgs
parents:
diff changeset
   124
        * function. It is associated with a process, not a thread, and, if 
hgs
parents:
diff changeset
   125
        * appropriate, should be set using User::SetProcessCritical().
hgs
parents:
diff changeset
   126
        * The states associated with ENotCritical, EProcessCritical, 
hgs
parents:
diff changeset
   127
        * EProcessPermanent, ESystemCritical and ESystemPermanent are all 
hgs
parents:
diff changeset
   128
        * mutually exclusive, i.e. the thread can only be in one of these 
hgs
parents:
diff changeset
   129
        * states at any one time.
hgs
parents:
diff changeset
   130
        * @param aCritical The state to be set.
hgs
parents:
diff changeset
   131
        * @return TInt KErrNone, if successful; KErrArgument, if 
hgs
parents:
diff changeset
   132
        * EAllThreadsCritical is passed - this is a state associated with a 
hgs
parents:
diff changeset
   133
        * process, and you use User::SetProcessCritical() to set it.
hgs
parents:
diff changeset
   134
        */ 
hgs
parents:
diff changeset
   135
        IMPORT_C static TInt SetCritical( User::TCritical aCritical );
hgs
parents:
diff changeset
   136
        
hgs
parents:
diff changeset
   137
        /**
hgs
parents:
diff changeset
   138
        * Overloaded version of UserHeap::SetCritical()
hgs
parents:
diff changeset
   139
        * Sets up or changes the effect that termination of subsequently 
hgs
parents:
diff changeset
   140
        * created threads will have, either on the owning process, 
hgs
parents:
diff changeset
   141
        * or on the whole system. It is important to note that we are not
hgs
parents:
diff changeset
   142
        * referring to threads that have already been created, but threads
hgs
parents:
diff changeset
   143
        * that will be created subsequent to a call to this function.
hgs
parents:
diff changeset
   144
        * The precise effect of thread termination is defined by the following
hgs
parents:
diff changeset
   145
        * specific values of the TCritical enum:
hgs
parents:
diff changeset
   146
        * ENotCritical
hgs
parents:
diff changeset
   147
        * EAllThreadsCritical
hgs
parents:
diff changeset
   148
        * ESystemCritical
hgs
parents:
diff changeset
   149
        * ESystemPermanent
hgs
parents:
diff changeset
   150
        * Notes:
hgs
parents:
diff changeset
   151
        * The enum values EProcessCritical and EProcessPermanent cannot be set
hgs
parents:
diff changeset
   152
        * using this function. They are states associated with a thread, not a
hgs
parents:
diff changeset
   153
        * process, and, if appropriate, should be set using 
hgs
parents:
diff changeset
   154
        * User::SetCritical(). The states associated with ENotCritical, 
hgs
parents:
diff changeset
   155
        * EAllThreadsCritical, ESystemCritical and ESystemPermanent are all 
hgs
parents:
diff changeset
   156
        * mutually exclusive, i.e. the process can only be in one of these 
hgs
parents:
diff changeset
   157
        * states at any one time.
hgs
parents:
diff changeset
   158
        * @param aCritical The state to be set.
hgs
parents:
diff changeset
   159
        * @return TInt KErrNone, if successful; KErrArgument, if either 
hgs
parents:
diff changeset
   160
        * EProcessCritical or EProcessPermanent is passed - these are states
hgs
parents:
diff changeset
   161
        * associated with a thread, and you use User::SetCritical() 
hgs
parents:
diff changeset
   162
        * to set them.
hgs
parents:
diff changeset
   163
        */ 
hgs
parents:
diff changeset
   164
        IMPORT_C static TInt SetProcessCritical( User::TCritical aCritical );
hgs
parents:
diff changeset
   165
                
hgs
parents:
diff changeset
   166
    private: // Private functions
hgs
parents:
diff changeset
   167
        
hgs
parents:
diff changeset
   168
        /**
hgs
parents:
diff changeset
   169
        * Factory function for creating RAllocator instances.
hgs
parents:
diff changeset
   170
        * @param aNotFirst Is this first thread using specified heap
hgs
parents:
diff changeset
   171
        * @param aLogOption The logging option for storage server
hgs
parents:
diff changeset
   172
        * @param aFileName The name of the logging file
hgs
parents:
diff changeset
   173
        * @param aIsDebug Determines whether a binary is UDEB or UREL
hgs
parents:
diff changeset
   174
        * @param aAllocCallStackSize Max number of stored callstack items when memory allocated
hgs
parents:
diff changeset
   175
        * @param aFreecallStackSize Max number of stored callstack items when memory freed
hgs
parents:
diff changeset
   176
        * @return RAllocator& A reference to created allocator
hgs
parents:
diff changeset
   177
        */  
hgs
parents:
diff changeset
   178
        static RAllocator& InstallAllocator( TBool aNotFirst,
hgs
parents:
diff changeset
   179
                                             const TFileName& aFileName,
hgs
parents:
diff changeset
   180
                                             TUint32 aLogOption, TUint32 aIsDebug,
hgs
parents:
diff changeset
   181
                                             TUint32 aAllocCallStackSize,
hgs
parents:
diff changeset
   182
                                             TUint32 aFreeCallStackSize );
hgs
parents:
diff changeset
   183
        
hgs
parents:
diff changeset
   184
		/**
hgs
parents:
diff changeset
   185
		* Check atool version
hgs
parents:
diff changeset
   186
		* @param aVersion - Atool version number.
hgs
parents:
diff changeset
   187
		* @param aToolVersion The atool version number
hgs
parents:
diff changeset
   188
		* @return KErrNone if correct version found, otherwise one of the system wide 
hgs
parents:
diff changeset
   189
		* error codes.
hgs
parents:
diff changeset
   190
		*/
hgs
parents:
diff changeset
   191
        static TInt CheckVersion( const TATVersion& aVersion, TDes& aToolVersion ); 
hgs
parents:
diff changeset
   192
        
hgs
parents:
diff changeset
   193
		/**
hgs
parents:
diff changeset
   194
		* Function for showing incorrect version information (file or debug channel).
hgs
parents:
diff changeset
   195
		* @param aLogOption The logging option
hgs
parents:
diff changeset
   196
		* @param aFileName The name of the log file
hgs
parents:
diff changeset
   197
		* @param aToolVersion The atool version number
hgs
parents:
diff changeset
   198
		*/
hgs
parents:
diff changeset
   199
        static void ReportIncorrectVersion( const TUint32 aLogOption, 
hgs
parents:
diff changeset
   200
											const TFileName& aFileName,
hgs
parents:
diff changeset
   201
											const TDes& aToolVersion );
hgs
parents:
diff changeset
   202
        
hgs
parents:
diff changeset
   203
    };
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
#endif // CUSTOMUSER_H
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
// End of File