analyzetool/dynamicmemoryhook/inc/analyzetoolallocator.h
author hgs
Mon, 23 Aug 2010 15:29:36 +0300
changeset 41 838cdffd57ce
parent 20 a71a3e32a2ae
child 49 7fdc9a71d314
permissions -rw-r--r--
201031
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 RAnalyzeToolAllocator.
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 ANALYZETOOLALLOCATOR_H
hgs
parents:
diff changeset
    20
#define ANALYZETOOLALLOCATOR_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDES
hgs
parents:
diff changeset
    23
#include <u32std.h>
hgs
parents:
diff changeset
    24
#include "codeblock.h"
hgs
parents:
diff changeset
    25
#include "threadstack.h"
hgs
parents:
diff changeset
    26
#include "analyzetoolmemoryallocator.h"
hgs
parents:
diff changeset
    27
#include <analyzetool/atstorageserverclnt.h>
hgs
parents:
diff changeset
    28
#include <analyzetool/analyzetool.h>
hgs
parents:
diff changeset
    29
#include <analyzetool/atcommon.h>
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// CLASS DECLARATION
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/**
hgs
parents:
diff changeset
    34
*  Class which overloads the RAlloctor functions and provides access to 
hgs
parents:
diff changeset
    35
*  the overloaded functions  
hgs
parents:
diff changeset
    36
*/
hgs
parents:
diff changeset
    37
class RAnalyzeToolAllocator : public RAnalyzeToolMemoryAllocator
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
    public:
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
        /**
hgs
parents:
diff changeset
    43
        * C++ default constructor.
hgs
parents:
diff changeset
    44
        * @param aNotFirst Is this first thread using this heap
hgs
parents:
diff changeset
    45
        * @param aStorageServer A reference to the 
hgs
parents:
diff changeset
    46
        *                       <code>RATStorageServer</code> which is 
hgs
parents:
diff changeset
    47
        *                       used to store kernel events
hgs
parents:
diff changeset
    48
        * @param aCodeblocks A reference to array of code segments
hgs
parents:
diff changeset
    49
        * @param aMutex A reference to mutex for schedule access to the 
hgs
parents:
diff changeset
    50
        *                   shared resources
hgs
parents:
diff changeset
    51
        * @param aProcessId A reference to the observed process id
hgs
parents:
diff changeset
    52
        * @param aAnalyzeTool Reference to device driver
hgs
parents:
diff changeset
    53
        * @param aStorageServerOpen Variable to check if Storage server is connected
hgs
parents:
diff changeset
    54
        * @param aLogOption The logging option for storage server
hgs
parents:
diff changeset
    55
        * @param aAllocCallStackSize Max number of stored callstack items when memory allocated
hgs
parents:
diff changeset
    56
        * @param aFreeCallStackSize Max number of stored callstack items when memory freed
hgs
parents:
diff changeset
    57
        */
hgs
parents:
diff changeset
    58
        RAnalyzeToolAllocator( TBool aNotFirst,
hgs
parents:
diff changeset
    59
                               RATStorageServer& aStorageServer, 
hgs
parents:
diff changeset
    60
                               RArray<TCodeblock>& aCodeblocks, 
hgs
parents:
diff changeset
    61
                               RMutex& aMutex, 
hgs
parents:
diff changeset
    62
                               TUint aProcessId,
hgs
parents:
diff changeset
    63
                               RAnalyzeTool& aAnalyzeTool,
hgs
parents:
diff changeset
    64
                               TBool aStorageServerOpen,
hgs
parents:
diff changeset
    65
                               TUint32 aLogOption,
hgs
parents:
diff changeset
    66
                               TUint32 aAllocCallStackSize,
hgs
parents:
diff changeset
    67
                               TUint32 aFreeCallStackSize );
hgs
parents:
diff changeset
    68
        /**
hgs
parents:
diff changeset
    69
        * Destructor.
hgs
parents:
diff changeset
    70
        */                     
hgs
parents:
diff changeset
    71
        ~RAnalyzeToolAllocator();
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
        /**
hgs
parents:
diff changeset
    74
        * Allocates a cell of specified size from the heap.
hgs
parents:
diff changeset
    75
        * @param aSize The size of the cell to be allocated from the heap. 
hgs
parents:
diff changeset
    76
        * @return TAny* A pointer to the allocated cell.
hgs
parents:
diff changeset
    77
        */
hgs
parents:
diff changeset
    78
        TAny* Alloc( TInt aSize );
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
        /**
hgs
parents:
diff changeset
    81
        * Frees the specified cell and returns it to the heap.
hgs
parents:
diff changeset
    82
        * @param aPtr A pointer to a cell to be freed.
hgs
parents:
diff changeset
    83
        */
