kerneltest/e32test/mmu/t_ramall.cpp
author hgs
Mon, 10 May 2010 11:40:53 +0100
changeset 132 e4a7b1cbe40c
parent 31 56f325a607ea
child 176 af6ec97d9189
permissions -rw-r--r--
201019_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     2
// All rights reserved.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     3
// This component and the accompanying materials are made available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     5
// which accompanies this distribution, and is available
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     7
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     8
// Initial Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    10
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    11
// Contributors:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    12
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    13
// Description:
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    14
// e32test\mmu\t_ramall.cpp
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    15
// 
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    16
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    17
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    18
#define __E32TEST_EXTENSION__
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    19
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    20
#include <e32test.h>
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    21
#include <e32uid.h>
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    22
#include <e32hal.h>
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    23
#include <dptest.h>
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    24
#include "d_shadow.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    25
#include "mmudetect.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    26
#include "freeram.h"
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    27
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    28
LOCAL_D RTest test(_L("T_RAMALL"));
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    29
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    30
_LIT(KLddFileName,"D_SHADOW.LDD");
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    31
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    32
TInt PageSize;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    33
TInt PageShift;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    34
RShadow Shadow;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    35
TInt InitFreeRam;
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    36
RChunk Chunk;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    37
TUint ChunkCommitEnd;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    38
RThread TouchThread;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    39
TRequestStatus TouchStatus;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    40
TBool TouchDataStop;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    41
RThread FragThread;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    42
TRequestStatus FragStatus;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    43
TBool FragThreadStop;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    44
TBool ManualTest;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    45
TBool CacheSizeAdjustable;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    46
TUint OrigMinCacheSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
    47
