diff -r 57c618273d5c -r bbf46f59e123 egl/egltest/endpointtestsuite/automated/tsrc/egltest_endpointimagelifetime.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/egl/egltest/endpointtestsuite/automated/tsrc/egltest_endpointimagelifetime.cpp Tue Aug 31 16:31:06 2010 +0300 @@ -0,0 +1,153 @@ +// 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 "egltest_endpointimage.h" +#include "egltest_surface.h" +#include "egltest_endpoint_util.h" + +CEglTest_LocalTestStep_EndpointImageLifetimeProcess::CEglTest_LocalTestStep_EndpointImageLifetimeProcess() + { + TRAPD(err, TEndpointUtil::SetLoggerForProcessWrapperL(Logger())); + if (err != KErrNone) + { + RDebug::Printf("Logging is not set up... Err = %d. Panicking...", err); + ENGINE_ASSERT(0); + } + } + + +//function used for creating the queues. +TVerdict CEglTest_LocalTestStep_EndpointImageLifetimeProcess::doTestStepPreambleL() + { + //Open the queues. + User::LeaveIfError(iResultOutQueue.OpenGlobal(KResultProcessQueueName)); + User::LeaveIfError(iParamsInQueue.OpenGlobal(KParamsProcessQueueName)); + SetTestStepResult(EPass); + return EPass; + } + +TVerdict CEglTest_LocalTestStep_EndpointImageLifetimeProcess::doTestStepPostambleL() + { + iResultOutQueue.Close(); + iParamsInQueue.Close(); + return EPass; + } + +CEglTest_LocalTestStep_EndpointImageLifetimeProcess::~CEglTest_LocalTestStep_EndpointImageLifetimeProcess() + { + //closing an already closed handle is harmless + iResultOutQueue.Close(); + iParamsInQueue.Close(); + } + + +TVerdict CEglTest_LocalTestStep_EndpointImageLifetimeProcess::doTestStepL() + { + EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + + if (!eglInitialize(dpy, NULL, NULL)) + { + INFO_PRINTF2(_L("EglInitialize failed, error %x"), eglGetError()); + User::Leave(KErrNotFound); + } + + TInt surfType; + iResultOutQueue.ReceiveBlocking(surfType); + + CSurface *surface = CSurface::SurfaceFactoryL(static_cast(surfType)); + CleanupStack::PushL(surface); + + surface->CreateL(EStandardSurface); + INFO_PRINTF2(_L("Using surface type %s"), surface->GetSurfaceTypeStr()); + TSurfaceId id = surface->SurfaceId(); + iParamsInQueue.SendBlocking(id); + + TInt result; + iResultOutQueue.ReceiveBlocking(result); + + // Draw something. + surface->DrawContentL(0); + User::LeaveIfError(surface->SubmitContent(ETrue)); + + if (result) + { + User::Panic(_L("Expected Panic"), 1); + } + + eglTerminate(dpy); + eglReleaseThread(); + CleanupStack::PopAndDestroy(surface); + return EPass; + } + + +// static +void CEglTest_LocalTestStep_EndpointImageLifetimeProcess::MainL() + { +#ifdef __WINS__ + // Construct and destroy a process-wide state object in emulator builds. + // This will cause initialisation of PLS for EGL and SgDriver + // and allow checking for leaks in tests + eglReleaseThread(); +#endif //__WINS__ + + // Create test step and perform CTestStep style initialisation (e.g. logging) + CEglTest_LocalTestStep_EndpointImageLifetimeProcess* testStep = new CEglTest_LocalTestStep_EndpointImageLifetimeProcess(); + if (testStep == NULL) + { + User::Leave(KErrNotFound); + } + CleanupStack::PushL(testStep); + + // perform CTestStep pre-amble + User::LeaveIfError(testStep->doTestStepPreambleL()); + + testStep->doTestStepL(); + // perform CTestStep post-amble + User::LeaveIfError(testStep->doTestStepPostambleL()); + + //clean-up + CleanupStack::PopAndDestroy(testStep); + } + + +GLDEF_C TInt E32Main() + { + //When EGL Logging is enabled this causes a file server session to be allocated + //Which needs to be done before any allocation checks otherwise the test will fail + eglReleaseThread(); + + __UHEAP_MARK; + CTrapCleanup* cleanup = CTrapCleanup::New(); + if(cleanup == NULL) + { + return KErrNoMemory; + } + + TRAPD(err, CEglTest_LocalTestStep_EndpointImageLifetimeProcess::MainL()); + + delete cleanup; + __UHEAP_MARKEND; + + return err; + } + +