hgs
parents:
diff changeset
    84
        void Free( TAny* aPtr );
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
        /**
hgs
parents:
diff changeset
    87
        * Increases or decreases the size of an existing cell.
hgs
parents:
diff changeset
    88
        * @param aPtr A pointer to the cell to be reallocated.
hgs
parents:
diff changeset
    89
        * @param aSize The new size of the cell. This may be bigger 
hgs
parents:
diff changeset
    90
        *              or smaller than the size of the original cell.
hgs
parents:
diff changeset
    91
        * @param aMode Flags controlling the reallocation.
hgs
parents:
diff changeset
    92
        * @return TAny* A pointer to the reallocated cell. This may be the 
hgs
parents:
diff changeset
    93
        *               same as the original pointer supplied through aCell.
hgs
parents:
diff changeset
    94
        */
hgs
parents:
diff changeset
    95
        //lint --e{1735} suppress "Virtual function has default parameter"
hgs
parents:
diff changeset
    96
        TAny* ReAlloc( TAny* aPtr, TInt aSize, TInt aMode = 0 );
hgs
parents:
diff changeset
    97
        
hgs
parents:
diff changeset
    98
        /**
hgs
parents:
diff changeset
    99
        * Gets the length of the available space in the specified 
hgs
parents:
diff changeset
   100
        * allocated cell.
hgs
parents:
diff changeset
   101
        * @param aCell A pointer to the allocated cell.
hgs
parents:
diff changeset
   102
        * @return TInt The length of the available space in the allocated cell.
hgs
parents:
diff changeset
   103
        */
hgs
parents:
diff changeset
   104
        TInt AllocLen( const TAny* aCell ) const;
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
    #ifndef __KERNEL_MODE__
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
        /**
hgs
parents:
diff changeset
   109
        * Opens this heap for shared access. Opening the heap increases 
hgs
parents:
diff changeset
   110
        * the heap's access count by one.
hgs
parents:
diff changeset
   111
        */
hgs
parents:
diff changeset
   112
        TInt Open();
hgs
parents:
diff changeset
   113
        
hgs
parents:
diff changeset
   114
        /**
hgs
parents:
diff changeset
   115
        * Closes this shared heap. Closing the heap decreases the heap's 
hgs
parents:
diff changeset
   116
        * access count by one.
hgs
parents:
diff changeset
   117
        */
hgs
parents:
diff changeset
   118
        void Close();
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
        /**
hgs
parents:
diff changeset
   121
        * The function frees excess committed space from the top of the heap.
hgs
parents:
diff changeset
   122
        * The size of the heap is never reduced below the minimum size 
hgs
parents:
diff changeset
   123
        * specified during creation of the heap.
hgs
parents:
diff changeset
   124
        * @return TInt The space reclaimed. If no space can be reclaimed, 
hgs
parents:
diff changeset
   125
                       then this value is zero.
hgs
parents:
diff changeset
   126
        */
hgs
parents:
diff changeset
   127
        TInt Compress();
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
        /**
hgs
parents:
diff changeset
   130
        * Frees all allocated cells on this heap. 
hgs
parents:
diff changeset
   131
        */
hgs
parents:
diff changeset
   132
        void Reset();
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
        /**
hgs
parents:
diff changeset
   135
        * Gets the number of cells allocated on this heap, and 
hgs
parents:
diff changeset
   136
        * the total space allocated to them.
hgs
parents:
diff changeset
   137
        * @param aTotalAllocSize On return, contains the total 
hgs
parents:
diff changeset
   138
        *                        space allocated to the cells.
hgs
parents:
diff changeset
   139
        * @return TInt The number of cells allocated on this heap.
hgs
parents:
diff changeset
   140
        */
hgs
parents:
diff changeset
   141
        TInt AllocSize( TInt& aTotalAllocSize ) const;
hgs
parents:
diff changeset
   142
        
hgs
parents:
diff changeset
   143
        /**
hgs
parents:
diff changeset
   144
        * Gets the total free space currently available on the heap and the 
hgs
parents:
diff changeset
   145
        * space available in the largest free block. The space available 
hgs
parents:
diff changeset
   146
        * represents the total space which can be allocated. Note that 
hgs
parents:
diff changeset
   147
        * compressing the heap may reduce the total free space available 
hgs
parents:
diff changeset
   148
        * and the space available in the largest free block.
hgs
parents:
diff changeset
   149
        * @param aBiggestBlock On return, contains the space available 
hgs
parents:
diff changeset
   150
        *                      in the largest free block on the heap.
hgs
parents:
diff changeset
   151
 
hgs
parents:
diff changeset
   152
        * @return TInt The total free space currently available on the heap.
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
        */
hgs
parents:
diff changeset
   155
        TInt Available( TInt& aBiggestBlock ) const;
hgs
parents:
diff changeset
   156
        
hgs
parents:
diff changeset
   157
    #endif
hgs
parents:
diff changeset
   158
