Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//
#include "FbsRalc.h"
#include "UTILS.H"
#include "TRalc.h"
#include "fbsmessage.h"
#include "fbsdefs.h"
_LIT(KMbmFileEikon, "z:\\System\\Data\\tfbs_file4.mbm");
_LIT(KMbmFileTechview, "z:\\System\\Data\\tfbs_file5.mbm");
_LIT(KMbmFileTechviewU,"Z:\\SYSTEM\\DATA\\TFBS_FILE5.MBM");
_LIT(KMbmFileLafcurs, "z:\\System\\Data\\tfbs_file2.mbm");
_LIT(KMbmFileShell, "z:\\System\\Data\\tfbs_file1.mbm");
_LIT(KMbmFileShel, "z:\\System\\Data\\tfbs_file_.mbm");
_LIT(KMbmFileTimew, "z:\\System\\Data\\tfbs_file3.mbm");
_LIT(KMbmFileLafcursLong, "z:\\siuhsiughighifhgidfhguifhguidhfguifhghlarglaghghghghghkrjghszkjg\\System\\Data\\tfbs_file2.mbm");
_LIT(KMbmFileShellLong, "z:\\siuhsiughighifhgidfhguifhguidhfguifhghlarglaghghghghghkrjghszkjg\\System\\Data\\tfbs_file1.mbm");
// ============================================================================
CTRalc::CTRalc(CTestStep* aStep):
CTGraphicsBase(aStep),
iHandle(0),
iFbs(NULL),
iResourceCount(0),
iAllocs(0)
{
}
CTRalc::~CTRalc()
{
if(iShutdownFbs)
RFbsSession::GetSession()->SendCommand(EFbsMessShutdown);
RFbsSession::Disconnect();
}
void CTRalc::ConstructL()
{
if(RFbsSession::Connect()==KErrNone)
{
iShutdownFbs = EFalse;
}
else
{
FbsStartup();
RFbsSession::Connect();
iShutdownFbs = ETrue;
}
iFbs = RFbsSession::GetSession();
TRAPD(err,ExpandCleanupStackL());
if (err != KErrNone)
User::Panic(_L("CleanupStack expansion failed"),err);
INFO_PRINTF1(_L("FBS Client RALC testing"));
}
void CTRalc::ExpandCleanupStackL()
{
TInt count=0;
for(;count<10;count++)
CleanupStack::PushL((TUint32*)0x1);
CleanupStack::Pop(count);
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0604
@SYMTestCaseDesc
Tests the creation of CFbsRalCacheEl objects.
@SYMTestActions
1. Test the API on a default built element object.
2. Test a New'd element object followed by delete.
3. Test a New'd element object followed by destroy & free.
4. Test matching of an element object.
@SYMTestExpectedResults
Test should pass
*/
void CTRalc::TestRALCEntryClass()
{
INFO_PRINTF1(_L("Test of CFbsRalCacheEl API"));
// Test the API on a defaultly built element object
{
CFbsRalCacheEl elOne;
TEST(elOne.iAddress == 0);
TEST(elOne.iFilename == 0);
// Test matching method
TBool r1 = EFalse;
r1 = elOne.MatchKey (KMbmFileEikon);
TEST(r1 == EFalse);
// Test destruction
}
// Test a New'd element object followed by delete
{
CFbsRalCacheEl *elTwo = 0;
elTwo = CFbsRalCacheEl::New(KMbmFileTimew, (TAny*)0x58001000);
TEST(elTwo != 0);
TEST(elTwo->iFilename->CompareF(KMbmFileTimew) == 0);
TEST(elTwo->iAddress == (TAny*)0x58001000);
delete elTwo;
}
// Test a New'd element object followed by destroy & free
{
CFbsRalCacheEl *elThree = 0;
elThree = CFbsRalCacheEl::New(KMbmFileLafcursLong, (TAny*)0x58002000);
TEST(elThree != 0);
TEST(elThree->iFilename->CompareF(KMbmFileLafcursLong) == 0);
TEST(elThree->iAddress == (TAny*)0x58002000);
elThree->~CFbsRalCacheEl();
TEST(elThree->iFilename == 0);
CFbsRalCacheEl::FreeOnly(elThree);
TEST(elThree == 0);
}
// Test matching of an element object
{
CFbsRalCacheEl *elFour = 0;
elFour = CFbsRalCacheEl::New(KMbmFileTechview, (TAny*)0x58003000);
TEST(elFour != 0);
TBool r2 = EFalse;
r2 = elFour->MatchKey (KMbmFileEikon);
TEST(r2 == EFalse);
r2 = elFour->MatchKey (KMbmFileTechview);
TEST(r2);
r2 = elFour->MatchKey(KMbmFileTechviewU);
TEST(r2);
delete elFour;
}
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0605
@SYMTestCaseDesc
Tests the RALC Cache class.
@SYMTestActions
Connect to the file server. Creates a CFbsRalCache
object on the heap. Deletes the object.
Test the lookup facility of the cache with overflow.
@SYMTestExpectedResults
Test should pass
*/
void CTRalc::TestRALCCacheClass()
{
RFs fileServer;
TInt ret;
ret = fileServer.Connect();
TEST(ret==KErrNone);
INFO_PRINTF1(_L("Test of CFbsRalCache API"));
// Test the construction/destruction API
{
CFbsRalCache* cache1 = CFbsRalCache::New(0, fileServer);
TEST(cache1 == 0);
cache1 = CFbsRalCache::New(5, fileServer);
TEST(cache1 != 0);
TEST(cache1->Count() == 0);
TEST(cache1->Length() == 5);
delete cache1;
}
// Test the lookup facility of the cache with overflow
{
CFbsRalCache* cache2 = CFbsRalCache::New(2, fileServer);
TAny* p1;
p1 = cache2->Lookup(KMbmFileLafcurs);
TEST(p1 != 0);
TEST(cache2->Count() == 1);
p1 = cache2->Lookup(KMbmFileShel);
TEST(p1 == 0);
TEST(cache2->Count() == 1);
p1 = cache2->Lookup(KMbmFileShell);
TEST(p1 != 0);
TEST(cache2->Count() == 2);
p1 = cache2->Lookup(KMbmFileEikon);
TEST(p1 != 0);
TEST(cache2->Count() == 2);
delete cache2;
}
fileServer.Close();
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0606
@SYMTestCaseDesc
Tests Out Of Memory conditions for the CFbsRalCache class.
@SYMTestActions
Connects to the file server. Sets a macro
that makes heap allocation fail after a certain
number of heap allocations. Creates a CFbsRalCache
object on the heap. Deletes the object. Closes the file
server handle.
@SYMTestExpectedResults
Test should pass
*/
void CTRalc::TestOOMCondition()
{
RFs fileServer;
TInt ret;
ret = fileServer.Connect();
TEST(ret==KErrNone);
INFO_PRINTF1(_L("Test of CFbsRalCache and OOM"));
for (TInt count = 1; ; count++)
{
__UHEAP_SETFAIL(RHeap::EDeterministic,count);
__UHEAP_MARK;
CFbsRalCache* cache = 0;
cache = CFbsRalCache::New(4, fileServer);
if (cache == 0)
{
__UHEAP_MARKEND;
}
else
{
delete cache;
__UHEAP_MARKEND;
__UHEAP_SETFAIL(RHeap::ENone,count);
break;
}
}
fileServer.Close();
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0607
@SYMTestCaseDesc
Intended to measure performance of bitmap loading.
@SYMTestActions
Creates to CFbsBitmap objects on the stack and
loads a bitmap file in to objects in a loop.
Test case is not complete.
@SYMTestExpectedResults
No test result is given in the function.
*/
void CTRalc::MeasurePerformanceWith2()
{
TInt loopI;
CFbsBitmap bitmap1;
CFbsBitmap bitmap2;
INFO_PRINTF1(_L("Performance Test with 2 Lookups"));
for (loopI=0; loopI<2700; loopI++)
bitmap1.Load(KMbmFileLafcurs, 0, EFalse);
for (loopI=0; loopI<600; loopI++)
bitmap2.Load(KMbmFileShell, 0, EFalse);
/* RDebug::ProfileEnd(10);
TProfile profile;
RDebug::ProfileResult(&profile,10,1);
RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0609
@SYMTestCaseDesc
Intended to measure performance of bitmap loading.
@SYMTestActions
Creates to CFbsBitmap objects on the stack and
loads a bitmap file in to objects in a loop.
Test case is not complete.
@SYMTestExpectedResults
No test result is given in the function.
*/
void CTRalc::MeasurePerformanceWith2Long()
{
TInt loopI;
CFbsBitmap bitmap1;
CFbsBitmap bitmap2;
INFO_PRINTF1(_L("Performance Test with 2 LONG Lookups"));
// RDebug::ProfileReset(10, 1);
// RDebug::ProfileStart(10);
for (loopI=0; loopI<2700; loopI++)
(void)bitmap1.Load(KMbmFileLafcursLong, 0, EFalse);
for (loopI=0; loopI<600; loopI++)
(void)bitmap2.Load(KMbmFileShellLong, 0, EFalse);
/* RDebug::ProfileEnd(10);
TProfile profile;
RDebug::ProfileResult(&profile,10,1);
RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0608
@SYMTestCaseDesc
Intended to measure performance of bitmap loading.
@SYMTestActions
Creates five CFbsBitmap objects on the stack and
loads different bitmap files in to the objects in a loop.
@SYMTestExpectedResults
No test result is given in the function.
*/
void CTRalc::MeasurePerformanceWith5()
{
TInt loopI;
CFbsBitmap bitmap1;
CFbsBitmap bitmap2;
CFbsBitmap bitmap3;
CFbsBitmap bitmap4;
CFbsBitmap bitmap5;
INFO_PRINTF1(_L("Performance Test with 5 Lookups"));
// RDebug::ProfileReset(10, 1);
// RDebug::ProfileStart(10);
for (loopI=0; loopI<500; loopI++)
bitmap1.Load(KMbmFileEikon, 0, EFalse);
for (loopI=0; loopI<200; loopI++)
bitmap2.Load(KMbmFileTechview, 0, EFalse);
for (loopI=0; loopI<2700; loopI++)
bitmap3.Load(KMbmFileLafcurs, 0, EFalse);
for (loopI=0; loopI<600; loopI++)
bitmap4.Load(KMbmFileShell, 0, EFalse);
for (loopI=0; loopI<1100; loopI++)
bitmap5.Load(KMbmFileTimew, 0, EFalse);
/* RDebug::ProfileEnd(10);
TProfile profile;
RDebug::ProfileResult(&profile,10,1);
RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000); */
}
/**
@SYMTestCaseID
GRAPHICS-FBSERV-0610
@SYMTestCaseDesc
Intended to measure performance of bitmap loading.
@SYMTestActions
Creates five CFbsBitmap objects on the stack and
loads different bitmap files in to the objects in a loop.
@SYMTestExpectedResults
No test result is given in the function.
*/
void CTRalc::MeasurePerformanceWith23Mix()
{
TInt loopI;
CFbsBitmap bitmap1;
CFbsBitmap bitmap2;
CFbsBitmap bitmap3;
CFbsBitmap bitmap4;
CFbsBitmap bitmap5;
INFO_PRINTF1(_L("Performance Test with 2/3 Mix of Lookups"));
// RDebug::ProfileReset(10, 1);
// RDebug::ProfileStart(10);
for (loopI=0; loopI<500; loopI++)
bitmap1.Load(KMbmFileEikon, 0, EFalse);
for (loopI=0; loopI<200; loopI++)
bitmap2.Load(KMbmFileTechview, 0, EFalse);
for (loopI=0; loopI<2700; loopI++)
bitmap3.Load(KMbmFileLafcursLong, 0, EFalse);
for (loopI=0; loopI<600; loopI++)
bitmap4.Load(KMbmFileShellLong, 0, EFalse);
for (loopI=0; loopI<1100; loopI++)
bitmap5.Load(KMbmFileTimew, 0, EFalse);
/* RDebug::ProfileEnd(10);
TProfile profile;
RDebug::ProfileResult(&profile,10,1);
RDebug::Print(_L("Performance test end %d.%d s\n"),profile.iTime/1000000,(profile.iTime/1000)%1000);*/
}
void CTRalc::RunTestCaseL(TInt aCurTestCase)
{
TUint32* romAddress = NULL;
if(!CFbsBitmap::IsFileInRom(KMbmFileEikon, romAddress)) //check any rom bitmap
{
INFO_PRINTF2(_L("Skipping CFbsRalCache tests since file \"%S\" is reported to not be a ROM bitmap."),
&KMbmFileEikon);
INFO_PRINTF1(_L("This should only occur on non-XIP ROMs, e.g. NAND ROMs, where ROM bitmaps aren't supported."));
TestComplete();
}
else
{
((CTRalcStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(aCurTestCase)
{
case 1:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0604"));
TestRALCEntryClass();
break;
case 2:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0605"));
TestRALCCacheClass();
break;
case 3:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0606"));
TestOOMCondition();
break;
case 4:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0607"));
MeasurePerformanceWith2();
break;
case 5:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0608"));
MeasurePerformanceWith5();
break;
case 6:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0609"));
MeasurePerformanceWith2Long();
break;
case 7:
((CTRalcStep*)iStep)->SetTestStepID(_L("GRAPHICS-FBSERV-0610"));
MeasurePerformanceWith23Mix();
break;
case 8:
((CTRalcStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
((CTRalcStep*)iStep)->CloseTMSGraphicsStep();
TestComplete();
break;
}
((CTRalcStep*)iStep)->RecordTestResultL();
}
}
//--------------
__CONSTRUCT_STEP__(Ralc)
void CTRalcStep::TestSetupL()
{
// Leaking thread handles
iThread.HandleCount(iStartProcessHandleCount, iStartThreadHandleCount);
}
void CTRalcStep::TestClose()
{
// Check for open handles
iThread.HandleCount(iEndProcessHandleCount, iEndThreadHandleCount);
if(iStartThreadHandleCount != iEndThreadHandleCount)
{__DEBUGGER()} // Oops leaked some handles
}