TUint OrigMaxCacheSize;
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    48
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    49
TInt AllocPhysicalRam(TUint32& aAddr, TInt aSize, TInt aAlign)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    50
	{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    51
	return Shadow.AllocPhysicalRam(aAddr,aSize,aAlign);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    52
	}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    53
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    54
TInt FreePhysicalRam(TUint32 aAddr, TInt aSize)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    55
	{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    56
	return Shadow.FreePhysicalRam(aAddr,aSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    57
	}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    58
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    59
TInt ClaimPhysicalRam(TUint32 aAddr, TInt aSize)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    60
	{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    61
	return Shadow.ClaimPhysicalRam(aAddr,aSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    62
	}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    63
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    64
void TestAlignedAllocs()
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    65
	{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    66
	TInt align;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    67
	TInt size;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    68
	for (align=PageShift; align<=20; ++align)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    69
		{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    70
		for (size=PageSize; size<=0x100000; size+=PageSize)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    71
			{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    72
			TInt free=FreeRam();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    73
			TUint32 pa=0;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    74
			TInt r=AllocPhysicalRam(pa,size,align);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    75
			test.Printf(_L("Size %08x Align %d r=%d pa=%08x\n"),size,align,r,pa);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    76
			if (r==KErrNone)
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    77
				{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    78
				TUint32 as=1u<<align;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    79
				TUint32 am=as-1;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    80
				test(FreeRam()==free-size);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    81
				test((pa&am)==0);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    82
				r=FreePhysicalRam(pa,size);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    83
				test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    84
				}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    85
			test(FreeRam()==free);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    86
			}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    87
		}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    88
	}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    89
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    90
void TestClaimPhys()
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    91
	{
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    92
	TInt free=FreeRam();
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    93
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    94
	TUint32 pa=0;
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    95
	TInt r=AllocPhysicalRam(pa,4*PageSize,0);	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    96
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    97
	test(FreeRam()==free-4*PageSize);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
    98
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
    99
	r=FreePhysicalRam(pa,4*PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   100
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   101
	test(FreeRam()==free);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   102
	
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   103
	r=ClaimPhysicalRam(pa,4*PageSize);	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   104
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   105
	test(FreeRam()==free-4*PageSize);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   106
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   107
	r=FreePhysicalRam(pa,3*PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   108
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   109
	test(FreeRam()==free-PageSize);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   110
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   111
	r=ClaimPhysicalRam(pa,4*PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   112
	test(r==KErrInUse);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   113
	test(FreeRam()==free-PageSize);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   114
	
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   115
#ifdef MANUAL_PANIC_TEST
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   116
//This section of the test should be run as a manual test as it results in
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   117
// a panic due to attempting to Free an unclaimed page
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   118
	if (HaveVirtMem())
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   119
		{
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   120
		test.Printf(_L("HaveVirtMem() \n"));
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   121
		r=FreePhysicalRam(pa,4*PageSize);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   122
		test.Printf(_L("FreePhysicalRam() \n"));
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   123
		test(r==KErrGeneral);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   124
		test(FreeRam()==free-PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   125
		}
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   126
#endif
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   127
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   128
	r=FreePhysicalRam(pa+3*PageSize,PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   129
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   130
	test(FreeRam()==free);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   131
	
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   132
	}
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   133
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   134
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   135
struct SPhysAllocData
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   136
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   137
	TUint iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   138
	TUint iAlign;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   139
	TBool iCheckMaxAllocs;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   140
	TBool iCheckFreeRam;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   141
	};
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   142
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   143
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   144
TInt FillPhysicalRam(TAny* aArgs)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   145
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   146
	SPhysAllocData& allocData = *((SPhysAllocData*)aArgs);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   147
	TUint maxAllocs = FreeRam() / allocData.iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   148
	TUint32* physAddrs = new TUint32[maxAllocs + 1];
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   149
	if (!physAddrs)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   150
		return KErrNoMemory;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   151
	TUint32* pa = physAddrs;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   152
	TUint32 alignMask = (1 << allocData.iAlign) - 1;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   153
	TUint initialFreeRam = FreeRam();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   154
	TInt r = KErrNone;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   155
	TUint allocations = 0;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   156
	for(; allocations <= maxAllocs; ++allocations)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   157
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   158
		TUint freeRam = FreeRam();			
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   159
		r = AllocPhysicalRam(*pa, allocData.iSize, allocData.iAlign);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   160
		if (r != KErrNone)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   161
			break;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   162
		if (*pa++ & alignMask)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   163
			{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   164
			r = KErrGeneral;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   165
			RDebug::Printf("Error alignment phys addr 0x%08x", *(pa - 1));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   166
			break;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   167
			}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   168
		if (allocData.iCheckFreeRam && freeRam - allocData.iSize != (TUint)FreeRam())
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   169
			{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   170
			r = KErrGeneral;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   171
			RDebug::Printf("Error in free ram 0x%08x orig 0x%08x", FreeRam(), freeRam);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   172
			break;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   173
			}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   174
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   175
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   176
	TUint32* physEnd = pa;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   177
	TBool failFrees = EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   178
	for (pa = physAddrs; pa < physEnd; pa++)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   179
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   180
		if (FreePhysicalRam(*pa, allocData.iSize) != KErrNone)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   181
			failFrees = ETrue;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   182
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   183
	if (failFrees)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   184
		r = KErrNotFound;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   185
	if (allocData.iCheckMaxAllocs && allocations > maxAllocs)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   186
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   187
		r = KErrOverflow;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   188
		RDebug::Printf("Error able to allocate too many pages");
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   189
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   190
	if (allocData.iCheckFreeRam && initialFreeRam != (TUint)FreeRam())
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   191
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   192
		r = KErrGeneral;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   193
		RDebug::Printf("Error in free ram 0x%08x initial 0x%08x", FreeRam(), initialFreeRam);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   194
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   195
	delete[] physAddrs;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   196
	if (r != KErrNone && r != KErrNoMemory)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   197
		return r;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   198
	TUint possibleAllocs = initialFreeRam / allocData.iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   199
	if (allocData.iCheckMaxAllocs && possibleAllocs != allocations)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   200
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   201
		RDebug::Printf("Error in number of allocations possibleAllocs %d allocations %d", possibleAllocs, allocations);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   202
		return KErrGeneral;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   203
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   204
	return allocations;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   205
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   206
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   207
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   208
void TestMultipleContiguousAllocations(TUint aNumThreads, TUint aSize, TUint aAlign)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   209
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   210
	test.Printf(_L("TestMultiContig threads %d size 0x%x, align %d\n"), aNumThreads, aSize, aAlign);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   211
	SPhysAllocData allocData;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   212
	allocData.iSize = aSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   213
	allocData.iAlign = aAlign;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   214
	allocData.iCheckMaxAllocs = EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   215
	allocData.iCheckFreeRam = EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   216
	// Start several threads all contiguous allocating memory.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   217
	RThread* threads = new RThread[aNumThreads];
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   218
	TRequestStatus* status = new TRequestStatus[aNumThreads];
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   219
	TUint i = 0;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   220
	for (; i < aNumThreads; i++)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   221
		{// Need enough heap to store addr of every possible allocation + 1.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   222
		TUint requiredHeapMax = Max(PageSize, ((InitFreeRam / aSize) / sizeof(TUint32)) + sizeof(TUint32));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   223
		TInt r = threads[i].Create(KNullDesC, FillPhysicalRam, KDefaultStackSize, PageSize, requiredHeapMax, (TAny*)&allocData);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   224
		test_KErrNone(r);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   225
		threads[i].Logon(status[i]);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   226
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   227
	for (i = 0; i < aNumThreads; i++)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   228
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   229
		threads[i].Resume();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   230
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   231
	for (i = 0; i < aNumThreads; i++)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   232
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   233
		User::WaitForRequest(status[i]);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   234
		test_Equal(EExitKill, threads[i].ExitType());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   235
		TInt exitReason = threads[i].ExitReason();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   236
		test_Value(exitReason, exitReason >= 0 || exitReason == KErrNoMemory);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   237
		threads[i].Close();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   238
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   239
	delete[] status;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   240
	delete[] threads;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   241
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   242
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   243
struct STouchData
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   244
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   245
	TUint iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   246
	TUint iFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   247
	}TouchData;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   248
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   249
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   250
TInt TouchMemory(TAny*)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   251
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   252
	while (!TouchDataStop)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   253
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   254
		TUint8* p = Chunk.Base();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   255
		TUint8* pEnd = p + ChunkCommitEnd;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   256
		TUint8* fragPEnd = p + TouchData.iFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   257
		for (TUint8* fragP = p + TouchData.iSize; fragPEnd < pEnd;)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   258
			{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   259
			TUint8* data = fragP;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   260
			for (; data < fragPEnd; data += PageSize)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   261
				{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   262
				*data = (TUint8)(data - fragP);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   263
				}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   264
			for (data = fragP; data < fragPEnd; data += PageSize)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   265
				{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   266
				if (*data != (TUint8)(data - fragP))
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   267
					{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   268
					RDebug::Printf("Error unexpected data 0x%x read from 0x%08x", *data, data);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   269
					return KErrGeneral;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   270
					}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   271
				}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   272
			fragP = fragPEnd + TouchData.iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   273
			fragPEnd += TouchData.iFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   274
			}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   275
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   276
	return KErrNone;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   277
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   278
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   279
struct SFragData
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   280
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   281
	TUint iSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   282
	TUint iFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   283
	TUint iDiscard;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   284
	TBool iFragThread;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   285
	}FragData;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   286
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   287
void FragmentMemoryFunc()
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   288
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   289
	ChunkCommitEnd = 0;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   290
	TInt r;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   291
	while(KErrNone == (r = Chunk.Commit(ChunkCommitEnd,PageSize)) && !FragThreadStop)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   292
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   293
		ChunkCommitEnd += PageSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   294
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   295
	if (FragThreadStop)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   296
		return;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   297
	test_Equal(KErrNoMemory, r);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   298
	TUint freeBlocks = 0;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   299
	for (	TUint offset = 0; 
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   300
			(offset + FragData.iSize) < ChunkCommitEnd; 
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   301
			offset += FragData.iFrequency, freeBlocks++)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   302
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   303
		test_KErrNone(Chunk.Decommit(offset, FragData.iSize));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   304
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   305
	if (!FragData.iFragThread)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   306
		test_Equal(FreeRam(), freeBlocks * FragData.iSize);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   307
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   308
	if (FragData.iDiscard && CacheSizeAdjustable && !FragThreadStop)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   309
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   310
		TUint minCacheSize = FreeRam();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   311
		TUint maxCacheSize = minCacheSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   312
		TUint currentCacheSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   313
		test_KErrNone(DPTest::CacheSize(OrigMinCacheSize, OrigMaxCacheSize, currentCacheSize));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   314
		test_KErrNone(DPTest::SetCacheSize(minCacheSize, maxCacheSize));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   315
		test_KErrNone(DPTest::SetCacheSize(OrigMinCacheSize, maxCacheSize));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   316
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   317
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   318
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   319
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   320
void UnfragmentMemoryFunc()
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   321
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   322
	if (FragData.iDiscard && CacheSizeAdjustable)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   323
		test_KErrNone(DPTest::SetCacheSize(OrigMinCacheSize, OrigMaxCacheSize));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   324
	Chunk.Decommit(0, Chunk.MaxSize());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   325
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   326
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   327
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   328
TInt FragmentMemoryThreadFunc(TAny*)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   329
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   330
	while (!FragThreadStop)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   331
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   332
		FragmentMemoryFunc();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   333
		UnfragmentMemoryFunc();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   334
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   335
	return KErrNone;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   336
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   337
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   338
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   339
void FragmentMemory(TUint aSize, TUint aFrequency, TBool aDiscard, TBool aTouchMemory, TBool aFragThread)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   340
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   341
	test_Value(aTouchMemory, !aTouchMemory || !aFragThread);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   342
	test_Value(aSize, aSize < aFrequency);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   343
	FragData.iSize = aSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   344
	FragData.iFrequency = aFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   345
	FragData.iDiscard = aDiscard;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   346
	FragData.iFragThread = aFragThread;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   347
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   348
	TChunkCreateInfo chunkInfo;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   349
	chunkInfo.SetDisconnected(0, 0, FreeRam());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   350
	chunkInfo.SetPaging(TChunkCreateInfo::EUnpaged);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   351
	test_KErrNone(Chunk.Create(chunkInfo));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   352
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   353
	if (aFragThread)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   354
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   355
		TInt r = FragThread.Create(KNullDesC, FragmentMemoryThreadFunc, KDefaultStackSize, PageSize, PageSize, NULL);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   356
		test_KErrNone(r);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   357
		FragThread.Logon(FragStatus);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   358
		FragThreadStop = EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   359
		FragThread.Resume();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   360
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   361
	else
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   362
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   363
		FragmentMemoryFunc();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   364
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   365
	if (aTouchMemory && !ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   366
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   367
		TouchData.iSize = aSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   368
		TouchData.iFrequency = aFrequency;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   369
		TInt r = TouchThread.Create(KNullDesC, TouchMemory, KDefaultStackSize, PageSize, PageSize, NULL);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   370
		test_KErrNone(r);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   371
		TouchThread.Logon(TouchStatus);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   372
		TouchDataStop = EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   373
		TouchThread.Resume();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   374
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   375
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   376
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   377
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   378
void UnfragmentMemory(TBool aDiscard, TBool aTouchMemory, TBool aFragThread)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   379
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   380
	test_Value(aTouchMemory, !aTouchMemory || !aFragThread);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   381
	if (aTouchMemory && !ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   382
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   383
		TouchDataStop = ETrue;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   384
		User::WaitForRequest(TouchStatus);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   385
		test_Equal(EExitKill, TouchThread.ExitType());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   386
		test_KErrNone(TouchThread.ExitReason());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   387
		CLOSE_AND_WAIT(TouchThread);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   388
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   389
	if (aFragThread)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   390
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   391
		FragThreadStop = ETrue;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   392
		User::WaitForRequest(FragStatus);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   393
		test_Equal(EExitKill, FragThread.ExitType());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   394
		test_KErrNone(FragThread.ExitReason());
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   395
		CLOSE_AND_WAIT(FragThread);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   396
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   397
	else
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   398
		UnfragmentMemoryFunc();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   399
	CLOSE_AND_WAIT(Chunk);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   400
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   401
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   402
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   403
void TestFillPhysicalRam(TUint aFragSize, TUint aFragFreq, TUint aAllocSize, TUint aAllocAlign, TBool aDiscard, TBool aTouchMemory)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   404
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   405
	test.Printf(_L("TestFillPhysicalRam aFragSize 0x%x aFragFreq 0x%x aAllocSize 0x%x aAllocAlign %d dis %d touch %d\n"),
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   406
				aFragSize, aFragFreq, aAllocSize, aAllocAlign, aDiscard, aTouchMemory);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   407
	FragmentMemory(aFragSize, aFragFreq, aDiscard, aTouchMemory, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   408
	SPhysAllocData allocData;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   409
	// Only check free all ram could be allocated in manual tests as fixed pages may be fragmented.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   410
	allocData.iCheckMaxAllocs = (ManualTest && !aTouchMemory && !aAllocAlign)? ETrue : EFalse;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   411
	allocData.iCheckFreeRam = ETrue;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   412
	allocData.iSize = aAllocSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   413
	allocData.iAlign = aAllocAlign;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   414
	FillPhysicalRam(&allocData);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   415
	UnfragmentMemory(aDiscard, aTouchMemory, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   416
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   417
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   418
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   419
void TestFragmentedAllocation()
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   420
	{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   421
	// Test every other page free.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   422
	TestFillPhysicalRam(PageSize, PageSize * 2, PageSize, 0, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   423
	if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   424
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   425
		TestFillPhysicalRam(PageSize, PageSize * 2, PageSize * 2, 0, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   426
		TestFillPhysicalRam(PageSize, PageSize * 2, PageSize, 0, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   427
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   428
	TestFillPhysicalRam(PageSize, PageSize * 2, PageSize * 2, 0, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   429
	// Test every 2 pages free.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   430
	TestFillPhysicalRam(PageSize * 2, PageSize * 4, PageSize * 8, 0, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   431
	if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   432
		TestFillPhysicalRam(PageSize * 2, PageSize * 4, PageSize * 8, 0, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   433
	// Test 10 pages free then 20 pages allocated, allocate 256 pages (1MB in most cases).
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   434
	if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   435
		TestFillPhysicalRam(PageSize * 10, PageSize * 30, PageSize * 256, 0, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   436
	TestFillPhysicalRam(PageSize * 10, PageSize * 30, PageSize * 256, 0, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   437
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   438
	if (CacheSizeAdjustable)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   439
		{// It is possible to adjust the cache size so test phyiscally contiguous 
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   440
		// allocations discard and move pages when required.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   441
		test.Next(_L("TestFragmentedAllocations with discardable data no true free memory"));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   442
		// Test every other page free.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   443
		TestFillPhysicalRam(PageSize, PageSize * 2, PageSize, 0, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   444
		if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   445
			{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   446
			TestFillPhysicalRam(PageSize, PageSize * 2, PageSize, 0, ETrue, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   447
			TestFillPhysicalRam(PageSize, PageSize * 2, PageSize * 2, 0, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   448
			}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   449
		TestFillPhysicalRam(PageSize, PageSize * 2, PageSize * 2, 0, ETrue, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   450
		// Test every 2 pages free.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   451
		TestFillPhysicalRam(PageSize * 2, PageSize * 4, PageSize * 8, 0, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   452
		if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   453
			TestFillPhysicalRam(PageSize * 2, PageSize * 4, PageSize * 8, 0, ETrue, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   454
		// Test 10 pages free then 20 pages allocated, allocate 256 pages (1MB in most cases).
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   455
		if (ManualTest)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   456
			TestFillPhysicalRam(PageSize * 10, PageSize * 30, PageSize * 256, 0, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   457
		TestFillPhysicalRam(PageSize * 10, PageSize * 30, PageSize * 256, 0, ETrue, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   458
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   459
	}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   460
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   461
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   462
GLDEF_C TInt E32Main()
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   463
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   464
// Test RAM allocation
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   465
//
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   466
    {
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   467
	test.Title();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   468
	test.Start(_L("Load test LDD"));
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   469
	TInt r=User::LoadLogicalDevice(KLddFileName);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   470
	test(r==KErrNone || r==KErrAlreadyExists);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   471
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   472
	r=UserHal::PageSizeInBytes(PageSize);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   473
	test(r==KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   474
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   475
	TInt psz=PageSize;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   476
	PageShift=-1;
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   477
	for (; psz; psz>>=1, ++PageShift);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   478
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   479
	TUint currentCacheSize;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   480
	CacheSizeAdjustable = DPTest::CacheSize(OrigMinCacheSize, OrigMaxCacheSize, currentCacheSize) == KErrNone;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   481
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   482
	TUint memodel = UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemModelInfo, NULL, NULL) & EMemModelTypeMask;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   483
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   484
	TInt cmdLineLen = User::CommandLineLength();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   485
	if(cmdLineLen)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   486
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   487
		_LIT(KManual, "manual");
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   488
		RBuf cmdLine;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   489
		test_KErrNone(cmdLine.Create(cmdLineLen));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   490
		User::CommandLine(cmdLine);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   491
		cmdLine.LowerCase();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   492
		ManualTest = cmdLine.Find(KManual) != KErrNotFound;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   493
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   494
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   495
	// Turn off lazy dll unloading so the free ram checking isn't affected.
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   496
	RLoader l;
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   497
	test(l.Connect()==KErrNone);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   498
	test(l.CancelLazyDllUnload()==KErrNone);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   499
	l.Close();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   500
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   501
	InitFreeRam=FreeRam();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   502
	test.Printf(_L("Free RAM=%08x, Page size=%x, Page shift=%d\n"),InitFreeRam,PageSize,PageShift);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   503
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   504
	test.Next(_L("Open test LDD"));
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   505
	r=Shadow.Open();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   506
	test(r==KErrNone);
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   507
	
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   508
	test.Next(_L("TestAlignedAllocs"));
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   509
	TestAlignedAllocs();
31
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   510
	
56f325a607ea Revision: 200951
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   511
	test.Next(_L("TestClaimPhys"));
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   512
	TestClaimPhys();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   513
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   514
	if (memodel >= EMemModelTypeFlexible)
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   515
		{
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   516
		test.Next(_L("TestFragmentedAllocation"));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   517
		TestFragmentedAllocation();
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   518
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   519
		test.Next(_L("TestMultipleContiguousAllocations"));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   520
		TestMultipleContiguousAllocations(20, PageSize * 16, 0);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   521
		TestMultipleContiguousAllocations(20, PageSize * 16, PageShift + 1);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   522
		TestMultipleContiguousAllocations(20, PageSize * 128, PageShift + 2);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   523
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   524
		FragmentMemory(PageSize, PageSize * 2, EFalse, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   525
		TestMultipleContiguousAllocations(20, PageSize * 128, PageShift + 2);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   526
		UnfragmentMemory(EFalse, EFalse, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   527
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   528
		test.Next(_L("TestMultipleContiguousAllocations while accessing memory"));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   529
		FragmentMemory(PageSize, PageSize * 2, EFalse, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   530
		TestMultipleContiguousAllocations(20, PageSize * 128, PageShift + 2);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   531
		UnfragmentMemory(EFalse, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   532
		FragmentMemory(PageSize, PageSize * 2, ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   533
		TestMultipleContiguousAllocations(50, PageSize * 256, PageShift + 5);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   534
		UnfragmentMemory(ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   535
		FragmentMemory(PageSize * 16, PageSize * 32, ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   536
		TestMultipleContiguousAllocations(10, PageSize * 512, PageShift + 8);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   537
		UnfragmentMemory(ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   538
		FragmentMemory(PageSize * 32, PageSize * 64, ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   539
		TestMultipleContiguousAllocations(10, PageSize * 1024, PageShift + 10);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   540
		UnfragmentMemory(ETrue, ETrue, EFalse);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   541
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   542
		test.Next(_L("TestMultipleContiguousAllocations with repeated movable and discardable allocations"));
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   543
		FragmentMemory(PageSize, PageSize * 2, EFalse, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   544
		TestMultipleContiguousAllocations(20, PageSize * 2, PageShift);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   545
		UnfragmentMemory(EFalse, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   546
		FragmentMemory(PageSize, PageSize * 2, EFalse, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   547
		TestMultipleContiguousAllocations(20, PageSize * 128, PageShift + 2);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   548
		UnfragmentMemory(EFalse, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   549
		FragmentMemory(PageSize, PageSize * 2, ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   550
		TestMultipleContiguousAllocations(50, PageSize * 256, PageShift + 5);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   551
		UnfragmentMemory(ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   552
		FragmentMemory(PageSize * 16, PageSize * 32, ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   553
		TestMultipleContiguousAllocations(20, PageSize * 512, PageShift + 8);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   554
		UnfragmentMemory(ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   555
		FragmentMemory(PageSize * 32, PageSize * 64, ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   556
		TestMultipleContiguousAllocations(20, PageSize * 1024, PageShift + 10);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   557
		UnfragmentMemory(ETrue, EFalse, ETrue);
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   558
		}
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   559
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   560
	Shadow.Close();
132
e4a7b1cbe40c 201019_01
hgs
parents: 31
diff changeset
   561
	test.Printf(_L("Free RAM=%08x at end of test\n"),FreeRam());
0
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   562
	test.End();
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   563
	return(KErrNone);
a41df078684a Convert Kernelhwsrv package from SFL to EPL
John Imhofe
parents:
diff changeset
   564
    }