graphicstest/uibench/s60/src/te_conestepbase.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/s60/src/te_conestepbase.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,99 @@
+// 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
+ @internalComponent - Internal Symbian test code 
+*/
+
+#ifndef __TE_CONESTEPBASE__
+#define __TE_CONESTEPBASE__
+
+
+#include "te_graphicsperformanceSuiteStepBase.h"
+
+#include <coemain.h>
+#include <eikappui.h>
+#include <eikenv.h>
+
+
+/**
+Base class for tests steps which require CONE. In addition to CTe_graphicsperformanceSuiteStepBase's virtuals,
+subclasses must implement void InitUIL() in order to initialise CONE controls on the screen.
+
+The execution scenario:
+1. doTestStepPreambleL() is executed in main test step's thread - creates and starts new CONE thread.
+1a. InitUIL() is run in CONE thread.
+1b. CONE's active scheduler is started in CONE thread.
+2. doTestStepL() is executed in main test step's thread.
+3. doTestStepPostambleL() is executed in main test step's thread
+3a. CONE thread is stopped
+*/
+class CTe_ConeStepBase : public CTe_graphicsperformanceSuiteStepBase
+	{
+	friend class CConeThreadStopper;
+	
+public:
+	inline RThread* ConeThread();
+	
+protected:
+	// From CTe_graphicsperformanceSuiteStepBase
+	virtual TVerdict doTestStepPreambleL(); 
+	virtual TVerdict doTestStepPostambleL();
+	
+	virtual void InitUIL(CCoeEnv* aCoeEnv) = 0; // implementation must call aCoeEnv->SetAppUi(appUi)
+	
+private:
+	static TInt ConeThreadFunction(TAny* aParams);
+	
+	CCoeEnv* ConstructControlEnvironment();
+	TInt StartControlEnvironment();
+	void StopControlEnvironment();
+	
+private:    
+    RThread iConeThread;
+	RSemaphore iInitUISemaphore;
+	TRequestStatus* iTestCompletionStatus;
+	};
+
+/**
+ * Stops CONE basing on given TRequestStatus. TRequestStatus is updated in doTestStepPostambleL, which
+ * stops the CONE thread.
+ */
+class CConeThreadStopper : public CActive
+    {
+public:
+    ~CConeThreadStopper();
+    CConeThreadStopper(CTe_ConeStepBase& aTestStep);
+    void Start(TRequestStatus *&aStopStatus);
+    
+private:
+    // From CActive
+    void DoCancel();
+    void RunL();
+    
+private:
+    CTe_ConeStepBase& iTestStep;
+    };
+
+
+inline RThread* CTe_ConeStepBase::ConeThread() 
+    {
+    return &iConeThread;
+    }
+
+
+#endif