graphicscomposition/openwfsupport/inc/owftestexithelper.inl
changeset 121 d72fc2aace31
parent 103 2717213c588a
child 136 62bb7c97884c
child 137 c2203c16a985
--- a/graphicscomposition/openwfsupport/inc/owftestexithelper.inl	Tue Jun 22 15:21:29 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-// 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:
-// A copy of shutdown cleanup functions that should be called  
-// to properly support openWF.
-// These methods are implemented and called from Window Server - WServ, CWsTop
-// but this copy can be called by any low-level unit tests that bypass WServ   
-// but need to provide the same clean-up behaviour.
-// @test
-// @internalTechnology
-// 
-// Currently, three things are cleaned up:
-// 1) Singleton API mutex in OpenWF implementation
-// 2) Singleton Find/Acquire mutext in Native Stream implementation
-// 3) EGL thread status 
-//
-// Note that while these cleanups are only required by OWF-C implementations,
-// the methods called should be harmless if called 
-// when some other composition solution is in action.
-#include <e32property.h>
-#include <EGL/egl.h>
-
-// IDs of p&s properties that optionally contain onexit callbacks
-// that may be used to release singletons owned by libraries at shutdown in order to make 
-// the memory leak tests work.
-// By convention, the ID is the same as the UID3 of the libary.
-static TBool gReleaseSingletonsOnExit = EFalse;
-static const TUid KOpenWfcImplCleanupKey = {0x10286FC4};     
-static const TUid KOpenWfcInteropCleanupKey = {0x10286FC5};
-
-
-static void DefineOwfSingletonKey(const TUid& aSingletonKey)
-/**
- * Defines a new property for a singleton key. WServ must only process 
- * singleton keys that it created to prevent a malicious process with the 
- * WriteDeviceData capability causing arbitrary functions to be executed.
- * 
- * @param   aSingeltonKey   The UID of the singleton key to define.
- */
-    {
-    RThread t;      
-    TUid category = { t.SecureId().iId };
-    RProperty prop;
-    
-    // Write access is restricted to THIS process
-    TInt err = prop.Define( category, aSingletonKey.iUid, 
-            RProperty::EByteArray, TSecurityPolicy( t.SecureId() ), 
-            TSecurityPolicy( t.SecureId() ), sizeof( TCallBack ) );
-    
-    if ( err == KErrNone || err == KErrAlreadyExists)
-        {
-        TCallBack cb( NULL, NULL );
-        TPckgC<TCallBack> cbPckg( cb );
-        
-        // Any error should cause the properties to be ignored
-        err = prop.Set( category, aSingletonKey.iUid, cbPckg );    
-        }      
-    //We presume that if property already exists it was previously set by this test code.
-    if ( err != KErrNone )
-        {
-        // A problem occured / the property already existed so for safety
-        // the release code should be skipped.
-        gReleaseSingletonsOnExit = EFalse;
-        }
-    
-    prop.Close();
-    t.Close();
-    }
-#define DefineOwfSingletonKeys DefineOwfSingletonKeys
-/** Call this method before starting the compositor.    
- * 
- */
-static void DefineOwfSingletonKeys()
-    {
-    // Define properties for singleton callbacks. This must only be done ONCE
-    // to ensure the properties can't be hijacked.
-    gReleaseSingletonsOnExit = ETrue;
-    DefineOwfSingletonKey(KOpenWfcInteropCleanupKey);
-    DefineOwfSingletonKey(KOpenWfcImplCleanupKey);
-    }
-
-static void DeleteOwfSingleton( const TUid& aSingletonKey )
-/**
- * Deletes a singleton object that was created on WServ's main heap.
- * 
- * @pre     The ws plugins have not been unloaded.
- * @param   aSingletonKey   The UID of the singleton which correponds to an
- *                          RProperty within WServ's category.                       
- */
-    {   
-    if ( gReleaseSingletonsOnExit )
-        {
-        RThread t;
-        TPckgBuf<TCallBack> cb;
-        RProperty prop; 
-        TInt err = prop.Get(TUid::Uid(t.SecureId().iId), aSingletonKey.iUid, cb);
-        if (err == KErrNone && cb.Length() == sizeof(TCallBack) && 
-                cb().iFunction && cb().iPtr == &User::Heap())
-            {
-            // Callback is only invoked if the heap for the singleton was the 
-            // WServ heap because the WServ memory leak tests only check this
-            // heap.
-            cb().CallBack();
-            }
-        // Errors are ignored because the purpose of this function is to free
-        // singletons in order top make memory leak checks pass.
-        prop.Close();
-        t.Close();
-        }
-    }
-/** Call this method to destroy OWF-C singletons on shut down
- * 
- */
-#define DeleteOwfSingletons DeleteOwfSingletons
-static void DeleteOwfSingletons()
-    {
-    // Free singletons on WServ heap created by libraries. Must be called
-    // BEFORE iPluginManager is deleted otherwise the library code could have
-    // been unloaded.
-    DeleteOwfSingleton(KOpenWfcImplCleanupKey);
-    DeleteOwfSingleton(KOpenWfcInteropCleanupKey);
-    /* Release any use of EGL by this thread. */
-    eglReleaseThread();
-    }
-