# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1274783997 -10800 # Node ID f93c875b566eb677399da5d9911d31ba06889e4f # Parent 7c5dd702d6d3e893925526c5fb11711770105678 Revision: 201020 Kit: 2010121 diff -r 7c5dd702d6d3 -r f93c875b566e rom/alfred.iby --- a/rom/alfred.iby Tue May 11 17:03:00 2010 +0300 +++ b/rom/alfred.iby Tue May 25 13:39:57 2010 +0300 @@ -101,6 +101,7 @@ data=DATAZ_/RESOURCE_FILES_DIR/effects/app_activate.fxml RESOURCE_FILES_DIR/effects/app_activate.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/app_exit.fxml RESOURCE_FILES_DIR/effects/app_exit.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/app_start.fxml RESOURCE_FILES_DIR/effects/app_start.fxml +data=DATAZ_/RESOURCE_FILES_DIR/effects/app_start_long.fxml RESOURCE_FILES_DIR/effects/app_start_long.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/app_start_rect.fxml RESOURCE_FILES_DIR/effects/app_start_rect.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/app_start_switch.fxml RESOURCE_FILES_DIR/effects/app_start_switch.fxml data=DATAZ_/RESOURCE_FILES_DIR/effects/app_start_switch_rect.fxml RESOURCE_FILES_DIR/effects/app_start_switch_rect.fxml diff -r 7c5dd702d6d3 -r f93c875b566e uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h --- a/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h Tue May 11 17:03:00 2010 +0300 +++ b/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h Tue May 25 13:39:57 2010 +0300 @@ -164,6 +164,12 @@ * @return Container. Ownership not transferred. */ CObjectCon* NewContainerL(); + + /** + * Releases container created by NewContainerL back to server. + * @param aContainer container to be removed. + */ + void ReleaseContainer(CObjectCon& aContainer); // from base class CAknAppServer diff -r 7c5dd702d6d3 -r f93c875b566e uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h --- a/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h Tue May 11 17:03:00 2010 +0300 +++ b/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h Tue May 25 13:39:57 2010 +0300 @@ -177,6 +177,8 @@ void EndPointerEventHandling(); void UpdateActiveSession(CAlfAppSrvSessionBase* aSession); + CAlfAppSrvSessionBase* ActiveSession(); + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); TInt FirstAlfControlGroupIndex( TInt aScreenNumber = 0); diff -r 7c5dd702d6d3 -r f93c875b566e uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h Tue May 11 17:03:00 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h Tue May 25 13:39:57 2010 +0300 @@ -30,6 +30,29 @@ #include + +enum THuiControlGroupRole + { + /** Unknown */ + EHuiUnknownContainer, + + /** Alf application control group */ + EHuiSessionContainer, + + /** WSERV window group */ + EHuiWindowGroupContainer, + + /** WSERV floating sprite group */ + EHuiWindowFloatingSpriteContainer, + + /** Group for showing effects */ + EHuiFullScreenEffectContainer, + + /** Group for FPS indicator */ + EHuiFpsIndicatorContainer + }; + + /* Forward declarations. */ class CHuiEnv; class CHuiControl; diff -r 7c5dd702d6d3 -r f93c875b566e uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Tue May 11 17:03:00 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Tue May 25 13:39:57 2010 +0300 @@ -821,6 +821,10 @@ void DoBackgroundClear(); + void ScanningAlfContent(TBool aScanning ); + void SetAlfContentChanged(TBool aChanged); + TBool AlfContentChanged(); + private: /** @@ -1030,6 +1034,10 @@ /** Current dirty region for this refresh instance */ RDirtyRegions iTempDirtyRegions; + + /** For handling alf content update */ + TBool iScanningAlfContent; + TBool iDisplayContainsChangedAlfContent; }; #endif // __HUIDISPLAY_H__ diff -r 7c5dd702d6d3 -r f93c875b566e uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h Tue May 11 17:03:00 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h Tue May 25 13:39:57 2010 +0300 @@ -234,6 +234,8 @@ virtual TBool IsVisibleContentFrozen() const = 0; + virtual void SetAlfEventWindow(CHuiVisual* aVisual) = 0; + protected: /* Constructors. */ diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp --- a/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp Tue May 25 13:39:57 2010 +0300 @@ -1363,6 +1363,10 @@ EXPORT_C void CAlfEffectObserver::SetDistractionWindow(const RWindowTreeNode& aWindow, TInt aState) { + if (!&aWindow) + { + return; + } iData->iClient.SendSynch(EAlfSetDistractionWindow, TIpcArgs(aWindow.WindowGroupId(), aWindow.ClientHandle(), aState)); } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp --- a/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Tue May 25 13:39:57 2010 +0300 @@ -22,9 +22,18 @@ #include "alfuids.h" _LIT(KAlfServerThreadName, "alfredserver"); + + +// Implements just Error() to avoid panic +NONSHARABLE_CLASS(CSimpleScheduler) : public CActiveScheduler + { + void Error( TInt ) const{} // From CActiveScheduler + }; + + static void RunServerL() { - CActiveScheduler* s=new(ELeave) CActiveScheduler; + CActiveScheduler* s=new(ELeave) CSimpleScheduler; CleanupStack::PushL(s); CActiveScheduler::Install(s); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/CommonInc/alfmoduletest.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletest.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletest.h Tue May 25 13:39:57 2010 +0300 @@ -25,7 +25,7 @@ _LIT(KAlfModuleTestChunkName, "ALF_MODULE_TEST_CHUNK"); _LIT(KAlfModuleTestMutexName, "ALF_MODULE_TEST_MUTEX"); - +const TInt KMaxSimultMeasurementCount = 10; /* * Class CAlfModuleTestData */ @@ -224,6 +224,18 @@ TInt iASE_Temp3; TInt iASE_Temp4; + class TSpeedTest + { + public: + TInt64 iHandle; + TInt iCounter; + TBool iEffects; + TInt64 iTimeStamp[5]; + }; + + TSpeedTest iTimeMap[10]; + TInt iNextFreeMap; + // Map that contains boolean items for certain test cases. TAlfModuleTestMap< TBool > iBoolMap; // Map that contains integer items for certain test cases. diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h Tue May 25 13:39:57 2010 +0300 @@ -27,6 +27,11 @@ #define AMT_DEC_COUNTER_IF(cond, member) #define AMT_SET_VALUE_IF(cond, member, val) #define AMT_GET_VALUE_IF(cond, x, member) + + #define AMT_ADD_TIME(handle, member, effects) + #define AMT_GET_TIME(x, handle, index, effects) + #define AMT_GET_TIME_POINT_COUNT(handle, x) + #define AMT_RESET_TIME(handle) #define AMT_MAP_PTR_TO_KEY_CAST( keyPtr ) #define AMT_MAP_CPTR_TO_KEY_CAST( keyCPtr ) @@ -91,6 +96,11 @@ #define AMT_SET_VALUE_IF(cond, member, val) AMT_FUNC_EXC_IF((cond), AMT_DATA()->member=(val)) #define AMT_GET_VALUE_IF(cond, x, member) AMT_FUNC_EXC_IF((cond), (x) = AMT_DATA()->member) + #define AMT_ADD_TIME(handle, member, effects) AMT_FUNC_EXC(TInt timemapIndex = 0; while(timemapIndex < 10){ if (AMT_DATA()->iTimeMap[timemapIndex].iHandle == handle){ TInt nextFreeIndex = AMT_DATA()->iTimeMap[timemapIndex].iCounter; AMT_DATA()->iTimeMap[timemapIndex].iTimeStamp[nextFreeIndex] = member; AMT_DATA()->iTimeMap[timemapIndex].iCounter++; timemapIndex = 100; break;} timemapIndex++; } if (timemapIndex == 10) { if (AMT_DATA()->iNextFreeMap == 10) { AMT_DATA()->iNextFreeMap = 0;} TInt nextFreeMap = AMT_DATA()->iNextFreeMap; AMT_DATA()->iTimeMap[nextFreeMap].iCounter = 1; AMT_DATA()->iTimeMap[nextFreeMap].iHandle = handle; AMT_DATA()->iTimeMap[nextFreeMap].iTimeStamp[0] = member; AMT_DATA()->iTimeMap[nextFreeMap].iEffects = effects; AMT_DATA()->iNextFreeMap++; /*RDebug::Printf("Handle: %d, %d %d %d", handle, timemapIndex, AMT_DATA()->iNextFreeMap, member)*/;}) + #define AMT_GET_TIME(x, handle, index, effects) AMT_FUNC_EXC(TInt timemapIndex = 0; while(timemapIndex < 10){ if (AMT_DATA()->iTimeMap[timemapIndex].iHandle == handle){ (x) = AMT_DATA()->iTimeMap[timemapIndex].iTimeStamp[index];(effects) = AMT_DATA()->iTimeMap[timemapIndex].iEffects;break;}timemapIndex++;}if(timemapIndex == 10){(x) = KErrNotFound;(effects) = EFalse;}) + #define AMT_GET_TIME_POINT_COUNT(handle, x) AMT_FUNC_EXC(TInt timemapIndex = 0; while(timemapIndex < 10){ if (AMT_DATA()->iTimeMap[timemapIndex].iHandle == handle){ (x) = AMT_DATA()->iTimeMap[timemapIndex].iCounter;timemapIndex = 100;}timemapIndex++;}if(timemapIndex == 10){(x) = KErrNotFound;}) + #define AMT_RESET_TIME(handle) AMT_FUNC_EXC(TInt timemapIndex = 0; while(timemapIndex < 10){ if (AMT_DATA()->iTimeMap[timemapIndex].iHandle == handle){ AMT_DATA()->iTimeMap[timemapIndex].iHandle = 0; AMT_DATA()->iTimeMap[timemapIndex].iCounter = 0;AMT_DATA()->iTimeMap[timemapIndex].iEffects = 0;break;}timemapIndex++;}) + // Map operation macros, that will do lock/unlock #define AMT_MAP_PTR_TO_KEY_CAST( keyPtr ) reinterpret_cast< TInt >( keyPtr ) #define AMT_MAP_CPTR_TO_KEY_CAST( keyCPtr ) AMT_MAP_PTR_TO_KEY_CAST( static_cast< const CBase* >( keyCPtr ) ) @@ -121,6 +131,16 @@ // from the window server for render stage. #define AMT_MAP_TEXT_CURSOR_HANDLE 0 +#define AMT_MAP_FORCE_SW_HANDLE 0 +#define AMT_MAP_SW_ENABLED_HANDLE 1 +#define AMT_MAP_LOW_MEMORY_MODE_HANDLE 2 + +#define AMT_MAP_CANVAS_WS_GC_TYPE 0 +#define AMT_MAP_TEXTURE_CACHE_MEMORY_LEVEL 1 +#define AMT_MAP_CACHED_IMAGES_COUNT 2 +#define AMT_MAP_CACHED_TEXTS_COUNT 3 +#define AMT_MAP_CACHED_RENDER_BUFFERS_COUNT 4 + // Notice: // Defines below will be empty if module test hook is not set. @@ -153,14 +173,22 @@ AMT_MAP_INC_VALUE_IF( ( aWindowTreeNode.NodeType() == MWsWindowTreeNode::EWinTreeNodeStandardTextCursor && aAttribute == ECursorColor ), iIntMap, AMT_MAP_TEXT_CURSOR_HANDLE, EAlfModuleTestTypeRenderStageChangeTextCursorColor ) #define AMT_MAP_RENDER_STAGE_ADD_LAYER() \ - AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeRenderStageCreateLayer ); \ - AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeRenderStageReleaseLayer ) + AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeCreateLayer ); \ + AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeReleaseLayer ); \ + AMT_MAP_APPEND_IF( aLayer, iIntMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), 0, EAlfModuleTestTypeLayerOrdinalPosition ) #define AMT_MAP_RENDER_STAGE_ADD_LAYER_LINK() \ - AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeRenderStageCreateLayer ); \ - AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeRenderStageReleaseLayer ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeCreateLayer ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( &aWindowTreeNode ), windowId, EAlfModuleTestTypeCreateLayer ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeReleaseLayer ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( &aWindowTreeNode ), windowId, EAlfModuleTestTypeReleaseLayer ); \ + AMT_MAP_APPEND_LINK( iIntMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeLayerOrdinalPosition ); \ + AMT_MAP_APPEND_LINK( iIntMap, AMT_MAP_PTR_TO_KEY_CAST( &aWindowTreeNode ), windowId, EAlfModuleTestTypeLayerOrdinalPosition ); \ \ - AMT_MAP_SET_VALUE( iSurfaceMap, windowId, aLayer.Surface(), EAlfModuleTestTypeRenderStageCreateLayer ) + AMT_MAP_SET_VALUE( iSurfaceMap, windowId, aLayer.Surface(), EAlfModuleTestTypeCreateLayer ) + +#define AMT_MAP_RENDER_STAGE_REMOVE_LAYER() \ + AMT_MAP_SET_VALUE_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), aLayer->Surface(), EAlfModuleTestTypeReleaseLayer ) // Streamer defines @@ -229,7 +257,38 @@ AMT_MAP_INC_VALUE_IF( viz, iIntMap, AMT_MAP_TEXT_CURSOR_HANDLE, EAlfModuleTestTypeBridgeChangeTextCursorFlag ); \ AMT_MAP_INC_VALUE_IF( viz, iIntMap, AMT_MAP_TEXT_CURSOR_HANDLE, EAlfModuleTestTypeBridgeChangeTextCursorColor ) - +#define AMT_MAP_BRIDGE_SET_ORDINAL_POSITION() \ + AMT_MAP_SET_VALUE_IF( windowAttributes, iIntMap, windowNodeId, windowAttributes->iOrdinalPosition, EAlfModuleTestTypeLayerOrdinalPosition ) + +#ifndef USE_MODULE_TEST_HOOKS_FOR_ALF +#define AMT_MAP_CANVAS_WS_PAINTER_SELECT_GC() +#else +#define AMT_MAP_CANVAS_WS_PAINTER_SELECT_GC() \ + if ( iCanvasWsGc ) \ + { \ + AMT_MAP_SET_VALUE( \ + iIntMap, \ + AMT_MAP_CANVAS_WS_GC_TYPE, \ + iCanvasWsGc->Type(), \ + EAlfModuleTestTypeCoreToolkitGoom ); \ + } \ + else \ + { \ + AMT_MAP_SET_VALUE( \ + iIntMap, \ + AMT_MAP_CANVAS_WS_GC_TYPE, \ + KErrNotFound, \ + EAlfModuleTestTypeCoreToolkitGoom ); \ + } +#endif // USE_MODULE_TEST_HOOKS_FOR_ALF + +#define AMT_MAP_CANVAS_TEXTURE_CACHE_SET_MEMORY_LEVEL() \ + AMT_MAP_SET_VALUE( iIntMap, AMT_MAP_TEXTURE_CACHE_MEMORY_LEVEL, iMemoryLevel, EAlfModuleTestTypeCoreToolkitGoom ); \ + AMT_MAP_SET_VALUE( iIntMap, AMT_MAP_CACHED_IMAGES_COUNT, iCachedImages.Count(), EAlfModuleTestTypeCoreToolkitGoom ); \ + AMT_MAP_SET_VALUE( iIntMap, AMT_MAP_CACHED_TEXTS_COUNT, iCachedTexts.Count(), EAlfModuleTestTypeCoreToolkitGoom ); \ + AMT_MAP_SET_VALUE( iIntMap, AMT_MAP_CACHED_RENDER_BUFFERS_COUNT, iCachedRenderBuffers.Count(), EAlfModuleTestTypeCoreToolkitGoom ) + + #endif // ALF_MODULE_TEST_DEFINES_H // End of File diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/CommonInc/alfmoduletestmap.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletestmap.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletestmap.h Tue May 25 13:39:57 2010 +0300 @@ -45,7 +45,8 @@ * Constructor to initialize variables. */ TAlfModuleTestMap(): - iArrayCount( 0 ) + iArrayCount( 0 ), + iAcceptArrayCount( 0 ) { } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h Tue May 25 13:39:57 2010 +0300 @@ -17,8 +17,6 @@ EAlfModuleTestTypeNone, // Render stage component specific tests - EAlfModuleTestTypeRenderStageCreateLayer, - EAlfModuleTestTypeRenderStageReleaseLayer, EAlfModuleTestTypeRenderStageCreateWindow, EAlfModuleTestTypeRenderStageReleaseWindow, EAlfModuleTestTypeRenderStageCreateWindowGroup, @@ -64,10 +62,17 @@ EAlfModuleTestTypeBridgeChangeTextCursorFlag, EAlfModuleTestTypeBridgeChangeTextCursorColor, EAlfModuleTestTypeBridgeVisualVisibility, + EAlfModuleTestTypeBridgeGoom, // Core toolkit component specific tests EAlfModuleTestTypeCoreToolkitDrawWindow, EAlfModuleTestTypeCoreToolkitDrawFromRenderBuffer, + EAlfModuleTestTypeCoreToolkitGoom, + + // Layer tests + EAlfModuleTestTypeCreateLayer, + EAlfModuleTestTypeReleaseLayer, + EAlfModuleTestTypeLayerOrdinalPosition, // Do not use this value when creating item. // This is just meant for Find operations when all tests are accepted. diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Tue May 25 13:39:57 2010 +0300 @@ -66,13 +66,15 @@ CHuiVisual* aTemporaryPresenterVisual, TBool aIsLayout, TBool aHideWhenFinished, - TBool aCanDestroyOrHideImmediately) + TBool aCanDestroyOrHideImmediately, + TBool aIsFullScreenEffect) : iHandle(aHandle), iEffectedVisual(aEffectedVisual), iTemporaryPresenterVisual(aTemporaryPresenterVisual), iIsLayout(aIsLayout), iHideWhenFinished(aHideWhenFinished), - iCanDestroyOrHideImmediately(aCanDestroyOrHideImmediately) + iCanDestroyOrHideImmediately(aCanDestroyOrHideImmediately), + iIsFullScreenEffect(aIsFullScreenEffect) { // RDebug::Printf("TEffectCleanupStruct - 0x%x 0x%x, %d", iEffectedVisual, iTemporaryPresenterVisual, iIsLayout ); }; @@ -84,7 +86,9 @@ TBool iHideWhenFinished; TBool iCanDestroyOrHideImmediately; - + + TBool iIsFullScreenEffect; + // not own, unless iEffectedVisual has EShouldDestroy flag enabled CHuiVisual* iEffectedVisual; // owned @@ -427,7 +431,7 @@ * @return ETrue, if layout have been initialized succesfully for the effect EFalse, if any visuals have been removed. Effect should not be applied. */ - TBool SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately); + TBool SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsFullScreenEffect, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately); /* * AddEffectItemL @@ -444,8 +448,10 @@ CHuiControl* aEffectControl, TBool aInsertTemporaryVisual, TBool& aItemDestroyed, + TBool aIsFullScreenEffect, TBool aIsExitEffect = EFalse, - TBool aCanDestroyOrHideImmediately = EFalse); + TBool aCanDestroyOrHideImmediately = EFalse + ); /* @@ -457,6 +463,7 @@ CHuiLayout* aTargetLayout, CHuiControl* aEffectControlGroup, TInt& aItemsDestroyed, + TBool aIsFullScreenEffect, TBool aAddLayout = ETrue, TBool aIsExitEffect = EFalse, TBool aCanDestroyOrHideImmediately = EFalse); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h Tue May 25 13:39:57 2010 +0300 @@ -239,6 +239,7 @@ TInt iToSecureId; TInt iFromSecureId; TRect iRect; + TBool iTimeoutTriggered; // ETrue if waiting for window group to appear TBool iWaitingWindowGroup; diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Tue May 25 13:39:57 2010 +0300 @@ -26,27 +26,6 @@ #include #include "alfshareddisplaycoecontrol.h" -enum TAlfControlGroupRole - { - /** Unknown */ - EAlfUnknownContainer, - - /** Alf application control group */ - EAlfSessionContainer, - - /** WSERV window group */ - EAlfWindowGroupContainer, - - /** WSERV floating sprite group */ - EAlfWindowFloatingSpriteContainer, - - /** Group for showing effects */ - EAlfFullScreenEffectContainer, - - /** Group for FPS indicator */ - EAlfFpsIndicatorContainer - }; - NONSHARABLE_CLASS( TAlfControlGroupEntry ) { public: diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp Tue May 25 13:39:57 2010 +0300 @@ -1058,6 +1058,18 @@ return iObjectConIx->CreateL(); } +// --------------------------------------------------------------------------- +// Releases container back to server. +// --------------------------------------------------------------------------- +// +void CAlfAppServer::ReleaseContainer(CObjectCon& aContainer) + { + if ( iObjectConIx ) + { + iObjectConIx->Remove(&aContainer); + } + } + // ======== RnD FUNCTIONS ======== // --------------------------------------------------------------------------- diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsession.cpp Tue May 25 13:39:57 2010 +0300 @@ -1592,9 +1592,9 @@ // If we are reusing deleted texture, remove it from "deleted" array TInt index = iTextures.Find(&texture); - if (index != KErrNotFound) + if (index == KErrNotFound) { - iTextures.Remove(index); + iTextures.Append(env->TextureManager().Texture(id)); } @@ -1727,9 +1727,9 @@ // If we are reusing deleted texture, remove it from "deleted" array TInt index = iTextures.Find(&textureRef); - if (index != KErrNotFound) + if (index == KErrNotFound) { - iTextures.Remove(index); + iTextures.Append(env->TextureManager().Texture(id)); } // Add texture to skin content diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Tue May 25 13:39:57 2010 +0300 @@ -154,6 +154,11 @@ { iData->iSystemEvent.Complete(KErrCancel); } + + if ( iData->iContainer ) + { + iHost->ReleaseContainer( *iData->iContainer ); + } delete iData; } iHost = NULL; diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Tue May 25 13:39:57 2010 +0300 @@ -67,6 +67,12 @@ #define ALF_USE_EMULATOR_LAYOUT_SWITCH_BUTTON #endif +// Implements just Error() to avoid panic +NONSHARABLE_CLASS(CSimpleScheduler) : public CActiveScheduler + { + void Error( TInt ) const{} // From CActiveScheduler + }; + NONSHARABLE_CLASS(TAlfEffectObserver): public MHuiEffectObserver { public: @@ -603,7 +609,7 @@ if (err == KErrNone) { // Set up scheduler and cleanup stack for this thread - CActiveScheduler* scheduler = new CActiveScheduler; + CActiveScheduler* scheduler = new CSimpleScheduler(); if (!scheduler) { return KErrNoMemory; @@ -952,6 +958,11 @@ } } +CAlfAppSrvSessionBase* CAlfAppUi::ActiveSession() + { + return iData->iActiveSession; + } + // --------------------------------------------------------------------------- // From class CAknAppUi. // Handles window server event. diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Tue May 25 13:39:57 2010 +0300 @@ -361,7 +361,7 @@ TInt aClientSideGroupId, CHuiCanvasVisual* aVisual ) { - __ALFFXLOGSTRING1("CAlfBridge::AddVisual 0x%x", aWindowNodeId); + __ALFFXLOGSTRING4("CAlfBridge::AddVisual id: %d (%d,%d), visual: 0x%x", aWindowNodeId, aClientSideId, aClientSideGroupId, aVisual); THashVisualStruct visualStruct( aVisual, aClientSideId, aClientSideGroupId); iWindowHashArray.Insert( aWindowNodeId, visualStruct ); iPreviouslySearchedVisualId = aWindowNodeId; @@ -406,7 +406,7 @@ iPreviouslySearchedVisual = visualStruct->iVisual; return iPreviouslySearchedVisual; } - __ALFFXLOGSTRING1("CAlfBridge::FindVisual - Visual 0x%x not found", aWindowNodeId); + __ALFLOGSTRING1("CAlfBridge::FindVisual - Visual 0x%x not found", aWindowNodeId); return NULL; } @@ -664,13 +664,16 @@ TBool anyVisualHasEffect(EFalse); TInt familyIndex(0); TInt familySize = familyTree.Count(); + TInt activeEffectIndex = KErrNotFound; while(familyIndex < familySize && !anyVisualHasEffect) { - anyVisualHasEffect = HasActiveEffect(familyTree[familyIndex++]); + anyVisualHasEffect = HasActiveEffect(familyTree[familyIndex++], activeEffectIndex); + } if (anyVisualHasEffect) { + TInt activeEffectHandle = iEffectCleanupStack[activeEffectIndex].iHandle; __ALFFXLOGSTRING1("Layout 0x%x has external content", layout); // EHuiVisualFlagShouldDestroy destroy flag should have come for the windows in this layout already layout->SetFlags(EHuiVisualFlagShouldDestroy); @@ -692,10 +695,16 @@ effectControlGroup.AppendL(layout, effectControlGroupLayout); // this will remove it from the previous layout layout->SetOwner(effectControlGroup); - for(TInt familyIndex = 0; familyIndex < familyTree.Count();familyIndex++) - { - familyTree[familyIndex]->SetOwner(effectControlGroup); - } + for(TInt familyIndex = familyTree.Count() - 1; familyIndex >= 0; --familyIndex) + { + familyTree[familyIndex]->SetOwner(effectControlGroup); + + if (!HasActiveEffect(familyTree[familyIndex])) + { + TInt dummy; + AddEffectItemL(activeEffectHandle, familyTree[familyIndex], NULL, NULL, EFalse, dummy, ETrue, EFalse); + } + } } else { @@ -710,6 +719,8 @@ if ( removedVisual != layout ) // let control group delete the layout { control.Remove(removedVisual); // remove ownership from the original control (group) + __ALFFXLOGSTRING1("CAlfBridge::DeleteControlGroupL - adding to orphonage 0x%x", layout); + RemoveTemporaryPresenterVisual(removedVisual); if ( removedVisual->Layout() == layout ) { iOrphanStorage->AppendL( removedVisual ); @@ -762,7 +773,7 @@ cntrl->ConstructL(); group->AppendL(cntrl); CleanupStack::Pop(cntrl); - cntrl->SetRole(EAlfWindowGroupContainer); + cntrl->SetRole(EHuiWindowGroupContainer); layout = CHuiCanvasVisual::AddNewL(*cntrl); layout->SetTagL(KAlfWindowGroupContainerControlTag); @@ -816,7 +827,7 @@ } } entry.iScreenNumber = aScreenNumber; -// entry.iRole = EAlfWindowGroupContainer; +// entry.iRole = EHuiWindowGroupContainer; iAlfScreens[aScreenNumber]->iControlGroups.Append(entry); CleanupStack::Pop(group); @@ -861,7 +872,7 @@ // disappear. if ( aGroup.Control(0).Visual(0).Effect() ) { - if ( aGroup.Control(0).Role() != EAlfWindowGroupContainer ) + if ( aGroup.Control(0).Role() != EHuiWindowGroupContainer ) { // The case where the application control group is deleted by window server // has been solved by deleting the tag when window server wants to delete @@ -871,13 +882,13 @@ } } - if (aGroup.Control(0).Role() == EAlfWindowGroupContainer) + if (aGroup.Control(0).Role() == EHuiWindowGroupContainer) { // Window group control groups ShowWindowGroupControlGroupL(aRoster, aGroup, aWhere, aScreenNumber); aGroup.SetAcceptInput(EFalse); } - else if (aGroup.Control(0).Role() == EAlfSessionContainer) + else if (aGroup.Control(0).Role() == EHuiSessionContainer) { // ALF application control groups ShowSessionContainerControlGroupL(aRoster, aGroup, aWhere, aScreenNumber); @@ -965,7 +976,7 @@ move = ETrue; } - if (aRoster.ControlGroup(i).Control(0).Role() == EAlfSessionContainer) + if (aRoster.ControlGroup(i).Control(0).Role() == EHuiSessionContainer) { index++; } @@ -1039,7 +1050,7 @@ break; } - if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer && + if (aRoster.ControlGroup(i).Control(0).Role() == EHuiWindowGroupContainer && &aRoster.ControlGroup(i) != &aGroup) { index++; @@ -1052,7 +1063,7 @@ // Topmost for (TInt i=aRoster.Count() - screen->FixedControlGroupCount(); i >= 0; i--) { - if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer) + if (aRoster.ControlGroup(i).Control(0).Role() == EHuiWindowGroupContainer) { // increasing the count, assuming that WindowControlGroup is not in the Roster i++; @@ -1070,7 +1081,7 @@ // void CAlfBridge::SetAlfWindowGroupId(TInt aAlfWindowGroupId) { - iAlfWindowGroupId = aAlfWindowGroupId; + iAlfWindowGroupId = aAlfWindowGroupId; // check if hithcock window group was already there TInt secureId = RThread().SecureId(); if (iAlfScreens.Count()) @@ -1081,6 +1092,11 @@ iAlfScreens[0]->iControlGroups[i].iClientWindowGroupId != CHuiStatic::RootWin(0)->Identifier()) { iAlfWindowGroupNodeId = iAlfScreens[0]->iControlGroups[i].iWindowGroupNodeId; + + CHuiControlGroup* controlGroup = FindControlGroup(iAlfWindowGroupNodeId, 0); + CHuiControl& control = controlGroup->Control(0); + CHuiVisual* layout = &control.Visual(0); + iAlfScreens[0]->iDisplay->Roster().SetAlfEventWindow(layout); return; } } @@ -1115,7 +1131,7 @@ for (TInt j=0; jiDisplay->Roster(); for (TInt j=0; jiDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if (control.Role() == EAlfFpsIndicatorContainer) + if (control.Role() == EHuiFpsIndicatorContainer) { // FPS container doesn't contain canvas visuals continue; @@ -1454,11 +1470,18 @@ // Dont mess with alf control group visuals, alf session handling does it for us - if (control.Role() == EAlfSessionContainer) + if (control.Role() == EHuiSessionContainer) { CHuiLayout* hostContainer = control.ContainerLayout( NULL ); - TInt flags = hostContainer->Flags(); - if (!fullscreenCovered || alfClientWindowGroupVisible) + TInt flags = hostContainer->Flags(); + CAlfAppSrvSessionBase* activeSession = NULL; + if (iAppUi) + { + activeSession = iAppUi->ActiveSession(); + } + // !fullscreenCovered need to be checked because for fullscreen + // alf applications alf event window group could be on top of alf client windowgroup + if ( (alfClientWindowGroupVisible || !fullscreenCovered) && activeSession) { // clear inactive flag if client has not made this controlgroup hidden if(!(flags&EHuiVisualFlagUnderOpaqueHint)) @@ -1608,8 +1631,8 @@ if (isLayoutActive && !hasActiveVisualsInVisualTree) { // Setting also the root visual (layout) as inactive, if it had none - // active children. This is because otherwise the Inactive checks won't - // work correctly within RosterImpl ScanDirty & ClearChanged phases. + // active children. This is because otherwise the Inactive checks won't + // work correctly within RosterImpl ScanDirty & ClearChanged phases. layout->SetFlag(EHuiVisualFlagInactive); } else if(!isLayoutActive && hasActiveVisualsInVisualTree) @@ -1686,9 +1709,11 @@ iHomeScreenPSValue = value; } } - - screen->iDisplay->SetForegroundTextureOptions( alfWindowGroupFoundVisible | alfClientWindowGroupVisible ); - + if ( iSwRenderingEnabled ) + { + screen->iDisplay->SetForegroundTextureOptions( alfWindowGroupFoundVisible | alfClientWindowGroupVisible ); + } + // Finally, if there are fadeeffects applied to windowgroups, make sure first one does not // blend itself, but other windowgroups do blend. Otherwise windowgrouops above others // would clear the screen areas where they do not really draw. @@ -1711,11 +1736,7 @@ if ((controlgroup.ResourceId() == iAlfWindowGroupNodeId)) { - // Special handling for ALF fading...fading happens via empty alf originated event window group - TInt flags = layout->Effect()->EffectFlags(); - flags |= KHuiFxEnableBackgroundInAllLayers; // This forces effect to happen to background pixels that are read from surface. - flags |= KHuiFxFrozenBackground; // To get optimal UI performance, we ignore changes in ALF scene when it is faded. - layout->Effect()->SetEffectFlags(flags); + // no special actions needed currently for alf content. } firstFadedWindowGroupFound = ETrue; } @@ -1959,8 +1980,8 @@ // Sprites and effects as we consider them always as transparent and also // if controlgroup is transformed somehow - if (aControl.Role() == EAlfFullScreenEffectContainer - || aControl.Role() == EAlfWindowFloatingSpriteContainer || + if (aControl.Role() == EHuiFullScreenEffectContainer + || aControl.Role() == EHuiWindowFloatingSpriteContainer || aControlGroup.IsTransformed()) { visualIsOpaque = EFalse; @@ -2160,8 +2181,8 @@ CHuiControlGroup& controlgroup = iAlfScreens[0]->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if ( control.Role() == EAlfSessionContainer || - control.Role() == EAlfFpsIndicatorContainer ) + if ( control.Role() == EHuiSessionContainer || + control.Role() == EHuiFpsIndicatorContainer ) { continue; } @@ -2711,6 +2732,9 @@ CHuiLayout* lVisual = familyTree[familyIndex]; lVisual->Owner().Remove(lVisual); iOrphanStorage->AppendL( lVisual ); + RemoveTemporaryPresenterVisual(lVisual); + + __ALFLOGSTRING1("CAlfBridge::DestroyWindow - orphons: %d", iOrphanStorage->VisualCount()); } familyTree.Close(); @@ -3124,7 +3148,7 @@ TInt wsWindowGroupCount = 0; for (TInt i=0; iiDisplay->Roster().Count();i++) { - if (iAlfScreens[screenNumber]->iDisplay->Roster().ControlGroup(i).Control(0).Role()==EAlfWindowGroupContainer) + if (iAlfScreens[screenNumber]->iDisplay->Roster().ControlGroup(i).Control(0).Role()==EHuiWindowGroupContainer) { wsWindowGroupCount++; } @@ -3200,7 +3224,9 @@ } } - iAlfScreens[screenNumber]->SetVisualTreeVisibilityChanged(ETrue); // TODO: Check if really changed + iAlfScreens[screenNumber]->SetVisualTreeVisibilityChanged(ETrue); // TODO: Check if really changed + + AMT_MAP_BRIDGE_SET_ORDINAL_POSITION(); } // --------------------------------------------------------------------------- @@ -3255,6 +3281,27 @@ { viz->ClearCommandSet(); } +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + if (!(viz->Flags() & EHuiVisualFlagInactive)) + { + TInt secureId = viz->Owner().ControlGroup()->SecureId(); + TInt64 temp(KErrNotFound); + TBool effects(EFalse); + AMT_GET_TIME(temp, secureId, 0, effects); + if (temp != KErrNotFound && effects == EFalse) + { + TTime time; + time.UniversalTime(); + TTime startTime(temp); + + TInt64 reactionTime = time.MicroSecondsFrom(startTime).Int64(); + + RDebug::Printf("CAlfBridge::HandlePostCanvasBufferL - Reaction time \t0x%x\t%f", secureId, (TReal)reactionTime / 1000000.0f ); + AMT_RESET_TIME(secureId); + } + } +#endif + // If tracking has been enabled for this CHuiCanvasVisual object, the buffers will be marked for tracking aswell in CHuiCanvasVisual switch( bufferAttributes->iPartStatus ) { @@ -4086,7 +4133,7 @@ CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if( control.Role() == EAlfWindowGroupContainer) + if( control.Role() == EHuiWindowGroupContainer) { // Only update layout which are made to correspond window groups. // Layouts that fullscreen effects are applied to @@ -4169,6 +4216,7 @@ effectFlags |= KHuiFxEffectExcludeChildrenFlag; //RDebug::Print(_L("CAlfBridge::SetupFadeEffectL - no children faded by parent")); } + __ALFFXLOGSTRING1("CAlfBridge::SetupFadeEffectL - insert fade 0x%x", &aVisual); TRAP( err, engine->LoadEffectL(*iFadeEffectFile, effect, aVisual.Effectable(), NULL, NULL, 0, effectFlags ) ); didFadeEffectLoad = ETrue; } @@ -4180,6 +4228,7 @@ if (alreadyFaded) { aVisual.SetEffect( NULL ); + __ALFFXLOGSTRING1("CAlfBridge::SetupFadeEffectL - remove fade: 0x%x", &aVisual); alreadyFaded = EFalse; } } @@ -4265,7 +4314,9 @@ else { __ALFLOGSTRING("CAlfBridge::HandleMoveWindowToNewGroupL cannot find new group! orphaning the visual"); - iOrphanStorage->AppendL( viz ); + + RemoveTemporaryPresenterVisual(viz); + iOrphanStorage->AppendL( viz ); } } else @@ -4518,7 +4569,7 @@ if (!HasActiveEffect(aToLayout, dummy)) { __ALFFXLOGSTRING2("CAlfBridge::HandleGfxEventL - Add layout 0x%x with handle %d to cleanupstack", aToLayout, aEvent.iHandle); - AddEffectItemL(aEvent.iHandle, aToLayout, NULL, NULL, EFalse, dummy, EFalse); + AddEffectItemL(aEvent.iHandle, aToLayout, NULL, NULL, EFalse, dummy, ETrue, EFalse); } } // Screenshot was requested, but it could not be taken. Lets cancel the effect. @@ -4575,7 +4626,7 @@ } // this will tag the visual, that they cannot be hidden by HandleVisualVisibility // Initialize layout for the exit effect - iLayoutInitializedForExitEffect = SetupEffectLayoutContainerL(aEvent.iHandle, aToLayout, ETrue, aEvent.iCanDestroyOrHideImmediately); + iLayoutInitializedForExitEffect = SetupEffectLayoutContainerL(aEvent.iHandle, aToLayout, ETrue, ETrue, aEvent.iCanDestroyOrHideImmediately); __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - EBeginFullscreen - iLayoutInitializedForExitEffect: %d", iLayoutInitializedForExitEffect); aEvent.iSetupDone = iLayoutInitializedForExitEffect; } @@ -4625,7 +4676,7 @@ __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - Removing the layout 0x%x with screenshot from iEffectCleanupStack", aToLayout); iEffectCleanupStack.Remove(index); } - layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, EFalse, aEvent.iCanDestroyOrHideImmediately); + layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, ETrue, EFalse, aEvent.iCanDestroyOrHideImmediately); aEvent.iSetupDone = layoutEffectable; aToLayout->SetStoredRenderBufferModificationsEnabled(ETrue); } @@ -4695,7 +4746,7 @@ // Freeze only, if buffer was reserved succesfully aLayout->SetFreezeState(ETrue); TBool itemsDestroyed; - AddEffectItemL(aHandle, aLayout, NULL, NULL, EFalse, itemsDestroyed, EFalse); + AddEffectItemL(aHandle, aLayout, NULL, NULL, EFalse, itemsDestroyed, ETrue, EFalse); iFullScreenEffectData->iAppStartScreenshotItemHandle = aHandle; } } @@ -4870,8 +4921,6 @@ } else // MAlfGfxEffectPlugin::EEndFullscreen { - stream.Release(); - // End fullscreen signal received. We proceed only if there is really // effect ongoing and "end fullscreen" hasn't already been processed. @@ -4880,7 +4929,22 @@ __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - END: fx ready"); return; } - + // Load the whole structure. If timeout was triggered then request effect name + // is updated. + CFullScreenEffectState* fxData = new (ELeave) CFullScreenEffectState; + CleanupStack::PushL( fxData ); + fxData->ConstructL( action, stream ); + iFullScreenEffectData->iTimeoutTriggered = fxData->iTimeoutTriggered; + if (fxData->iTimeoutTriggered) + { + delete iFullScreenEffectData->iEffectName; + iFullScreenEffectData->iEffectName = NULL; + iFullScreenEffectData->iEffectName = fxData->iEffectName->AllocL(); + + } + CleanupStack::PopAndDestroy( fxData ); + fxData = NULL; + __ALFFXLOGSTRING("HandleGfxEffectsL - process end"); iFullScreenEffectData->iEndFullScreen = ETrue; @@ -4890,6 +4954,7 @@ iFullScreenEffectData->iDrawingCompleteTimer->Cancel(); } #endif + stream.Release(); } CFullScreenEffectState* fxData = iFullScreenEffectData; @@ -5078,7 +5143,7 @@ } else { - __ALFFXLOGSTRING2("CAlfBridge::HandleGfxControlEffectsL - Control not found. iClientHandle %d, iClientGroupHandle %d", + __ALFFXLOGSTRING2("CAlfBridge::HandleSetDistractionWindowL - Control not found. iClientHandle %d, iClientGroupHandle %d. Cache request.", fxData->iClientHandle, fxData->iClientGroupHandle); return; @@ -5141,8 +5206,10 @@ CHuiControl* aEffectControl, TBool aInsertTemporaryVisual, TInt& aItemDestroyed, + TBool aIsFullScreenEffect, TBool aIsExitEffect, - TBool aCanDestroyOrHideImmediately) + TBool aCanDestroyOrHideImmediately + ) { CHuiCanvasVisual* temporaryPresenterVisual = NULL; TInt enableEffect = ETrue; @@ -5192,7 +5259,8 @@ temporaryPresenterVisual, ETrue, aIsExitEffect, - aCanDestroyOrHideImmediately); + aCanDestroyOrHideImmediately, + aIsFullScreenEffect); iEffectCleanupStack.AppendL(item); } else @@ -5202,7 +5270,8 @@ TEffectCleanupStruct item = TEffectCleanupStruct(aEffectHandle, aSourceVisual, NULL, EFalse, aIsExitEffect, - aCanDestroyOrHideImmediately); + aCanDestroyOrHideImmediately, + aIsFullScreenEffect); iEffectCleanupStack.AppendL(item); } } @@ -5215,6 +5284,7 @@ CHuiLayout* aTargetLayout, CHuiControl* aEffectControl, TInt& aItemsDestroyed, + TBool aIsFullScreenEffect, TBool aAddLayout, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately) @@ -5222,7 +5292,7 @@ __ALFFXLOGSTRING2("CAlfBridge::AddToEffectLayoutContainerL 0x%x is having %d children", aSourceLayout, aSourceLayout->Count()); if (aAddLayout) { - AddEffectItemL(aEffectHandle, aSourceLayout, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsExitEffect, aCanDestroyOrHideImmediately); + AddEffectItemL(aEffectHandle, aSourceLayout, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsFullScreenEffect, aIsExitEffect, aCanDestroyOrHideImmediately); } for (TInt i = 0; i < aSourceLayout->Count(); i++) @@ -5232,10 +5302,10 @@ if (sourceVisual.Count()) { CHuiLayout& layout = static_cast (aSourceLayout->Visual(i)); - AddToEffectLayoutContainerL(aEffectHandle, &layout, NULL, aEffectControl, aItemsDestroyed, EFalse,aIsExitEffect, aCanDestroyOrHideImmediately ); + AddToEffectLayoutContainerL(aEffectHandle, &layout, NULL, aEffectControl, aItemsDestroyed, aIsFullScreenEffect, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately ); } TInt oldItemsDestroyed = aItemsDestroyed; - AddEffectItemL(aEffectHandle, &sourceVisual, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsExitEffect, aCanDestroyOrHideImmediately); + AddEffectItemL(aEffectHandle, &sourceVisual, aTargetLayout, aEffectControl, EFalse, aItemsDestroyed, aIsFullScreenEffect, aIsExitEffect, aCanDestroyOrHideImmediately); if (oldItemsDestroyed != aItemsDestroyed) { // Visual was destroyed. If so, then we must adjust index. @@ -5245,7 +5315,7 @@ __ALFFXLOGSTRING2("CAlfBridge::AddToEffectLayoutContainerL 0x%x end of children", aSourceLayout, aSourceLayout->Count()); } -TBool CAlfBridge::SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately) +TBool CAlfBridge::SetupEffectLayoutContainerL(TInt aHandle,CHuiLayout* aSourceLayout, TBool aIsFullScreenEffect, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately) { __ALFFXLOGSTRING4("CAlfBridge::SetupEffectLayoutContainerL - aHandle: %d, aSourceLayout: 0x%x, aIsExitEffect: % d, CanDestroyOrHideImmediately: %d >>", aHandle, @@ -5266,17 +5336,17 @@ // CHuiCanvasVisual* temporaryPresenterLayout = CHuiCanvasVisual::AddNewL( effectControlGroup, &effectControlGroupLayout); // create presenter visual and set bindings TInt itemsDestroyed(0); - AddToEffectLayoutContainerL(aHandle, aSourceLayout, NULL, &effectControlGroup, itemsDestroyed, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately); + AddToEffectLayoutContainerL(aHandle, aSourceLayout, NULL, &effectControlGroup, itemsDestroyed, aIsFullScreenEffect, EFalse, aIsExitEffect, aCanDestroyOrHideImmediately); if (aIsExitEffect) { - CHuiCanvasVisual* temporaryPresenterVisual = AddEffectItemL(aHandle, aSourceLayout, &effectControlGroupLayout, &effectControlGroup, ETrue, itemsDestroyed, aIsExitEffect, EFalse); + CHuiCanvasVisual* temporaryPresenterVisual = AddEffectItemL(aHandle, aSourceLayout, &effectControlGroupLayout, &effectControlGroup, ETrue, itemsDestroyed, aIsFullScreenEffect, aIsExitEffect, EFalse); aSourceLayout->SetFlag(EHuiVisualFlagDrawOnlyAsExternalContent); __ALFFXLOGSTRING3("CAlfBridge::SetupEffectLayoutContainerL - adding handle: %d, 0x%x (source layout)-> 0x%x (presenter layout) to iEffectCleanupStack", aHandle, aSourceLayout, temporaryPresenterVisual); } else { - AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, EFalse, itemsDestroyed, EFalse, EFalse); + AddEffectItemL(aHandle, aSourceLayout, NULL, &effectControlGroup, EFalse, itemsDestroyed, aIsFullScreenEffect, EFalse, EFalse); __ALFFXLOGSTRING2("CAlfBridge::SetupEffectLayoutContainerL - adding handle: %d, 0x%x (source layout), NO presenter layout) to iEffectCleanupStack", aHandle, aSourceLayout); } iAlfScreens[0]->iVisualTreeVisibilityChanged = ETrue; @@ -5381,7 +5451,7 @@ CHuiFxEngine* engine = NULL; // engine is not owned by us, it is a member of HuiEnv engine = iHuiEnv->EffectsEngine(); - if (engine) + if (engine && aCanvasVisual) { if (NeedsStoredBuffers(engine, *aEvent.iEffectName)) { @@ -5410,11 +5480,11 @@ aCanvasVisual->iOpacity.Set(KAlfVisualDefaultOpacity); // visual->SetFlag(EHuiVisualFlagShouldBeHidden); }*/ - layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, ETrue, EFalse); + layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, ETrue, EFalse); } else { - layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, EFalse); + layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle, aCanvasVisual, EFalse, EFalse, EFalse); } if (layoutEffectable) { @@ -5473,8 +5543,18 @@ sourceViz2->FreeRenderBuffer(); } sourceViz->ClearFlag(EHuiVisualFlagDrawOnlyAsExternalContent); - TBool hideVisual = sourceViz->Flags() & EHuiVisualFlagShouldBeHidden; - TBool showVisual = sourceViz->Flags() & EHuiVisualFlagShouldBeShown; + TBool hideVisual = EFalse; + TBool showVisual = ETrue; + if(!aEffectItem.iIsFullScreenEffect) + { + hideVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeHidden) || aEffectItem.iHideWhenFinished; + showVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeShown) && !aEffectItem.iHideWhenFinished; + } + else + { + hideVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeHidden); + showVisual = (sourceViz->Flags() & EHuiVisualFlagShouldBeShown); + } TBool destroyVisual = sourceViz->Flags() & EHuiVisualFlagShouldDestroy; TBool shouldInactivate = sourceViz->Flags() & EHuiVisualFlagShouldBeInactive; TBool shouldBeUnderOpaqueHint = sourceViz->Flags() & EHuiVisualFlagShouldBeUnderOpaqueHint; @@ -5837,7 +5917,7 @@ TFileName processName = iCommandDebug->WServClientFileName( clientWindowGroupId, CHuiStatic::WsSession() ); #endif - if (indexedGroup.Control(0).Role() == EAlfWindowGroupContainer) + if (indexedGroup.Control(0).Role() == EHuiWindowGroupContainer) { if (aRoster.ControlGroup(i).ResourceId() == iAlfWindowGroupNodeId) { @@ -5856,7 +5936,7 @@ #endif } } - else if (indexedGroup.Control(0).Role() == EAlfSessionContainer) + else if (indexedGroup.Control(0).Role() == EHuiSessionContainer) { #ifdef HUI_DEBUG_TRACK_DRAWING __ALFLOGSTRING2(">> %d ALF GROUP, %d", i, clientWindowGroupId); @@ -5864,7 +5944,7 @@ __ALFLOGSTRING1(">> %d ALF GROUP", i); #endif } - else if (indexedGroup.Control(0).Role() == EAlfWindowFloatingSpriteContainer) + else if (indexedGroup.Control(0).Role() == EHuiWindowFloatingSpriteContainer) { #ifdef HUI_DEBUG_TRACK_DRAWING __ALFLOGSTRING3(">> %d FLOATING SPRITE GROUP %S, %d", i, &processName, clientWindowGroupId); @@ -5872,7 +5952,7 @@ __ALFLOGSTRING1(">> %d FLOATING SPRITE GROUP", i); #endif } - else if (indexedGroup.Control(0).Role() == EAlfFullScreenEffectContainer) + else if (indexedGroup.Control(0).Role() == EHuiFullScreenEffectContainer) { #ifdef HUI_DEBUG_TRACK_DRAWING __ALFLOGSTRING3(">> %d EFFECT GROUP %S, %d", i, &processName, clientWindowGroupId ); @@ -5880,7 +5960,7 @@ __ALFLOGSTRING1(">> %d EFFECT GROUP", i); #endif } - else if (indexedGroup.Control(0).Role() == EAlfFpsIndicatorContainer) + else if (indexedGroup.Control(0).Role() == EHuiFpsIndicatorContainer) { #ifdef HUI_DEBUG_TRACK_DRAWING __ALFLOGSTRING3(">> %d FPS GROUP %S, %d", i, &processName, clientWindowGroupId ); @@ -6119,6 +6199,13 @@ } iSwRenderingEnabled = aEnable; + + AMT_MAP_SET_VALUE( + iBoolMap, + AMT_MAP_SW_ENABLED_HANDLE, + iSwRenderingEnabled, + EAlfModuleTestTypeBridgeGoom ); + for (TInt i=0; iFlags(); @@ -6666,8 +6767,8 @@ // Sprites and effects as we consider them always as transparent and also // if controlgroup is transformed somehow - if (aControl.Role() == EAlfFullScreenEffectContainer - || aControl.Role() == EAlfWindowFloatingSpriteContainer || + if (aControl.Role() == EHuiFullScreenEffectContainer + || aControl.Role() == EHuiWindowFloatingSpriteContainer || aControlGroup.IsTransformed()) { visualIsOpaque = EFalse; @@ -6709,7 +6810,7 @@ CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if (control.Role() == EAlfFpsIndicatorContainer || control.Role() == EAlfSessionContainer) + if (control.Role() == EHuiFpsIndicatorContainer || control.Role() == EHuiSessionContainer) { // FPS container doesn't contain canvas visuals and alfsession containers cannot have surfaces continue; diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp Tue May 25 13:39:57 2010 +0300 @@ -818,22 +818,16 @@ RMemReadStream& aStream) { iAction = aAction; - iHandle = aStream.ReadInt32L(); - iType = aStream.ReadInt32L(); + iTimeoutTriggered = aStream.ReadInt32L(); iToWg = aStream.ReadInt32L(); iFromWg = aStream.ReadInt32L(); iToAppId = aStream.ReadInt32L(); iFromAppId = aStream.ReadInt32L(); - if (iType == AknTransEffect::EParameterType) - { - iToSecureId = aStream.ReadInt32L(); - iFromSecureId = aStream.ReadInt32L(); - /*screen1 =*/aStream.ReadInt32L(); - /*screen2 =*/aStream.ReadInt32L(); - } + iToSecureId = aStream.ReadInt32L(); + iFromSecureId = aStream.ReadInt32L(); /*TInt flags =*/ aStream.ReadInt32L(); iRect.iTl.iX = aStream.ReadInt32L(); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Tue May 25 13:39:57 2010 +0300 @@ -139,7 +139,7 @@ #ifdef ALF_DEBUG_TRACK_DRAWING delete iCommandDebugger; #endif - + iUpdateRegion.Close(); #ifdef USE_MODULE_TEST_HOOKS_FOR_ALF delete AMT_CONTROL(); Dll::FreeTls(); @@ -1034,6 +1034,8 @@ iStream->ReadInt8L(); ReadRegionL( iStream, newOpaqueRegion ); // TODO: Implement actions + newTransparentRegion.Close(); + newOpaqueRegion.Close(); } // --------------------------------------------------------------------------- diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Tue May 25 13:39:57 2010 +0300 @@ -142,7 +142,7 @@ CHuiControl* cntrl = new (ELeave) CHuiControl(aHuiEnv); CleanupStack::PushL(cntrl); cntrl->ConstructL(); - cntrl->SetRole(EAlfWindowFloatingSpriteContainer); + cntrl->SetRole(EHuiWindowFloatingSpriteContainer); iFloatingSpriteControlGroup->AppendL(cntrl); CleanupStack::Pop(cntrl); CHuiCanvasVisual* layout = CHuiCanvasVisual::AddNewL(*cntrl); @@ -153,7 +153,7 @@ CHuiControl* effectCntrl = new (ELeave) CHuiControl(aHuiEnv); CleanupStack::PushL(effectCntrl); effectCntrl->ConstructL(); - effectCntrl->SetRole(EAlfFullScreenEffectContainer); + effectCntrl->SetRole(EHuiFullScreenEffectContainer); iFullscreenEffectControlGroup->AppendL(effectCntrl); CleanupStack::Pop(effectCntrl); CHuiCanvasVisual* effectLayout = CHuiCanvasVisual::AddNewL(*effectCntrl); @@ -169,7 +169,7 @@ CHuiControl* fpsCntrl = new (ELeave) CHuiControl(aHuiEnv); CleanupStack::PushL(fpsCntrl); fpsCntrl->ConstructL(); - fpsCntrl->SetRole(EAlfFpsIndicatorContainer); + fpsCntrl->SetRole(EHuiFpsIndicatorContainer); iFpsControlGroup->AppendL(fpsCntrl); CleanupStack::Pop(fpsCntrl); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp Tue May 25 13:39:57 2010 +0300 @@ -76,7 +76,7 @@ iHostControl = new (ELeave) CAlfSrvHostControl( *Session().SharedHuiEnv() ); iHostControl->ConstructL(); - iHostControl->SetRole(EAlfSessionContainer); + iHostControl->SetRole(EHuiSessionContainer); CHuiLayout* sessionContainer = CHuiDeckLayout::AddNewL( *iHostControl, NULL ); sessionContainer->SetFlags( EHuiVisualFlagManualLayout ); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Tue May 25 13:39:57 2010 +0300 @@ -32,6 +32,12 @@ #include +// Implements just Error() to avoid panic +NONSHARABLE_CLASS(CSimpleScheduler) : public CActiveScheduler + { + void Error( TInt ) const{} // From CActiveScheduler + }; + // ================================== // Launcher implementation. // ================================== @@ -66,7 +72,7 @@ thread.Close(); // Set up scheduler and cleanup stack for this thread - CActiveScheduler* scheduler = new CActiveScheduler; + CActiveScheduler* scheduler = new CSimpleScheduler; if (!scheduler) { return KErrNoMemory; diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/ServerCore/Src/alfvisualhandlers.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfvisualhandlers.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfvisualhandlers.cpp Tue May 25 13:39:57 2010 +0300 @@ -46,6 +46,9 @@ #include "alfsrvsubsessionbase.h" #include "alfsrvtransformationsubsession.h" +#define AMT_CONTROL() static_cast(Dll::Tls()) +#include "alfmoduletest.h" + #ifdef RD_ALF_IN_PLATFORM #include #endif @@ -768,6 +771,11 @@ CHuiFxEngine* engine = iVisual->Env().EffectsEngine(); if (engine) { +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TTime time; + time.UniversalTime(); + AMT_ADD_TIME(params->iHandle, time.Int64(), ETrue); +#endif CHuiFxEffect* effect = NULL; engine->LoadEffectL( params->iFileName, effect, iVisual->Effectable(), NULL , NULL, params->iHandle, KHuiFxDelayRunUntilFirstFrameHasBeenDrawn ); // The effect will be automatically set to the visual if parsing succeeds @@ -781,6 +789,11 @@ CHuiFxEngine* engine = iVisual->Env().EffectsEngine(); if (engine) { +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TTime time; + time.UniversalTime(); + AMT_ADD_TIME(params->iHandle, time.Int64(), ETrue); +#endif CHuiFxEffect* effect = NULL; // this will add the group, if it does not exist already // Begin and End group events are supposed to come through GfxTransEffect API. diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Tue May 25 13:39:57 2010 +0300 @@ -336,6 +336,12 @@ // From MHuiMemoryLevelObserver void SetMemoryLevel(THuiMemoryLevel aLevel); + // For handling native ALF applications drawing + void SetAlfEventWindow(CHuiVisual* aVisual); + const CHuiVisual* AlfEventWindow(); + TBool NativeAppsContentChanged(); + void DrawNativeAppsContent( CHuiGc &aGc, CHuiDisplay* aDisplay) const; + protected: /* Methods. */ @@ -512,6 +518,10 @@ TBool iRosterIsFrozen; TBool iMonitorMemoryLevel; + + /* not owned */ + CHuiVisual* iAlfEventWindowVisual; + TBool iPreviousAlfContentDrawn; }; #endif // __HUIROSTERIMPL_H__ diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/rendervg10/group/huirendervg10.mmp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/group/huirendervg10.mmp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/group/huirendervg10.mmp Tue May 25 13:39:57 2010 +0300 @@ -48,6 +48,7 @@ USERINCLUDE ../../inc USERINCLUDE ../inc +USERINCLUDE ../../../CommonInc //Added as part of break team support changes. #include "../../../../../group/stdinc.mmh" diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp Tue May 25 13:39:57 2010 +0300 @@ -87,5 +87,8 @@ iColorMatrix[16] = oOff; iColorMatrix[17] = oOff; iColorMatrix[18] = oOff; - iColorMatrix[19] = 0.0f; + iColorMatrix[19] = 0.5f; // add 0.5 to alpha so that surfaces fade aswell + // it should be considered if this should only + // be done for visuals with a background + // surface } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Tue May 25 13:39:57 2010 +0300 @@ -105,6 +105,8 @@ vgDestroyPaint(iPaint); vgDestroyPaint(iGradientPaint); vgDestroyPath(iEllipsePath); + + iTempRegion.Close(); } @@ -978,8 +980,8 @@ #if defined(RENDER_DEBUG_RECTANGLES) color = Math::Random() | 0xff; #endif - - // Update the color of the current paint + vgSetPaint(iPaint, VG_FILL_PATH | VG_STROKE_PATH); + // Update the color of the current paint // if required if (iPaintColor != color) { @@ -2085,12 +2087,12 @@ 1.0f, aEndColor.Red() * scale, aEndColor.Green() * scale, aEndColor.Blue() * scale, aEndOpacity, }; + vgSetParameterfv(iGradientPaint, VG_PAINT_LINEAR_GRADIENT, 2 * 2, gradientCoords); vgSetParameterfv(iGradientPaint, VG_PAINT_COLOR_RAMP_STOPS, 2 * 5, gradientStops); vgSetPaint(iGradientPaint, VG_FILL_PATH); HUI_VG_INVARIANT(); - UpdateColor(); UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); // Draw the gradient as an image if we have a texture, otherwise draw a regular rectangle @@ -2117,7 +2119,16 @@ if (!tex) { - DrawRect(aRect); + UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); + vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); + + vgTranslate(aRect.iTl.iX, aRect.iTl.iY); + vgScale(aRect.Width(),aRect.Height()); + + vgDrawPath(iRectPath, VG_FILL_PATH); + + vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE); + UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); } else { @@ -2127,12 +2138,20 @@ } else { - DrawRect(aRect); + UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); + vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE); + + vgTranslate(aRect.iTl.iX, aRect.iTl.iY); + vgScale(aRect.Width(),aRect.Height()); + + vgDrawPath(iRectPath, VG_FILL_PATH); + + vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE); + UpdateMatrix(VG_MATRIX_PATH_USER_TO_SURFACE); } HUI_VG_INVARIANT(); - // Restore the original paint - vgSetPaint(iPaint, VG_FILL_PATH | VG_STROKE_PATH); + // Restore the original color & paint UpdateColor(); } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Tue May 25 13:39:57 2010 +0300 @@ -32,6 +32,15 @@ #include #include +#include "alfmoduletestconf.h" +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + // Provides TLS object data for test cases. + // This is used only if module test hooks are set on. + #include "huistatictlsdata.h" +#endif // USE_MODULE_TEST_HOOKS_FOR_ALF +// Provides module test hook defines. +#include "alfmoduletestdefines.h" + // Enable this for debugging cache usage //#define HUI_DEBUG_PRINT_CANVAS_TEXTURE_CACHE //#define HUI_DEBUG_PRINT_CANVAS_TEXTURE_CACHE_EGL @@ -3508,6 +3517,8 @@ iMaxTextureMemoryInKBytes = KHuiMaxRecommendedTextureAmountInKBytes; iMaxRenderBufferMemoryInKBytes = KHuiMaxRecommendedRenderBufferAmountInKBytes; } + + AMT_MAP_CANVAS_TEXTURE_CACHE_SET_MEMORY_LEVEL(); } TBool CHuiCanvasTextureCache::IsLowMemoryStateEnabled() const diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue May 25 13:39:57 2010 +0300 @@ -342,6 +342,11 @@ TBool CHuiCanvasVisual::CanSkipDrawing() const { + if(Display()->RosterImpl().AlfEventWindow() == this) + { + return EFalse; + } + if (Effect()) { TBool semiTranparentEffectActive = Effect()->IsSemitransparent(); @@ -465,7 +470,11 @@ iCanvasVisualData->iPaintedRegion.Clear(); CollectPaintedRegion(iCanvasVisualData->iPaintedRegion, 0); } - + + if(Display()->RosterImpl().AlfEventWindow() == this) + { + refreshCache |= Display()->RosterImpl().NativeAppsContentChanged(); + } didDrawEffect = Effect()->CachedDraw(aGc, area, refreshCache, !transparent, iCanvasVisualData->iPaintedRegion); } @@ -536,10 +545,10 @@ RDebug::Print(_L("CHuiCanvasVisual::DrawSelf - tracked visual")); } #endif - + TBool alfEventWindow = (Display()->RosterImpl().AlfEventWindow() == this); TReal32 effectiveOpacity = EffectiveOpacity(); - if (effectiveOpacity <= 0 || !HasCommandBuffers(ETrue)) + if ((effectiveOpacity <= 0 || !HasCommandBuffers(ETrue)) && !alfEventWindow) { // In case background drawing is enabled, and even if we don't have command buffers we still // want to issue clear. If the background drawing is enabled here, it means that the @@ -572,6 +581,12 @@ } } + if(alfEventWindow) + { + Display()->RosterImpl().DrawNativeAppsContent(aGc, Display()); + return; + } + // Use 'under opaque' hint to optimize drawing. // See comment from CHuiCanvasVisual::Draw for further details. const TBool drawVisualContent = !( Flags() & EHuiVisualFlagUnderOpaqueHint ); @@ -997,6 +1012,7 @@ } background.iPaintedRect = backgroundItems[aIndex].Rect(); + backgroundItems.Close(); return background; } else diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Tue May 25 13:39:57 2010 +0300 @@ -582,6 +582,11 @@ } // We must only transform the (new) dirtyregion, not combine or anything else here aDirtyRegion = transformedNewDirtyRect; + + if(iScanningAlfContent) + { + SetAlfContentChanged(ETrue); + } } @@ -633,6 +638,7 @@ startTime.UniversalTime(); #endif + SetAlfContentChanged(EFalse); // Prevent display refresh, if the display is on background. if(!iOnForeground || IsScreenBufferLocked()) @@ -1612,6 +1618,21 @@ #endif } +void CHuiDisplay::ScanningAlfContent(TBool aScanning ) + { + iScanningAlfContent = aScanning; + } + +void CHuiDisplay::SetAlfContentChanged(TBool aChanged) + { + iDisplayContainsChangedAlfContent = aChanged; + } + +TBool CHuiDisplay::AlfContentChanged() + { + return iDisplayContainsChangedAlfContent; + } + void CHuiDisplay::ClipDirtyRect(TRect& aRect, TRect aClippingRect) { if (aRect.Intersects(aClippingRect)) @@ -1771,36 +1792,33 @@ void CHuiDisplay::DoBackgroundClear() { - if(iForegroundTextureTransparency) // alf application is visible -> clear background as requested + // Clear background for the dirty area + TRect dirtyRect = iTempDirtyRegions[iCurrentDirtyIndx]; + if (iBackgroundItems.Count() != 0) { - // Clear background for the dirty area - TRect dirtyRect = iTempDirtyRegions[iCurrentDirtyIndx]; - if (iBackgroundItems.Count() != 0) + ClearWithBackgroundItems(dirtyRect); + } + else + { + switch (iClearBackground) { - ClearWithBackgroundItems(dirtyRect); - } - else - { - switch (iClearBackground) + case EClearWithColor: { - case EClearWithColor: - { - ClearWithColor(dirtyRect); - break; - } - case EClearWithSkinBackground: - { - ClearWithSkinBackground(dirtyRect); - break; - } - case EClearNone: - default: - { - // Don't do anything - break; - } - } - } + ClearWithColor(dirtyRect); + break; + } + case EClearWithSkinBackground: + { + ClearWithSkinBackground(dirtyRect); + break; + } + case EClearNone: + default: + { + // Don't do anything + break; + } + } } } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp Tue May 25 13:39:57 2010 +0300 @@ -22,6 +22,16 @@ #include "HuiRenderPlugin.h" #include "HuiCmdBufferBrush.h" // MHuiEffectable +#include "alfmoduletestconf.h" +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + // Provides TLS object data for test cases. + // This is used only if module test hooks are set on. + #include "huistatictlsdata.h" +#endif // USE_MODULE_TEST_HOOKS_FOR_ALF +// Provides module test hook defines. +#include "alfmoduletestdefines.h" + + EXPORT_C CHuiFxEffect* CHuiFxEffect::NewL(CHuiFxEngine& aEngine) { CHuiFxEffect* e = new (ELeave) CHuiFxEffect( aEngine ); @@ -107,6 +117,40 @@ { return ETrue; // fade effect does not have observer that would need notification } + +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TTime endTime; + endTime.UniversalTime(); + + // There might be several BeginFullScreen for single effects. We want to calculate + // reaction time from the first BeginFullScreen event to this point + TInt timeStamps = 0; + AMT_GET_TIME_POINT_COUNT(iHandle, timeStamps); + + TInt64 temp; + TBool effects(EFalse); // dummy, 1 if effects were on for this time stamp + AMT_GET_TIME(temp, iHandle, 0, effects); + TTime startTime(temp); + + AMT_GET_TIME(temp, iHandle, timeStamps - 1, effects); + TTime effectStartTime(temp); + + TInt64 effectTime = endTime.MicroSecondsFrom(effectStartTime).Int64(); + TReal fps = (TReal)iFramesDrawn / ((TReal)effectTime / 1000000.0f) ; + + TInt64 totalEffectTime = endTime.MicroSecondsFrom(startTime).Int64(); + TInt64 reactionTime = effectStartTime.MicroSecondsFrom(startTime).Int64(); + + RDebug::Printf("CHuiFxEffect::NotifyEffectEndObserver - Reaction time \t0x%x\t%f\tVisible effect time:\t%f\ts. (%f FPS). Total effect time:\t%f", + iHandle, + (TReal)reactionTime / 1000000.0f, + ((TReal)effectTime)/1000000, + fps, + ((TReal)totalEffectTime)/1000000.0f + ); + AMT_RESET_TIME(iHandle); +#endif + if (iEffectEndObserver) { // The callback can be called only once when the effect finishes @@ -553,6 +597,13 @@ if (iFramesDrawn == 1) { +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + // This is about the time when first frame from the effect is on screen + TTime endTime; + endTime.UniversalTime(); + + AMT_ADD_TIME(iHandle, endTime.Int64(), ETrue); +#endif aElapsedTime = 0; iFramesDrawn++; } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue May 25 13:39:57 2010 +0300 @@ -543,8 +543,6 @@ return; } - // this was moved here because otherwise background clear did never end up to effect canvas buffers - display->DoBackgroundClear(); TInt visualCount = 0; TInt entryCount = iEntries.Count(); @@ -553,7 +551,14 @@ { CHuiRosterEntry& entry = *iEntries[j]; CHuiControlGroup& group = entry.ControlGroup(); - + CHuiControl& control = group.Control(0); + + // skip all alf client session drawing + if(control.Role() == EHuiSessionContainer ) + { + continue; + } + // Init model matrix always for every group //aGc.LoadIdentity(EHuiGcMatrixModel); aGc.Push(EHuiGcMatrixModel); @@ -711,6 +716,121 @@ } } +void CHuiRosterImpl::SetAlfEventWindow(CHuiVisual* aVisual) + { + iAlfEventWindowVisual = aVisual; + } + +const CHuiVisual* CHuiRosterImpl::AlfEventWindow() + { + return iAlfEventWindowVisual; + } + +TBool CHuiRosterImpl::NativeAppsContentChanged() + { + // if we have multiple frames where alf content was changed, skip every other frame + // this should be only used if whole alf content has effect (is faded) + TBool alfContentChanged = iDisplay->AlfContentChanged(); + if(!iPreviousAlfContentDrawn && alfContentChanged) + { + iPreviousAlfContentDrawn = ETrue; + } + else + { + iPreviousAlfContentDrawn = EFalse; + } + return iPreviousAlfContentDrawn; + } + + +void CHuiRosterImpl::DrawNativeAppsContent(CHuiGc &aGc, CHuiDisplay* aDisplay) const + { + TInt i = 0; + TInt j = 0; + + CHuiDisplay* display = aDisplay ? aDisplay : iDisplay; + + ASSERT(display!=NULL); + + TBool clearDone = EFalse; + + TInt visualCount = 0; + TInt entryCount = iEntries.Count(); + // Draw the visuals tree in the display. + for(j = 0; j < entryCount; ++j) + { + CHuiRosterEntry& entry = *iEntries[j]; + CHuiControlGroup& group = entry.ControlGroup(); + CHuiControl& control = group.Control(0); + // skip all but alf client session drawing + if(control.Role() != EHuiSessionContainer ) + { + continue; + } + + // skip inactive + CHuiLayout* hostContainer = control.ContainerLayout( NULL ); + if(hostContainer->Flags() & EHuiVisualFlagInactive ) + { + continue; + } + + // Init model matrix always for every group + //aGc.LoadIdentity(EHuiGcMatrixModel); + aGc.Push(EHuiGcMatrixModel); + + // Set up display-specifc transformations i.e. camera transformations + display->Transformation().Execute(EHuiGcMatrixModel, aGc); + + // Set up a group-specific transformation. + if(group.IsTransformed()) + { + group.Transformation().Execute(EHuiGcMatrixModel, aGc); + } + + // Draw visuals + visualCount = entry.iRootVisuals.Count(); + for(i = 0; i < visualCount; ++i) + { + CHuiVisual* visual = entry.iRootVisuals[i]; + //Ignore inactive visuals + if ( visual->Flags()& EHuiVisualFlagInactive || visual->LoadingEffect() ) + { + continue; + } + + if(!clearDone) + { + // only do clear if we really draw some alf native content + display->DoBackgroundClear(); + clearDone = ETrue; + } + + visual->Draw(aGc); + + } + + if( display->DrawVisualOutline() != CHuiDisplay::EDrawVisualOutlineNone ) + { + for(i = 0; i < visualCount; ++i) + { + // Draw Visual Outline depending on central repository setting + // and visual flag value + const TBool drawOutline = + ( entry.iRootVisuals[i]->Flags() & EHuiVisualFlagEnableDebugMode ) || + ( display->DrawVisualOutline() == CHuiDisplay::EDrawVisualOutlineAllVisuals ); + + DrawBoundaries( aGc, entry.iRootVisuals[i], drawOutline ); + } + } + + aGc.Pop(EHuiGcMatrixModel); + } + } + + + + void CHuiRosterImpl::DrawBoundaries( CHuiGc& aGc, CHuiVisual* aVisual, TBool aDrawOutline ) const { if( aDrawOutline ) @@ -995,8 +1115,8 @@ if(iDisplay) { iDisplay->AddDirtyRegion(iRect); + iDisplay->SetAlfContentChanged(ETrue); } - SetChanged(EFalse); return; } @@ -1019,7 +1139,28 @@ { continue; } + + CHuiControlGroup& group = entry.ControlGroup(); + CHuiControl& control = group.Control(0); + + if(control.Role() == EHuiSessionContainer ) + { + if (iDisplay) + { + iDisplay->ScanningAlfContent(ETrue); + } + + } + entry.iRootVisuals[i]->ReportChanged(); + + if(control.Role() == EHuiSessionContainer ) + { + if(iDisplay) + { + iDisplay->ScanningAlfContent(EFalse); + } + } } } } diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp Tue May 25 13:39:57 2010 +0300 @@ -248,7 +248,7 @@ TRect CHuiCanvasPainter::CommandBufferCoverage(TInt aOrientation) { TInt bufferCount = iCommandBuffers.Count(); - RRegion tempRegion; + RRegionBuf<1> tempRegion; for (TInt cb = 0; cb < bufferCount; cb++) { @@ -258,7 +258,9 @@ tempRegion.AddRect(iCommandBuffers[cb]->iOriginalDisplayRect); } } - return tempRegion.BoundingRect(); + TRect result = tempRegion.BoundingRect(); + tempRegion.Close(); + return result; } void CHuiCanvasPainter::ClearCapturingBufferArea(const TRect& /*aRect*/) diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswshwgc.cpp Tue May 25 13:39:57 2010 +0300 @@ -1906,12 +1906,15 @@ if (aUpdateDisplay && renderbuffer && iCanvasGc->Gc()) { THuiRealRect updatedRect = aUpdateRegion.BoundingRect(); - + TInt w; + TInt h ; // Handle relative rotation - TRect displayArea = iVisual->Display()->VisibleArea(); - TInt w = displayArea.Width(); - TInt h = displayArea.Height(); - + if (iVisual->Display()) + { + TRect displayArea = iVisual->Display()->VisibleArea(); + w = displayArea.Width(); + h = displayArea.Height(); + } // ...select right rotation... if (iRelativeOrientation == CHuiGc::EOrientationCW90) { diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Tue May 25 13:39:57 2010 +0300 @@ -51,6 +51,15 @@ #include "HuiCmdBufferBrush.h" +#include "alfmoduletestconf.h" +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + // Provides TLS object data for test cases. + // This is used only if module test hooks are set on. + #include "huistatictlsdata.h" +#endif // USE_MODULE_TEST_HOOKS_FOR_ALF +// Provides module test hook defines. +#include "alfmoduletestdefines.h" + /** * Constants to define enabling/disabling render buffer automatically * incase there are frequently new buffers posted. @@ -2387,15 +2396,16 @@ } CHuiCanvasCommandBuffer* cmdbuffer = iCommandBuffers[cb]; + // Translate region to be relative to visual top left corner. + TPoint offset = -cmdbuffer->iOriginalDisplayRect.Round().iTl; + for (TInt j=0; j < cmdbuffer->iOriginalUpdateRegion.Count();j++) { - iTempRegion.AddRect(cmdbuffer->iOriginalUpdateRegion[j]); + TRect rect = cmdbuffer->iOriginalUpdateRegion[j]; + rect.Move(offset); + iTempRegion.AddRect(rect); } - - // Translate region to be relative to visual top left corner. - TPoint offset = -cmdbuffer->iOriginalDisplayRect.Round().iTl; - iTempRegion.Offset(offset); - + // Check older buffers for overlapping regions against current buffer if (cb > 0) { @@ -2745,6 +2755,8 @@ CHuiCanvasWsGc* realGc = iCanvasWsGc; iCanvasWsGc = CHuiCanvasDebugWsGc::NewL( realGc, *iCommandDebugger ); #endif + + AMT_MAP_CANVAS_WS_PAINTER_SELECT_GC(); } void CHuiCanvasWsPainter::RenewAllBuffers() diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Tue May 25 13:39:57 2010 +0300 @@ -502,6 +502,7 @@ if(iGOomActionList->IsRunningKillAppActions()) //this may be too late as killing of apps has already begun, but we might still be able to save the app AppClosePriorityChanged(WgIdList[i], RGOomMonitorSession::EGOomPriorityBusy); } + WgIdList.Close(); } void CMemoryMonitor::SetPriorityNormal(TInt aWgId) @@ -519,6 +520,7 @@ if(iGOomActionList->IsRunningKillAppActions()) AppClosePriorityChanged(WgIdList[i], RGOomMonitorSession::EGOomPriorityNormal); } + WgIdList.Close(); } void CMemoryMonitor::SetPriorityHigh(TInt aWgId) @@ -536,6 +538,7 @@ if(iGOomActionList->IsRunningKillAppActions()) AppClosePriorityChanged(WgIdList[i], RGOomMonitorSession::EGOomPriorityHigh); } + WgIdList.Close(); } TInt CMemoryMonitor::GetFreeMemory() diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/group/core_exports.inc --- a/uiacceltk/hitchcock/group/core_exports.inc Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/group/core_exports.inc Tue May 25 13:39:57 2010 +0300 @@ -3,7 +3,7 @@ * Name : core_exports.inc * Part of : Alfred UI Toolkit * Description : Exported header files. -* Version : %version: tr1sido#8.1.36 % +* Version : %version: tr1sido#8.1.37 % * * Copyright © 2006-2007 Nokia. All rights reserved. * This material, including documentation and any related computer @@ -53,6 +53,7 @@ ../coretoolkit/data/app_activate.fxml /epoc32/release/winscw/urel/z/resource/effects/app_activate.fxml ../coretoolkit/data/app_exit.fxml /epoc32/release/winscw/urel/z/resource/effects/app_exit.fxml ../coretoolkit/data/app_start.fxml /epoc32/release/winscw/urel/z/resource/effects/app_start.fxml +../coretoolkit/data/app_start_long.fxml /epoc32/release/winscw/urel/z/resource/effects/app_start_long.fxml ../coretoolkit/data/app_start_rect.fxml /epoc32/release/winscw/urel/z/resource/effects/app_start_rect.fxml ../coretoolkit/data/app_start_switch.fxml /epoc32/release/winscw/urel/z/resource/effects/app_start_switch.fxml ../coretoolkit/data/app_start_switch_rect.fxml /epoc32/release/winscw/urel/z/resource/effects/app_start_switch_rect.fxml @@ -145,6 +146,7 @@ ../coretoolkit/data/app_activate.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_activate.fxml ../coretoolkit/data/app_exit.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_exit.fxml ../coretoolkit/data/app_start.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_start.fxml +../coretoolkit/data/app_start_long.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_start_long.fxml ../coretoolkit/data/app_start_rect.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_start_rect.fxml ../coretoolkit/data/app_start_switch.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_start_switch.fxml ../coretoolkit/data/app_start_switch_rect.fxml /epoc32/release/winscw/udeb/z/resource/effects/app_start_switch_rect.fxml @@ -237,6 +239,7 @@ ../coretoolkit/data/app_activate.fxml /epoc32/data/z/resource/effects/app_activate.fxml ../coretoolkit/data/app_exit.fxml /epoc32/data/z/resource/effects/app_exit.fxml ../coretoolkit/data/app_start.fxml /epoc32/data/z/resource/effects/app_start.fxml +../coretoolkit/data/app_start_long.fxml /epoc32/data/z/resource/effects/app_start_long.fxml ../coretoolkit/data/app_start_rect.fxml /epoc32/data/z/resource/effects/app_start_rect.fxml ../coretoolkit/data/app_start_switch.fxml /epoc32/data/z/resource/effects/app_start_switch.fxml ../coretoolkit/data/app_start_switch_rect.fxml /epoc32/data/z/resource/effects/app_start_switch_rect.fxml diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h Tue May 25 13:39:57 2010 +0300 @@ -48,7 +48,7 @@ virtual void StartEndChecker() = 0; virtual void CancelEndChecker() = 0; virtual void SendBeginFullscreen() = 0; - virtual TInt SendEndFullscreen() = 0; + virtual TInt SendEndFullscreen(TBool aTimeout = EFalse) = 0; virtual TInt SendAbortFullscreen() = 0; virtual TInt SendAbortControlTransition() = 0; virtual TInt SendBeginControlTransition() = 0; diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h Tue May 25 13:39:57 2010 +0300 @@ -69,7 +69,7 @@ void BeginFullscreen( TInt aAction, const TRect& aEffectRect, TInt aType, const TUid aUid1, const TUid aUid2, TInt aData, TSecureId aSid1, TInt aWg1, TSecureId aSid2, TInt aWg2); - void EndFullscreen(); + void EndFullscreen(TBool aTimeout = EFalse); void CancelFullscreen(); void AbortFullscreen(); void RegisterAlfFullScreenEffect( TInt aAction, const TDesC& aResourceDir, @@ -103,7 +103,7 @@ TInt SendBeginFullscreen(TInt aHandle, TUint aAction, const TUid& aUid, const TUid& aPreviousUid, const TRect& aEffectRect); - TInt SendEndFullscreen(); + TInt SendEndFullscreen(TBool aTimeout = EFalse); TInt SendAbortFullscreen(); TInt SendAbortControlTransition(); void SendBeginFullscreen(); diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfgfxeffects.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfgfxeffects.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfgfxeffects.cpp Tue May 25 13:39:57 2010 +0300 @@ -48,6 +48,9 @@ #include "wsserverdrawercontroller.h" +#define AMT_CONTROL() static_cast(Dll::Tls()) +#include "alfmoduletest.h" + // Constants //const TInt KAlfDefaultFocusGainedEffectDuration = 500; //const TInt KAlfDefaultFocusLostEffectDuration = 500; @@ -118,6 +121,13 @@ KThemesTransitionEffects); iSyncronizedGroupDefitionEndChecker = CEndCheck::NewL(*this); + +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + // Initiliaze global data in TLS and Open global module testing chunk and mutex + User::LeaveIfError(Dll::SetTls(new(ELeave) CAlfModuleTestDataControl())); + User::LeaveIfError(AMT_CONTROL()->OpenGlobalObjects()); +#endif + __ALFFXLOGSTRING("CAlfGfxEffects::ConstructL <<"); } @@ -191,6 +201,23 @@ // We should not get end full screen if the effect has not been even started // (could return KErrAbort in aOutBuf) err = KErrAbort; +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + action = inStream.ReadUint32L(); + TRect effectRect( inStream.ReadInt32L(), + inStream.ReadInt32L(), inStream.ReadInt32L(), inStream.ReadInt32L() ); + TInt type = inStream.ReadInt32L(); + uid1 = TUid::Uid( inStream.ReadInt32L() ); + uid2 = TUid::Uid( inStream.ReadInt32L() ); + TInt data = inStream.ReadInt32L(); + + if ( type == AknTransEffect::EParameterType ) + { + sid1 = TSecureId( inStream.ReadInt32L() ); // secureid is the only thing interesting to us + } + TTime time; + time.UniversalTime(); + AMT_ADD_TIME(sid1.iId, time.Int64(), EFalse); +#endif break; } else @@ -223,7 +250,7 @@ #ifdef _DEBUG PrintRequestInfo( op, action); #endif - iEngine->EndFullscreen(); + iEngine->EndFullscreen(EFalse); // not timeout, but official endfullscreen break; case MAlfGfxEffectPlugin::EAbortFullscreen: #ifdef _DEBUG diff -r 7c5dd702d6d3 -r f93c875b566e uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp Tue May 11 17:03:00 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp Tue May 25 13:39:57 2010 +0300 @@ -37,11 +37,16 @@ #include #include +#define AMT_CONTROL() static_cast(Dll::Tls()) +#include "alfmoduletest.h" + // This sets the maximum time for an effect. Even if the fxml file has specified a longer duration, // this will stop the effect. -const TInt KAlfShortEffectTimeout = 4000000; -const TInt KAlfLongEffectTimeout = 5000000; +const TInt KAlfShortEffectTimeout = 4000000; +const TInt KAlfAppStartEffectTimeout = 300000; +const TInt KAlfLongEffectTimeout = 5000000; const TInt KAlfActiveControlFxGranularity = 4; +const TInt KAlfLongApplicationStartContext = 20; //const TInt KAlfLongEffectTimeout = 500000; // Timer to send finish full screen effect @@ -63,6 +68,11 @@ void DoCancel(); + public: + + TBool iTimeoutTriggered; + TBool iIsStartEffect; + private: CAlfFinishTimer(); @@ -108,6 +118,7 @@ void CAlfFinishTimer::Start( TTimeIntervalMicroSeconds32 aPeriod, TCallBack aTimeoutCallback ) { iCallback = aTimeoutCallback; + iTimeoutTriggered = EFalse; After( aPeriod ); } @@ -118,6 +129,7 @@ // if ( iStatus.Int() != KErrCancel ) { + iTimeoutTriggered = ETrue; iCallback.CallBack(); } } @@ -266,6 +278,10 @@ delete iFinishFullScreen; delete iFullScreenTimeout; iActiveControlFx.Close(); +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + delete AMT_CONTROL(); + Dll::FreeTls(); +#endif } // --------------------------------------------------------------------------- @@ -501,11 +517,11 @@ // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -void CAlfServerDrawer::EndFullscreen() +void CAlfServerDrawer::EndFullscreen(TBool aTimeout) { __ALFFXLOGSTRING("CAlfServerDrawer::EndFullscreen >>"); CancelEndChecker(); - iFullScreenController->EndFullscreen(EFalse); + iFullScreenController->EndFullscreen(aTimeout); iFullScreenController->AppInfoCache().ClearActions(); __ALFFXLOGSTRING("CAlfServerDrawer::EndFullscreen <<"); } @@ -550,6 +566,11 @@ // void CAlfServerDrawer::DoSendBeginFullscreenL() { +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TTime time; + time.UniversalTime(); + AMT_ADD_TIME(iToSid.iId, time.Int64(), ETrue); +#endif __ALFFXLOGSTRING(" <- CAlfServerDrawer::SendBeginFullscreen"); __ALFFXLOGSTRING(" <- Original window server ids"); __ALFFXLOGSTRING2("From UID: 0x%X, To UID: 0x%X", iFromUid.iUid, iToUid.iUid); @@ -666,6 +687,7 @@ stream.WriteInt32L( MAlfGfxEffectPlugin::EBeginFullscreen ); stream.WriteInt32L( iToSid.iId ); //iCurrentFullScreenHandle ); stream.WriteInt32L( iType ); + stream.WriteInt32L( 0 ); // timeout triggered if ( iType == AknTransEffect::EParameterType && isExit ) { stream.WriteInt32L( iToWg ); @@ -679,8 +701,6 @@ stream.WriteInt32L( iToSid.iId ); stream.WriteInt32L( iFromSid.iId ); - stream.WriteInt32L( KErrNotFound ); // was iToScreen, obsolete - stream.WriteInt32L( KErrNotFound ); // was iToScreen, obsolete } else if ( iType == AknTransEffect::EParameterType ) { @@ -695,19 +715,22 @@ stream.WriteInt32L( iToSid.iId ); stream.WriteInt32L( iFromSid.iId ); - stream.WriteInt32L( KErrNotFound ); // was iToScreen, obsolete - stream.WriteInt32L( KErrNotFound ); // was iToScreen, obsolete } else { - stream.WriteInt32L( KErrNotFound); // was iFocusWg - stream.WriteInt32L( KErrNotFound); // was iFocusWg + stream.WriteInt32L( KErrNotFound); // dummy BEGIN + stream.WriteInt32L( KErrNotFound); + stream.WriteInt32L( KErrNotFound); + stream.WriteInt32L( KErrNotFound); + stream.WriteInt32L( KErrNotFound); + stream.WriteInt32L( KErrNotFound); // dummy END } stream.WriteInt32L( iFlags ); stream.WriteInt32L( iEffectRect.iTl.iX ); stream.WriteInt32L( iEffectRect.iTl.iY ); stream.WriteInt32L( iEffectRect.iBr.iX ); stream.WriteInt32L( iEffectRect.iBr.iY ); + stream << resourceDir; stream << fileName; stream.CommitL(); @@ -725,13 +748,14 @@ // iFlags and iAction will contain some extra information that can be used to control the effect: // All of these actions may not produce effects, they are here for now for debugging. - + TBool isAppStartEffect(EFalse); switch ( iAction ) { case AknTransEffect::EApplicationActivate: __ALFFXLOGSTRING("EApplicationActivate - 1"); break; case AknTransEffect::EApplicationStart: + isAppStartEffect = ETrue; __ALFFXLOGSTRING("EApplicationStart - 3"); break; case AknTransEffect::EEmbeddedApplicationStart: @@ -741,12 +765,15 @@ __ALFFXLOGSTRING("EApplicationExit - 5"); break; case AknTransEffect::EApplicationStartRect: + isAppStartEffect = ETrue; __ALFFXLOGSTRING("EApplicationStartRect - 6"); break; case AknTransEffect::EApplicationStartSwitch: + isAppStartEffect = ETrue; __ALFFXLOGSTRING("EApplicationStartSwitch - 7"); break; case AknTransEffect::EApplicationStartSwitchRect: + isAppStartEffect = ETrue; __ALFFXLOGSTRING("EApplicationStartSwitchRect - 8"); break; case AknTransEffect::EEmbeddedApplicationExit: @@ -783,15 +810,27 @@ // It appears that folder open and close never send endfullscreen, so for them the effect // must be started as soon as we get beginfullscreen - iFullScreenTimeout->Start( KAlfLongEffectTimeout, TCallBack( FullScreenTimeout, this ) ); + isAppStartEffect = EFalse; // disable different timeout effect for appstart effects + + if (isAppStartEffect) + { + // The shorter timeout can be disabled here! + iFullScreenTimeout->Start( KAlfAppStartEffectTimeout, TCallBack( FullScreenTimeout, this ) ); + iFullScreenTimeout->iIsStartEffect = ETrue; + } + else + { + iFullScreenTimeout->Start( KAlfLongEffectTimeout, TCallBack( FullScreenTimeout, this ) ); + iFullScreenTimeout->iIsStartEffect = EFalse; + } } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // -TInt CAlfServerDrawer::SendEndFullscreen() +TInt CAlfServerDrawer::SendEndFullscreen(TBool aTimeout) { - __ALFFXLOGSTRING("CAlfServerDrawer::SendEndFullscreen"); + __ALFFXLOGSTRING3("CAlfServerDrawer::SendEndFullscreen - Timeout: %d, iFullScreenEndSent: %d, IsStartEffect: %d", aTimeout, iFullScreenEndSent, iFullScreenTimeout->iIsStartEffect); if ( iFullScreenEndSent ) { @@ -804,19 +843,13 @@ iFullScreenTransitionEndObserver->Cancel(); iFullScreenTimeout->Cancel(); iFinishFullScreen->Cancel(); - /* - TUint action = iAction; - if ( iType == AknTransEffect::EParameterAvkonInternal ) - { - action = iOldAction; - } - */ - // TEMPORARY HACK - // REMOVE AFTER APPSHELL HAS BEEN FIXED - //iDoNotClearEffectRect = EFalse; + TBool triggerStartEffectTimeout= iFullScreenTimeout->iTimeoutTriggered && iFullScreenTimeout->iIsStartEffect; + iFullScreenTimeout->iTimeoutTriggered = EFalse; + iFullScreenTimeout->iIsStartEffect = EFalse; - // This is where the second part of the effect should start - // The new window should already have something on the screen + // This is where the second part of the effect should start + // The new window should already have something on the screen. + // It might not be the case, if aTimeout is ETrue // Send the data to CAlfAppUI via bridge @@ -826,13 +859,27 @@ TPtrC resourceDir; TPtrC fileName; + TInt cachePriority = 0; + TInt wantedTime = 0; + TInt minTime = 0; + if (triggerStartEffectTimeout) + { + // if the following fails, then the effect from beginfullscreen will be used. + TInt err = iPolicyHandler.GetFullscreenKml( KAlfLongApplicationStartContext, iToUid, iFromUid, resourceDir, fileName, + cachePriority, wantedTime, minTime ); + if (err != KErrNone) + { + triggerStartEffectTimeout = EFalse; + } + } + // We must make a stream of the data as the length may vary. // At the moment we only send some numbers, but we should probably include // also the effect file name or something else to identify the effect // that is going to be used - TInt bufferSize = 11 * sizeof(TInt); // operation, type, 2 wg ids, 2 app uids, flags and rect + TInt bufferSize = 12 * sizeof(TInt); // operation, type, 2 wg ids, 2 app uids, flags and rect, timeoutTriggered bufferSize += sizeof(TPtrC); bufferSize += resourceDir.Length() * 2; bufferSize += sizeof(TPtrC); @@ -856,29 +903,23 @@ stream.WriteInt32L( MAlfGfxEffectPlugin::EEndFullscreen ); stream.WriteInt32L( iCurrentFullScreenHandle ); stream.WriteInt32L( iType ); - + stream.WriteInt32L( triggerStartEffectTimeout ); stream.WriteInt32L( iToWg ); stream.WriteInt32L( iFromWg ); // AppUid for the future. alfbridge can figure out the windog groups based on that stream.WriteInt32L( iToUid.iUid ); stream.WriteInt32L( iFromUid.iUid ); + + stream.WriteInt32L( iToSid.iId ); + stream.WriteInt32L( iFromSid.iId ); - if ( iType == AknTransEffect::EParameterType ) - { - stream.WriteInt32L( iToScreen ); - stream.WriteInt32L( iFromScreen ); - } - /*else - { - //stream.WriteInt32L( iFocusWg ); - //stream.WriteInt32L( iFocusWg ); -// }*/ stream.WriteInt32L( iFlags ); stream.WriteInt32L( iEffectRect.iTl.iX ); stream.WriteInt32L( iEffectRect.iTl.iY ); stream.WriteInt32L( iEffectRect.iBr.iX ); stream.WriteInt32L( iEffectRect.iBr.iY ); + stream << resourceDir; stream << fileName; stream.CommitL(); @@ -892,6 +933,7 @@ } iFullScreenFinished = EFalse; + iFullScreenTimeout->iIsStartEffect = EFalse; if ( iAction == AknTransEffect::EApplicationExit /*|| iAction == 1001*/ ) { @@ -987,6 +1029,11 @@ TPtrC actionString; TInt err = KErrNone; +#ifdef USE_MODULE_TEST_HOOKS_FOR_ALF + TTime time; + time.UniversalTime(); + AMT_ADD_TIME(iControlHandle, time.Int64(), ETrue); +#endif err = iPolicyHandler.GetControlKml( iControlUid, iControlAction, resourceDir, fileName, actionString, cachePriority, wantedTime, minTime );