Revise some of the compositor performance improvements to improve correctness.
Implement pixel blending using a variation of Jim Blinn's no-division blending algorithm.
Move transparency type simplification further up the composition code.
Remove some unnecessary fields.
Output to YUV implementation needs revision as it is actually converting from YUV (copy of source conversion code).
// Copyright (c) 2005-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:
//
#ifndef __TGRAPHICSHARNESS_H__
#define __TGRAPHICSHARNESS_H__
#include <test/testexecutestepbase.h>
#include <w32std.h>
#include <test/ttmsgraphicsstep.h>
/**
A main interface for implementation test cases
*/
class MTestCases
{
public:
virtual void RunTestCaseL(TInt aCurTestCase) = 0; // this function needs to be implemented by the derived class
virtual TInt RunTestCaseLeft(TInt aError) = 0;
};
class CTestManager;
/**
The abstract class is base for test programs, encapsulates the MTestCases interface.
All test cases must be implemented in derived classes.
*/
class CTGraphicsBase : public CBase, public MTestCases
{
friend class CTGraphicsStep;
public:
IMPORT_C static const TDesC& ColorModeName(TDisplayMode aMode);
inline static const TDesC& ColorModeName(TInt aMode);
IMPORT_C static const TDesC& RotationName(CFbsBitGc::TGraphicsOrientation aOrientation);
inline static const TDesC& RotationName(TInt aOrientation);
IMPORT_C static void SaveScreenShotL(CFbsScreenDevice* aScdv);
IMPORT_C CTGraphicsBase(CTestStep* aStep);
IMPORT_C ~CTGraphicsBase();
CTestExecuteLogger& Logger() {return iStep->Logger();}
// LEGACY methods
inline void testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine);
inline void testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine);
inline void testSoftFailWinscw(TBool aCondition, const TText8* aFile, TInt aLine);
protected:
IMPORT_C void TestComplete(); //test program has to call this function in order to
//stop the consequence of test cases and quit the step
IMPORT_C void SetSelfDrive(TBool aSelfDrive);
IMPORT_C void CaseComplete();
virtual void ConstructL(){}
IMPORT_C void ResetCounter(TInt aNewCurrentTestCase = 0);
private:
void Execute();
void InitializeL();
IMPORT_C TInt RunTestCaseLeft(TInt aError);
protected:
CTestStep* iStep;
private:
CTestManager* iTestManager;
};
/** Base class for test step */
class CTGraphicsStep : public CTTMSGraphicsStep
{
public:
CTGraphicsStep(){}
virtual ~CTGraphicsStep(){}
public:
void SetLogHeapInfo(TBool aLogHeapInfo) {iLogHeapInfo = aLogHeapInfo;}
protected:
virtual CTGraphicsBase* CreateTestL() = 0;
//allocate all test rersources here
virtual void TestSetupL(){}
//delete all allocated resourses here
virtual void TestClose(){}
//from CTestStep
IMPORT_C virtual TVerdict doTestStepL();
private:
void ExecuteL();
TInt GetScreenSize(TSize& aSize) const;
void SetupCleanup(CTrapCleanup*& tc);
void CloseAllPanicWindows(TInt aId, RWsSession& ws) const;
void LogHeapInfo(RWsSession &aWs, TBool aStart);
private:
TBool iLogHeapInfo; // Only perform wserv heap memory checks when this is true (commonly for wserv testing only)
};
#define TEST2(a, b) testBooleanTrue((a == b), (TText8*)__FILE__, __LINE__)
#define TEST_SOFTFAIL_WINSCW(a) testSoftFailWinscw((a), (TText8*)__FILE__, __LINE__)
inline const TDesC& CTGraphicsBase::ColorModeName(TInt aMode)
{return ColorModeName(reinterpret_cast<TDisplayMode&>(aMode));}
inline const TDesC& CTGraphicsBase::RotationName(TInt aOrientation)
{return RotationName(reinterpret_cast<CFbsBitGc::TGraphicsOrientation&>(aOrientation));}
// Macro for defining test step constructor and creating a test.
// Work for the following name convention:
// step class - CTXXStep
// test class - CTXX,
// where XX any name
#define __CONSTRUCT_STEP__(a) \
CT##a##Step::CT##a##Step() \
{ \
SetTestStepName(KT##a##Step); \
} \
\
CTGraphicsBase* CT##a##Step::CreateTestL() \
{ \
return new (ELeave) CT##a (this); \
}
inline void CTGraphicsBase::testBooleanTrue(TBool aCondition, const TText8* aFile, TInt aLine)
{
((CTGraphicsStep*)iStep)->MQCTest(aCondition, aFile, aLine);
}
inline void CTGraphicsBase::testBooleanTrueWithErrorCode(TBool aCondition, TInt aErrorCode, const TText8* aFile, TInt aLine)
{
((CTGraphicsStep*)iStep)->MQCTestWithErrorCode(aCondition, aErrorCode, aFile, aLine);
}
inline void CTGraphicsBase::testSoftFailWinscw(TBool aCondition, const TText8* aFile, TInt aLine)
{
#ifdef __WINS__
if (!aCondition)
{
_LIT(KMessage,"ERROR: Test Failed but is ignored on WINSCW");
Logger().LogExtra(aFile, aLine, ESevrErr, KMessage);
}
#else // __WINS__
testBooleanTrue(aCondition, aFile, aLine);
#endif //__WINS__
}
#endif