hgs
parents:
diff changeset
   159
        /**
hgs
parents:
diff changeset
   160
        * Invocates specified debug funtionality.
hgs
parents:
diff changeset
   161
        * @param aFunc The debug function
hgs
parents:
diff changeset
   162
        * @param a1 Debug function specific paramenter.
hgs
parents:
diff changeset
   163
        * @param a2 Debug function specific paramenter.
hgs
parents:
diff changeset
   164
        * @return TInt Returns KErrNone, if successful otherwise one 
hgs
parents:
diff changeset
   165
        *              of the other system-wide error codes.
hgs
parents:
diff changeset
   166
        */
hgs
parents:
diff changeset
   167
        //lint --e{1735} suppress "Virtual function has default parameter"
hgs
parents:
diff changeset
   168
        TInt DebugFunction( TInt aFunc, TAny* a1 = NULL, TAny* a2 = NULL );
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
    protected:
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        /**
hgs
parents:
diff changeset
   173
        * Extension function
hgs
parents:
diff changeset
   174
        * @param aExtensionId The extension id
hgs
parents:
diff changeset
   175
        * @param a0 Extension specific paramenter.
hgs
parents:
diff changeset
   176
        * @param a1 Extension specific paramenter.
hgs
parents:
diff changeset
   177
        * @return TInt Returns KErrNone, if successful otherwise one 
hgs
parents:
diff changeset
   178
        *              of the other system-wide error codes. 
hgs
parents:
diff changeset
   179
        */
hgs
parents:
diff changeset
   180
        TInt Extension_( TUint aExtensionId, TAny*& a0, TAny* a1 );
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
    public: // from RAnalyzeToolMemoryAllocator
hgs
parents:
diff changeset
   183
        
hgs
parents:
diff changeset
   184
        /**
hgs
parents:
diff changeset
   185
        * Installs the RTraceAllocator allocator
hgs
parents:
diff changeset
   186
        */
hgs
parents:
diff changeset
   187
        void Uninstall();
hgs
parents:
diff changeset
   188
        
hgs
parents:
diff changeset
   189
        /**
hgs
parents:
diff changeset
   190
        * Shares the heap
hgs
parents:
diff changeset
   191
        */
hgs
parents:
diff changeset
   192
        void ShareHeap();
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
    private:
hgs
parents:
diff changeset
   195
    
hgs
parents:
diff changeset
   196
        /**
hgs
parents:
diff changeset
   197
        * Find the current thread which is using the heap
hgs
parents:
diff changeset
   198
        * @param aStackStart A reference where the stack start is stored
hgs
parents:
diff changeset
   199
        * @return TBool ETrue if a thread can be found, EFalse otherwise
hgs
parents:
diff changeset
   200
        */
hgs
parents:
diff changeset
   201
        TBool FindCurrentThreadStack( TUint32& aStackStart );
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    private: 
hgs
parents:
diff changeset
   204
    
hgs
parents:
diff changeset
   205
        /* Handle to the storage server*/
hgs
parents:
diff changeset
   206
        RATStorageServer& iStorageServer;
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
        /* A reference to codeblocks of the observed process */            
hgs
parents:
diff changeset
   209
        RArray<TCodeblock>& iCodeblocks;
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
        /* The mutex for serializing access to the shared resources */
hgs
parents:
diff changeset
   212
        RMutex& iMutex;
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
        /* The process id */
hgs
parents:
diff changeset
   215
        TUint iProcessId;
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
        /* Array for storing the callstack */
hgs
parents:
diff changeset
   218
        TFixedArray<TUint32, KATMaxCallstackLength> iCallStack;
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
        /* Array for storing the reallocation callstack */
hgs
parents:
diff changeset
   221
        TFixedArray <TUint32, KATMaxCallstackLength> iReCallStack;
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
        /* Array for storing the reallocation callstack */	
hgs
parents:
diff changeset
   224
        TFixedArray<TUint32, KATMaxFreeCallstackLength> iFreeCallStack;
hgs
parents:
diff changeset
   225
                
hgs
parents:
diff changeset
   226
        /* Array of threads using this heap */
hgs
parents:
diff changeset
   227
        RArray<TThreadStack> iThreadArray;
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
        RAnalyzeTool& iAnalyzeTool;
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
        /* A flag for indicating that the RATStorageServer is open */
hgs
parents:
diff changeset
   232
        TBool iStorageServerOpen;
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
        /* Log option */
hgs
parents:
diff changeset
   235
        TUint32 iLogOption;
hgs
parents:
diff changeset
   236
        
hgs
parents:
diff changeset
   237
        /* Max items on stored call stack when memory allocated */
hgs
parents:
diff changeset
   238
        TUint32 iAllocMaxCallStack;
hgs
parents:
diff changeset
   239
        
hgs
parents:
diff changeset
   240
        /* Max items on stored call stack when memory freed */
hgs
parents:
diff changeset
   241
        TUint32 iFreeMaxCallStack;
hgs
parents:
diff changeset
   242
        
hgs
parents:
diff changeset
   243
    };
hgs
parents:
diff changeset
   244
hgs
parents:
diff changeset
   245
#endif // ANALYZETOOLALLOCATOR_H
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
// End of File