| author | Tom Sutcliffe <thomas.sutcliffe@accenture.com> | 
| Tue, 07 Dec 2010 17:29:09 +0000 | |
| changeset 90 | ceac7084e2e5 | 
| parent 59 | c9dfb364c2d1 | 
| permissions | -rw-r--r-- | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1 | // heaphackery.cpp | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 2 | // | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 3 | // Copyright (c) 2010 Accenture. All rights reserved. | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 4 | // This component and the accompanying materials are made available | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 5 | // under the terms of the "Eclipse Public License v1.0" | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 6 | // which accompanies this distribution, and is available | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 7 | // at the URL "http://www.eclipse.org/legal/epl-v10.html". | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 8 | // | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 9 | // Initial Contributors: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 10 | // Accenture - Initial contribution | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 11 | // | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 12 | // Contributors: | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 13 | // Adrian Issott (Nokia) - Updates for kernel-side alloc helper | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 14 | // | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 15 | |
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 16 | #ifdef TEST_HYBRIDHEAP_ASSERTS | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 17 | #define private public | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 18 | #include <e32def.h> | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 19 | #include "slab.h" | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 20 | #include "page_alloc.h" | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 21 | #include "heap_hybrid.h" | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 22 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 23 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 24 | #include "heaputils.h" | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 25 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 26 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 27 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 28 | #include <kern_priv.h> | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 29 | #define MEM Kern | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 30 | __ASSERT_COMPILE(sizeof(LtkUtils::RUserAllocatorHelper) == 10*4); | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 31 | #define KERN_ENTER_CS() NKern::ThreadEnterCS() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 32 | #define KERN_LEAVE_CS() NKern::ThreadLeaveCS() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 33 | #define LOG(args...) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 34 | #define HUEXPORT_C | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 35 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 36 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 37 | #include <e32std.h> | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 38 | #define MEM User | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 39 | #define KERN_ENTER_CS() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 40 | #define KERN_LEAVE_CS() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 41 | //#include <e32debug.h> | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 42 | //#define LOG(args...) RDebug::Printf(args) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 43 | #define LOG(args...) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 44 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 45 | #ifdef STANDALONE_ALLOCHELPER | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 46 | #define HUEXPORT_C | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 47 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 48 | #define HUEXPORT_C EXPORT_C | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 49 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 50 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 51 | #endif // __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 52 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 53 | using LtkUtils::RAllocatorHelper; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 54 | const TUint KPageSize = 4096; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 55 | __ASSERT_COMPILE(sizeof(RAllocatorHelper) == 9*4); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 56 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 57 | // RAllocatorHelper | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 58 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 59 | HUEXPORT_C RAllocatorHelper::RAllocatorHelper() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 60 | : iAllocatorAddress(0), iAllocatorType(EUnknown), iInfo(NULL), iValidInfo(0), iTempSlabBitmap(NULL), iPageCache(NULL), iPageCacheAddr(0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 61 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 62 | , iChunk(NULL) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 63 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 64 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 65 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 66 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 67 | namespace LtkUtils | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 68 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 69 | class THeapInfo | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 70 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 71 | public: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 72 | THeapInfo() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 73 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 74 | ClearStats(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 75 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 76 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 77 | void ClearStats() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 78 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 79 | memclr(this, sizeof(THeapInfo)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 80 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 81 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 82 | TInt iAllocatedSize; // number of bytes in allocated cells (excludes free cells, cell header overhead) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 83 | TInt iCommittedSize; // amount of memory actually committed (includes cell header overhead, gaps smaller than an MMU page) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 84 | TInt iAllocationCount; // number of allocations currently | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 85 | TInt iMaxCommittedSize; // or thereabouts | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 86 | TInt iMinCommittedSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 87 | TInt iUnusedPages; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 88 | TInt iCommittedFreeSpace; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 89 | // Heap-only stats | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 90 | TInt iHeapFreeCellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 91 | // Hybrid-only stats | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 92 | TInt iDlaAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 93 | TInt iDlaAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 94 | TInt iDlaFreeSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 95 | TInt iDlaFreeCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 96 | TInt iSlabAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 97 | TInt iSlabAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 98 | TInt iPageAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 99 | TInt iPageAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 100 | TInt iSlabFreeCellSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 101 | TInt iSlabFreeCellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 102 | TInt iSlabFreeSlabSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 103 | TInt iSlabFreeSlabCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 104 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 105 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 106 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 107 | const TInt KTempBitmapSize = 256; // KMaxSlabPayload / mincellsize, technically. Close enough. | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 108 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 109 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 110 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 111 | TLinAddr LtkUtils::RAllocatorHelper::GetKernelAllocator(DChunk* aKernelChunk) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 112 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 113 | TLinAddr allocatorAddress; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 114 | #ifdef __WINS__ | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 115 | allocatorAddress = (TLinAddr)aKernelChunk->Base(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 116 | #else | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 117 | // Copied from P::KernelInfo | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 118 | const TRomHeader& romHdr=Epoc::RomHeader(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 119 | const TRomEntry* primaryEntry=(const TRomEntry*)Kern::SuperPage().iPrimaryEntry; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 120 | const TRomImageHeader* primaryImageHeader=(const TRomImageHeader*)primaryEntry->iAddressLin; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 121 | TLinAddr stack = romHdr.iKernDataAddress + Kern::RoundToPageSize(romHdr.iTotalSvDataSize); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 122 | TLinAddr heap = stack + Kern::RoundToPageSize(primaryImageHeader->iStackSize); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 123 | allocatorAddress = heap; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 124 | #endif | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 125 | return allocatorAddress; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 126 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 127 | |
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 128 | TInt RAllocatorHelper::OpenKernelHeap() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 129 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 130 | _LIT(KName, "SvHeap"); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 131 | NKern::ThreadEnterCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 132 | DObjectCon* chunkContainer = Kern::Containers()[EChunk]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 133 | chunkContainer->Wait(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 134 | const TInt chunkCount = chunkContainer->Count(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 135 | DChunk* foundChunk = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 136 | for(TInt i=0; i<chunkCount; i++) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 137 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 138 | DChunk* chunk = (DChunk*)(*chunkContainer)[i]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 139 | if (chunk->NameBuf() && chunk->NameBuf()->Find(KName) != KErrNotFound) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 140 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 141 | // Found it. No need to open it, we can be fairly confident the kernel heap isn't going to disappear from under us | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 142 | foundChunk = chunk; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 143 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 144 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 145 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 146 | iChunk = foundChunk; | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 147 | chunkContainer->Signal(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 148 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 149 | iAllocatorAddress = GetKernelAllocator(foundChunk); | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 150 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 151 | // It looks like DChunk::iBase/DChunk::iFixedBase should both be ok for the kernel chunk | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 152 | // aChunkMaxSize is only used for trying the middle of the chunk for hybrid allocatorness, and the kernel heap doesn't use that (thankfully). So we can safely pass in zero. | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 153 | TInt err = OpenChunkHeap((TLinAddr)foundChunk->Base(), 0); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 154 | |
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 155 | if (!err) err = FinishConstruction(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 156 | NKern::ThreadLeaveCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 157 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 158 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 159 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 160 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 161 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 162 | HUEXPORT_C TInt RAllocatorHelper::Open(RAllocator* aAllocator) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 163 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 164 | iAllocatorAddress = (TLinAddr)aAllocator; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 165 | TInt udeb = EuserIsUdeb(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 166 | if (udeb < 0) return udeb; // error | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 167 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 168 | TInt err = IdentifyAllocatorType(udeb); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 169 | if (!err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 170 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 171 | err = FinishConstruction(); // Allocate everything up front | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 172 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 173 | if (!err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 174 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 175 | // We always stealth our own allocations, again to avoid tripping up allocator checks | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 176 | SetCellNestingLevel(iInfo, -1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 177 | SetCellNestingLevel(iTempSlabBitmap, -1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 178 | SetCellNestingLevel(iPageCache, -1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 179 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 180 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 181 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 182 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 183 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 184 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 185 | TInt RAllocatorHelper::FinishConstruction() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 186 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 187 | TInt err = KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 188 | KERN_ENTER_CS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 189 | if (!iInfo) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 190 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 191 | iInfo = new THeapInfo; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 192 | if (!iInfo) err = KErrNoMemory; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 193 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 194 | if (!err && !iTempSlabBitmap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 195 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 196 | iTempSlabBitmap = (TUint8*)MEM::Alloc(KTempBitmapSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 197 | if (!iTempSlabBitmap) err = KErrNoMemory; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 198 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 199 | if (!err && !iPageCache) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 200 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 201 | iPageCache = MEM::Alloc(KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 202 | if (!iPageCache) err = KErrNoMemory; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 203 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 204 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 205 | if (err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 206 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 207 | delete iInfo; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 208 | iInfo = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 209 | MEM::Free(iTempSlabBitmap); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 210 | iTempSlabBitmap = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 211 | MEM::Free(iPageCache); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 212 | iPageCache = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 213 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 214 | KERN_LEAVE_CS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 215 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 216 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 217 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 218 | TInt RAllocatorHelper::ReadWord(TLinAddr aLocation, TUint32& aResult) const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 219 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 220 | // Check if we can satisfy the read from the cache | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 221 | if (aLocation >= iPageCacheAddr) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 222 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 223 | TUint offset = aLocation - iPageCacheAddr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 224 | if (offset < KPageSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 225 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 226 | aResult = ((TUint32*)iPageCache)[offset >> 2]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 227 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 228 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 229 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 230 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 231 | // If we reach here, not in page cache. Try and read in the new page | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 232 | if (iPageCache) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 233 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 234 | TLinAddr pageAddr = aLocation & ~(KPageSize-1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 235 | TInt err = ReadData(pageAddr, iPageCache, KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 236 | if (!err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 237 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 238 | iPageCacheAddr = pageAddr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 239 | aResult = ((TUint32*)iPageCache)[(aLocation - iPageCacheAddr) >> 2]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 240 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 241 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 242 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 243 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 244 | // All else fails, try just reading it uncached | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 245 | return ReadData(aLocation, &aResult, sizeof(TUint32)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 246 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 247 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 248 | TInt RAllocatorHelper::ReadByte(TLinAddr aLocation, TUint8& aResult) const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 249 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 250 | // Like ReadWord but 8-bit | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 251 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 252 | // Check if we can satisfy the read from the cache | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 253 | if (aLocation >= iPageCacheAddr) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 254 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 255 | TUint offset = aLocation - iPageCacheAddr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 256 | if (offset < KPageSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 257 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 258 | aResult = ((TUint8*)iPageCache)[offset]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 259 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 260 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 261 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 262 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 263 | // If we reach here, not in page cache. Try and read in the new page | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 264 | if (iPageCache) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 265 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 266 | TLinAddr pageAddr = aLocation & ~(KPageSize-1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 267 | TInt err = ReadData(pageAddr, iPageCache, KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 268 | if (!err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 269 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 270 | iPageCacheAddr = pageAddr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 271 | aResult = ((TUint8*)iPageCache)[(aLocation - iPageCacheAddr)]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 272 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 273 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 274 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 275 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 276 | // All else fails, try just reading it uncached | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 277 | return ReadData(aLocation, &aResult, sizeof(TUint8)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 278 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 279 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 280 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 281 | TInt RAllocatorHelper::WriteWord(TLinAddr aLocation, TUint32 aWord) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 282 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 283 | // Invalidate the page cache if necessary | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 284 | if (aLocation >= iPageCacheAddr && aLocation - iPageCacheAddr < KPageSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 285 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 286 | iPageCacheAddr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 287 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 288 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 289 | return WriteData(aLocation, &aWord, sizeof(TUint32)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 290 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 291 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 292 | TInt RAllocatorHelper::ReadData(TLinAddr aLocation, TAny* aResult, TInt aSize) const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 293 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 294 | // RAllocatorHelper base class impl is for allocators in same address space, so just copy it | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 295 | memcpy(aResult, (const TAny*)aLocation, aSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 296 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 297 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 298 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 299 | TInt RAllocatorHelper::WriteData(TLinAddr aLocation, const TAny* aData, TInt aSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 300 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 301 | memcpy((TAny*)aLocation, aData, aSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 302 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 303 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 304 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 305 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 306 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 307 | LtkUtils::RUserAllocatorHelper::RUserAllocatorHelper() | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 308 | : iThread(NULL) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 309 | 	{}
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 310 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 311 | void LtkUtils::RUserAllocatorHelper::Close() | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 312 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 313 | NKern::ThreadEnterCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 314 | if (iThread) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 315 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 316 | iThread->Close(NULL); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 317 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 318 | iThread = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 319 | RAllocatorHelper::Close(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 320 | NKern::ThreadLeaveCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 321 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 322 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 323 | TInt LtkUtils::RUserAllocatorHelper::ReadData(TLinAddr aLocation, TAny* aResult, TInt aSize) const | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 324 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 325 | return Kern::ThreadRawRead(iThread, (const TAny*)aLocation, aResult, aSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 326 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 327 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 328 | TInt LtkUtils::RUserAllocatorHelper::WriteData(TLinAddr aLocation, const TAny* aData, TInt aSize) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 329 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 330 | return Kern::ThreadRawWrite(iThread, (TAny*)aLocation, aData, aSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 331 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 332 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 333 | TInt LtkUtils::RUserAllocatorHelper::TryLock() | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 334 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 335 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 336 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 337 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 338 | void LtkUtils::RUserAllocatorHelper::TryUnlock() | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 339 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 340 | // Not supported | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 341 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 342 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 343 | TInt LtkUtils::RUserAllocatorHelper::OpenUserHeap(TUint aThreadId, TLinAddr aAllocatorAddress, TBool aEuserIsUdeb) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 344 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 345 | NKern::ThreadEnterCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 346 | DObjectCon* threads = Kern::Containers()[EThread]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 347 | threads->Wait(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 348 | iThread = Kern::ThreadFromId(aThreadId); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 349 | if (iThread && iThread->Open() != KErrNone) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 350 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 351 | // Failed to open | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 352 | iThread = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 353 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 354 | threads->Signal(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 355 | NKern::ThreadLeaveCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 356 | if (!iThread) return KErrNotFound; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 357 | iAllocatorAddress = aAllocatorAddress; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 358 | TInt err = IdentifyAllocatorType(aEuserIsUdeb); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 359 | if (err) Close(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 360 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 361 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 362 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 363 | LtkUtils::RKernelCopyAllocatorHelper::RKernelCopyAllocatorHelper() | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 364 | : iCopiedChunk(NULL), iOffset(0) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 365 | 	{}
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 366 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 367 | TInt LtkUtils::RKernelCopyAllocatorHelper::OpenCopiedHeap(DChunk* aOriginalChunk, DChunk* aCopiedChunk, TInt aOffset) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 368 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 369 | TInt err = aCopiedChunk->Open(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 370 | if (!err) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 371 | 		{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 372 | iCopiedChunk = aCopiedChunk; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 373 | iOffset = aOffset; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 374 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 375 | // We need to set iAllocatorAddress to point to the allocator in the original chunk and not the copy | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 376 | // because all the internal pointers will be relative to that. Instead we use iOffset in the Read / Write Data | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 377 | // calls | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 378 | iAllocatorAddress = GetKernelAllocator(aOriginalChunk); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 379 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 380 | // It looks like DChunk::iBase/DChunk::iFixedBase should both be ok for the kernel chunk | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 381 | // aChunkMaxSize is only used for trying the middle of the chunk for hybrid allocatorness, and the kernel heap doesn't use that (thankfully). So we can safely pass in zero. | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 382 | err = OpenChunkHeap((TLinAddr)aCopiedChunk->Base(), 0); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 383 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 384 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 385 | return err; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 386 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 387 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 388 | DChunk* LtkUtils::RKernelCopyAllocatorHelper::OpenUnderlyingChunk() | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 389 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 390 | // We should never get here | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 391 | __NK_ASSERT_ALWAYS(EFalse); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 392 | return NULL; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 393 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 394 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 395 | void LtkUtils::RKernelCopyAllocatorHelper::Close() | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 396 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 397 | if (iCopiedChunk) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 398 | 		{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 399 | NKern::ThreadEnterCS(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 400 | iCopiedChunk->Close(NULL); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 401 | iCopiedChunk = NULL; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 402 | NKern::ThreadLeaveCS(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 403 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 404 | iOffset = 0; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 405 | RAllocatorHelper::Close(); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 406 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 407 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 408 | TInt LtkUtils::RKernelCopyAllocatorHelper::ReadData(TLinAddr aLocation, TAny* aResult, TInt aSize) const | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 409 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 410 | memcpy(aResult, (const TAny*)(aLocation+iOffset), aSize); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 411 | return KErrNone; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 412 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 413 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 414 | TInt LtkUtils::RKernelCopyAllocatorHelper::WriteData(TLinAddr aLocation, const TAny* aData, TInt aSize) | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 415 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 416 | memcpy((TAny*)(aLocation+iOffset), aData, aSize); | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 417 | return KErrNone; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 418 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 419 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 420 | TInt LtkUtils::RKernelCopyAllocatorHelper::TryLock() | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 421 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 422 | return KErrNotSupported; | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 423 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 424 | |
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 425 | void LtkUtils::RKernelCopyAllocatorHelper::TryUnlock() | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 426 | 	{
 | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 427 | // Not supported | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 428 | } | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 429 | |
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 430 | #endif // __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 431 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 432 | TInt RAllocatorHelper::OpenChunkHeap(TLinAddr aChunkBase, TInt aChunkMaxSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 433 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 434 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 435 | // Must be in CS | 
| 59 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 436 | // Assumes that this only ever gets called for the kernel heap. Otherwise goes through RUserAllocatorHelper::OpenUserHeap. | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 437 | TInt udeb = EFalse; // We can't figure this out until after we've got the heap | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 438 | TBool isTheKernelHeap = ETrue; | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 439 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 440 | // Assumes the chunk isn't the kernel heap. It's not a good idea to try messing with the kernel heap from user side... | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 441 | TInt udeb = EuserIsUdeb(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 442 | if (udeb < 0) return udeb; // error | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 443 | TBool isTheKernelHeap = EFalse; | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 444 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 445 | |
| 59 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 446 | if (iAllocatorAddress == 0) | 
| 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 447 | 		{
 | 
| 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 448 | // Subclasses with more knowledge about the layout of the allocator within the chunk may have already set the iAllocatorAddress (eg kernel heap's allocator doesn't start at the chunk base) | 
| 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 449 | iAllocatorAddress = aChunkBase; | 
| 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 450 | } | 
| 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 451 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 452 | TInt err = IdentifyAllocatorType(udeb, isTheKernelHeap); | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 453 | if (err == KErrNone && iAllocatorType == EAllocator) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 454 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 455 | // We've no reason to assume it's an allocator because we don't know the iAllocatorAddress actually is an RAllocator* | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 456 | err = KErrNotFound; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 457 | } | 
| 59 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 458 | if (err && aChunkMaxSize > 0 && iAllocatorAddress == aChunkBase) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 459 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 460 | TInt oldErr = err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 461 | TAllocatorType oldType = iAllocatorType; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 462 | // Try middle of chunk, in case it's an RHybridHeap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 463 | iAllocatorAddress += aChunkMaxSize / 2; | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 464 | err = IdentifyAllocatorType(udeb, isTheKernelHeap); | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 465 | if (err || iAllocatorType == EAllocator) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 466 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 467 | // No better than before | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 468 | iAllocatorAddress = aChunkBase; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 469 | iAllocatorType = oldType; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 470 | err = oldErr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 471 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 472 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 473 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 474 | if (err == KErrNone) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 475 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 476 | // Now we know the allocator, we can figure out the udeb-ness | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 477 | RAllocator* kernelAllocator = reinterpret_cast<RAllocator*>(iAllocatorAddress); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 478 | kernelAllocator->DebugFunction(RAllocator::ESetFail, (TAny*)9999, (TAny*)0); // Use an invalid fail reason - this should have no effect on the operation of the heap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 479 | TInt err = kernelAllocator->DebugFunction(7, NULL, NULL); // 7 is RAllocator::TAllocDebugOp::EGetFail | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 480 | if (err == 9999) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 481 | 			{
 | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 482 | // udeb new hybrid heap | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 483 | udeb = ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 484 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 485 | else if (err == KErrNotSupported) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 486 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 487 | // Old heap - fall back to slightly nasty non-thread-safe method | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 488 | kernelAllocator->DebugFunction(RAllocator::ESetFail, (TAny*)RAllocator::EFailNext, (TAny*)1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 489 | TAny* res = Kern::Alloc(4); | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 490 | if (!res) udeb = ETrue; | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 491 | Kern::Free(res); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 492 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 493 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 494 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 495 | // it's new urel | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 496 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 497 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 498 | // Put everything back | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 499 | kernelAllocator->DebugFunction(RAllocator::ESetFail, (TAny*)RAllocator::ENone, (TAny*)0); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 500 | // And update the type now we know the udeb-ness for certain | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 501 | err = IdentifyAllocatorType(udeb, isTheKernelHeap); | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 502 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 503 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 504 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 505 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 506 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 507 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 508 | // The guts of RAllocatorHelper | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 509 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 510 | enum TWhatToGet | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 511 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 512 | ECommitted = 1, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 513 | EAllocated = 2, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 514 | ECount = 4, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 515 | EMaxSize = 8, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 516 | EUnusedPages = 16, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 517 | ECommittedFreeSpace = 32, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 518 | EMinSize = 64, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 519 | EHybridStats = 128, | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 520 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 521 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 522 | class RHackAllocator : public RAllocator | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 523 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 524 | public: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 525 | using RAllocator::iHandles; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 526 | using RAllocator::iTotalAllocSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 527 | using RAllocator::iCellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 528 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 529 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 530 | class RHackHeap : public RHeap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 531 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 532 | public: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 533 | // Careful, only allowed to use things that are still in the new RHeap, and are still in the same place | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 534 | using RHeap::iMaxLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 535 | using RHeap::iChunkHandle; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 536 | using RHeap::iLock; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 537 | using RHeap::iBase; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 538 | using RHeap::iAlign; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 539 | using RHeap::iTop; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 540 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 541 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 542 | const TInt KChunkSizeOffset = 30*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 543 | const TInt KPageMapOffset = 141*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 544 | //const TInt KDlOnlyOffset = 33*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 545 | const TInt KMallocStateOffset = 34*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 546 | const TInt KMallocStateTopSizeOffset = 3*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 547 | const TInt KMallocStateTopOffset = 5*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 548 | const TInt KMallocStateSegOffset = 105*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 549 | const TInt KUserHybridHeapSize = 186*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 550 | const TInt KSparePageOffset = 167*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 551 | const TInt KPartialPageOffset = 165*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 552 | const TInt KFullSlabOffset = 166*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 553 | const TInt KSlabAllocOffset = 172*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 554 | const TInt KSlabParentOffset = 1*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 555 | const TInt KSlabChild1Offset = 2*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 556 | const TInt KSlabChild2Offset = 3*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 557 | const TInt KSlabPayloadOffset = 4*4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 558 | const TInt KSlabsetSize = 4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 559 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 560 | #ifdef TEST_HYBRIDHEAP_ASSERTS | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 561 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iChunkSize) == KChunkSizeOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 562 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iPageMap) == KPageMapOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 563 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iGlobalMallocState) == KMallocStateOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 564 | __ASSERT_COMPILE(sizeof(malloc_state) == 107*4); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 565 | __ASSERT_COMPILE(_FOFF(malloc_state, iTopSize) == KMallocStateTopSizeOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 566 | __ASSERT_COMPILE(_FOFF(malloc_state, iTop) == KMallocStateTopOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 567 | __ASSERT_COMPILE(_FOFF(malloc_state, iSeg) == KMallocStateSegOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 568 | __ASSERT_COMPILE(sizeof(RHybridHeap) == KUserHybridHeapSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 569 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iSparePage) == KSparePageOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 570 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iPartialPage) == KPartialPageOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 571 | __ASSERT_COMPILE(_FOFF(RHybridHeap, iSlabAlloc) == KSlabAllocOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 572 | __ASSERT_COMPILE(_FOFF(slab, iParent) == KSlabParentOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 573 | __ASSERT_COMPILE(_FOFF(slab, iChild1) == KSlabChild1Offset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 574 | __ASSERT_COMPILE(_FOFF(slab, iChild2) == KSlabChild2Offset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 575 | __ASSERT_COMPILE(_FOFF(slab, iPayload) == KSlabPayloadOffset); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 576 | __ASSERT_COMPILE(sizeof(slabset) == KSlabsetSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 577 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 578 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 579 | TInt RAllocatorHelper::TryLock() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 580 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 581 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 582 | NKern::ThreadEnterCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 583 | DMutex* m = *(DMutex**)(iAllocatorAddress + _FOFF(RHackHeap, iLock)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 584 | if (m) Kern::MutexWait(*m); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 585 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 586 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 587 | if (iAllocatorType != EUnknown && iAllocatorType != EAllocator) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 588 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 589 | RFastLock& lock = *reinterpret_cast<RFastLock*>(iAllocatorAddress + _FOFF(RHackHeap, iLock)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 590 | lock.Wait(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 591 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 592 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 593 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 594 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 595 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 596 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 597 | void RAllocatorHelper::TryUnlock() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 598 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 599 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 600 | DMutex* m = *(DMutex**)(iAllocatorAddress + _FOFF(RHackHeap, iLock)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 601 | if (m) Kern::MutexSignal(*m); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 602 | NKern::ThreadLeaveCS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 603 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 604 | if (iAllocatorType != EUnknown && iAllocatorType != EAllocator) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 605 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 606 | RFastLock& lock = *reinterpret_cast<RFastLock*>(iAllocatorAddress + _FOFF(RHackHeap, iLock)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 607 | lock.Signal(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 608 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 609 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 610 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 611 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 612 | HUEXPORT_C void RAllocatorHelper::Close() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 613 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 614 | KERN_ENTER_CS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 615 | iAllocatorType = EUnknown; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 616 | iAllocatorAddress = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 617 | delete iInfo; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 618 | iInfo = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 619 | iValidInfo = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 620 | MEM::Free(iTempSlabBitmap); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 621 | iTempSlabBitmap = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 622 | MEM::Free(iPageCache); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 623 | iPageCache = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 624 | iPageCacheAddr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 625 | KERN_LEAVE_CS(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 626 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 627 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 628 | TInt RAllocatorHelper::IdentifyAllocatorType(TBool aAllocatorIsUdeb, TBool aIsTheKernelHeap) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 629 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 630 | iAllocatorType = EUnknown; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 631 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 632 | TUint32 handlesPtr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 633 | TInt err = ReadWord(iAllocatorAddress + _FOFF(RHackAllocator, iHandles), handlesPtr); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 634 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 635 | if (err) return err; | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 636 | if (aIsTheKernelHeap || | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 637 | handlesPtr == iAllocatorAddress + _FOFF(RHackHeap, iChunkHandle) || | 
| 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 638 | handlesPtr == iAllocatorAddress + _FOFF(RHackHeap, iLock)) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 639 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 640 | // It's an RHeap of some kind - I doubt any other RAllocator subclass will use iHandles in this way | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 641 | TUint32 base = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 642 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iBase), base); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 643 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 644 | TInt objsize = (TInt)base - (TInt)iAllocatorAddress; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 645 | if (objsize <= 32*4) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 646 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 647 | // Old RHeap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 648 | iAllocatorType = aAllocatorIsUdeb ? EUdebOldRHeap : EUrelOldRHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 649 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 650 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 651 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 652 | // new hybrid heap - bigger than the old one. Likewise figure out if udeb or urel. | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 653 | iAllocatorType = aAllocatorIsUdeb ? EUdebHybridHeap : EUrelHybridHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 654 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 655 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 656 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 657 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 658 | iAllocatorType = EAllocator; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 659 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 660 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 661 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 662 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 663 | HUEXPORT_C TInt RAllocatorHelper::SetCellNestingLevel(TAny* aCell, TInt aNestingLevel) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 664 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 665 | TInt err = KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 666 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 667 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 668 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 669 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 670 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 671 | // By this reckoning, they're in the same place amazingly | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 672 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 673 | TLinAddr nestingAddr = (TLinAddr)aCell - 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 674 | err = WriteWord(nestingAddr, aNestingLevel); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 675 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 676 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 677 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 678 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 679 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 680 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 681 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 682 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 683 | HUEXPORT_C TInt RAllocatorHelper::GetCellNestingLevel(TAny* aCell, TInt& aNestingLevel) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 684 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 685 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 686 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 687 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 688 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 689 | // By this reckoning, they're in the same place amazingly | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 690 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 691 | TLinAddr nestingAddr = (TLinAddr)aCell - 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 692 | return ReadWord(nestingAddr, (TUint32&)aNestingLevel); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 693 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 694 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 695 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 696 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 697 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 698 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 699 | TInt RAllocatorHelper::RefreshDetails(TUint aMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 700 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 701 | TInt err = FinishConstruction(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 702 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 703 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 704 | // Invalidate the page cache | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 705 | iPageCacheAddr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 706 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 707 | TryLock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 708 | err = DoRefreshDetails(aMask); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 709 | TryUnlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 710 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 711 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 712 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 713 | const TInt KHeapWalkStatsForOldHeap = (EUnusedPages|ECommittedFreeSpace); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 714 | const TInt KHeapWalkStatsForNewHeap = (EAllocated|ECount|EUnusedPages|ECommittedFreeSpace|EHybridStats); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 715 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 716 | TInt RAllocatorHelper::DoRefreshDetails(TUint aMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 717 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 718 | TInt err = KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 719 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 720 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 721 | case EUrelOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 722 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 723 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 724 | if (aMask & ECommitted) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 725 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 726 | // The old RHeap::Size() used to use iTop - iBase, which was effectively chunkSize - sizeof(RHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 727 | // I think that for CommittedSize we should include the size of the heap object, just as it includes | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 728 | // the size of heap cell metadata and overhead. Plus it makes sure the committedsize is a multiple of the page size | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 729 | TUint32 top = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 730 | //TUint32 base = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 731 | //err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iBase), base); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 732 | //if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 733 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iTop), top); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 734 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 735 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 736 | //iInfo->iCommittedSize = top - base; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 737 | iInfo->iCommittedSize = top - iAllocatorAddress; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 738 | iValidInfo |= ECommitted; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 739 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 740 | if (aMask & EAllocated) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 741 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 742 | TUint32 allocSize = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 743 | err = ReadWord(iAllocatorAddress + _FOFF(RHackAllocator, iTotalAllocSize), allocSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 744 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 745 | iInfo->iAllocatedSize = allocSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 746 | iValidInfo |= EAllocated; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 747 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 748 | if (aMask & ECount) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 749 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 750 | TUint32 count = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 751 | err = ReadWord(iAllocatorAddress + _FOFF(RHackAllocator, iCellCount), count); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 752 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 753 | iInfo->iAllocationCount = count; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 754 | iValidInfo |= ECount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 755 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 756 | if (aMask & EMaxSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 757 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 758 | TUint32 maxlen = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 759 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iMaxLength), maxlen); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 760 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 761 | iInfo->iMaxCommittedSize = maxlen; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 762 | iValidInfo |= EMaxSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 763 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 764 | if (aMask & EMinSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 765 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 766 | TUint32 minlen = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 767 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iMaxLength) - 4, minlen); // This isn't a typo! iMinLength is 4 bytes before iMaxLength, on old heap ONLY | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 768 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 769 | iInfo->iMinCommittedSize = minlen; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 770 | iValidInfo |= EMinSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 771 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 772 | if (aMask & KHeapWalkStatsForOldHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 773 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 774 | // Need a heap walk | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 775 | iInfo->ClearStats(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 776 | iValidInfo = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 777 | err = DoWalk(&WalkForStats, NULL); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 778 | if (err == KErrNone) iValidInfo |= KHeapWalkStatsForOldHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 779 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 780 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 781 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 782 | case EUrelHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 783 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 784 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 785 | TBool needWalk = EFalse; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 786 | if (aMask & ECommitted) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 787 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 788 | // RAllocator::Size uses iChunkSize - sizeof(RHybridHeap); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 789 | // We can't do exactly the same, because we can't calculate sizeof(RHybridHeap), only ROUND_UP(sizeof(RHybridHeap), iAlign) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 790 | // And if fact we don't bother and just use iChunkSize | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 791 | TUint32 chunkSize = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 792 | err = ReadWord(iAllocatorAddress + KChunkSizeOffset, chunkSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 793 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 794 | //TUint32 baseAddr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 795 | //err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iBase), baseAddr); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 796 | //if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 797 | iInfo->iCommittedSize = chunkSize; // - (baseAddr - iAllocatorAddress); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 798 | iValidInfo |= ECommitted; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 799 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 800 | if (aMask & (EAllocated|ECount)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 801 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 802 | if (iAllocatorType == EUdebHybridHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 803 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 804 | // Easy, just get them from the counter | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 805 | TUint32 totalAlloc = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 806 | err = ReadWord(iAllocatorAddress + _FOFF(RHackAllocator, iTotalAllocSize), totalAlloc); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 807 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 808 | iInfo->iAllocatedSize = totalAlloc; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 809 | iValidInfo |= EAllocated; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 810 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 811 | TUint32 cellCount = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 812 | err = ReadWord(iAllocatorAddress + _FOFF(RHackAllocator, iCellCount), cellCount); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 813 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 814 | iInfo->iAllocationCount = cellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 815 | iValidInfo |= ECount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 816 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 817 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 818 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 819 | // A heap walk is needed | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 820 | needWalk = ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 821 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 822 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 823 | if (aMask & EMaxSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 824 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 825 | TUint32 maxlen = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 826 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iMaxLength), maxlen); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 827 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 828 | iInfo->iMaxCommittedSize = maxlen; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 829 | iValidInfo |= EMaxSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 830 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 831 | if (aMask & EMinSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 832 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 833 | TUint32 minlen = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 834 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iAlign) + 4*4, minlen); // iMinLength is in different place to old RHeap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 835 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 836 | iInfo->iMinCommittedSize = minlen; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 837 | iValidInfo |= EMinSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 838 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 839 | if (aMask & (EUnusedPages|ECommittedFreeSpace|EHybridStats)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 840 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 841 | // EAllocated and ECount have already been taken care of above | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 842 | needWalk = ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 843 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 844 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 845 | if (needWalk) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 846 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 847 | iInfo->ClearStats(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 848 | iValidInfo = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 849 | err = DoWalk(&WalkForStats, NULL); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 850 | if (err == KErrNone) iValidInfo |= KHeapWalkStatsForNewHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 851 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 852 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 853 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 854 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 855 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 856 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 857 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 858 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 859 | TInt RAllocatorHelper::CheckValid(TUint aMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 860 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 861 | if ((iValidInfo & aMask) == aMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 862 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 863 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 864 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 865 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 866 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 867 | return RefreshDetails(aMask); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 868 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 869 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 870 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 871 | HUEXPORT_C TInt RAllocatorHelper::CommittedSize() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 872 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 873 | TInt err = CheckValid(ECommitted); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 874 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 875 | return iInfo->iCommittedSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 876 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 877 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 878 | HUEXPORT_C TInt RAllocatorHelper::AllocatedSize() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 879 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 880 | TInt err = CheckValid(EAllocated); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 881 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 882 | return iInfo->iAllocatedSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 883 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 884 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 885 | HUEXPORT_C TInt RAllocatorHelper::AllocationCount() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 886 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 887 | TInt err = CheckValid(ECount); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 888 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 889 | return iInfo->iAllocationCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 890 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 891 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 892 | HUEXPORT_C TInt RAllocatorHelper::RefreshDetails() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 893 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 894 | return RefreshDetails(iValidInfo); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 895 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 896 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 897 | HUEXPORT_C TInt RAllocatorHelper::MaxCommittedSize() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 898 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 899 | TInt err = CheckValid(EMaxSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 900 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 901 | return iInfo->iMaxCommittedSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 902 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 903 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 904 | HUEXPORT_C TInt RAllocatorHelper::MinCommittedSize() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 905 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 906 | TInt err = CheckValid(EMinSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 907 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 908 | return iInfo->iMinCommittedSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 909 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 910 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 911 | HUEXPORT_C TInt RAllocatorHelper::AllocCountForCell(TAny* aCell) const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 912 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 913 | TUint32 allocCount = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 914 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 915 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 916 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 917 | case EUdebHybridHeap: // Both are in the same place, amazingly | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 918 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 919 | TLinAddr allocCountAddr = (TLinAddr)aCell - 4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 920 | TInt err = ReadWord(allocCountAddr, allocCount); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 921 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 922 | return (TInt)allocCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 923 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 924 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 925 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 926 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 927 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 928 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 929 | struct SContext3 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 930 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 931 | RAllocatorHelper::TWalkFunc3 iOrigWalkFn; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 932 | TAny* iOrigContext; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 933 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 934 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 935 | TBool RAllocatorHelper::DispatchClientWalkCallback(RAllocatorHelper& aHelper, TAny* aContext, RAllocatorHelper::TExtendedCellType aCellType, TLinAddr aCellPtr, TInt aCellLength) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 936 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 937 | WalkForStats(aHelper, NULL, aCellType, aCellPtr, aCellLength); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 938 | SContext3* context = static_cast<SContext3*>(aContext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 939 | return (*context->iOrigWalkFn)(aHelper, context->iOrigContext, aCellType, aCellPtr, aCellLength); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 940 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 941 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 942 | HUEXPORT_C TInt RAllocatorHelper::Walk(TWalkFunc3 aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 943 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 944 | // Might as well take the opportunity of updating our stats at the same time as walking the heap for the client | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 945 | 	SContext3 context = { aCallbackFn, aContext };
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 946 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 947 | TInt err = FinishConstruction(); // In case this hasn't been done yet | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 948 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 949 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 950 | TryLock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 951 | err = DoWalk(&DispatchClientWalkCallback, &context); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 952 | TryUnlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 953 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 954 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 955 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 956 | TInt RAllocatorHelper::DoWalk(TWalkFunc3 aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 957 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 958 | TInt err = KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 959 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 960 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 961 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 962 | case EUrelOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 963 | err = OldSkoolWalk(aCallbackFn, aContext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 964 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 965 | case EUrelHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 966 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 967 | err = NewHotnessWalk(aCallbackFn, aContext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 968 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 969 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 970 | err = KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 971 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 972 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 973 | return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 974 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 975 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 976 | struct SContext | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 977 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 978 | RAllocatorHelper::TWalkFunc iOrigWalkFn; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 979 | TAny* iOrigContext; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 980 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 981 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 982 | struct SContext2 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 983 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 984 | RAllocatorHelper::TWalkFunc2 iOrigWalkFn; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 985 | TAny* iOrigContext; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 986 | }; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 987 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 988 | #define New2Old(aNew) (((aNew)&RAllocatorHelper::EAllocationMask) ? RAllocatorHelper::EAllocation : ((aNew)&RAllocatorHelper::EFreeMask) ? RAllocatorHelper::EFreeSpace : RAllocatorHelper::EBadness) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 989 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 990 | TBool DispatchOldTWalkFuncCallback(RAllocatorHelper& /*aHelper*/, TAny* aContext, RAllocatorHelper::TExtendedCellType aCellType, TLinAddr aCellPtr, TInt aCellLength) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 991 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 992 | SContext* context = static_cast<SContext*>(aContext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 993 | return (*context->iOrigWalkFn)(context->iOrigContext, New2Old(aCellType), aCellPtr, aCellLength); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 994 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 995 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 996 | TBool DispatchOldTWalk2FuncCallback(RAllocatorHelper& aHelper, TAny* aContext, RAllocatorHelper::TExtendedCellType aCellType, TLinAddr aCellPtr, TInt aCellLength) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 997 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 998 | SContext2* context = static_cast<SContext2*>(aContext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 999 | return (*context->iOrigWalkFn)(aHelper, context->iOrigContext, New2Old(aCellType), aCellPtr, aCellLength); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1000 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1001 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1002 | HUEXPORT_C TInt RAllocatorHelper::Walk(TWalkFunc aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1003 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1004 | // For backwards compatability insert a compatability callback to map between the different types of callback that clients requested | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1005 | 	SContext context = { aCallbackFn, aContext };
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1006 | return Walk(&DispatchOldTWalkFuncCallback, &context); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1007 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1008 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1009 | HUEXPORT_C TInt RAllocatorHelper::Walk(TWalkFunc2 aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1010 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1011 | 	SContext2 context = { aCallbackFn, aContext };
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1012 | return Walk(&DispatchOldTWalk2FuncCallback, &context); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1013 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1014 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1015 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1016 | TInt RAllocatorHelper::OldSkoolWalk(TWalkFunc3 aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1017 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1018 | TLinAddr pC = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1019 | TInt err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iBase), pC); // pC = iBase; // allocated cells | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1020 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1021 | TLinAddr pF = iAllocatorAddress + _FOFF(RHackHeap, iAlign) + 3*4; // pF = &iFree; // free cells | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1022 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1023 | TLinAddr top = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1024 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iTop), top); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1025 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1026 | const TInt KAllocatedCellHeaderSize = iAllocatorType == EUdebOldRHeap ? 12 : 4; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1027 | TInt minCell = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1028 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iAlign) + 4, (TUint32&)minCell); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1029 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1030 | TInt align = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1031 | err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iAlign), (TUint32&)align); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1032 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1033 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1034 | FOREVER | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1035 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1036 | err = ReadWord(pF+4, pF); // pF = pF->next; // next free cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1037 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1038 | TLinAddr pFnext = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1039 | if (pF) err = ReadWord(pF + 4, pFnext); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1040 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1041 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1042 | if (!pF) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1043 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1044 | pF = top; // to make size checking work | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1045 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1046 | else if (pF>=top || (pFnext && pFnext<=pF) ) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1047 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1048 | // free cell pointer off the end or going backwards | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1049 | //Unlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1050 | (*aCallbackFn)(*this, aContext, EHeapBadFreeCellAddress, pF, 0); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1051 | return KErrCorrupt; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1052 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1053 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1054 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1055 | TInt l; // = pF->len | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1056 | err = ReadWord(pF, (TUint32&)l); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1057 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1058 | if (l<minCell || (l & (align-1))) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1059 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1060 | // free cell length invalid | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1061 | //Unlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1062 | (*aCallbackFn)(*this, aContext, EHeapBadFreeCellSize, pF, l); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1063 | return KErrCorrupt; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1064 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1065 | } | 
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 1066 | |
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1067 | while (pC!=pF) // walk allocated cells up to next free cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1068 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1069 | TInt l; // pC->len; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1070 | err = ReadWord(pC, (TUint32&)l); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1071 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1072 | if (l<minCell || (l & (align-1))) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1073 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1074 | // allocated cell length invalid | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1075 | //Unlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1076 | (*aCallbackFn)(*this, aContext, EHeapBadAllocatedCellSize, pC, l); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1077 | return KErrCorrupt; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1078 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1079 | TBool shouldContinue = (*aCallbackFn)(*this, aContext, EHeapAllocation, pC + KAllocatedCellHeaderSize, l - KAllocatedCellHeaderSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1080 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1081 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1082 | //SCell* pN = __NEXT_CELL(pC); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1083 | TLinAddr pN = pC + l; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1084 | if (pN > pF) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1085 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1086 | // cell overlaps next free cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1087 | //Unlock(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1088 | (*aCallbackFn)(*this, aContext, EHeapBadAllocatedCellAddress, pC, l); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1089 | return KErrCorrupt; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1090 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1091 | pC = pN; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1092 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1093 | if (pF == top) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1094 | break; // reached end of heap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1095 | TInt pFlen = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1096 | err = ReadWord(pF, (TUint32&)pFlen); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1097 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1098 | pC = pF + pFlen; // pC = __NEXT_CELL(pF); // step to next allocated cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1099 | TBool shouldContinue = (*aCallbackFn)(*this, aContext, EHeapFreeCell, pF, pFlen); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1100 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1101 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1102 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1103 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1104 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1105 | HUEXPORT_C TInt RAllocatorHelper::CountUnusedPages() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1106 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1107 | TInt err = CheckValid(EUnusedPages); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1108 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1109 | return iInfo->iUnusedPages; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1110 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1111 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1112 | HUEXPORT_C TInt RAllocatorHelper::CommittedFreeSpace() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1113 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1114 | TInt err = CheckValid(ECommittedFreeSpace); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1115 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1116 | return iInfo->iCommittedFreeSpace; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1117 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1118 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1119 | #define ROUND_DOWN(val, pow2) ((val) & ~((pow2)-1)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1120 | #define ROUND_UP(val, pow2) ROUND_DOWN((val) + (pow2) - 1, (pow2)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1121 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1122 | HUEXPORT_C TLinAddr RAllocatorHelper::AllocatorAddress() const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1123 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1124 | return iAllocatorAddress; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1125 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1126 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1127 | TBool RAllocatorHelper::WalkForStats(RAllocatorHelper& aSelf, TAny* /*aContext*/, TExtendedCellType aType, TLinAddr aCellPtr, TInt aCellLength) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1128 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1129 | //ASSERT(aCellLength >= 0); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1130 | THeapInfo& info = *aSelf.iInfo; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1131 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1132 | TInt pagesSpanned = 0; // The number of pages that fit entirely inside the payload of this cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1133 | if ((TUint)aCellLength > KPageSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1134 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1135 | TLinAddr nextPageAlignedAddr = ROUND_UP(aCellPtr, KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1136 | pagesSpanned = ROUND_DOWN(aCellPtr + aCellLength - nextPageAlignedAddr, KPageSize) / KPageSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1137 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1138 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1139 | if (aSelf.iAllocatorType == EUrelOldRHeap || aSelf.iAllocatorType == EUdebOldRHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1140 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1141 | if (aType & EFreeMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1142 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1143 | info.iUnusedPages += pagesSpanned; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1144 | info.iCommittedFreeSpace += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1145 | info.iHeapFreeCellCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1146 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1147 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1148 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1149 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1150 | if (aType & EAllocationMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1151 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1152 | info.iAllocatedSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1153 | info.iAllocationCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1154 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1155 | else if (aType & EFreeMask) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1156 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1157 | // I *think* that DLA will decommit pages from inside free cells... | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1158 | TInt committedLen = aCellLength - (pagesSpanned * KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1159 | info.iCommittedFreeSpace += committedLen; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1160 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1161 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1162 | switch (aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1163 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1164 | case EDlaAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1165 | info.iDlaAllocsSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1166 | info.iDlaAllocsCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1167 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1168 | case EPageAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1169 | info.iPageAllocsSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1170 | info.iPageAllocsCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1171 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1172 | case ESlabAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1173 | info.iSlabAllocsSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1174 | info.iSlabAllocsCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1175 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1176 | case EDlaFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1177 | info.iDlaFreeSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1178 | info.iDlaFreeCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1179 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1180 | case ESlabFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1181 | info.iSlabFreeCellSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1182 | info.iSlabFreeCellCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1183 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1184 | case ESlabFreeSlab: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1185 | info.iSlabFreeSlabSize += aCellLength; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1186 | info.iSlabFreeSlabCount++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1187 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1188 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1189 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1190 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1191 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1192 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1193 | return ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1194 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1195 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1196 | #define PAGESHIFT 12 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1197 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1198 | TUint RAllocatorHelper::PageMapOperatorBrackets(unsigned ix, TInt& err) const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1199 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1200 | //return 1U&(iBase[ix>>3] >> (ix&7)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1201 | TUint32 basePtr = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1202 | err = ReadWord(iAllocatorAddress + KPageMapOffset, basePtr); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1203 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1204 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1205 | TUint8 res = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1206 | err = ReadByte(basePtr + (ix >> 3), res); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1207 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1208 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1209 | return 1U&(res >> (ix&7)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1210 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1211 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1212 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1213 | TInt RAllocatorHelper::PageMapFind(TUint start, TUint bit, TInt& err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1214 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1215 | TUint32 iNbits = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1216 | err = ReadWord(iAllocatorAddress + KPageMapOffset + 4, iNbits); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1217 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1218 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1219 | if (start<iNbits) do | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1220 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1221 | //if ((*this)[start]==bit) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1222 | if (PageMapOperatorBrackets(start, err) == bit || err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1223 | return start; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1224 | } while (++start<iNbits); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1225 | return -1; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1226 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1227 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1228 | TUint RAllocatorHelper::PagedDecode(TUint pos, TInt& err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1229 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1230 | unsigned bits = PageMapBits(pos,2,err); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1231 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1232 | bits >>= 1; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1233 | if (bits == 0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1234 | return 1; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1235 | bits = PageMapBits(pos+2,2,err); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1236 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1237 | if ((bits & 1) == 0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1238 | return 2 + (bits>>1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1239 | else if ((bits>>1) == 0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1240 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1241 | return PageMapBits(pos+4, 4,err); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1242 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1243 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1244 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1245 | return PageMapBits(pos+4, 18,err); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1246 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1247 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1248 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1249 | TUint RAllocatorHelper::PageMapBits(unsigned ix, unsigned len, TInt& err) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1250 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1251 | int l=len; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1252 | unsigned val=0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1253 | unsigned bit=0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1254 | while (--l>=0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1255 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1256 | //val |= (*this)[ix++]<<bit++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1257 | val |= PageMapOperatorBrackets(ix++, err) << bit++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1258 | if (err) return 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1259 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1260 | return val; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1261 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1262 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1263 | enum TSlabType { ESlabFullInfo, ESlabPartialInfo, ESlabEmptyInfo };
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1264 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1265 | #ifndef TEST_HYBRIDHEAP_ASSERTS | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1266 | #define MAXSLABSIZE 56 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1267 | #define SLABSHIFT 10 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1268 | #define SLABSIZE (1 << SLABSHIFT) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1269 | const TInt KMaxSlabPayload = SLABSIZE - KSlabPayloadOffset; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1270 | #endif | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1271 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1272 | TInt RAllocatorHelper::NewHotnessWalk(TWalkFunc3 aCallbackFn, TAny* aContext) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1273 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1274 | // RHybridHeap does paged, slab then DLA, so that's what we do too | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1275 | // Remember Kernel RHybridHeaps don't even have the page and slab members | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1276 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1277 | TUint32 basePtr; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1278 | TInt err = ReadWord(iAllocatorAddress + _FOFF(RHackHeap, iBase), basePtr); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1279 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1280 | if (basePtr < iAllocatorAddress + KUserHybridHeapSize) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1281 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1282 | // Must be a kernel one - don't do page and slab | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1283 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1284 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1285 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1286 | // Paged | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1287 | TUint32 membase = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1288 | err = ReadWord(iAllocatorAddress + KPageMapOffset + 8, membase); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1289 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1290 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1291 | TBool shouldContinue = ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1292 | for (int ix = 0;(ix = PageMapFind(ix,1,err)) >= 0 && err == KErrNone;) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1293 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1294 | int npage = PagedDecode(ix, err); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1295 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1296 | // Introduce paged buffer to the walk function | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1297 | TLinAddr bfr = membase + (1 << (PAGESHIFT-1))*ix; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1298 | int len = npage << PAGESHIFT; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1299 | if ( (TUint)len > KPageSize ) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1300 | 				{ // If buffer is not larger than one page it must be a slab page mapped into bitmap
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1301 | if (iAllocatorType == EUdebHybridHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1302 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1303 | bfr += 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1304 | len -= 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1305 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1306 | shouldContinue = (*aCallbackFn)(*this, aContext, EPageAllocation, bfr, len); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1307 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1308 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1309 | ix += (npage<<1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1310 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1311 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1312 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1313 | // Slab | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1314 | TUint32 sparePage = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1315 | err = ReadWord(iAllocatorAddress + KSparePageOffset, sparePage); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1316 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1317 | if (sparePage) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1318 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1319 | //Walk(wi, iSparePage, iPageSize, EGoodFreeCell, ESlabSpare); // Introduce Slab spare page to the walk function | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1320 | // This counts as 4 spare slabs | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1321 | for (TInt i = 0; i < 4; i++) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1322 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1323 | shouldContinue = (*aCallbackFn)(*this, aContext, ESlabFreeSlab, sparePage + SLABSIZE*i, SLABSIZE); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1324 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1325 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1326 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1327 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1328 | //TreeWalk(&iFullSlab, &SlabFullInfo, i, wi); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1329 | TInt err = TreeWalk(iAllocatorAddress + KFullSlabOffset, ESlabFullInfo, aCallbackFn, aContext, shouldContinue); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1330 | if (err || !shouldContinue) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1331 | for (int ix = 0; ix < (MAXSLABSIZE>>2); ++ix) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1332 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1333 | TUint32 partialAddr = iAllocatorAddress + KSlabAllocOffset + ix*KSlabsetSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1334 | //TreeWalk(&iSlabAlloc[ix].iPartial, &SlabPartialInfo, i, wi); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1335 | err = TreeWalk(partialAddr, ESlabPartialInfo, aCallbackFn, aContext, shouldContinue); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1336 | if (err || !shouldContinue) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1337 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1338 | //TreeWalk(&iPartialPage, &SlabEmptyInfo, i, wi); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1339 | TreeWalk(iAllocatorAddress + KPartialPageOffset, ESlabEmptyInfo, aCallbackFn, aContext, shouldContinue); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1340 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1341 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1342 | // DLA | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1343 | #define CHUNK_OVERHEAD (sizeof(TUint)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1344 | #define CHUNK_ALIGN_MASK (7) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1345 | #define CHUNK2MEM(p) ((TLinAddr)(p) + 8) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1346 | #define MEM2CHUNK(mem) ((TLinAddr)(p) - 8) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1347 | /* chunk associated with aligned address A */ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1348 | #define ALIGN_OFFSET(A)\ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1349 | ((((TLinAddr)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1350 | ((8 - ((TLinAddr)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1351 | #define ALIGN_AS_CHUNK(A) ((A) + ALIGN_OFFSET(CHUNK2MEM(A))) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1352 | #define CINUSE_BIT 2 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1353 | #define INUSE_BITS 3 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1354 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1355 | TUint32 topSize = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1356 | err = ReadWord(iAllocatorAddress + KMallocStateOffset + KMallocStateTopSizeOffset, topSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1357 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1358 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1359 | TUint32 top = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1360 | err = ReadWord(iAllocatorAddress + KMallocStateOffset + KMallocStateTopOffset, top); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1361 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1362 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1363 | TInt max = ((topSize-1) & ~CHUNK_ALIGN_MASK) - CHUNK_OVERHEAD; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1364 | if ( max < 0 ) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1365 | max = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1366 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1367 | TBool shouldContinue = (*aCallbackFn)(*this, aContext, EDlaFreeCell, top, max); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1368 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1369 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1370 | TUint32 mallocStateSegBase = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1371 | err = ReadWord(iAllocatorAddress + KMallocStateOffset + KMallocStateSegOffset, mallocStateSegBase); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1372 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1373 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1374 | for (TLinAddr q = ALIGN_AS_CHUNK(mallocStateSegBase); q != top; /*q = NEXT_CHUNK(q)*/) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1375 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1376 | TUint32 qhead = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1377 | err = ReadWord(q + 4, qhead); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1378 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1379 | //TInt sz = CHUNKSIZE(q); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1380 | TInt sz = qhead & ~(INUSE_BITS); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1381 | if (!(qhead & CINUSE_BIT)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1382 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1383 | //Walk(wi, CHUNK2MEM(q), sz, EGoodFreeCell, EDougLeaAllocator); // Introduce DL free buffer to the walk function | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1384 | shouldContinue = (*aCallbackFn)(*this, aContext, EDlaFreeCell, CHUNK2MEM(q), sz); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1385 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1386 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1387 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1388 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1389 | //Walk(wi, CHUNK2MEM(q), (sz- CHUNK_OVERHEAD), EGoodAllocatedCell, EDougLeaAllocator); // Introduce DL allocated buffer to the walk function | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1390 | TLinAddr addr = CHUNK2MEM(q); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1391 | TInt size = sz - CHUNK_OVERHEAD; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1392 | if (iAllocatorType == EUdebHybridHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1393 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1394 | size -= 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1395 | addr += 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1396 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1397 | shouldContinue = (*aCallbackFn)(*this, aContext, EDlaAllocation, addr, size); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1398 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1399 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1400 | // This is q = NEXT_CHUNK(q) expanded | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1401 | q = q + sz; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1402 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1403 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1404 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1405 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1406 | TInt RAllocatorHelper::TreeWalk(TUint32 aSlabRoot, TInt aSlabType, TWalkFunc3 aCallbackFn, TAny* aContext, TBool& shouldContinue) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1407 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1408 | const TSlabType type = (TSlabType)aSlabType; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1409 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1410 | TUint32 s = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1411 | TInt err = ReadWord(aSlabRoot, s); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1412 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1413 | //slab* s = *root; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1414 | if (!s) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1415 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1416 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1417 | for (;;) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1418 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1419 | //slab* c; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1420 | //while ((c = s->iChild1) != 0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1421 | // s = c; // walk down left side to end | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1422 | TUint32 c; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1423 | for(;;) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1424 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1425 | err = ReadWord(s + KSlabChild1Offset, c); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1426 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1427 | if (c == 0) break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1428 | else s = c; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1429 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1430 | for (;;) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1431 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1432 | //TODOf(s, i, wi); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1433 | //TODO __HEAP_CORRUPTED_TEST_STATIC | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1434 | TUint32 h; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1435 | err = ReadWord(s, h); // = aSlab->iHeader; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1436 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1437 | TUint32 size = (h&0x0003f000)>>12; //SlabHeaderSize(h); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1438 | TUint debugheadersize = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1439 | if (iAllocatorType == EUdebHybridHeap) debugheadersize = 8; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1440 | TUint32 usedCount = (((h&0x0ffc0000)>>18) + 4) / size; // (SlabHeaderUsedm4(h) + 4) / size; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1441 | switch (type) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1442 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1443 | case ESlabFullInfo: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1444 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1445 | TUint32 count = usedCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1446 | TUint32 i = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1447 | while ( i < count ) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1448 | 						{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1449 | TUint32 addr = s + KSlabPayloadOffset + i*size; //&aSlab->iPayload[i*size]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1450 | shouldContinue = (*aCallbackFn)(*this, aContext, ESlabAllocation, addr + debugheadersize, size - debugheadersize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1451 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1452 | i++; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1453 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1454 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1455 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1456 | case ESlabPartialInfo: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1457 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1458 | //TODO __HEAP_CORRUPTED_TEST_STATIC | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1459 | TUint32 count = KMaxSlabPayload / size; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1460 | TUint32 freeOffset = (h & 0xff) << 2; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1461 | if (freeOffset == 0) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1462 | 						{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1463 | // TODO Shouldn't happen for a slab on the partial list | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1464 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1465 | memset(iTempSlabBitmap, 1, KTempBitmapSize); // Everything defaults to in use | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1466 | TUint wildernessCount = count - usedCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1467 | while (freeOffset) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1468 | 						{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1469 | wildernessCount--; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1470 | TInt idx = (freeOffset-KSlabPayloadOffset)/size; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1471 | 						LOG("iTempSlabBitmap freeOffset %d index %d", freeOffset, idx);
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1472 | iTempSlabBitmap[idx] = 0; // Mark it as free | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1473 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1474 | TUint32 addr = s + freeOffset; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1475 | TUint8 nextCell = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1476 | err = ReadByte(addr, nextCell); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1477 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1478 | freeOffset = ((TUint32)nextCell) << 2; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1479 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1480 | memset(iTempSlabBitmap + count - wildernessCount, 0, wildernessCount); // Mark the wilderness as free | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1481 | for (TInt i = 0; i < count; i++) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1482 | 						{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1483 | TLinAddr addr = s + KSlabPayloadOffset + i*size; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1484 | if (iTempSlabBitmap[i]) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1485 | 							{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1486 | // In use | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1487 | shouldContinue = (*aCallbackFn)(*this, aContext, ESlabAllocation, addr + debugheadersize, size - debugheadersize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1488 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1489 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1490 | 							{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1491 | // Free | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1492 | shouldContinue = (*aCallbackFn)(*this, aContext, ESlabFreeCell, addr, size); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1493 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1494 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1495 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1496 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1497 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1498 | case ESlabEmptyInfo: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1499 | 					{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1500 | // Check which slabs of this page are empty | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1501 | TUint32 pageAddr = ROUND_DOWN(s, KPageSize); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1502 | TUint32 headerForPage = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1503 | err = ReadWord(pageAddr, headerForPage); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1504 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1505 | TUint32 slabHeaderPageMap = (headerForPage & 0x00000f00)>>8; // SlabHeaderPagemap(unsigned h) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1506 | for (TInt slabIdx = 0; slabIdx < 4; slabIdx++) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1507 | 						{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1508 | if (slabHeaderPageMap & (1<<slabIdx)) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1509 | 							{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1510 | TUint32 addr = pageAddr + SLABSIZE*slabIdx + KSlabPayloadOffset; //&aSlab->iPayload[i*size]; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1511 | shouldContinue = (*aCallbackFn)(*this, aContext, ESlabFreeSlab, addr, KMaxSlabPayload); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1512 | if (!shouldContinue) return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1513 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1514 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1515 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1516 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1517 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1518 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1519 | //c = s->iChild2; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1520 | err = ReadWord(s + KSlabChild2Offset, c); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1521 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1522 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1523 | if (c) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1524 | 				{	// one step down right side, now try and walk down left
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1525 | s = c; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1526 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1527 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1528 | for (;;) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1529 | 				{	// loop to walk up right side
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1530 | TUint32 pp = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1531 | err = ReadWord(s + KSlabParentOffset, pp); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1532 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1533 | //slab** pp = s->iParent; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1534 | if (pp == aSlabRoot) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1535 | return KErrNone; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1536 | #define SlabFor(x) ROUND_DOWN(x, SLABSIZE) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1537 | s = SlabFor(pp); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1538 | //if (pp == &s->iChild1) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1539 | if (pp == s + KSlabChild1Offset) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1540 | break; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1541 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1542 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1543 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1544 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1545 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 1546 | // Really should be called TotalSizeForCellType(...) | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1547 | HUEXPORT_C TInt RAllocatorHelper::SizeForCellType(TExtendedCellType aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1548 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1549 | if (aType & EBadnessMask) return KErrArgument; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1550 | if (aType == EAllocationMask) return AllocatedSize(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1551 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1552 | if (iAllocatorType == EUdebOldRHeap || iAllocatorType == EUrelOldRHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1553 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1554 | switch (aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1555 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1556 | case EHeapAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1557 | return AllocatedSize(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1558 | case EHeapFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1559 | case EFreeMask: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1560 | return CommittedFreeSpace(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1561 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1562 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1563 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1564 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1565 | else if (iAllocatorType == EUrelHybridHeap || iAllocatorType == EUdebHybridHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1566 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1567 | TInt err = CheckValid(EHybridStats); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1568 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1569 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1570 | switch (aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1571 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1572 | case EHeapAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1573 | case EHeapFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1574 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1575 | case EDlaAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1576 | return iInfo->iDlaAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1577 | case EPageAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1578 | return iInfo->iPageAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1579 | case ESlabAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1580 | return iInfo->iSlabAllocsSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1581 | case EDlaFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1582 | return iInfo->iDlaFreeSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1583 | case ESlabFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1584 | return iInfo->iSlabFreeCellSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1585 | case ESlabFreeSlab: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1586 | return iInfo->iSlabFreeSlabSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1587 | case EFreeMask: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1588 | // Note this isn't the same as asking for CommittedFreeSpace(). SizeForCellType(EFreeMask) may include decommitted pages that lie inside a free cell | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1589 | return iInfo->iDlaFreeSize + iInfo->iSlabFreeCellSize + iInfo->iSlabFreeSlabSize; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1590 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1591 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1592 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1593 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1594 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1595 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1596 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1597 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1598 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1599 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1600 | HUEXPORT_C TInt RAllocatorHelper::CountForCellType(TExtendedCellType aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1601 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1602 | if (aType & EBadnessMask) return KErrArgument; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1603 | if (aType == EAllocationMask) return AllocationCount(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1604 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1605 | if (iAllocatorType == EUdebOldRHeap || iAllocatorType == EUrelOldRHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1606 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1607 | switch (aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1608 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1609 | case EHeapAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1610 | return AllocationCount(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1611 | case EHeapFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1612 | case EFreeMask: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1613 | 				{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1614 | TInt err = CheckValid(ECommittedFreeSpace); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1615 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1616 | return iInfo->iHeapFreeCellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1617 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1618 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1619 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1620 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1621 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1622 | else if (iAllocatorType == EUrelHybridHeap || iAllocatorType == EUdebHybridHeap) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1623 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1624 | TInt err = CheckValid(EHybridStats); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1625 | if (err) return err; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1626 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1627 | switch (aType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1628 | 			{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1629 | case EHeapAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1630 | case EHeapFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1631 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1632 | case EDlaAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1633 | return iInfo->iDlaAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1634 | case EPageAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1635 | return iInfo->iPageAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1636 | case ESlabAllocation: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1637 | return iInfo->iSlabAllocsCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1638 | case EDlaFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1639 | return iInfo->iDlaFreeCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1640 | case ESlabFreeCell: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1641 | return iInfo->iSlabFreeCellCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1642 | case ESlabFreeSlab: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1643 | return iInfo->iSlabFreeSlabCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1644 | case EFreeMask: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1645 | // This isn't a hugely meaningful value, but if that's what they asked for... | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1646 | return iInfo->iDlaFreeCount + iInfo->iSlabFreeCellCount + iInfo->iSlabFreeSlabCount; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1647 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1648 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1649 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1650 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1651 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1652 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1653 | return KErrNotSupported; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1654 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1655 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1656 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1657 | HUEXPORT_C TBool LtkUtils::RAllocatorHelper::AllocatorIsUdeb() const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1658 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1659 | return iAllocatorType == EUdebOldRHeap || iAllocatorType == EUdebHybridHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1660 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1661 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1662 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1663 | HUEXPORT_C const TDesC& LtkUtils::RAllocatorHelper::Description() const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1664 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1665 | _LIT(KRHeap, "RHeap"); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1666 | _LIT(KRHybridHeap, "RHybridHeap"); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1667 | _LIT(KUnknown, "Unknown"); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1668 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1669 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1670 | case EUrelOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1671 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1672 | return KRHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1673 | case EUrelHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1674 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1675 | return KRHybridHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1676 | case EAllocator: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1677 | case EUnknown: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1678 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1679 | return KUnknown; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1680 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1681 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1682 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1683 | #ifdef __KERNEL_MODE__ | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1684 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1685 | DChunk* LtkUtils::RAllocatorHelper::OpenUnderlyingChunk() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1686 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1687 | // Enter and leave in CS and with no locks held. On exit the returned DChunk has been Open()ed. | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1688 | TInt err = iChunk->Open(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1689 | if (err) return NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1690 | return iChunk; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1691 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1692 | |
| 53 
17466b56148d
Integrated AdrianI's fixes & updates to kernel-side RAllocatorHelper. Fixed terminalkeyboardcons build on TB9.2 baselines.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
0diff
changeset | 1693 | DChunk* LtkUtils::RUserAllocatorHelper::OpenUnderlyingChunk() | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1694 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1695 | if (iAllocatorType != EUrelOldRHeap && iAllocatorType != EUdebOldRHeap && iAllocatorType != EUrelHybridHeap && iAllocatorType != EUdebHybridHeap) return NULL; | 
| 59 
c9dfb364c2d1
Fixed chunkinfo and RAllocatorHelper crashes.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: 
53diff
changeset | 1696 | // Note RUserAllocatorHelper doesn't use or access RAllocatorHelper::iChunk, because we figure out the chunk handle in a different way. | 
| 0 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1697 | // It is for this reason that iChunk is private, to remove temptation | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1698 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1699 | // Enter and leave in CS and with no locks held. On exit the returned DChunk has been Open()ed. | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1700 | TUint32 chunkHandle = 0; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1701 | TInt err = ReadData(iAllocatorAddress + _FOFF(RHackHeap, iChunkHandle), &chunkHandle, sizeof(TUint32)); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1702 | if (err) return NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1703 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1704 | NKern::LockSystem(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1705 | DChunk* result = (DChunk*)Kern::ObjectFromHandle(iThread, chunkHandle, EChunk); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1706 | if (result && result->Open() != KErrNone) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1707 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1708 | result = NULL; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1709 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1710 | NKern::UnlockSystem(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1711 | return result; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1712 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1713 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1714 | LtkUtils::RAllocatorHelper::TType LtkUtils::RAllocatorHelper::GetType() const | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1715 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1716 | switch (iAllocatorType) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1717 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1718 | case EUrelOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1719 | case EUdebOldRHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1720 | return ETypeRHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1721 | case EUrelHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1722 | case EUdebHybridHeap: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1723 | return ETypeRHybridHeap; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1724 | case EAllocator: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1725 | case EUnknown: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1726 | default: | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1727 | return ETypeUnknown; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1728 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1729 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1730 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1731 | #else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1732 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1733 | TInt LtkUtils::RAllocatorHelper::EuserIsUdeb() | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1734 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1735 | TAny* buf = User::Alloc(4096); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1736 | if (!buf) return KErrNoMemory; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1737 | RAllocator* dummyHeap = UserHeap::FixedHeap(buf, 4096, 4, ETrue); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1738 | if (!dummyHeap) return KErrNoMemory; // Don't think this can happen | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1739 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1740 | dummyHeap->__DbgSetAllocFail(RAllocator::EFailNext, 1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1741 | TAny* ptr = dummyHeap->Alloc(4); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1742 | // Because we specified singleThreaded=ETrue we can allow dummyHeap to just go out of scope here | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1743 | User::Free(buf); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1744 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1745 | if (ptr) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1746 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1747 | // Clearly the __DbgSetAllocFail had no effect so we must be urel | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1748 | // We don't need to free ptr because it came from the dummy heap | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1749 | return EFalse; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1750 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1751 | else | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1752 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1753 | return ETrue; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1754 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1755 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1756 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1757 | #ifndef STANDALONE_ALLOCHELPER | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1758 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1759 | #include <fshell/ltkutils.h> | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1760 | HUEXPORT_C void LtkUtils::MakeHeapCellInvisible(TAny* aCell) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1761 | 	{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1762 | RAllocatorHelper helper; | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1763 | TInt err = helper.Open(&User::Allocator()); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1764 | if (err == KErrNone) | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1765 | 		{
 | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1766 | helper.SetCellNestingLevel(aCell, -1); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1767 | helper.Close(); | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1768 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1769 | } | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1770 | #endif // STANDALONE_ALLOCHELPER | 
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1771 | |
| 
7f656887cf89
First submission to Symbian Foundation staging server.
 Tom Sutcliffe <thomas.sutcliffe@accenture.com> parents: diff
changeset | 1772 | #endif |