diff -r 57c618273d5c -r bbf46f59e123 egl/egltest/endpointtestsuite/automated/inc/egltest_commscommon.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/egl/egltest/endpointtestsuite/automated/inc/egltest_commscommon.h Tue Aug 31 16:31:06 2010 +0300 @@ -0,0 +1,249 @@ +// Copyright (c) 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: + + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + + +/* + * To add a new message that can be passed over the message queue: + * 1. Add the test name to the TTestUid enum. + * 2. Create a T class to hold the params. + * 3. Add the T class to the TRemoteTestParams union. + * + * These steps are described in more detail below, where the + * individual bits should be added. + */ + + +#ifndef __EGLTEST_COMMSCOMMON_H__ +#define __EGLTEST_COMMSCOMMON_H__ + + +#include +#include +#include +#include "log.h" +#include "egltest_endpoint_engine_types.h" + +#define ENDPOINT_ASSERT_DEBUG(x, y) do { if (!x) { RDebug::Printf("Assertion (%s) failed: %s:%d ", #x, __FILE__, __LINE__); y; } } while(0) + +//The maximum size of a message in an async message queue is 256 bytes. +//If these valuses are increased, the maximum size will be exceeded. +const TInt KRSLogMessageLength = 172; +const TInt KRSLogFileLength = 32; + + +//Names for the Async message queues that are used for +//communication between the TEF driver app and the test +//thread within window server. +_LIT(KResultQueueName, "RemoteTestEnvResultQueue"); +_LIT(KParamsQueueName, "RemoteTestEnvParamsQueue"); + +const TInt KStartTestStepCaseNumber = -1; +const TInt KEndTestStepCaseNumber = -2; + +//Uids for all of the tests that the test thread knows about. +enum TTestUid + { + //Endpoint Api Exposure Test. + ETestUidEndpointApiExposure, + + // Common UID for engine code. + ETestUidEndpointEngine, + + // Endpoint Lifetime test. + ETestUidEndpointLifetime, + + //Image Tearing Test. + ETestUidEndpointTearing, + + //Multithreaded stress tests. + ETestUidEndpointThreadStress, + + //Release Image with Gles context tests. + ETestUidEndpointReleaseImageGles, + + // vgThreading test. + ETestUidVgThreading, + }; + + +//Each test should have a struct with data members to hold +//the test's parameters. The name name should begin +//"TTest..." and should contain no member functions. +//(c-style struct). + +//If it is found that many tests use the same params, we should +//create a TTestGeneric class to hold the params and derive +//classes from it. + +struct TTestEndpointApiExposure + { + }; + +struct TTestEndpointTearing + { + TSurfaceId iSurfaceId; + }; + +struct TTestEndpointThreadStress + { + TInt iNumThreads; + }; + +struct TTestEndpointReleaseImageGles + { + TBool iUseValidGlesContext; + }; + + +//Union for all of the structs that tests use to pass +//params between the local side and the remote side. +union TRemoteTestParams + { + //Endpoint Api Exposure Test. + TTestEndpointApiExposure iTestEndpointApiExposure; + + //Endpoint engine data. + TTestEndpointEngine iEndpointEngine; + + // Endpoint Engine configuration data. + TTestEndpointEngineConfig iEndpointEngineConfig; + + //Image Tearing Test. + TTestEndpointTearing iEndpointTearing; + + //Multithreaded stress tests. + TTestEndpointThreadStress iEndpointThreadStress; + + //Release Image with Gles context tests. + TTestEndpointReleaseImageGles iEndpointReleaseImageGles; + }; + + +//Structure that is passed from local side to remote side +//in the async message queue. It contains the test Uid, +//test case and the params. +class TRemoteTestParamsPacket + { +public: + TRemoteTestParamsPacket(); + TRemoteTestParamsPacket(TTestUid aTestUid, TInt aTestCase, const TRemoteTestParams& aParams); + const TTestUid iUid; + const TInt iTestCase; + const TRemoteTestParams iParams; + }; + + +//The object passed back to the TEF driver app from the test +//thread. It can be used for sending the resuult of a test and +//for logging. +class TRemoteTestResult + { +public: + TRemoteTestResult(); + + //Constructor for sending logging info. + TRemoteTestResult(TTestUid aUid, TInt aTestCase, const TDesC8& aFile, TInt aLine, TInt aSeverity, const TDesC& aMessage); + + //Constructor for sending result info. + TRemoteTestResult(TTestUid aUid, TInt aTestCase, TRemoteTestVerdict aVerdict); + +public: + //If EFalse this is a logging message, else a result message. + TBool iFinished; + TTestUid iUid; + TInt iTestCase; + + //Result message. + TRemoteTestVerdict iVerdict; + + //Logging message. + TBuf8 iFile; + TInt iLine; + TInt iSeverity; + TBuf8 iMessage; + }; + + +//Inline functions -------------------------------------------------------- + +inline TRemoteTestParamsPacket::TRemoteTestParamsPacket() : + iUid((TTestUid)0), + iTestCase(0), + iParams(TRemoteTestParams()) + { + } + + +inline TRemoteTestParamsPacket::TRemoteTestParamsPacket(TTestUid aTestUid, TInt aTestCase, const TRemoteTestParams& aParams) : + iUid(aTestUid), + iTestCase(aTestCase), + iParams(aParams) + { + } + + +inline TRemoteTestResult::TRemoteTestResult() + { + } + + +inline TRemoteTestResult::TRemoteTestResult(TTestUid aUid, TInt aTestCase, const TDesC8& aFile, TInt aLine, TInt aSeverity, const TDesC& aMessage) : + iFinished(EFalse), + iVerdict(ERtvInconclusive), + iUid(aUid), + iTestCase(aTestCase), + iLine(aLine), + iSeverity(aSeverity) + { + //Copy the filename to the log object. If the string is too long, + //truncate the string and append an elipsis to the log. + //The "-1"s ensure that a free char is left for appending a NULL (in the TEF app). + TBool truncate = iFile.MaxLength()-1 < aFile.Length(); + TInt numChars = truncate ? iFile.MaxLength()-3-1 : aFile.Length(); + iFile = aFile.Left(numChars); + if(truncate) + { + iFile.Append(_L("...")); + } + + //Copy the message to the log object. If the string is too long, + //truncate the string and append an elipsis to the log. + //Note we convert message from unicode to ascii to conserve space in the message queue. + truncate = iMessage.MaxLength() < aMessage.Length(); + numChars = truncate ? iMessage.MaxLength()-3 : aMessage.Length(); + iMessage.Copy(aMessage.Left(numChars)); + if(truncate) + { + iMessage.Append(_L8("...")); + } + } + + +inline TRemoteTestResult::TRemoteTestResult(TTestUid aUid, TInt aTestCase, TRemoteTestVerdict aVerdict) : + iFinished(ETrue), + iUid(aUid), + iTestCase(aTestCase), + iVerdict(aVerdict) + { + } + +//------------------------------------------------------------------------------------ + + +#endif