Added GLES 1.x spinning cube-rendering code to eglbringuptest
The coordinate, color and index data are uploaded to server-side
buffers by the CGLES1Cube::KhrSetup function. CGLES1Cube::KhrPaint
just sets the view matrix and issues a draw command.
Which demo to display can be selected by passing its name on the
command line, e.g.
eglbringuptest vgline
eglbringuptest gles1cube
If no name is provided, the application defaults to vgline.
// 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
}