graphicstest/uibench/s60/src/te_conestepbase.cpp
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstest/uibench/s60/src/te_conestepbase.cpp	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,150 @@
+// 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 
+*/
+
+
+#include "te_conestepbase.h"
+
+
+_LIT(KTestStepThread, "TestStepConeThread");
+
+
+TVerdict CTe_ConeStepBase::doTestStepPreambleL()
+	{
+	CTe_graphicsperformanceSuiteStepBase::doTestStepPreambleL();
+	
+	TESTNOERRORL(iConeThread.Create(KTestStepThread, CTe_ConeStepBase::ConeThreadFunction,
+	        KDefaultStackSize, NULL, this));
+	
+	iInitUISemaphore.CreateLocal(0);
+	iConeThread.Resume(); // start the cone thread
+	
+	// wait for InitUIL() method to finish, that means test can start now
+	iInitUISemaphore.Wait();
+	
+	return TestStepResult();
+	}
+
+TVerdict CTe_ConeStepBase::doTestStepPostambleL()
+	{
+	iProfiler->FreeResultsMemory(); // cleanup memory in the baseclass (otherwise heaptest panics)
+	
+	iConeThread.RequestComplete(iTestCompletionStatus, KErrNone); // informs conestopper
+    
+	TRequestStatus status;
+	iConeThread.Rendezvous(status); // asynchronous, completes amongst others when thread terminates
+	User::WaitForRequest(status); // waits for Rendevous() to finish
+	iConeThread.Close();
+	iInitUISemaphore.Close();
+	
+	return CTe_graphicsperformanceSuiteStepBase::doTestStepPostambleL();
+	}
+
+
+/**
+ * Starts the CONE thread.
+ */
+TInt CTe_ConeStepBase::ConeThreadFunction(TAny* aParams)
+     {
+     CTe_ConeStepBase* testStep = static_cast<CTe_ConeStepBase*>(aParams);
+     return testStep->StartControlEnvironment();     
+     }
+
+CCoeEnv* CTe_ConeStepBase::ConstructControlEnvironment()
+    {
+    CEikonEnv* eikonEnv = new CEikonEnv();
+    if (eikonEnv)
+        {
+        TRAPD(err, eikonEnv->ConstructL());
+        if (err != KErrNone)
+            {
+            delete eikonEnv;
+            return NULL;
+            }
+        }    
+    return eikonEnv;
+    }
+
+TInt CTe_ConeStepBase::StartControlEnvironment()
+    {
+    TInt err = KErrNoMemory;
+    CConeThreadStopper* stopper = new CConeThreadStopper(*this);
+    if (stopper)
+        {
+        CCoeEnv* coeEnv = ConstructControlEnvironment();
+        if (coeEnv)
+            {
+            TRAP(err, InitUIL(coeEnv));
+            if (err == KErrNone)
+                {
+                stopper->Start(iTestCompletionStatus);
+                iInitUISemaphore.Signal();
+                coeEnv->ExecuteD(); // runs until its terminated by the CConeThreadStopper
+                coeEnv = NULL;
+                }       
+            delete coeEnv;
+            }            
+        delete stopper;
+        }
+    if (err != KErrNone)
+        {
+        SetTestStepResult(EAbort);
+        iInitUISemaphore.Signal(); // also signal if an error occurs, otherwise test would be blocked
+        }
+    return err;
+    }
+
+
+void CTe_ConeStepBase::StopControlEnvironment()
+   {
+   CActiveScheduler::Stop();
+   }
+
+
+
+CConeThreadStopper::CConeThreadStopper(CTe_ConeStepBase& aTestStep) :
+       CActive(EPriorityStandard), iTestStep(aTestStep)
+   {
+   // empty
+   }
+
+CConeThreadStopper::~CConeThreadStopper()
+    {
+    Cancel();
+    }
+
+void CConeThreadStopper::Start(TRequestStatus *&aStopStatus)
+   {
+   CActiveScheduler::Add(this);
+   aStopStatus = &iStatus;
+   iStatus = KRequestPending;
+   SetActive();
+   }
+
+void CConeThreadStopper::DoCancel()
+    {
+    // empty
+    }
+
+void CConeThreadStopper::RunL()
+   {
+   iTestStep.StopControlEnvironment(); // stops the active scheduler of the CONE thread
+   }
+