egl/egltest/inc/egltest_syncobject.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/egl/egltest/inc/egltest_syncobject.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,259 @@
+// 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:
+//
+// Description:
+//
+
+/**
+ @file
+ @test
+*/
+#ifndef EGLTEST_SYNCOBJECT_H
+#define EGLTEST_SYNCOBJECT_H
+
+#include "eglteststep.h"
+#include <test/egltestcommonsession.h>
+
+
+_LIT(KSyncObject_Positive_Base, "SyncObject_Base");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Base) : public CEglTestStep
+	{
+public:
+	CEglTest_SyncObject_Base();
+	~CEglTest_SyncObject_Base();
+	TBool GetProcAddress();
+	void CreateEglSessionL();
+	void CheckSyncAttrib(EGLint attribute, EGLint expectedValue);
+	void CleanAll();
+	
+	/**
+	@param aEndTime End time obtained from the user nano kernel tick counter
+	@param aStartTime Start time obtained from the user nano kernel tick counter
+	@return elapsed time in microsecond
+	*/
+	inline TInt ElapsedTime(TUint32 aEndTime, TUint32 aStartTime) const
+		{
+		return ((aEndTime - aStartTime) * iTickPeriodMicroSeconds);
+		}
+
+	// from CTestStep
+	TVerdict doTestStepPreambleL();
+	
+protected:
+	CTestEglSession* iEglSess;
+	EGLSyncKHR iSyncObject;
+	EGLSyncKHR iSyncObject1;
+	EGLSyncKHR iSyncObject2;
+	
+	TBool iIsSyncObjectExtensionSupported; //sync object API, defined in EGL Khronos API spec with the name KHR_reusable_sync 
+    TBool iIsSyncObjectPrivateExtensionSupported; //internal NOKIA extension which is not the part of the Khronos API spec 
+
+	TInt iThreshold; //level of tolerance
+	TInt iDelaySignalling; //delay before the signal occurs 
+	TInt iWaitSyncTimeout; //timeout client waits on sync object, must be greater than iDelaySignalling  
+	TInt iLongDelaySignalling; //long delay before signalling occurs, must be greater than iWaitSyncTimeout
+	TInt iNumStressIterations; //number of iterations before stress test exits
+	TInt iTimeOverhead;
+	
+	TFPtrEglCreateSyncKhr iPfnEglCreateSyncKHR;
+	TFPtrEglDestroySyncKhr iPfnEglDestroySyncKHR;
+	TFPtrEglClientWaitSyncKhr iPfnEglClientWaitSyncKHR;
+	TFPtrEglSignalSyncKhr iPfnEglSignalSyncKHR;
+	TFPtrEglGetSyncAttribKhr iPfnEglGetSyncAttribKHR;
+	TFPtrEglPrivateSignalSyncNok iPfnEglPrivateSignalSyncNOK;
+	
+	TInt iTickPeriodMicroSeconds; //nanokernel ticks, in microseconds
+	};
+
+_LIT(KSyncObject_Positive_GetProcAddress, "SyncObject_Positive_GetProcAddress");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_GetProcAddress) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Positive_CreateDestroy, "SyncObject_Positive_CreateDestroy");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_CreateDestroy) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Positive_WaitSignal, "SyncObject_Positive_WaitSignal");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_WaitSignal) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_WaitSignal2, "SyncObject_Positive_WaitSignal2");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_WaitSignal2) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_WaitDelete, "SyncObject_Positive_WaitDelete");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_WaitDelete) : public CEglTest_SyncObject_Base
+    {
+public: 
+    TVerdict doTestStepL();
+protected:
+    // from CEglTestStep
+    void doThreadFunctionL(TInt aIdx);
+    };
+
+_LIT(KSyncObject_Positive_WaitWithTimeoutExpired, "SyncObject_Positive_WaitWithTimeoutExpired");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_WaitWithTimeoutExpired) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Positive_SignalBeforeTimeoutExpired, "SyncObject_Positive_SignalBeforeTimeoutExpired");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_SignalBeforeTimeoutExpired) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_DeleteBeforeTimeoutExpired, "SyncObject_Positive_DeleteBeforeTimeoutExpired");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_DeleteBeforeTimeoutExpired) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_Multithread_SignalBeforeTimeout, "SyncObject_Positive_Multithread_SignalBeforeTimeout");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Multithread_SignalBeforeTimeout) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_Multithread_SignalAfterTimeout, "SyncObject_Positive_Multithread_SignalAfterTimeout");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Multithread_SignalAfterTimeout) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_Multithread_WaitOnTwoSyncObject, "SyncObject_Positive_Multithread_WaitOnTwoSyncObject");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Multithread_WaitOnTwoSyncObject) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_Wait_TestMode, "SyncObject_Positive_Wait_TestMode");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Wait_TestMode) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Positive_Multithread_Deletion, "SyncObject_Positive_Multithread_Deletion");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Multithread_Deletion) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+_LIT(KSyncObject_Positive_Stress, "SyncObject_Positive_Stress");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Stress) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+private:
+	TBool iStopTest; //to ensure that we are not going to signal on deleted sync objects 
+	TInt iLastThreadToSignal; //varies from 0..2, where 2 is the main client thread 
+	};
+
+_LIT(KSyncObject_Positive_WaitFlush, "SyncObject_Positive_WaitFlush");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_WaitFlush) : public CEglTest_SyncObject_Base
+{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+};
+
+_LIT(KSyncObject_Positive_Terminate, "SyncObject_Positive_Terminate");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_Terminate) : public CEglTest_SyncObject_Base
+    {
+public: 
+    TVerdict doTestStepL();
+    };
+
+_LIT(KSyncObject_Positive_TerminateBeforeTimeoutExpired, "SyncObject_Positive_TerminateBeforeTimeoutExpired");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Positive_TerminateBeforeTimeoutExpired) : public CEglTest_SyncObject_Base
+    {
+public: 
+    TVerdict doTestStepL();
+protected:
+    // from CEglTestStep
+    void doThreadFunctionL(TInt aIdx);
+    };
+
+_LIT(KSyncObject_Negative_WrongParameters, "SyncObject_Negative_WrongParameters");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Negative_WrongParameters) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Negative_SignalImpl, "SyncObject_Negative_SignalImpl");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Negative_SignalImpl) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+	};
+
+_LIT(KSyncObject_Negative_OOM, "SyncObject_Negative_OOM");
+NONSHARABLE_CLASS(CEglTest_SyncObject_Negative_OOM) : public CEglTest_SyncObject_Base
+	{
+public:	
+	TVerdict doTestStepL();
+protected:
+	// from CEglTestStep
+	void doThreadFunctionL(TInt aIdx);
+	};
+
+#endif // EGLTEST_SYNCOBJECT_H