Add MMP files to build libOpenVG_sw.lib which uses LINKAS to redirect to libOpenVG.dll (and
the same for libEGL_sw.lib and libOpenVGU_sw.lib).
Only the libEGL_sw.lib redirection isn't activated - this can't happen until there is a merged
libEGL.dll which supports the OpenWF synchronisation and also implements the graphical support functions.
The overall aim is to eliminate the *_sw.dll implementations, at least as a compile-time way of choosing
a software-only implementation.The correct way to choose is to put the right set of libraries into a ROM
with suitable renaming, and in the emulator to use the "switching DLL" technique to pick the right set.
As the Symbian Foundation doesn't have any alternative implementations, we don't need the switching DLLs
and we can build directly to the correct name.
// Copyright (c) 2007-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:
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#include "tsgdriver.h"
CTSgDriver::CTSgDriver()
{
INFO_PRINTF1(_L("Graphics resource component test - SgDriver Tests.\r\n"));
}
CTSgDriver::~CTSgDriver()
{
}
/**
Overrides of base class pure virtual
Our implementation only gets called if the base class doTestStepPreambleL() did
not leave. That being the case, the current test result value will be EPass.
@leave Gets system wide error code
@return TVerdict code
*/
TVerdict CTSgDriver::doTestStepL()
{
SetTestStepID(_L("GRAPHICS-RESOURCE-0001"));
INFO_PRINTF1(_L("Graphics resource component initialization and shutdown.\r\n"));
TestInitializationAndShutdown();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-RESOURCE-0002"));
INFO_PRINTF1(_L("Graphics resource component shutdown multiple time.\r\n"));
TestInitializeShutdownManyTimes();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-RESOURCE-0022"));
INFO_PRINTF1(_L("Shutting down an uninitialised driver.\r\n"));
TestShutdownUninitialized();
RecordTestResultL();
#ifdef _DEBUG
SetTestStepID(_L("GRAPHICS-RESOURCE-0078"));
INFO_PRINTF1(_L("SgDriver panic test - private heap memory leak.\r\n"));
TestDriverMemoryLeakL();
RecordTestResultL();
#ifndef __WINS__
SetTestStepID(_L("GRAPHICS-RESOURCE-0023"));
INFO_PRINTF1(_L("Shutting down without closing all resources.\r\n"));
TestShutdownMemoryLeakL();
RecordTestResultL();
#endif
SetTestStepID(_L("GRAPHICS-RESOURCE-0079"));
INFO_PRINTF1(_L("SgDriver panic test - ResourceCount() without initialising the driver.\r\n"));
TestPanicResourceCountNoDriverL();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-RESOURCE-0090"));
INFO_PRINTF1(_L("SgDriver panic test - AllocMarkStart() without initialising the driver.\r\n"));
TestPanicAllocMarkStartNoDriverL();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-RESOURCE-0091"));
INFO_PRINTF1(_L("SgDriver panic test - AllocMarkEnd() without initialising the driver.\r\n"));
TestPanicAllocMarkEndNoDriverL();
RecordTestResultL();
SetTestStepID(_L("GRAPHICS-RESOURCE-0092"));
INFO_PRINTF1(_L("SgDriver panic test - SetAllocFail() without initialising the driver.\r\n"));
TestPanicSetAllocFailNoDriverL();
RecordTestResultL();
#else
INFO_PRINTF1(_L("Warning: Skipping the panic tests. \r\n"));
#endif
return TestStepResult();
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0001
@SYMTestCaseDesc Initialises and shuts down the graphics resource driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMREQ REQ9224
@SYMREQ REQ9233
@SYMREQ REQ9234
@SYMFssID SgDriver::Open()\n
RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)\n
SgDriver::Close()\n
SgDriver::ResourceCount()\n
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure the graphics resource driver can be initialised successfully
@SYMTestActions Call SgDriver::Open() to start the graphics resource driver, then try
to call RSgImage::Create(). Call SgDriver::Open() the second time
and then call RSgImage::Create() again. Close the driver and call
RSgImage::Create(). Close the driver.
@SYMTestExpectedResults RSgImage::Create() should return:\n
\t 1. KErrNone \n
\t 2. KErrNone \n
\t 3. KErrNone \n
SgDriver::Open() should return KErrNone both times.
@SYMTestStatus Implemented
*/
void CTSgDriver::TestInitializationAndShutdown()
{
__UHEAP_MARK;
TSgImageInfo info;
info.iSizeInPixels = TSize(8, 8);
info.iUsage = ESgUsageDirectGdiSource;
info.iPixelFormat = EUidPixelFormatRGB_565;
info.iCpuAccess = ESgCpuAccessReadWrite;
info.iShareable = ETrue;
RSgImage image;
TEST(KErrNone == SgDriver::Open());
TEST(KErrNone == image.Create(info, KImageData, 16));
TEST(0 < SgDriver::ResourceCount());
image.Close();
TEST(KErrNone == SgDriver::Open());
TEST(KErrNone == image.Create(info, KImageData, 16));
image.Close();
SgDriver::Close();
TEST(KErrNone == image.Create(info, KImageData, 16));
image.Close();
TEST(0 == SgDriver::ResourceCount());
SgDriver::Close();
__UHEAP_MARKEND;
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0002
@SYMTestCaseDesc Shuts down graphics resource driver multiple times.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMREQ REQ9224
@SYMREQ REQ9233
@SYMREQ REQ9234
@SYMFssID SgDriver::Open()\n
SgDriver::Close()\n
SgDriver::ResourceCount()\n
RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure the graphics resource driver could be shut down multiple times.
@SYMTestActions Initialise the graphics resource driver. Create an image then close it.
Shutdown the driver twice. Open and driver and create an image. Close the
image and shutdown the driver.
@SYMTestExpectedResults The graphics resource driver is successfully shut down. The calls to
RSgImage::Create() should return:\n
\t 1. KErrNone\n
\t 2. KErrNone\n
@SYMTestStatus Implemented
*/
void CTSgDriver::TestInitializeShutdownManyTimes()
{
__UHEAP_MARK;
TEST(KErrNone == SgDriver::Open());
TSgImageInfo info;
info.iSizeInPixels = TSize(8, 8);
info.iUsage = ESgUsageDirectGdiSource;
info.iPixelFormat = EUidPixelFormatRGB_565;
info.iCpuAccess = ESgCpuAccessReadWrite;
info.iShareable = ETrue;
RSgImage image;
TEST(KErrNone == image.Create(info, KImageData, 16));
image.Close();
SgDriver::Close();
SgDriver::Close();
TEST(KErrNone == SgDriver::Open());
TEST(KErrNone == image.Create(info, KImageData, 16));
image.Close();
TEST(0 == SgDriver::ResourceCount());
SgDriver::Close();
__UHEAP_MARKEND;
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0022
@SYMTestCaseDesc Shuts down an uninitialised driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMFssID SgDriver::Close()
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure invalid Close() calls on the driver will cause no errors.
@SYMTestActions Call SgDriver::Close() several times without calling SgDriver::Open().
@SYMTestExpectedResults No errors should be returned.
@SYMTestStatus Implemented
*/
void CTSgDriver::TestShutdownUninitialized()
{
__UHEAP_MARK;
SgDriver::Close();
SgDriver::Close();
SgDriver::Close();
__UHEAP_MARKEND;
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0023
@SYMTestCaseDesc Shuts down the driver without closing all resources.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMREQ REQ9224
@SYMREQ REQ9233
@SYMREQ REQ9234
@SYMFssID SgDriver::Open()\n
RSgImage::Create(const TSgImageInfo&, const TAny*, TInt)\n
SgDriver::Close()
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling Close() without closing all resources will cause a panic.
@SYMTestActions Initialise the graphics resource component and create an image in a second thread.
Try to shutdown the component.
@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 1(ESgPanicUnclosedResources).
@SYMTestStatus Implemented
*/
void CTSgDriver::TestShutdownMemoryLeakL()
{
TestOpenDriverL();
//run the test in another process
TSgImageInfo info;
TSgresTestInfo processInfo = {KSgNullDrawableId, info, 0, ESgresSecondProcessPanicDriverUnclosedResources, ETrue};
TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
_LIT(KTestName, "TestShutdownMemoryLeakL");
CreateSecondProcessAndCheckPanicL(processInfo, 1, exitCategoryName, KTestName);
TestCloseDriver();
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0078
@SYMTestCaseDesc Calls SgDriver::AllocMarkEnd() without shutting down all the resources.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMREQ REQ9224
@SYMREQ REQ9233
@SYMREQ REQ9234
@SYMFssID SgDriver::AllocMarkStart()\n
SgDriver::AllocMarkEnd()
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling SgDriver::AllocMarkEnd() without closing all resources will cause a panic.
@SYMTestActions Initialise the graphics resource component in a second process and call SgDriver::AllocMarkStart().
Create an image and call SgDriver::AllocMarkEnd().
@SYMTestExpectedResults The function should panic in the second process with panic code SGRES-ADAPTER 0.
@SYMTestStatus Implemented
*/
void CTSgDriver::TestDriverMemoryLeakL()
{
TestOpenDriverL();
//run the test in another process
TSgImageInfo info;
TSgresTestInfo processInfo = {KSgNullDrawableId, info, 0, ESgresSecondProcessPanicMemoryLeak, ETrue};
TExitCategoryName exitCategoryName(_L("SGALLOC"));
_LIT(KTestName, "TestDriverMemoryLeakL");
CreateSecondProcessAndCheckPanicL(processInfo, 0, exitCategoryName, KTestName);
TestCloseDriver();
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0079
@SYMTestCaseDesc Calls SgDriver::ResourceCount() without initialising the driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMFssID SgDriver::ResourceCount())\n
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling SgDriver::ResourceCount() without initialising
the driver first will cause a panic in the debug mode.
@SYMTestActions Do not Initialise the graphics resource component and call
SgDriver::ResourceCount() in a second thread.
@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 5 (ESgPanicNoDriver).
@SYMTestStatus Implemented
*/
void CTSgDriver::TestPanicResourceCountNoDriverL()
{
TSgImageInfo info;
TSgresTestInfo threadInfo = {KSgNullDrawableId, info, 0, ESgresSecondThreadPanicResourceCountNoDriver, ETrue};
TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
_LIT(KTestName, "TestPanicResourceCountNoDriverL");
CreateSecondThreadAndCheckPanicL(threadInfo, 5, exitCategoryName, KTestName);
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0090
@SYMTestCaseDesc Calls SgDriver::AllocMarkStart() without initialising the driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMFssID SgDriver::AllocMarkStart())\n
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling SgDriver::AllocMarkStart() without initialising
the driver first will cause a panic in the debug mode.
@SYMTestActions Do not Initialise the graphics resource component and call
SgDriver::AllocMarkStart() in a second thread.
@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 5 (ESgPanicNoDriver).
@SYMTestStatus Implemented
*/
void CTSgDriver::TestPanicAllocMarkStartNoDriverL()
{
TSgImageInfo info;
TSgresTestInfo threadInfo = {KSgNullDrawableId, info, 0, ESgresSecondThreadPanicAllocMarkStartNoDriver, ETrue};
TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
_LIT(KTestName, "TestPanicAllocMarkStartNoDriverL");
CreateSecondThreadAndCheckPanicL(threadInfo, 5, exitCategoryName, KTestName);
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0091
@SYMTestCaseDesc Calls SgDriver::AllocMarkEnd() without initialising the driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMFssID SgDriver::AllocMarkEnd())\n
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling SgDriver::AllocMarkEnd() without initialising
the driver first will cause a panic in the debug mode.
@SYMTestActions Do not Initialise the graphics resource component and call
SgDriver::AllocMarkEnd() in a second thread.
@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 5 (ESgPanicNoDriver).
@SYMTestStatus Implemented
*/
void CTSgDriver::TestPanicAllocMarkEndNoDriverL()
{
TSgImageInfo info;
TSgresTestInfo threadInfo = {KSgNullDrawableId, info, 0, ESgresSecondThreadPanicAllocMarkEndNoDriver, ETrue};
TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
_LIT(KTestName, "TestPanicAllocMarkEndNoDriverL");
CreateSecondThreadAndCheckPanicL(threadInfo, 5, exitCategoryName, KTestName);
}
/**
@SYMTestCaseID GRAPHICS-RESOURCE-0092
@SYMTestCaseDesc Calls SgDriver::SetAllocFail() without initialising the driver.
@SYMPREQ PREQ39
@SYMREQ REQ8809
@SYMREQ REQ9175
@SYMFssID SgDriver::SetAllocFail())\n
@SYMTestPriority Critical
@SYMTestType Unit Test
@SYMTestPurpose To ensure calling SgDriver::SetAllocFail() without initialising
the driver first will cause a panic in the debug mode.
@SYMTestActions Do not Initialise the graphics resource component and call
SgDriver::SetAllocFail() in a second thread.
@SYMTestExpectedResults The function should panic in the second thread with panic code SGRES 5 (ESgPanicNoDriver).
@SYMTestStatus Implemented
*/
void CTSgDriver::TestPanicSetAllocFailNoDriverL()
{
TSgImageInfo info;
TSgresTestInfo threadInfo = {KSgNullDrawableId, info, 0, ESgresSecondThreadPanicSetAllocFailNoDriver, ETrue};
TExitCategoryName exitCategoryName(KSgTestGenericPanicCategory);
_LIT(KTestName, "TestPanicSetAllocFailNoDriverL");
CreateSecondThreadAndCheckPanicL(threadInfo, 5, exitCategoryName, KTestName);
}