diff -r 000000000000 -r 5d03bc08d59c graphicshwdrivers/surfacemgr/test/src/tthirdprocess.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graphicshwdrivers/surfacemgr/test/src/tthirdprocess.cpp Tue Feb 02 01:47:50 2010 +0200 @@ -0,0 +1,208 @@ +// Copyright (c) 2007-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: +// Surface manager multi-processed test code +// +// + +/** + @file + @test + @internalComponent - Internal Symbian test code +*/ + +#include +#include +#include +#include +#include "tsmgmultprocessshared.h" + +LOCAL_D RTest test(_L("TThirdProcess")); + + +class CTestDriverThirdProcess : public CTestDriver +{ +public: + CTestDriverThirdProcess(); + static CTestDriverThirdProcess* NewL(); +public: + void CloseSurface(); + void SurfaceInfo(); + void OpenWaitCloseOpen(); + void OpenSurface(); +}; + +CTestDriverThirdProcess::CTestDriverThirdProcess():CTestDriver() + {} + + +CTestDriverThirdProcess* CTestDriverThirdProcess::NewL() + { + CTestDriverThirdProcess * driver = new (ELeave) CTestDriverThirdProcess(); + CleanupStack::PushL(driver); + driver->CTestDriver::ConstructL(); + CleanupStack::Pop(driver); + return driver; + } + +void CTestDriverThirdProcess::CloseSurface() + { + TSurfaceId id = iChunkWrapper->GetId(); + // Close Surface + if(KErrAccessDenied == iSurfaceManager.CloseSurface(id)) + { + iTestResult |= EFirstTestPassed; + } + + iChunkWrapper->SetThirdProcessResults(iTestResult); + } + +void CTestDriverThirdProcess::SurfaceInfo() + { + TSurfaceId id = iChunkWrapper->GetId(); + // SurfaceInfo + // Call Surface Info on the surface in this process + RSurfaceManager::TInfoBuf infoBuf; + if(KErrAccessDenied == iSurfaceManager.SurfaceInfo(id,infoBuf))// This is correct? + { + iTestResult |= EFirstTestPassed; + } + + iChunkWrapper->SetThirdProcessResults(iTestResult); + } + +/** +Test 25: Test surface can be accessed from third process when creating + process dies and second process closes + +... +Process 3: Open Surface +... +Process 3: Close Surface - KErrNone +Process 3: Open Surface - KErrArgument +*/ +void CTestDriverThirdProcess::OpenWaitCloseOpen() + { + TSurfaceId id = iChunkWrapper->GetId(); + + // Open the surface using the surfaceId + if(KErrNone == iSurfaceManager.OpenSurface(id)) + { + iTestResult |= EFirstTestPassed; + } + + // Pass control back to the first process + RSemaphore sem3; + if(KErrNone == sem3.OpenGlobal(KMultiProcessSemaphore3)) + { + iTestResult |= ESecondTestPassed; + } + + User::After(100000); + sem3.Signal(); + + RSemaphore sem4; + if(KErrNone == sem4.OpenGlobal(KMultiProcessSemaphore4)) + { + iTestResult |= EThirdTestPassed; + } + + sem4.Wait(); + + // Close the surface + if(KErrNone == iSurfaceManager.CloseSurface(id)) + { + iTestResult |= EFourthTestPassed; + } + + // Open the surface + if(KErrArgument == iSurfaceManager.CloseSurface(id)) + { + iTestResult |= EFifthTestPassed; + } + + iChunkWrapper->SetThirdProcessResults(iTestResult); + + sem3.Close(); + sem4.Close(); + } + +/** +Test 27: Test closing on one process doesn't prevent opening on other processes, + provided one process still owns surface + +... +Process 3: Open Surface - KErrNone +... +*/ +void CTestDriverThirdProcess::OpenSurface() + { + TSurfaceId id = iChunkWrapper->GetId(); + + // Open Surface + if(KErrNone == iSurfaceManager.OpenSurface(id)) + { + iTestResult |= EFirstTestPassed; + } + + iChunkWrapper->SetThirdProcessResults(iTestResult); + + } + +// Real main function +void MainL() + { + test.Title(); + + test.Start(_L("Staring 3rd process")); + TInt testCase; + User::GetTIntParameter(EMultiProcessSecondSlot, testCase); + + CTestDriverThirdProcess* testDriver = CTestDriverThirdProcess::NewL(); + + switch(testCase) + { + case ECloseSurface: + testDriver->CloseSurface(); + break; + case ESurfaceInfo: + testDriver->SurfaceInfo(); + break; + case EOpenWaitCloseOpen: + testDriver->OpenWaitCloseOpen(); + break; + case EOpenSurface: + testDriver->OpenSurface(); + break; + default: + User::Leave(KErrArgument); + break; + } + + delete testDriver; + test.End(); + test.Close(); + } + +// Cleanup stack harness +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + TRAPD(error, MainL()); + _LIT(KTThirdProcessPanic,"tthirdprocessmain"); + __ASSERT_ALWAYS(!error, User::Panic(KTThirdProcessPanic, error)); + delete cleanupStack; + __UHEAP_MARKEND; + return 0; + }