commsfwutils/commsbufs/TE_mbufmgr/src/test18exhaustmidsizepools.cpp
author hgs
Mon, 06 Sep 2010 13:49:23 +0100
changeset 72 ae47d0499bee
permissions -rw-r--r--
201033_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     2
// All rights reserved.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     7
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     8
// Initial Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    10
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    11
// Contributors:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    12
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    13
// Description:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    14
// Contains MBufMgr Test Step 18 for exhausting mid size pools
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    15
// 
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    16
//
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    17
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    18
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    19
#include <e32base.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    20
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    21
// Test system includes
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    22
//#ifdef SYMBIAN_OLD_EXPORT_LOCATION
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    23
//#include "networking/log.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    24
//#include "networking/teststep.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    25
//#else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    26
//#include <networking/log.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    27
//#include <networking/teststep.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    28
//#endif
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    29
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    30
#include "TestStepCTMbufmgr.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    31
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    32
#include "test18exhaustmidsizepools.h"
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    33
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    34
// RHeap information
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    35
#include <comms-infras/mbufallocator.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    36
#include <comms-infras/commsbufpond.h>
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    37
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    38
CTest18ExhaustMidSizePools::CTest18ExhaustMidSizePools()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    39
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    40
	SetTestStepName( _L("MBufMgrTest18") );	// Store the name of this test case
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    41
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    42
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    43
CTest18ExhaustMidSizePools::~CTest18ExhaustMidSizePools()
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    44
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    45
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    46
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    47
void CTest18ExhaustMidSizePools::FillDes(TDes8 &aBuf, TInt aStartPos, TInt anEndPos, TUint aStartChar, TUint anEndChar)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    48
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    49
	StripeDes(aBuf, aStartPos, anEndPos, aStartChar, anEndChar);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    50
	}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    51
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    52
enum TVerdict CTest18ExhaustMidSizePools::doTestStepL(void)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    53
	{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    54
	//-------------- substep 1 --------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    55
	INFO_PRINTF1(_L("  01 Create CMBufManager and install active scheduler:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    56
    CleanupStack::PushL( iActSch = new(ELeave) CActiveScheduler );
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    57
	CActiveScheduler::Install(iActSch);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    58
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    59
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    60
	// Create some initial pools
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    61
	// AddL(KMBuf_MBufSize, KMBuf_InitialAllocation, KMBuf_MinGrowth, KMBuf_GrowthThreshold)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    62
	// Background memory allocation (CMBufPoolManager::RunL) is used more frequently if
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    63
	// the KMBuf_MinGrowth and the KMBuf_GrowthThreshold are similar in size
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    64
	// Synchronous allocation (AllocPool(*poolChain, growth, ETrue)) occurs when the
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    65
	// requested size (iChain.CopyIn(size)) is larger than the KMBuf_MinGrowth
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    66
	// Multiple threads attempt to grow different poolchains at the same time when there
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    67
	// are a greater variety of pool sizes to grow.
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    68
	// 16384
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    69
	TInt totalPools = 5;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    70
	TInt poolSize = (KMBufDefaultHeapSize / 2)/totalPools;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    71
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    72
	RArray<TCommsBufPoolCreateInfo> createInfoArray;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    73
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    74
	TCommsBufPoolCreateInfo createInfo;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    75
	createInfo.iBufSize = 128;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    76
	createInfo.iInitialBufs = 128;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    77
	createInfo.iGrowByBufs = 64;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    78
	createInfo.iMinFreeBufs = 40;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    79
	createInfo.iCeiling = poolSize/createInfo.iBufSize;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    80
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    81
	TCommsBufPoolCreateInfo createInfo2;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    82
	createInfo2.iBufSize = 256;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    83
	createInfo2.iInitialBufs = 64;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    84
	createInfo2.iGrowByBufs = 7;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    85
	createInfo2.iMinFreeBufs = 6;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    86
	createInfo2.iCeiling = poolSize/createInfo.iBufSize;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    87
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    88
	TCommsBufPoolCreateInfo createInfo3;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    89
	createInfo3.iBufSize = 512;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    90
	createInfo3.iInitialBufs = 32;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    91
	createInfo3.iGrowByBufs = 6;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    92
	createInfo3.iMinFreeBufs = 5;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    93
	createInfo3.iCeiling = poolSize/createInfo.iBufSize;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    94
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    95
	TCommsBufPoolCreateInfo createInfo4;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    96
	createInfo4.iBufSize = 1024;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    97
	createInfo4.iInitialBufs = 16;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    98
	createInfo4.iGrowByBufs = 5;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
    99
	createInfo4.iMinFreeBufs = 4;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   100
	createInfo4.iCeiling = poolSize/createInfo.iBufSize;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   101
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   102
	TCommsBufPoolCreateInfo createInfo5;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   103
	createInfo5.iBufSize = 2048;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   104
	createInfo5.iInitialBufs = 8;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   105
	createInfo5.iGrowByBufs = 4;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   106
	createInfo5.iMinFreeBufs = 3;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   107
	createInfo5.iCeiling = poolSize/createInfo.iBufSize;	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   108
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   109
	createInfoArray.Append(createInfo);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   110
	createInfoArray.Append(createInfo2);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   111
	createInfoArray.Append(createInfo3);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   112
	createInfoArray.Append(createInfo4);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   113
	createInfoArray.Append(createInfo5);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   114
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   115
	// Create 262144
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   116
	CreateInstanceMBufMgrL(createInfoArray);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   117
	CleanupClosePushL(iBufPond);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   118
	createInfoArray.Close ();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   119
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   120
	RMBufAllocator allocator;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   121
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   122
	TInt allocTime128 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   123
	TInt allocTime256 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   124
	TInt allocTime512 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   125
	TInt allocTime1024 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   126
	TInt allocTime2048 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   127
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   128
	TInt allocCount128 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   129
	TInt allocCount256 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   130
	TInt allocCount512 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   131
	TInt allocCount1024 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   132
	TInt allocCount2048 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   133
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   134
	TInt allocIndex128 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   135
	TInt allocIndex256 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   136
	TInt allocIndex512 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   137
	TInt allocIndex1024 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   138
	TInt allocIndex2048 = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   139
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   140
	TInt failedSizeCount = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   141
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   142
	TInt counter = 0;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   143
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   144
	TUint time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   145
	RMBufChain aChain, bChain;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   146
	RMBufChain mbuf1, mbuf2, mbuf3, mbuf4, mbuf5, mbuf6;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   147
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   148
	//-------------- substep 2 --------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   149
	INFO_PRINTF1(_L("  02 Fill in the Des1 with a pattern:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   150
	TBuf8<2500> *aDes1 = NULL;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   151
	TRAPD(ret, aDes1 = new(ELeave) TBuf8<2500>);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   152
	if(ret != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   153
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   154
        SetTestStepResult(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   155
		return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   156
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   157
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   158
	aDes1->SetLength(2500);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   159
	FillDes(*aDes1, 0, 2500, 1, 1);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   160
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   161
	//-------------- substep 3 --------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   162
	INFO_PRINTF1(_L("  03 Start to allocate 500-bytes long RMBufs:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   163
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   164
	time = User::FastCounter();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   165
	ret = aChain.Alloc(500, allocator);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   166
	time = User::FastCounter() - time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   167
	while (ret == KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   168
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   169
		//Copy in Des1 into Chain
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   170
		aChain.CopyIn(aDes1->LeftTPtr(500));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   171
		if (aChain.Length() != 500)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   172
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   173
			INFO_PRINTF1(_L("Error: Allocated RMBufChain size does not match requested:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   174
			failedSizeCount++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   175
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   176
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   177
		switch (aChain.First()->Size())
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   178
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   179
			case 128:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   180
				if (allocator.BytesAvailable(256) / 256 > 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   181
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   182
					INFO_PRINTF1(_L("Error: 256-bytes long RMBuf available, but allocated 128-bytes long RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   183
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   184
				else if (allocIndex128 == 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   185
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   186
					counter++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   187
					allocIndex128 = counter;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   188
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   189
				allocCount128++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   190
				allocTime128 += time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   191
				break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   192
			case 256:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   193
				if (allocator.BytesAvailable(2048) / 2048 > 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   194
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   195
					INFO_PRINTF1(_L("Error: 2048-bytes long RMBuf available, but allocated 256-bytes long RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   196
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   197
				else if (allocIndex256 == 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   198
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   199
					counter++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   200
					allocIndex256 = counter;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   201
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   202
				allocCount256++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   203
				allocTime256 += time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   204
				break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   205
			case 512:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   206
				if (allocIndex512 == 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   207
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   208
					counter++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   209
					allocIndex512 = counter;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   210
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   211
				allocCount512++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   212
				allocTime512 += time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   213
				break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   214
			case 1024:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   215
				if (allocator.BytesAvailable(512) / 512 > 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   216
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   217
					INFO_PRINTF1(_L("Error: 512-bytes long RMBuf available, but allocated 1024-bytes long RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   218
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   219
				else if (allocIndex1024 == 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   220
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   221
					counter++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   222
					allocIndex1024 = counter;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   223
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   224
				allocCount1024++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   225
				allocTime1024 += time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   226
				break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   227
			case 2048:
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   228
				if (allocator.BytesAvailable(1024) / 1024 > 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   229
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   230
					INFO_PRINTF1(_L("Error: 1024-bytes long RMBuf available, but allocated 2048-bytes long RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   231
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   232
				else if (allocIndex2048 == 0)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   233
					{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   234
					counter++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   235
					allocIndex2048 = counter;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   236
					}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   237
				allocCount2048++;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   238
				allocTime2048 += time;				
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   239
				break;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   240
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   241
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   242
		// Now grow the chain
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   243
		if (allocCount256 == 1)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   244
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   245
			mbuf1.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   246
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   247
		else if (allocCount512 == 1)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   248
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   249
			mbuf2.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   250
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   251
		else if (allocCount512 == 2)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   252
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   253
			mbuf3.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   254
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   255
		else if (allocCount512 == 3)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   256
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   257
			mbuf4.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   258
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   259
		else if (allocCount2048 == 1)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   260
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   261
			mbuf5.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   262
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   263
		else if (allocCount2048 == 2)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   264
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   265
			mbuf6.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   266
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   267
		else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   268
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   269
			bChain.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   270
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   271
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   272
		time = User::FastCounter();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   273
		ret = aChain.Alloc(500, allocator);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   274
		time = User::FastCounter() - time;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   275
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   276
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   277
	if (allocIndex512 == 1)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   278
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   279
		_LIT(aLog1,"     Info: %d. Time to alloc %d 512-bytes long RMBuf: %d Average: %d");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   280
		INFO_PRINTF5(aLog1, allocIndex512, allocCount512, allocTime512, allocTime512/allocCount512);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   281
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   282
	if (allocIndex1024 == 2)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   283
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   284
		_LIT(aLog2,"     Info: %d. Time to alloc %d 1024-bytes long RMBuf: %d Average: %d");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   285
		INFO_PRINTF5(aLog2, allocIndex1024, allocCount1024, allocTime1024, allocTime1024/allocCount1024);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   286
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   287
	if (allocIndex2048 == 3)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   288
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   289
		_LIT(aLog3,"     Info: %d. Time to alloc %d 2048-bytes long RMBuf: %d Average: %d");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   290
		INFO_PRINTF5(aLog3, allocIndex2048, allocCount2048, allocTime2048, allocTime2048/allocCount2048);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   291
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   292
	if (allocIndex256 == 4)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   293
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   294
		_LIT(aLog4,"     Info: %d. Time to alloc %d 256-bytes long RMBuf: %d Average: %d");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   295
		INFO_PRINTF5(aLog4, allocIndex256, allocCount256, allocTime256, allocTime256/allocCount256);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   296
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   297
	if (allocIndex128 == 5)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   298
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   299
		_LIT(aLog5,"     Info: %d. Time to alloc %d 128-bytes long RMBuf: %d Average: %d");
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   300
		INFO_PRINTF5(aLog5, allocIndex128, allocCount128, allocTime128, allocTime128/allocCount128);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   301
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   302
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   303
	TBool firstSuccess = ETrue;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   304
	TBool secondSuccess = ETrue;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   305
	TBool thirdSuccess = ETrue;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   306
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   307
	//-------------------substep 4-----------------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   308
	INFO_PRINTF1(_L("  04 Allocate 750-byte long RMBuf after deallocating 1 256-byte and 2 512-byte long RMBufs:"));	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   309
	mbuf1.TrimEnd(244);	// 256-byte mbuf
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   310
	mbuf2.Free();		// 512-byte mbuf	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   311
	mbuf3.Free();		// 512-byte mbuf
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   312
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   313
	ret = aChain.Alloc(750, allocator);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   314
	if (ret != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   315
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   316
		INFO_PRINTF1(_L("Error: Couldn't allocate RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   317
		firstSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   318
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   319
	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   320
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   321
		//Copy in Des1 into Chain
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   322
		aChain.CopyIn(aDes1->LeftTPtr(750));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   323
		if (aChain.Length() != 750)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   324
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   325
			INFO_PRINTF1(_L("Error: Allocated RMBufChain size does not match requested:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   326
			firstSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   327
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   328
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   329
		// 1 512-byte long RMBuf should be free
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   330
		if (allocator.BytesAvailable(512) == 512)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   331
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   332
			INFO_PRINTF1(_L("     Info: 1 512-byte long RMBuf is free:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   333
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   334
		else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   335
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   336
			INFO_PRINTF1(_L("Error: 1 512-byte long RMBuf should be free, but not:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   337
			firstSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   338
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   339
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   340
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   341
	bChain.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   342
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   343
	//-------------------substep 5-----------------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   344
	INFO_PRINTF1(_L("  05 Allocate 750-byte long RMBuf after deallocating 2 512-byte long RMBufs:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   345
	mbuf4.Free();	// 512-byte mbuf
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   346
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   347
	ret = aChain.Alloc(750, allocator);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   348
	if (ret != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   349
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   350
		INFO_PRINTF1(_L("Error: Couldn't allocate RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   351
		secondSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   352
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   353
	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   354
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   355
		//Copy in Des1 into Chain
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   356
		aChain.CopyIn(aDes1->LeftTPtr(750));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   357
		if (aChain.Length() != 750)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   358
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   359
			INFO_PRINTF1(_L("Error: Allocated RMBufChain size does not match requested:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   360
			secondSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   361
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   362
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   363
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   364
	bChain.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   365
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   366
	//-------------------substep 6-----------------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   367
	INFO_PRINTF1(_L("  06 Allocate 2100-byte long RMBuf after deallocating 2 2048-byte long RMBufs:"));	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   368
	mbuf5.Free();	// 2048-byte mbuf
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   369
	mbuf6.Free();	// 2048-byte mbuf
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   370
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   371
	ret = aChain.Alloc(2100, allocator);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   372
	if (ret != KErrNone)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   373
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   374
		INFO_PRINTF1(_L("Error: Couldn't allocate RMBuf:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   375
		thirdSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   376
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   377
	else
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   378
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   379
		//Copy in Des1 into Chain
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   380
		aChain.CopyIn(aDes1->LeftTPtr(2100));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   381
		if (aChain.Length() != 2100)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   382
			{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   383
			INFO_PRINTF1(_L("Error: Allocated RMBufChain size does not match requested:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   384
			thirdSuccess = EFalse;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   385
			}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   386
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   387
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   388
	bChain.Append(aChain);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   389
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   390
	mbuf1.Free();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   391
	bChain.Free();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   392
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   393
	delete aDes1;
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   394
		
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   395
	//-------------- substep 7 --------------------
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   396
	INFO_PRINTF1(_L("  07 Clean up stack:"));
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   397
    CleanupStack::PopAndDestroy();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   398
	CActiveScheduler::Install(NULL);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   399
	CleanupStack::PopAndDestroy(iActSch);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   400
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   401
	if (ret != KErrNone || failedSizeCount > 0 || !firstSuccess || !secondSuccess || !thirdSuccess)
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   402
		{
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   403
        SetTestStepResult(EFail);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   404
		return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   405
		}
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   406
	
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   407
    SetTestStepResult(EPass);
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   408
	return TestStepResult();
ae47d0499bee 201033_02
hgs
parents:
diff changeset
   409
	}