# HG changeset patch # User hgs # Date 1274799319 -10800 # Node ID ac3859d4384426bc0db5627619f0a9069b399790 # Parent 423dd85009cfad1c2395e217f20fc9097959c8b4 201021 diff -r 423dd85009cf -r ac3859d43844 group/bld.inf --- a/group/bld.inf Fri May 14 02:53:35 2010 +0300 +++ b/group/bld.inf Tue May 25 17:55:19 2010 +0300 @@ -15,9 +15,9 @@ * */ -// local -//#define ALF_USE_OPENWF_COMPOSITION - +#ifdef SYMBIAN_GRAPHICS_BUILD_OPENWF_WSERV +#define ALF_USE_OPENWF_COMPOSITION +#endif #include "../uiaccelerator_plat/group/bld.inf" diff -r 423dd85009cf -r ac3859d43844 layers.sysdef.xml --- a/layers.sysdef.xml Fri May 14 02:53:35 2010 +0300 +++ b/layers.sysdef.xml Tue May 25 17:55:19 2010 +0300 @@ -10,6 +10,7 @@ + diff -r 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h --- a/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappserver.h Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h --- a/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_client_server_api/inc/alf/alfappui.h Tue May 25 17:55:19 2010 +0300 @@ -33,6 +33,7 @@ class CAlfAppSrvSessionBase; class CAlfSrvResourceManager; class CAlfSrvSettingsHandler; +class RAlfBridgerClient; enum TAlfSrvSetting { @@ -177,6 +178,8 @@ void EndPointerEventHandling(); void UpdateActiveSession(CAlfAppSrvSessionBase* aSession); + CAlfAppSrvSessionBase* ActiveSession(); + TTypeUid::Ptr MopSupplyObject(TTypeUid aId); TInt FirstAlfControlGroupIndex( TInt aScreenNumber = 0); @@ -205,6 +208,7 @@ void DoBlankScreen(const RMessage2& aMessage); TInt GetLastActiveClient(); + RAlfBridgerClient* BridgerClient(); private: diff -r 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiCanvasVisual.h Tue May 25 17:55:19 2010 +0300 @@ -449,8 +449,8 @@ static TBool RecursiveIsExternalContentDrawingEnabled(CHuiVisual* aVisual); static TBool RecursiveHasCommandBuffers(CHuiVisual* aVisual); - void CollectPaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const; - void CollectRecursivePaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const; + TBool CollectPaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const; + TBool CollectRecursivePaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const; TBool CanSkipDrawing() const; TBool KeepNoCache() const; diff -r 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiControlGroup.h Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiDisplay.h Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h --- a/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h Fri May 14 02:53:35 2010 +0300 +++ b/uiaccelerator_plat/alf_core_toolkit_api/inc/uiacceltk/HuiRoster.h Tue May 25 17:55:19 2010 +0300 @@ -234,6 +234,8 @@ virtual TBool IsVisibleContentFrozen() const = 0; + virtual void SetAlfEventWindow(CHuiVisual* aVisual) = 0; + protected: /* Constructors. */ diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/AlfDecoderServerClient/bwins/alfdecoderserverclientu.def --- a/uiacceltk/hitchcock/AlfDecoderServerClient/bwins/alfdecoderserverclientu.def Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/bwins/alfdecoderserverclientu.def Tue May 25 17:55:19 2010 +0300 @@ -50,4 +50,5 @@ ?SubscribeCallbackL@CAlfEffectObserver@@QAEXPAVMAlfEffectObserver@1@HH@Z @ 49 NONAME ; void CAlfEffectObserver::SubscribeCallbackL(class CAlfEffectObserver::MAlfEffectObserver *, int, int) ?GetListOfWindowGroupsWSurfaces@RAlfBridgerClient@@QAEHPAV?$RArray@H@@@Z @ 50 NONAME ; int RAlfBridgerClient::GetListOfWindowGroupsWSurfaces(class RArray *) ?SetDistractionWindow@CAlfEffectObserver@@QAEXABVRWindowTreeNode@@H@Z @ 51 NONAME ; void CAlfEffectObserver::SetDistractionWindow(class RWindowTreeNode const &, int) + ?GetOptionalGraphicsMemUsers@RAlfBridgerClient@@QAEXPAV?$RArray@H@@@Z @ 52 NONAME ; void RAlfBridgerClient::GetOptionalGraphicsMemUsers(class RArray *) diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/AlfDecoderServerClient/eabi/alfdecoderserverclientu.def --- a/uiacceltk/hitchcock/AlfDecoderServerClient/eabi/alfdecoderserverclientu.def Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/eabi/alfdecoderserverclientu.def Tue May 25 17:55:19 2010 +0300 @@ -73,4 +73,5 @@ _ZN18CAlfEffectObserver18SubscribeCallbackLEPNS_18MAlfEffectObserverEii @ 72 NONAME _ZN17RAlfBridgerClient30GetListOfWindowGroupsWSurfacesEP6RArrayIiE @ 73 NONAME _ZN18CAlfEffectObserver20SetDistractionWindowERK15RWindowTreeNodei @ 74 NONAME + _ZN17RAlfBridgerClient27GetOptionalGraphicsMemUsersEP6RArrayIiE @ 75 NONAME diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp --- a/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfdecoderserverclient.cpp Tue May 25 17:55:19 2010 +0300 @@ -156,12 +156,14 @@ SendReceive(aOp, aIPCArgs, aStatus ); } -TInt RAlfBridgerClient::GetListOfWindowGroups(RArray* aWindowGroups, TBool aListAll) +TInt RAlfBridgerClient::GetListOfWindowGroups(RArray* aWindowGroups, TInt aType) { TInt err = KErrNone; TInt array[10]; TPtr8 ptr((TUint8*)array,0,40); - err = SendReceive(EAlfGetListOfWGsHavingInactiveSurfaces, TIpcArgs(&ptr, aListAll)); + + err = SendReceive(EAlfGetListOfWGsHavingInactiveSurfaces, TIpcArgs(&ptr, aType)); + if (!err) { for(TInt i = 0; i < 10; i++) @@ -181,14 +183,18 @@ EXPORT_C TInt RAlfBridgerClient::GetListOfInactiveWindowGroupsWSurfaces(RArray* aWindowGroups) { - return GetListOfWindowGroups(aWindowGroups, EFalse); + return GetListOfWindowGroups(aWindowGroups, EAlfInactiveWgs); } EXPORT_C TInt RAlfBridgerClient::GetListOfWindowGroupsWSurfaces(RArray* aWindowGroups) { - return GetListOfWindowGroups(aWindowGroups, ETrue); + return GetListOfWindowGroups(aWindowGroups, EAlfAllWgsWithSurface); } +EXPORT_C void RAlfBridgerClient::GetOptionalGraphicsMemUsers(RArray* aOptionalCandidates) + { + GetListOfWindowGroups(aOptionalCandidates, EAlfVolunteersForCommonGood); + } // --------------------------------------------------------------------------- diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/CommonInc/alfdecoderserverclient.h --- a/uiacceltk/hitchcock/CommonInc/alfdecoderserverclient.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfdecoderserverclient.h Tue May 25 17:55:19 2010 +0300 @@ -66,16 +66,23 @@ */ IMPORT_C TInt GetListOfWindowGroupsWSurfaces(RArray* aWindowGroups); - /** * Asks the number of active effects * @return error code or number of active effects (>= 0). */ IMPORT_C TInt EffectsCount(); + + /** + * Asks list of window groups that potentially use graohics memory even no direct EGL nor surface access on main display + * @param aArray array to be populated + * @return error code. + */ + IMPORT_C void RAlfBridgerClient::GetOptionalGraphicsMemUsers(RArray* aOptionalCandidates); + private: - TInt GetListOfWindowGroups(RArray* aWindowGroups, TBool aListAll); + TInt GetListOfWindowGroups(RArray* aWindowGroups, TInt aType); TInt iSpare1; TInt iSpare2; }; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletestdefines.h Tue May 25 17:55:19 2010 +0300 @@ -19,40 +19,9 @@ #define AMT_FUNC_EXC_RET(ret, func) #define AMT_FUNC_EXC_IF(cond, func) #define AMT_FUNC_EXC_IF_RET(cond, ret, func) - #define AMT_INC_COUNTER(member) - #define AMT_DEC_COUNTER(member) - #define AMT_SET_VALUE(member, val) - #define AMT_GET_VALUE(x, member) - #define AMT_INC_COUNTER_IF(cond, member) - #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 ) - #define AMT_MAP_APPEND_IF(cond, memberMap, key, defaultValue, type) - #define AMT_MAP_APPEND(memberMap, key, defaultValue, type) - #define AMT_MAP_APPEND_LINK_IF(cond, memberMap, linkKey, targetKey, type) - #define AMT_MAP_APPEND_LINK(memberMap, linkKey, targetKey, type) - #define AMT_MAP_APPEND_AND_LINK_IF(cond, memberMap, linkKey, actualKey, defaultValue, type) - #define AMT_MAP_APPEND_AND_LINK(memberMap, linkKey, actualKey, defaultValue, type) - #define AMT_MAP_SET_VALUE_IF(cond, memberMap, key, value, type) - #define AMT_MAP_INC_VALUE_IF(cond, memberMap, key, type) - #define AMT_MAP_DEC_VALUE_IF(cond, memberMap, key, type) - #define AMT_MAP_SET_VALUE(memberMap, key, value, type) - #define AMT_MAP_INC_VALUE(memberMap, key, type) - #define AMT_MAP_DEC_VALUE(memberMap, key, type) - #define AMT_MAP_APPEND_ACCEPT_IF(cond, memberMap, testType) - #define AMT_MAP_APPEND_ACCEPT(memberMap, testType) - #define AMT_MAP_RESET_ITEMS(memberMap, defaultValue, type) - #define AMT_MAP_RESET(memberMap) - - #define AMT_PRINT_STATE() + #define AMT_MAP_PTR_TO_KEY_CAST(keyPtr) + #define AMT_MAP_CANVAS_WS_PAINTER_SELECT_GC() + #define AMT_MAP_GCE_SET_LAYER_POSITIONS() #else // Module test hook has been set. @@ -67,6 +36,23 @@ #endif // AMT_CONTROL + // *** General test variable defines + + // Text cursor handle is defined as constant because correct handle is not provided + // 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 + + // *** Use these macros to access global memory chunk @@ -76,67 +62,97 @@ // Note: Be careful not to lock the the mutex for a long time as it will halt other processes if they are using the lock during that time! - // Generic macros + // *** Generic macros + #define AMT_DATA() AMT_CONTROL()->iModuleTestData #define AMT_FUNC(func) if (AMT_DATA()->iIsEnabled) {func;} #define AMT_FUNC_EXC(func) {AMT_CONTROL()->Lock(); if (AMT_DATA()->iIsEnabled) {func;} AMT_CONTROL()->Unlock();} #define AMT_FUNC_EXC_RET(ret, func) {AMT_CONTROL()->Lock(); if (AMT_DATA()->iIsEnabled) {ret = func;} AMT_CONTROL()->Unlock();} #define AMT_FUNC_EXC_IF(cond, func) {AMT_CONTROL()->Lock(); if (AMT_DATA()->iIsEnabled && (cond)) {func;} AMT_CONTROL()->Unlock();} #define AMT_FUNC_EXC_IF_RET(cond, ret, func) {AMT_CONTROL()->Lock(); if (AMT_DATA()->iIsEnabled && (cond)) {ret = func;} AMT_CONTROL()->Unlock();} - - // Single operation macros, that will do lock/unlock. - #define AMT_INC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member++) - #define AMT_DEC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member--) - #define AMT_SET_VALUE(member, val) AMT_FUNC_EXC(AMT_DATA()->member=(val)) - #define AMT_GET_VALUE(x, member) AMT_FUNC_EXC((x) = AMT_DATA()->member) - - // Conditional single operation macros, that will do lock/unlock. - #define AMT_INC_COUNTER_IF(cond, member) AMT_FUNC_EXC_IF((cond), AMT_DATA()->member++) - #define AMT_DEC_COUNTER_IF(cond, member) AMT_FUNC_EXC_IF((cond), AMT_DATA()->member--) - #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 ) ) - #define AMT_MAP_APPEND_IF(cond, memberMap, key, defaultValue, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.Append(type, key, defaultValue)) - #define AMT_MAP_APPEND(memberMap, key, defaultValue, type) AMT_MAP_APPEND_IF(ETrue, memberMap, key, defaultValue, type) - #define AMT_MAP_APPEND_LINK_IF(cond, memberMap, linkKey, targetKey, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.AppendLink(type, linkKey, targetKey)) - #define AMT_MAP_APPEND_LINK(memberMap, linkKey, targetKey, type) AMT_MAP_APPEND_LINK_IF(ETrue, memberMap, linkKey, targetKey, type) - #define AMT_MAP_APPEND_AND_LINK_IF(cond, memberMap, linkKey, actualKey, defaultValue, type) AMT_MAP_APPEND_IF(cond, memberMap, actualKey, defaultValue, type ); AMT_MAP_APPEND_LINK_IF(cond, memberMap, linkKey, actualKey, type) - #define AMT_MAP_APPEND_AND_LINK(memberMap, linkKey, actualKey, defaultValue, type) AMT_MAP_APPEND_AND_LINK_IF(ETrue, memberMap, linkKey, actualKey, defaultValue, type) - #define AMT_MAP_SET_VALUE_IF(cond, memberMap, key, value, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.SetActualValue(type, key, value)) - #define AMT_MAP_INC_VALUE_IF(cond, memberMap, key, type) AMT_FUNC_EXC_IF((cond && AMT_DATA()->memberMap.FindActual(type, key)), AMT_DATA()->memberMap.SetActualValue(type, key, AMT_DATA()->memberMap.FindActual(type, key)->Value() + 1)) - #define AMT_MAP_DEC_VALUE_IF(cond, memberMap, key, type) AMT_FUNC_EXC_IF((cond && AMT_DATA()->memberMap.FindActual(type, key)), AMT_DATA()->memberMap.SetActualValue(type, key, AMT_DATA()->memberMap.FindActual(type, key)->Value() - 1)) - #define AMT_MAP_SET_VALUE(memberMap, key, value, type) AMT_FUNC_EXC_IF(ETrue, AMT_DATA()->memberMap.SetActualValue(type, key, value)) - #define AMT_MAP_INC_VALUE(memberMap, key, type) AMT_MAP_INC_VALUE_IF(ETrue, memberMap, key, type) - #define AMT_MAP_DEC_VALUE(memberMap, key, type) AMT_MAP_DEC_VALUE_IF(ETrue, memberMap, key, type) - #define AMT_MAP_APPEND_ACCEPT_IF(cond, memberMap, testType) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.AppendAccept(testType)) - #define AMT_MAP_APPEND_ACCEPT(memberMap, testType) AMT_MAP_APPEND_ACCEPT_IF(ETrue, memberMap, testType) - #define AMT_MAP_RESET_ITEMS(memberMap, defaultValue, type) AMT_FUNC_EXC(AMT_DATA()->memberMap.ResetItems(type, defaultValue)) - #define AMT_MAP_RESET(memberMap) AMT_FUNC_EXC(AMT_DATA()->memberMap.Reset()) - - #define AMT_PRINT_STATE() AMT_FUNC_EXC(AMT_DATA()->PrintState()) + #define AMT_MAP_PTR_TO_KEY_CAST(keyPtr) reinterpret_cast< TInt >( keyPtr ) + + + // *** Macros to define function content + + #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 ); \ + } + + // Sets the position of the layer into the map. + // Zero means the bottom and the top layer has the greates position value. + #define AMT_MAP_GCE_SET_LAYER_POSITIONS() \ + TInt gceLayerPosition( -1 ); \ + const MWsLayer* gceLayer( iBottomLayer ); \ + while( gceLayer ) \ + { \ + ++gceLayerPosition; \ + AMT_MAP_SET_VALUE( \ + iIntMap, AMT_MAP_PTR_TO_KEY_CAST( gceLayer ), \ + gceLayerPosition, EAlfModuleTestTypeGceLayerPosition ); \ + gceLayer = gceLayer->Above(); \ + } #endif // USE_MODULE_TEST_HOOKS_FOR_ALF -// General defines -// Text cursor handle is defined as constant because correct handle is not provided -// from the window server for render stage. -#define AMT_MAP_TEXT_CURSOR_HANDLE 0 - - // Notice: // Defines below will be empty if module test hook is not set. // If module test hook is set on, then these defines also use functionality defined above. +// Single operation macros, that will do lock/unlock. +#define AMT_PRINT_STATE() AMT_FUNC_EXC(AMT_DATA()->PrintState()) +#define AMT_INC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member++) +#define AMT_DEC_COUNTER(member) AMT_FUNC_EXC(AMT_DATA()->member--) +#define AMT_SET_VALUE(member, val) AMT_FUNC_EXC(AMT_DATA()->member=(val)) +#define AMT_GET_VALUE(x, member) AMT_FUNC_EXC((x) = AMT_DATA()->member) + +// Conditional single operation macros, that will do lock/unlock. +#define AMT_INC_COUNTER_IF(cond, member) AMT_FUNC_EXC_IF((cond), AMT_DATA()->member++) +#define AMT_DEC_COUNTER_IF(cond, member) AMT_FUNC_EXC_IF((cond), AMT_DATA()->member--) +#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_CPTR_TO_KEY_CAST(keyCPtr) AMT_MAP_PTR_TO_KEY_CAST( static_cast< const CBase* >( keyCPtr ) ) +#define AMT_MAP_APPEND_IF(cond, memberMap, key, defaultValue, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.Append(type, key, defaultValue)) +#define AMT_MAP_APPEND(memberMap, key, defaultValue, type) AMT_MAP_APPEND_IF(ETrue, memberMap, key, defaultValue, type) +#define AMT_MAP_APPEND_LINK_IF(cond, memberMap, linkKey, targetKey, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.AppendLink(type, linkKey, targetKey)) +#define AMT_MAP_APPEND_LINK(memberMap, linkKey, targetKey, type) AMT_MAP_APPEND_LINK_IF(ETrue, memberMap, linkKey, targetKey, type) +#define AMT_MAP_APPEND_AND_LINK_IF(cond, memberMap, linkKey, actualKey, defaultValue, type) AMT_MAP_APPEND_IF(cond, memberMap, actualKey, defaultValue, type ); AMT_MAP_APPEND_LINK_IF(cond, memberMap, linkKey, actualKey, type) +#define AMT_MAP_APPEND_AND_LINK(memberMap, linkKey, actualKey, defaultValue, type) AMT_MAP_APPEND_AND_LINK_IF(ETrue, memberMap, linkKey, actualKey, defaultValue, type) +#define AMT_MAP_SET_VALUE_IF(cond, memberMap, key, value, type) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.SetActualValue(type, key, value)) +#define AMT_MAP_INC_VALUE_IF(cond, memberMap, key, type) AMT_FUNC_EXC_IF((cond && AMT_DATA()->memberMap.FindActual(type, key)), AMT_DATA()->memberMap.SetActualValue(type, key, AMT_DATA()->memberMap.FindActual(type, key)->Value() + 1)) +#define AMT_MAP_DEC_VALUE_IF(cond, memberMap, key, type) AMT_FUNC_EXC_IF((cond && AMT_DATA()->memberMap.FindActual(type, key)), AMT_DATA()->memberMap.SetActualValue(type, key, AMT_DATA()->memberMap.FindActual(type, key)->Value() - 1)) +#define AMT_MAP_SET_VALUE(memberMap, key, value, type) AMT_FUNC_EXC_IF(ETrue, AMT_DATA()->memberMap.SetActualValue(type, key, value)) +#define AMT_MAP_INC_VALUE(memberMap, key, type) AMT_MAP_INC_VALUE_IF(ETrue, memberMap, key, type) +#define AMT_MAP_DEC_VALUE(memberMap, key, type) AMT_MAP_DEC_VALUE_IF(ETrue, memberMap, key, type) +#define AMT_MAP_APPEND_ACCEPT_IF(cond, memberMap, testType) AMT_FUNC_EXC_IF((cond), AMT_DATA()->memberMap.AppendAccept(testType)) +#define AMT_MAP_APPEND_ACCEPT(memberMap, testType) AMT_MAP_APPEND_ACCEPT_IF(ETrue, memberMap, testType) +#define AMT_MAP_RESET_ITEMS(memberMap, defaultValue, type) AMT_FUNC_EXC(AMT_DATA()->memberMap.ResetItems(type, defaultValue)) +#define AMT_MAP_RESET(memberMap) AMT_FUNC_EXC(AMT_DATA()->memberMap.Reset()) + + // Render stage defines #define AMT_MAP_RENDER_STAGE_NODE_CREATED() \ @@ -165,7 +181,8 @@ #define AMT_MAP_RENDER_STAGE_ADD_LAYER() \ 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 ) + AMT_MAP_APPEND_IF( aLayer, iIntMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), 0, EAlfModuleTestTypeLayerOrdinalPosition ); \ + AMT_MAP_APPEND_IF( aLayer, iIntMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), 0, EAlfModuleTestTypeLayerNodeOrdinalPosition ) #define AMT_MAP_RENDER_STAGE_ADD_LAYER_LINK() \ AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeCreateLayer ); \ @@ -174,6 +191,13 @@ 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_APPEND_LINK( iIntMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeLayerNodeOrdinalPosition ); \ + AMT_MAP_APPEND_LINK( iIntMap, AMT_MAP_PTR_TO_KEY_CAST( &aWindowTreeNode ), windowId, EAlfModuleTestTypeLayerNodeOrdinalPosition ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeGceCreateLayer ); \ + AMT_MAP_APPEND_LINK( iSurfaceMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeGceReleaseLayer ); \ + AMT_MAP_APPEND_LINK( iIntMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeGceLayerPosition ); \ + AMT_MAP_APPEND_LINK( iIntMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeGceLayerOpacity ); \ + AMT_MAP_APPEND_LINK( iRectMap, windowId, AMT_MAP_PTR_TO_KEY_CAST( &aLayer ), EAlfModuleTestTypeGceLayerExtent ); \ \ AMT_MAP_SET_VALUE( iSurfaceMap, windowId, aLayer.Surface(), EAlfModuleTestTypeCreateLayer ) @@ -250,6 +274,40 @@ #define AMT_MAP_BRIDGE_SET_ORDINAL_POSITION() \ AMT_MAP_SET_VALUE_IF( windowAttributes, iIntMap, windowNodeId, windowAttributes->iOrdinalPosition, EAlfModuleTestTypeLayerOrdinalPosition ) +#define AMT_MAP_NODE_SET_ORDINAL_POSITION() \ + AMT_MAP_SET_VALUE( iIntMap, iId, ordinal, EAlfModuleTestTypeLayerNodeOrdinalPosition ) + + +// GCE defines + +#define AMT_MAP_GCE_ADD_LAYER() \ + AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeGceCreateLayer ); \ + AMT_MAP_APPEND_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TSurfaceId::CreateNullId(), EAlfModuleTestTypeGceReleaseLayer ); \ + AMT_MAP_APPEND_IF( aLayer, iIntMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), 0, EAlfModuleTestTypeGceLayerPosition ); \ + AMT_MAP_APPEND_IF( aLayer, iIntMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), 0, EAlfModuleTestTypeGceLayerOpacity ); \ + AMT_MAP_APPEND_IF( aLayer, iRectMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), TRect(), EAlfModuleTestTypeGceLayerExtent ) + +#define AMT_MAP_GCE_SET_SURFACE() \ + AMT_MAP_SET_VALUE( iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( static_cast< MWsLayer* >( this ) ), aSurface, EAlfModuleTestTypeGceCreateLayer ) + +#define AMT_MAP_GCE_REMOVE_LAYER() \ + AMT_MAP_SET_VALUE_IF( aLayer, iSurfaceMap, AMT_MAP_PTR_TO_KEY_CAST( aLayer ), aLayer->Surface(), EAlfModuleTestTypeGceReleaseLayer ) + +#define AMT_MAP_GCE_SET_LAYER_OPACITY() \ + AMT_MAP_SET_VALUE( iIntMap, AMT_MAP_PTR_TO_KEY_CAST( static_cast< MWsLayer* >( this ) ), Opacity(), EAlfModuleTestTypeGceLayerOpacity ) + +#define AMT_MAP_GCE_SET_LAYER_EXTENT() \ + AMT_MAP_SET_VALUE( iRectMap, AMT_MAP_PTR_TO_KEY_CAST( static_cast< MWsLayer* >( this ) ), aExtent, EAlfModuleTestTypeGceLayerExtent ) + + +// Goom defines + +#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 diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h --- a/uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/CommonInc/alfmoduletesttype.h Tue May 25 17:55:19 2010 +0300 @@ -62,15 +62,23 @@ EAlfModuleTestTypeBridgeChangeTextCursorFlag, EAlfModuleTestTypeBridgeChangeTextCursorColor, EAlfModuleTestTypeBridgeVisualVisibility, + EAlfModuleTestTypeBridgeGoom, // Core toolkit component specific tests EAlfModuleTestTypeCoreToolkitDrawWindow, EAlfModuleTestTypeCoreToolkitDrawFromRenderBuffer, + EAlfModuleTestTypeCoreToolkitGoom, // Layer tests EAlfModuleTestTypeCreateLayer, - EAlfModuleTestTypeReleaseLayer, - EAlfModuleTestTypeLayerOrdinalPosition, + EAlfModuleTestTypeReleaseLayer, + EAlfModuleTestTypeLayerOrdinalPosition, + EAlfModuleTestTypeLayerNodeOrdinalPosition, + EAlfModuleTestTypeGceCreateLayer, + EAlfModuleTestTypeGceReleaseLayer, + EAlfModuleTestTypeGceLayerPosition, + EAlfModuleTestTypeGceLayerExtent, + EAlfModuleTestTypeGceLayerOpacity, // Do not use this value when creating item. // This is just meant for Find operations when all tests are accepted. diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfbridge.h Tue May 25 17:55:19 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 @@ -279,7 +283,15 @@ * */ void GfxTriggerEndFullScreen(CFullScreenEffectState* aFullScreenEffectData); - + + /** + * UpdateSecondaryEffectL + * + * Resolve filename for two part effect that is used with slowly starting applications + * + */ + TBool UpdateSecondaryEffectL(const CFullScreenEffectState& aState); + /* * GfxTriggerEffectWhenFullScreenDrawn * @@ -427,7 +439,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 +456,10 @@ CHuiControl* aEffectControl, TBool aInsertTemporaryVisual, TBool& aItemDestroyed, + TBool aIsFullScreenEffect, TBool aIsExitEffect = EFalse, - TBool aCanDestroyOrHideImmediately = EFalse); + TBool aCanDestroyOrHideImmediately = EFalse + ); /* @@ -457,6 +471,7 @@ CHuiLayout* aTargetLayout, CHuiControl* aEffectControlGroup, TInt& aItemsDestroyed, + TBool aIsFullScreenEffect, TBool aAddLayout = ETrue, TBool aIsExitEffect = EFalse, TBool aCanDestroyOrHideImmediately = EFalse); @@ -607,6 +622,15 @@ void ShowWindowGroupControlGroupL(CHuiRoster& aRoster, CHuiControlGroup& aGroup, TInt aWhere, TInt aScreenNumber ); + /** + * HasActiveAlfContent + * + * Determine if the window group in question has active Alf visuals + * + * @return ETrue, if active clients + */ + TBool HasActiveAlfContent( TInt aClientWgId ); + private: /** @@ -916,6 +940,8 @@ */ CFullScreenEffectState* iFullScreenEffectData; + CFullScreenEffectState* iSecondaryFullScreenEffectData; + /** * Control effect state. * Own. @@ -925,10 +951,7 @@ // these save the current full screen transition data // so that the correct transition can be ended from the callback // when the effect ends - TInt iLastFullScreenEffectWindowGroup; - TInt iLastFullScreenScreen; - TInt iLastAction; - TInt iLastEffectHandle; + CAlfEffectEndTimer* iEffectEndTimer; TBool iLayoutInitializedForExitEffect; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfeffectutils.h Tue May 25 17:55:19 2010 +0300 @@ -19,6 +19,16 @@ #include #include "alfbridge.h" +enum TEffectState + { + EBeginFullScreenReceived, // first request of effect received + EWaitingWindowGroup, + EWaitEndFullScreen, + EEndFullScreenReceivedWaitingWindowGroup, + EEndFullscreenReceived, + ESecondPhaseSetupActive, + EFinalEffectActive + }; // Timer to send finish full screen effect // --------------------------------------------------------- // CAlfFinishTimer @@ -228,6 +238,8 @@ public: ~CFullScreenEffectState(); + void ConstructL(const CFullScreenEffectState& aEffectState); + void ConstructL(TInt aAction, RMemReadStream& aStream); // Information from BeginFullScreen @@ -239,15 +251,32 @@ TInt iToSecureId; TInt iFromSecureId; TRect iRect; - TBool iTimeoutTriggered; + TBool iLongAppStartTimeout; + TBool iTimeout; - // ETrue if waiting for window group to appear - TBool iWaitingWindowGroup; + + void SetState(TEffectState aState); + + TEffectState State(); + + +private: + TEffectState iState; + +public: // ETrue if end fullscreen has been performed TBool iEndFullScreen; // ETrue if setup effect container has been done TBool iSetupDone; - + // effect has fade out and fade in. The fade in part is active, when this is ETrue. + enum TEffectPhase + { + EOnlyOnePart = 0, + EFirstPartActive, + ESecondPartActive + }; + + TEffectPhase iTwoPhaseEffect; // used for resolving the iCleanupStackItem that holds the frozen app layout underneath the starting application TInt iAppStartScreenshotItemHandle; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfscreen.h Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerconsts.h Tue May 25 17:55:19 2010 +0300 @@ -46,7 +46,9 @@ EAlfGetNumberOfActiveEffects, EAlfRequestSignal, EAlfCompleteSignal, - EAlfSetDistractionWindow + EAlfSetDistractionWindow, + EAlfVolunteerForGoomTarget, + EAlfExcludeFromGoomTargets }; @@ -93,8 +95,14 @@ enum TAlfSignalFlags { EAlfSignalEffectStarted = 0x1, - EAlfSignalEffectComplete = 0x2, - + EAlfSignalEffectComplete = 0x2, }; +enum TAlfWindowGroupListType + { + EAlfInactiveWgs = 0, + EAlfAllWgsWithSurface, + EAlfVolunteersForCommonGood + }; + #endif diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h --- a/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Inc/alfstreamerserver.h Tue May 25 17:55:19 2010 +0300 @@ -71,11 +71,13 @@ void RemoveTargetFromInactiveSurfaces(TInt aTarget); void AddTargetFromInactiveSurfaces(TInt aTarget); - void GetListOfWGsHavingInactiveSurfacesL(const RMessage2& aMessage, TBool aActiveAlso = ETrue); + void GetListOfWGsHavingInactiveSurfacesL(const RMessage2& aMessage, TInt aActiveAlso = ETrue); void QueueRequestBGAnimSessionsL(const TPtrC8& aPtr, TInt aOp); void AddSignal(CAlfStreamerServerSession* aSession, const RMessage2& aMessage); void CompleteSignal(TInt aSignal, TInt aType); + void FormAQueueL(TInt aOp, TInt aSecureId, TInt aWindowGroupId); + private: void ConstructL(); @@ -145,13 +147,14 @@ struct TAlfCompParams { TInt iTarget; - TInt iTarget2; // padding actually + TInt iSecureId; // used with optional GRAM list TInt iWindowHandle; TInt iWindowGroup; }; RArray iAlfTargets; RArray iInactiveSurfaces; + RArray iOptionalGRAM; }; NONSHARABLE_CLASS(CAlfStreamerServerSession): public CSession2 diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappserver.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappsrvsessionBase.cpp Tue May 25 17:55:19 2010 +0300 @@ -36,6 +36,8 @@ #include "alf/alfextensionfactory.h" #include "alf/alfversion.h" #include "alfsrvsettingshandler.h" +#include "alfstreamerconsts.h" +#include "alfdecoderserverclient.h" const TUint KAlfMaxCpuUsageDuringPointerEvent = 35; // Percentage @@ -106,6 +108,7 @@ RMessagePtr2 iSystemEvent; TInt iParentId; TBool iActive; + TUint iSecureId; }; // ======== MEMBER FUNCTIONS ======== @@ -129,11 +132,17 @@ // --------------------------------------------------------------------------- // EXPORT_C CAlfAppSrvSessionBase::~CAlfAppSrvSessionBase() - { + { + iHost->HandleClientExit(reinterpret_cast(this)); if ( iData ) { + if (AlfAppUi()->BridgerClient()) + { + AlfAppUi()->BridgerClient()->SendBlind(EAlfExcludeFromGoomTargets, TIpcArgs(iData->iSecureId,iData->iClientWindowGroupId)); + } + iData->iHandles.Close(); delete iData->iObjectIx; @@ -154,6 +163,11 @@ { iData->iSystemEvent.Complete(KErrCancel); } + + if ( iData->iContainer ) + { + iHost->ReleaseContainer( *iData->iContainer ); + } delete iData; } iHost = NULL; @@ -203,6 +217,7 @@ // EXPORT_C void CAlfAppSrvSessionBase::ServiceL(const RMessage2& aMessage) { + iData->iSecureId = aMessage.SecureId(); // one time would be enough if(iHost->MetricsInterface()) { iHost->MetricsInterface()->EnterClientMessageL(reinterpret_cast(this), aMessage); @@ -391,6 +406,10 @@ { __ASSERT_DEBUG(iData, USER_INVARIANT()); iData->iClientWindowGroupId = aId; + if (AlfAppUi()->BridgerClient()) + { + AlfAppUi()->BridgerClient()->SendBlind(EAlfVolunteerForGoomTarget, TIpcArgs(iData->iSecureId, iData->iClientWindowGroupId)); + } } // --------------------------------------------------------------------------- diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfappui.cpp Tue May 25 17:55:19 2010 +0300 @@ -944,20 +944,29 @@ void CAlfAppUi::UpdateActiveSession(CAlfAppSrvSessionBase* aSession) { - EndPointerEventHandling(); - iData->iActiveSession = aSession; + if( iData->iActiveSession != aSession ) + { + EndPointerEventHandling(); + iData->iActiveSession = aSession; + + iData->iResourceManager->SetActiveSession( iData->iActiveSession ); - iData->iResourceManager->SetActiveSession( iData->iActiveSession ); - - if(!aSession) - { - if (iData->iMainDisplay) // TBD: multiple display support once again... + if(!aSession) { - TRAP_IGNORE(iData->iMainDisplay->SetClearBackgroundL(CHuiDisplay::EClearNone)); + if (iData->iMainDisplay) // TBD: multiple display support once again... + { + TRAP_IGNORE(iData->iMainDisplay->SetClearBackgroundL(CHuiDisplay::EClearNone)); + } } + iData->iBridgeObj->HandleVisualVisibility( 0 ); } } +CAlfAppSrvSessionBase* CAlfAppUi::ActiveSession() + { + return iData->iActiveSession; + } + // --------------------------------------------------------------------------- // From class CAknAppUi. // Handles window server event. @@ -1398,4 +1407,13 @@ // let the session complete message } +RAlfBridgerClient* CAlfAppUi::BridgerClient() + { + if (iData) + { + return iData->iBridgeObj->BridgerClient(); + } + return 0; + } + // end of file diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfbridge.cpp Tue May 25 17:55:19 2010 +0300 @@ -171,6 +171,7 @@ iDeadControlGroups.Close(); iEffectWindowGroups.Close(); delete iFullScreenEffectData; + delete iSecondaryFullScreenEffectData; if (iActivated) { @@ -674,6 +675,13 @@ if (anyVisualHasEffect) { TInt activeEffectHandle = iEffectCleanupStack[activeEffectIndex].iHandle; + if (iSecondaryFullScreenEffectData && iSecondaryFullScreenEffectData->iHandle == activeEffectHandle) + { + __ALFFXLOGSTRING1("CAlfBridge::DeleteControlGroupL - WARNING! Control group with 2 phase effect is being destroyed. Canceling second phase for handle %d", activeEffectHandle); + delete iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = NULL; + } + __ALFFXLOGSTRING1("Layout 0x%x has external content", layout); // EHuiVisualFlagShouldDestroy destroy flag should have come for the windows in this layout already layout->SetFlags(EHuiVisualFlagShouldDestroy); @@ -702,7 +710,7 @@ if (!HasActiveEffect(familyTree[familyIndex])) { TInt dummy; - AddEffectItemL(activeEffectHandle, familyTree[familyIndex], NULL, NULL, EFalse, dummy, EFalse); + AddEffectItemL(activeEffectHandle, familyTree[familyIndex], NULL, NULL, EFalse, dummy, ETrue, EFalse); } } } @@ -773,7 +781,7 @@ cntrl->ConstructL(); group->AppendL(cntrl); CleanupStack::Pop(cntrl); - cntrl->SetRole(EAlfWindowGroupContainer); + cntrl->SetRole(EHuiWindowGroupContainer); layout = CHuiCanvasVisual::AddNewL(*cntrl); layout->SetTagL(KAlfWindowGroupContainerControlTag); @@ -798,10 +806,14 @@ entry.iSecureId = aSecureId; // we have received start effect for this group, but the group did not exist in alf universe at the time. hide the group. if (iFullScreenEffectData - && iFullScreenEffectData->iWaitingWindowGroup + && (iFullScreenEffectData->State() == EWaitingWindowGroup || iFullScreenEffectData->State() == EEndFullScreenReceivedWaitingWindowGroup) && iFullScreenEffectData->iToSecureId == aSecureId) { iFullScreenEffectData->iToWg = aClientWindowGroupId; + if (iSecondaryFullScreenEffectData) + { + iSecondaryFullScreenEffectData->iToWg = aClientWindowGroupId; + } CHuiControlGroup* fromGroup = NULL; CHuiLayout* fromLayout = NULL; fromGroup = FindControlGroupByFullScreenFromEffect(); @@ -815,10 +827,16 @@ // First HandleGfxEvent, then clear iWaitingWindowGroup. __ALFFXLOGSTRING1("CAlfBridge::CreateControlGroupL - try triggering effect 0x%x", layout); TBool failed = HandleGfxEventL( *iFullScreenEffectData, layout, fromLayout ); - if ( iFullScreenEffectData ) - { - iFullScreenEffectData->iWaitingWindowGroup = EFalse; + if ( iFullScreenEffectData->State() == EWaitingWindowGroup) + { + iFullScreenEffectData->SetState(EWaitEndFullScreen); } + else + { + // was CFullScreenEffectState::EEndFullScreenReceivedWaitingWindowGroup + iFullScreenEffectData->SetState(EEndFullscreenReceived); + } + if ( failed ) { // Effect failed, reset state @@ -827,7 +845,7 @@ } } entry.iScreenNumber = aScreenNumber; -// entry.iRole = EAlfWindowGroupContainer; +// entry.iRole = EHuiWindowGroupContainer; iAlfScreens[aScreenNumber]->iControlGroups.Append(entry); CleanupStack::Pop(group); @@ -872,7 +890,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 @@ -882,13 +900,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); @@ -976,7 +994,7 @@ move = ETrue; } - if (aRoster.ControlGroup(i).Control(0).Role() == EAlfSessionContainer) + if (aRoster.ControlGroup(i).Control(0).Role() == EHuiSessionContainer) { index++; } @@ -1050,7 +1068,7 @@ break; } - if (aRoster.ControlGroup(i).Control(0).Role() == EAlfWindowGroupContainer && + if (aRoster.ControlGroup(i).Control(0).Role() == EHuiWindowGroupContainer && &aRoster.ControlGroup(i) != &aGroup) { index++; @@ -1063,7 +1081,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++; @@ -1081,7 +1099,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()) @@ -1092,6 +1110,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; } } @@ -1126,7 +1149,7 @@ for (TInt j=0; jiDisplay->Roster(); for (TInt j=0; jEffect() ) ) + + // Note: The long startup effect uses opaque effect to hide the background. + if ( aVisual.Layout() + && (IsNonFadeEffect( aVisual.Layout()->Effect() ) + && !IsOpaqueEffect(aVisual.Layout()->Effect() )) + ) { return EFalse; } @@ -1438,7 +1466,7 @@ CHuiControlGroup& controlgroup = iAlfScreens[aScreenNumber]->iDisplay->Roster().ControlGroup(j); CHuiControl& control = controlgroup.Control(0); - if (control.Role() == EAlfFpsIndicatorContainer) + if (control.Role() == EHuiFpsIndicatorContainer) { // FPS container doesn't contain canvas visuals continue; @@ -1465,11 +1493,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)) @@ -1616,14 +1651,16 @@ } TBool isLayoutActive = !(layout->Flags() & EHuiVisualFlagInactive); - if (isLayoutActive && !hasActiveVisualsInVisualTree) + + if (isLayoutActive && !hasActiveVisualsInVisualTree && !IsOpaqueEffect(layout->Effect())) { // 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. + // If root visual is having an opaque effect, it must remain active layout->SetFlag(EHuiVisualFlagInactive); } - else if(!isLayoutActive && hasActiveVisualsInVisualTree) + else if(!isLayoutActive && (hasActiveVisualsInVisualTree || IsOpaqueEffect(layout->Effect()))) { layout->ClearFlag(EHuiVisualFlagInactive); layout->SetPos(fullscreen.iTl); @@ -1697,9 +1734,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. @@ -1722,11 +1761,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; } @@ -1970,8 +2005,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; @@ -2171,8 +2206,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; } @@ -3138,7 +3173,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++; } @@ -3327,9 +3362,11 @@ __ALFLOGSTRING3("CAlfBridge::HandlePostCanvasBufferL, EAlfDSPostCanvasBuffer: Visual not found! Screen: %d, Id: %d, GroupId: %d ", screenNumber, windowNodeId, windowGroupNodeId ); } #ifdef USE_APPLICATION_ENDFULLSCREEN_TIMEOUT - if (iFullScreenEffectData + if (iFullScreenEffectData + && !iSecondaryFullScreenEffectData && iFullScreenEffectData->iEffectType != CFullScreenEffectState::ENotDefinedEffect - && !iFullScreenEffectData->iEndFullScreen) + && iFullScreenEffectData->State() == EWaitEndFullScreen + && iFullScreenEffectData->iTwoPhaseEffect != CFullScreenEffectState::ESecondPartActive) { CHuiControlGroup *to_group = NULL; if (iFullScreenEffectData->iEffectType == CFullScreenEffectState::EExitEffect) @@ -3360,7 +3397,7 @@ // void CAlfBridge::GfxTriggerEndFullScreen(CFullScreenEffectState* aFullScreenEffectData) { - if (aFullScreenEffectData->iEndFullScreen) + if (iFullScreenEffectData->State() == EFinalEffectActive) { return; } @@ -3389,9 +3426,9 @@ // from layout may be undefined __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEndFullScreenTimeout : Enough app drawing. Trigger EndFullScreen for layout 0x%x", to_layout); HandleGfxEventL( *aFullScreenEffectData, to_layout, from_layout ); - } - - aFullScreenEffectData->iEndFullScreen = ETrue; + aFullScreenEffectData->SetState(EFinalEffectActive); + } + iAlfScreens[0]->SetVisualTreeVisibilityChanged(ETrue); } @@ -4123,7 +4160,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 @@ -4525,8 +4562,9 @@ TBool CAlfBridge::HandleGfxEventL(CFullScreenEffectState& aEvent, CHuiLayout* aToLayout, CHuiLayout *aFromLayout) { - __ALFFXLOGSTRING2("CAlfBridge::HandleGfxEventL - To SecureUid: 0x%x, From SecureUid: 0x%x", aEvent.iToSecureId, aEvent.iFromSecureId); + __ALFFXLOGSTRING3("CAlfBridge::HandleGfxEventL - To SecureUid: 0x%x, From SecureUid: 0x%x, effect %S", aEvent.iToSecureId, aEvent.iFromSecureId, aEvent.iEffectName); __ALFFXLOGSTRING4("CAlfBridge::HandleGfxEventL - To layout: 0x%x, From layout: 0x%x, Effect handle: %d, Action: %d", aToLayout, aFromLayout, aEvent.iHandle, aEvent.iAction); + TInt err = KErrNone; TBool failed = EFalse; @@ -4559,7 +4597,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. @@ -4581,6 +4619,11 @@ aToLayout->iOpacity.Set(0.0f); // these are meant for applications that are not yet ready to be drawn, but possible already on the foreground FreezeLayoutUntilEffectDestroyedL(aFromLayout, aEvent.iHandle); aEvent.iEffectType = CFullScreenEffectState::EStartEffect; + if (iSecondaryFullScreenEffectData) + { + iSecondaryFullScreenEffectData->iEffectType = CFullScreenEffectState::EStartEffect; + } + aEvent.iCanDestroyOrHideImmediately = ETrue; // enable hiding of windows during application start/activate effects break; } @@ -4606,7 +4649,9 @@ if (!(aToLayout->Flags() & EHuiVisualFlagInactive)) { TInt index; - if (aToLayout->StoredRenderBuffer() && HasActiveEffect(aToLayout, index) && index != KErrNotFound) + if (aToLayout->StoredRenderBuffer() + && HasActiveEffect(aToLayout, index) + && index != KErrNotFound) { // a screenshot has been saved into the layout, and the layout was added to cleanupstack // for cleaning. SetupEffectLayoutContainerL will add the same layout @@ -4616,7 +4661,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; } @@ -4624,7 +4669,11 @@ { iLayoutInitializedForExitEffect = EFalse; aEvent.iSetupDone = EFalse; - failed = ETrue; + failed = ETrue; + } + if (iSecondaryFullScreenEffectData) + { + iSecondaryFullScreenEffectData->iSetupDone = aEvent.iSetupDone; } return failed; } @@ -4645,6 +4694,17 @@ if (aToLayout) { + // if this was timeout appstart effect, we need to take screenshot at this point. + // It was not taken in the beginfullscreen + + if (aEvent.iLongAppStartTimeout) + { + __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - taking screenshot for the timeout appstart effect. Handle: %d", aEvent.iHandle ); + aToLayout->SetStoredRenderBufferModificationsEnabled(ETrue); + TBool neededStoredBuffers(EFalse); // dummy + StoreLayoutIfRequiredByEffectL(aToLayout, aEvent, neededStoredBuffers); + } + aToLayout->iOpacity.Set(1.0f); __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - loading effect, handle %d", aEvent.iHandle ); if (aEvent.iAction == AknTransEffect::EApplicationExit) @@ -4658,7 +4718,11 @@ // add visuals to visual cleanupstack aToLayout->SetStoredRenderBufferModificationsEnabled(EFalse); TInt index; - if (aToLayout->StoredRenderBuffer() && HasActiveEffect(aToLayout, index) && index != KErrNotFound) + if (aToLayout->StoredRenderBuffer() + && HasActiveEffect(aToLayout, index) + && index != KErrNotFound + && aEvent.iTwoPhaseEffect != CFullScreenEffectState::ESecondPartActive // effects second phase + ) { // a screenshot has been saved into the layout, and the layout was added to cleanupstack // for cleaning. SetupEffectLayoutContainerL will add the same layout @@ -4666,7 +4730,16 @@ __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - Removing the layout 0x%x with screenshot from iEffectCleanupStack", aToLayout); iEffectCleanupStack.Remove(index); } - layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, EFalse, aEvent.iCanDestroyOrHideImmediately); + if (aEvent.iTwoPhaseEffect == CFullScreenEffectState::ESecondPartActive || aEvent.iSetupDone) + { + // two phase effect, setup has been made with the first part of the effect. + // Only changing the effect is required. + layoutEffectable = ETrue; + } + else + { + layoutEffectable = SetupEffectLayoutContainerL(aEvent.iHandle,aToLayout, ETrue, EFalse, aEvent.iCanDestroyOrHideImmediately); + } aEvent.iSetupDone = layoutEffectable; aToLayout->SetStoredRenderBufferModificationsEnabled(ETrue); } @@ -4680,12 +4753,16 @@ engine->AddEffectToGroup(activeEffectGroup); } __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEventL - Active effect group: %d", activeEffectGroup); - effectFlags = KHuiFxDelayRunUntilFirstFrameHasBeenDrawn; - if (FxmlHasOpaqueHint(iHuiEnv->EffectsEngine(), *aEvent.iEffectName)) + effectFlags = KHuiFxDelayRunUntilFirstFrameHasBeenDrawn; + if (FxmlHasOpaqueHint(iHuiEnv->EffectsEngine(), *aEvent.iEffectName) || + aEvent.iTwoPhaseEffect == CFullScreenEffectState::ESecondPartActive) { - // Performance improvement, but this would be better to be a special hint param in the fxml effectFlags |= KHuiFxOpaqueHint; } + if (iSecondaryFullScreenEffectData) + { + iSecondaryFullScreenEffectData->iSetupDone = ETrue; + } if (aEvent.iRect != TRect()) { @@ -4721,7 +4798,8 @@ } } } - iLastAction = aEvent.iAction; // TODO: useless? + + iAlfScreens[0]->SetVisualTreeVisibilityChanged(ETrue); return failed; } @@ -4736,7 +4814,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; } } @@ -4784,6 +4862,8 @@ } CleanupStack::PopAndDestroy( fxData ); + delete iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = NULL; __ALFFXLOGSTRING("CAlfBridge::HandleGfxStopEvent - END"); } @@ -4889,6 +4969,8 @@ } delete iFullScreenEffectData; + delete iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = NULL; iFullScreenEffectData = fxData; iFullScreenEffectData->iAppStartScreenshotItemHandle = fxData->iHandle; @@ -4904,6 +4986,14 @@ // Client expects completion to be signalled with this handle. iFullScreenEffectData->iCompletionHandle = stream.ReadInt32L(); + if (iSecondaryFullScreenEffectData) + { + // Two phase effect path has been chosen. First part is now ongoing, and second part will be + // triggered after that. Client has now notified, that its screen is ready. We may trigger the + // second effect as soon as the first part finishes. + __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - Trigger second part. when 1st part done."); + iSecondaryFullScreenEffectData->iCompletionHandle = iFullScreenEffectData->iCompletionHandle; + } stream.Release(); return ; @@ -4914,42 +5004,88 @@ // End fullscreen signal received. We proceed only if there is really // effect ongoing and "end fullscreen" hasn't already been processed. - if ( !iFullScreenEffectData || iFullScreenEffectData->iEndFullScreen ) - { - __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - END: fx ready"); + if ( !iFullScreenEffectData + || iFullScreenEffectData->State() == EFinalEffectActive + || iFullScreenEffectData->State() == EEndFullscreenReceived) + { + if (iFullScreenEffectData) + __ALFFXLOGSTRING1("CAlfBridge::HandleGfxEffectsL - END: fx ready, state %d ", iFullScreenEffectData->State()); + stream.Release(); 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(); + CFullScreenEffectState* fxData = new (ELeave) CFullScreenEffectState; + CleanupStack::PushL( fxData ); + fxData->ConstructL( KErrUnknown, stream ); + + TBool timeout = fxData->iTimeout; + // could the application be ready? + CHuiControlGroup* applicationExists = FindControlGroupByFullScreenToEffect(); + TBool longAppStartTimeout = fxData->iLongAppStartTimeout; + + if (iFullScreenEffectData && + !iSecondaryFullScreenEffectData && // second part has not been requested yet + longAppStartTimeout && // this is indeed timeout for app start effect + iFullScreenEffectData->iTwoPhaseEffect == CFullScreenEffectState::EOnlyOnePart && // second part has not been activated. note, that iSecondaryFullScreenEffectData would be NULL in this case + (iFullScreenEffectData->State() == EWaitEndFullScreen + || iFullScreenEffectData->State() == EWaitingWindowGroup)) + { + // Load the whole structure. If timeout was triggered then request effect name to be + // updated. + UpdateSecondaryEffectL(*fxData); + iFullScreenEffectData->iLongAppStartTimeout = fxData->iLongAppStartTimeout; + iFullScreenEffectData->iTwoPhaseEffect = CFullScreenEffectState::EFirstPartActive; + iFullScreenEffectData->iOperation = MAlfGfxEffectPlugin::EEndFullscreen; + } + + __ALFFXLOGSTRING4("HandleGfxEffectsL - iTwoPhaseEffect %d, Setup done: %d, Timeout: %d, long app start timeout: %d", iFullScreenEffectData->iTwoPhaseEffect,iFullScreenEffectData->iSetupDone, timeout,longAppStartTimeout); + if (!fxData->iLongAppStartTimeout) // endfullscreen originating from the application + { + if (iFullScreenEffectData->State() == EWaitingWindowGroup) + { + iFullScreenEffectData->SetState(EEndFullScreenReceivedWaitingWindowGroup); } - CleanupStack::PopAndDestroy( fxData ); - fxData = NULL; + else + { + iFullScreenEffectData->SetState(EEndFullscreenReceived); + } + + if (iSecondaryFullScreenEffectData) + { + iSecondaryFullScreenEffectData->SetState(EEndFullscreenReceived); + } + + } + CleanupStack::PopAndDestroy( fxData ); + fxData = NULL; - __ALFFXLOGSTRING("HandleGfxEffectsL - process end"); - iFullScreenEffectData->iEndFullScreen = ETrue; - -#ifdef USE_APPLICATION_ENDFULLSCREEN_TIMEOUT - if (iFullScreenEffectData->iDrawingCompleteTimer) - { - iFullScreenEffectData->iDrawingCompleteTimer->Cancel(); - } -#endif - stream.Release(); + __ALFFXLOGSTRING4("CAlfBridge::HandleGfxEffectsL - Regular timeout: %d, Slow start timeout: %d, Effect setup: %d, State: %d", + timeout, + longAppStartTimeout, + iFullScreenEffectData->iSetupDone, + iFullScreenEffectData->State()); + + stream.Release();// We should respect normal timeouts. + if (iFullScreenEffectData->iTwoPhaseEffect > CFullScreenEffectState::EOnlyOnePart + && iFullScreenEffectData->iSetupDone && timeout && longAppStartTimeout) // timeout = endfullscreen was requested or it was normal endfullscreen timeout, longAppStartTime = + { + // If this is two phased effect, it can be started only by application request of endfullscreen (!timeout) + // or screen drawn (triggered from + __ALFFXLOGSTRING("HandleGfxEffectsL - Two phase effect. Waiting second part to start. Skip this event."); + return; + } + + // If client triggered EndFullScreen has been received, and still we haven't seen sign of the application, we know + // things have gone wrong and will not go right. Clean up the mess. + if (iFullScreenEffectData->State() == EEndFullscreenReceived && !applicationExists && !timeout) + { + HandleGfxStopEvent(ETrue); + return; + } } CFullScreenEffectState* fxData = iFullScreenEffectData; fxData->iOperation = operation; - fxData->iWaitingWindowGroup = EFalse; __ALFFXLOGSTRING3("CAlfBridge::HandleGfxEffectsL - Operation: %d, handle: %d, type: %d", operation, fxData->iHandle, fxData->iType); __ALFFXLOGSTRING2("CAlfBridge::HandleGfxEffectsL - towg: %d, fromwg: %d", fxData->iToWg, fxData->iFromWg); @@ -4984,11 +5120,16 @@ if (toLayout) { failed = HandleGfxEventL(*fxData, toLayout, fromLayout); + // We found layout, and this was beginfullscreen event. Wait for endfullscreen to be triggered + if (fxData->iOperation == MAlfGfxEffectPlugin::EBeginFullscreen) + { + iFullScreenEffectData->SetState(EWaitEndFullScreen); + } } else { __ALFFXLOGSTRING("HandleGfxEffectsL - waiting window group"); - fxData->iWaitingWindowGroup = ETrue; + fxData->SetState(EWaitingWindowGroup); } } @@ -5020,13 +5161,33 @@ __ALFFXLOGSTRING("CAlfBridge::HandleGfxEffectsL - END"); } +TBool CAlfBridge::UpdateSecondaryEffectL(const CFullScreenEffectState& aState) + { + + __ALFFXLOGSTRING1("CAlfBridge::UpdateSecondaryEffectL - appstart timeout triggered: %d", aState.iLongAppStartTimeout); + if (aState.iLongAppStartTimeout) // only application start effects can trigger this timeout + { + // clone the primary startup effect for later usage + delete iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = new (ELeave) CFullScreenEffectState; + iSecondaryFullScreenEffectData->ConstructL(*iFullScreenEffectData); + iSecondaryFullScreenEffectData->iLongAppStartTimeout = EFalse; + + delete iFullScreenEffectData->iEffectName; + iFullScreenEffectData->iEffectName = NULL; + iFullScreenEffectData->iEffectName = aState.iEffectName->AllocL(); + } + __ALFFXLOGSTRING("CAlfBridge::UpdateSecondaryEffectL <<" ); + return EFalse; + } + TBool CAlfBridge::GfxTriggerEffectWhenFullScreenDrawn(CHuiControlGroup* aToGroup) { if (!aToGroup || (aToGroup && aToGroup->Count() == 0)) { return EFalse; } - iTempRegion.Clear(); + iTempRegion.Clear(); CAlfScreen* screen = iAlfScreens[0]; TRect fullscreen = TRect(TPoint(0,0), screen->Size()); @@ -5043,6 +5204,16 @@ TBool opaque = ETrue; // in app start case the layout is propably not opaque. Fake it. IsFullScreenDrawnRecursive(toLayout, *aToGroup, control, fullscreenCovered, fullscreen, screen, dummy, opaque, iAlfScreens[0]->iDisplay->Orientation()); fullscreenCovered = IsRectCoveredByRegion(fullscreen, iTempRegion); + // alf content check is relavant only for alf apps + if (!fullscreenCovered && aToGroup->iAlfApp) + { + TInt clientGroupId = FindClientWindowGroupId(0, *aToGroup); + if (clientGroupId != KErrNotFound) + { + fullscreenCovered = HasActiveAlfContent(clientGroupId); + } + } + __ALFFXLOGSTRING1("CAlfBridge::GfxTriggerEffectWhenFullScreenDrawn - Covered: %d", fullscreenCovered); if (fullscreenCovered) { @@ -5196,8 +5367,10 @@ CHuiControl* aEffectControl, TBool aInsertTemporaryVisual, TInt& aItemDestroyed, + TBool aIsFullScreenEffect, TBool aIsExitEffect, - TBool aCanDestroyOrHideImmediately) + TBool aCanDestroyOrHideImmediately + ) { CHuiCanvasVisual* temporaryPresenterVisual = NULL; TInt enableEffect = ETrue; @@ -5247,7 +5420,8 @@ temporaryPresenterVisual, ETrue, aIsExitEffect, - aCanDestroyOrHideImmediately); + aCanDestroyOrHideImmediately, + aIsFullScreenEffect); iEffectCleanupStack.AppendL(item); } else @@ -5257,7 +5431,8 @@ TEffectCleanupStruct item = TEffectCleanupStruct(aEffectHandle, aSourceVisual, NULL, EFalse, aIsExitEffect, - aCanDestroyOrHideImmediately); + aCanDestroyOrHideImmediately, + aIsFullScreenEffect); iEffectCleanupStack.AppendL(item); } } @@ -5270,6 +5445,7 @@ CHuiLayout* aTargetLayout, CHuiControl* aEffectControl, TInt& aItemsDestroyed, + TBool aIsFullScreenEffect, TBool aAddLayout, TBool aIsExitEffect, TBool aCanDestroyOrHideImmediately) @@ -5277,7 +5453,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++) @@ -5287,10 +5463,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. @@ -5300,7 +5476,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, @@ -5321,17 +5497,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; @@ -5465,11 +5641,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) { @@ -5497,8 +5673,6 @@ // only use the effect if the effect file was correctly parsed if (err == KErrNone) { - iLastEffectHandle = aEvent.iHandle; - #ifdef HUI_DEBUG_TRACK_DRAWING visual->SetTracking(ETrue); #endif @@ -5528,8 +5702,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; @@ -5803,6 +5987,38 @@ // around will be cleared when HandleGfxStopEffectsL is called // iFinishedCleanupStackEffects.Append(aHandle); + + // check if the first part of application start effect finished + if (iFullScreenEffectData + && iFullScreenEffectData->iHandle == aHandle + && iFullScreenEffectData->iLongAppStartTimeout && iSecondaryFullScreenEffectData) + { + delete iFullScreenEffectData; + iFullScreenEffectData = iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = NULL; + iFullScreenEffectData->iTwoPhaseEffect = CFullScreenEffectState::ESecondPartActive; + if (iFullScreenEffectData->State() == EEndFullscreenReceived) + { + // Client notified of the EndFullScreen during the effect. Trigger the end part immediately. + __ALFFXLOGSTRING("CAlfBridge::AlfGfxEffectEndCallBack - End was received. Trigger second part."); + iFullScreenEffectData->SetState(ESecondPhaseSetupActive); // effect setup will be skipped in HandleGfxEvent + GfxTriggerEndFullScreen(iFullScreenEffectData); + iFullScreenEffectData->SetState(EFinalEffectActive); + // skip cleanup. It will be run, when this effect finishes + return; + } + else + { + iFullScreenEffectData->SetState(EWaitEndFullScreen); + } + + iFullScreenEffectData->iEffectType = CFullScreenEffectState::EStartEffect; + + CHuiControlGroup* toGroup = FindControlGroupByFullScreenToEffect(); + GfxTriggerEffectWhenFullScreenDrawn(toGroup); + return; + } + if (!iEffectEndTimer->IsActive()) { TRAP_IGNORE(iEffectEndTimer->AddFinishedHandleL(aHandle)); @@ -5849,6 +6065,9 @@ { delete iFullScreenEffectData; iFullScreenEffectData = NULL; + + delete iSecondaryFullScreenEffectData; + iSecondaryFullScreenEffectData = NULL; } } @@ -5892,7 +6111,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) { @@ -5911,7 +6130,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); @@ -5919,7 +6138,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); @@ -5927,7 +6146,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 ); @@ -5935,7 +6154,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 ); @@ -6174,6 +6393,13 @@ } iSwRenderingEnabled = aEnable; + + AMT_MAP_SET_VALUE( + iBoolMap, + AMT_MAP_SW_ENABLED_HANDLE, + iSwRenderingEnabled, + EAlfModuleTestTypeBridgeGoom ); + for (TInt i=0; iFlags(); @@ -6721,8 +6961,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; @@ -6764,7 +7004,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; @@ -6876,4 +7116,30 @@ } } +TBool CAlfBridge::HasActiveAlfContent( TInt aClientWgId ) + { + TBool hasAlfContent = EFalse; + if(iAppUi) + { + CAlfAppSrvSessionBase* activeAlfSession = iAppUi->ActiveSession(); + CAlfScreen* screen = iAlfScreens[0]; + for(TInt i = 0 ; i < screen->iDisplay->Roster().Count() - screen->FixedControlGroupCount() ; i++) + { + CHuiControlGroup& controlgroup = screen->iDisplay->Roster().ControlGroup(i); + CHuiControl& control = controlgroup.Control(0); + if (control.Role() == EHuiSessionContainer) + { + CAlfAppSrvSessionBase* alfSrvSession = iAppUi->SrvSessionForControlGroup(controlgroup); + if(alfSrvSession && + (alfSrvSession->ClientWindowGroup() == aClientWgId)) + { + hasAlfContent = ETrue; + break; + } + } + } + } + return hasAlfContent; + } + // end of file diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfeffectutils.cpp Tue May 25 17:55:19 2010 +0300 @@ -812,6 +812,31 @@ } } +void CFullScreenEffectState::ConstructL(const CFullScreenEffectState& aEffectState) + { + iAction = aEffectState.iAction; + iHandle = aEffectState.iHandle; + iType = aEffectState.iType; + iLongAppStartTimeout = aEffectState.iLongAppStartTimeout; + iTimeout = aEffectState.iTimeout; + iToWg = aEffectState.iToWg; + iFromWg = aEffectState.iFromWg; + iToAppId = aEffectState.iToAppId; + iFromAppId = aEffectState.iFromAppId; + + iToSecureId = aEffectState.iToSecureId; + iFromSecureId = aEffectState.iFromSecureId; + + iRect.iTl.iX = aEffectState.iRect.iTl.iX; + iRect.iTl.iY = aEffectState.iRect.iTl.iY; + iRect.iBr.iX = aEffectState.iRect.iBr.iX; + iRect.iBr.iY = aEffectState.iRect.iBr.iY; + iState = aEffectState.iState; + iEffectName = aEffectState.iEffectName->AllocL(); + iEffectType = aEffectState.iEffectType; + iCompletionHandle = aEffectState.iCompletionHandle; + iTwoPhaseEffect = CFullScreenEffectState::EOnlyOnePart; + } void CFullScreenEffectState::ConstructL( TInt aAction, @@ -820,7 +845,8 @@ iAction = aAction; iHandle = aStream.ReadInt32L(); iType = aStream.ReadInt32L(); - iTimeoutTriggered = aStream.ReadInt32L(); + iLongAppStartTimeout = aStream.ReadInt32L(); + iTimeout = aStream.ReadInt32L(); iToWg = aStream.ReadInt32L(); iFromWg = aStream.ReadInt32L(); iToAppId = aStream.ReadInt32L(); @@ -828,7 +854,8 @@ iToSecureId = aStream.ReadInt32L(); iFromSecureId = aStream.ReadInt32L(); - /*TInt flags =*/ + + // TInt flags aStream.ReadInt32L(); iRect.iTl.iX = aStream.ReadInt32L(); iRect.iTl.iY = aStream.ReadInt32L(); @@ -838,8 +865,27 @@ ResolveFileNameL(aStream); iCompletionHandle = iHandle; + iTwoPhaseEffect = CFullScreenEffectState::EOnlyOnePart; } +void CFullScreenEffectState::SetState(TEffectState aState) + { + if (aState >= iState) + { + iState = aState; + } + else + { + __ALFFXLOGSTRING2("CFullScreenEffectState::SetState - WARNING! Trying to set to previous state. %d -> %d", iState, aState); + } + }; + +TEffectState CFullScreenEffectState::State() + { + return iState; + } + + void CControlEffectState::ConstructL(TInt aAction, RMemReadStream& aStream) { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfhierarchymodel.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfnodes.cpp Tue May 25 17:55:19 2010 +0300 @@ -1317,6 +1317,7 @@ (TAny*)offset ); } } + AMT_MAP_NODE_SET_ORDINAL_POSITION(); } // --------------------------------------------------------------------------- diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfscreen.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfsrvcontrolgroupsubsession.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfstreamerserver.cpp Tue May 25 17:55:19 2010 +0300 @@ -234,6 +234,7 @@ iCompositionTokens.Close(); iWindowServerSessions.Close(); iAlfTargets.Close(); + iOptionalGRAM.Close(); } void CAlfStreamerServer::AppendCompositionSessionL(CAlfStreamerServerSession* aSession, TBool aHost) @@ -409,6 +410,30 @@ __ALFLOGSTRING("CAlfStreamerServer::ReleasePermissionTokenL: Not Found <<") } +void CAlfStreamerServer::FormAQueueL(TInt aOp, TInt aSecureId, TInt aWindowGroup) + { + __ALFLOGSTRING3("CAlfStreamerServer::FormAQueueL( %d, %d, %d )",aOp, aSecureId, aWindowGroup) + if (aOp == EAlfVolunteerForGoomTarget) + { + TAlfCompParams param = {aSecureId, aSecureId, aWindowGroup, aWindowGroup}; + if (iOptionalGRAM.Find(param) != KErrNotFound) + { + __ALFLOGSTRING("CAlfStreamerServer::FormAQueueL: Already added"); + return; + } + User::LeaveIfError(iOptionalGRAM.Append(param)); + } + else + { + for(TInt i = iOptionalGRAM.Count()-1; i >= 0; i-- ) + { + if ( iOptionalGRAM[i].iWindowGroup == aWindowGroup ) + { + iOptionalGRAM.Remove(i); + } + } + } + } void CAlfStreamerServer::QueueRequestSessionsL(TInt aAlfToken, const TPtrC8& aPtr, TInt aOp) { __ALFLOGSTRING("CAlfStreamerServer::QueueRequestSessionsL >>") @@ -676,12 +701,29 @@ } } -void CAlfStreamerServer::GetListOfWGsHavingInactiveSurfacesL(const RMessage2& aMessage, TBool aActiveAlso) +void CAlfStreamerServer::GetListOfWGsHavingInactiveSurfacesL(const RMessage2& aMessage, TInt aActiveAlso) { - RArray& arrayRef = aActiveAlso?iAlfTargets:iInactiveSurfaces; + TBool optionalOnly(aActiveAlso==EAlfVolunteersForCommonGood); // to lessen ambiquity.. + RArray* arrayPtr = 0; + switch (aActiveAlso) + { + case EAlfInactiveWgs: + arrayPtr = &iInactiveSurfaces; + break; + case EAlfAllWgsWithSurface: + arrayPtr = &iAlfTargets; + break; + case EAlfVolunteersForCommonGood: + default: + arrayPtr = &iOptionalGRAM; + break; + } + + RArray& arrayRef = *arrayPtr; // :) + TInt count = arrayRef.Count(); - __ALFLOGSTRING1("CAlfStreamerServer::GetListOfWGsHavingInactiveSurfacesL >> count %d", count) + __ALFLOGSTRING1("CAlfStreamerServer::GetListOfWGsHavingInactiveSurfacesL >> count %d", count); if ( count == 0) { aMessage.Complete(KErrNotFound); @@ -689,20 +731,29 @@ } TInt maxLength = aMessage.GetDesMaxLength(0); - TInt* array = new (ELeave) TInt [maxLength/4]; + TInt* arrayStart = new (ELeave) TInt [maxLength/4]; + TInt* array = arrayStart; + + TInt payloadSize = optionalOnly?8:4; // what a waste + count = Min(maxLength/payloadSize-1, count); - count = Min(maxLength/4-1, count); for ( TInt i = 0; iBridge()->AddData( EAlfDSSetDistractionWindow, windowGroupId, windowHandle, (TAny*)state ); break; } + case EAlfVolunteerForGoomTarget: + case EAlfExcludeFromGoomTargets: + { // all these volunteers, just get into a line.. + server->FormAQueueL(op, aMessage.Int0(), aMessage.Int1()); + break; + } + + default: { aMessage.Complete(KErrNotSupported); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/ServerCore/Src/alfwindowmanager.cpp --- a/uiacceltk/hitchcock/ServerCore/Src/alfwindowmanager.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/ServerCore/Src/alfwindowmanager.cpp Tue May 25 17:55:19 2010 +0300 @@ -74,8 +74,6 @@ RPointerArray iWindows; RArray iPlugins; CAlfHierarchyModel* iTree; - - RPointerArray iChangedWindows; }; // --------------------------------------------------------------------------- @@ -440,10 +438,6 @@ // void CAlfWindowManager::ContentReady(CAlfWindow& aWindow, CAlfWindowBuffer* aOutBuffer) { - //ASSERT(iData->iChangedWindows.Find(&aWindow) == KErrNotFound); // no plugin should produce more frames - // than actually bound to scene - iData->iChangedWindows.Append(&aWindow); - if(!aWindow.IsInsertedToScene()) { TRAPD( err, BindWindowToHitchL(&aWindow, this) ); @@ -648,7 +642,6 @@ // void CAlfWindowManager::PrepareNewFrame(TUint aEstimatedInterval) { - iData->iChangedWindows.Reset(); for (TInt i = iData->iPlugins.Count()-1; i >= 0 ; i--) { TRAP_IGNORE(iData->iPlugins[i].iPlugin->PrepareFrameL(aEstimatedInterval)); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/BWINS/hitchcocku.DEF Tue May 25 17:55:19 2010 +0300 @@ -1391,12 +1391,12 @@ ?RegisterParameterL@CHuiFxVisualLayer@@IAEXABVTDesC16@@PAM@Z @ 1390 NONAME ; void CHuiFxVisualLayer::RegisterParameterL(class TDesC16 const &, float *) ?NewL@CHuiFxEffect@@SAPAV1@AAVCHuiFxEngine@@@Z @ 1391 NONAME ; class CHuiFxEffect * CHuiFxEffect::NewL(class CHuiFxEngine &) ?ConstructL@CHuiFxVisualLayer@@IAEXPAVMHuiEffectable@@@Z @ 1392 NONAME ; void CHuiFxVisualLayer::ConstructL(class MHuiEffectable *) - ?Draw@CHuiFxEffect@@QAEHAAVCHuiGc@@ABVTRect@@@Z @ 1393 NONAME ; int CHuiFxEffect::Draw(class CHuiGc &, class TRect const &) + ?Draw@CHuiFxEffect@@QAEHAAVCHuiGc@@ABVTRect@@H@Z @ 1393 NONAME ; int CHuiFxEffect::Draw(class CHuiGc &, class TRect const &) ?TargetRect@CHuiFxLayer@@QBEABVTRect@@XZ @ 1394 NONAME ; class TRect const & CHuiFxLayer::TargetRect(void) const ?AdvanceTime@CHuiFxVisualLayer@@UAEXM@Z @ 1395 NONAME ; void CHuiFxVisualLayer::AdvanceTime(float) ?Filter@CHuiFxFilterLayer@@QBEAAVCHuiFxFilter@@XZ @ 1396 NONAME ; class CHuiFxFilter & CHuiFxFilterLayer::Filter(void) const ?IsFreeForm@CHuiFxFilter@@QBEHXZ @ 1397 NONAME ; int CHuiFxFilter::IsFreeForm(void) const - ?Draw@CHuiFxFilterLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2@Z @ 1398 NONAME ; void CHuiFxFilterLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) + ?Draw@CHuiFxFilterLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2H@Z @ 1398 NONAME ; void CHuiFxFilterLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) ?SetSourceRect@CHuiFxLayer@@QAEXABVTRect@@@Z @ 1399 NONAME ; void CHuiFxLayer::SetSourceRect(class TRect const &) ??1CHuiFxRenderbuffer@@UAE@XZ @ 1400 NONAME ; CHuiFxRenderbuffer::~CHuiFxRenderbuffer(void) ?SetBlendingMode@CHuiFxLayer@@QAEXW4THuiFxBlendingMode@@@Z @ 1401 NONAME ; void CHuiFxLayer::SetBlendingMode(enum THuiFxBlendingMode) @@ -1416,7 +1416,7 @@ ?Changed@CHuiFxFilterLayer@@UBEHXZ @ 1415 NONAME ; int CHuiFxFilterLayer::Changed(void) const ?AddLayerL@CHuiFxEffect@@QAEXPBVCHuiFxLayer@@@Z @ 1416 NONAME ; void CHuiFxEffect::AddLayerL(class CHuiFxLayer const *) ?EffectsEngine@CHuiEnv@@QBEPAVCHuiFxEngine@@XZ @ 1417 NONAME ; class CHuiFxEngine * CHuiEnv::EffectsEngine(void) const - ?Draw@CHuiFxGroupLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2@Z @ 1418 NONAME ; void CHuiFxGroupLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) + ?Draw@CHuiFxGroupLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2H@Z @ 1418 NONAME ; void CHuiFxGroupLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) ??0CHuiFxRenderbuffer@@IAE@XZ @ 1419 NONAME ; CHuiFxRenderbuffer::CHuiFxRenderbuffer(void) ?AddEffectL@CHuiFxEngine@@IAEXPAVCHuiFxEffect@@@Z @ 1420 NONAME ; void CHuiFxEngine::AddEffectL(class CHuiFxEffect *) ?Engine@CHuiFxEffect@@QBEAAVCHuiFxEngine@@XZ @ 1421 NONAME ; class CHuiFxEngine & CHuiFxEffect::Engine(void) const @@ -1460,7 +1460,7 @@ ?SetEffect@CHuiVisual@@QAEXPAVCHuiFxEffect@@@Z @ 1459 NONAME ; void CHuiVisual::SetEffect(class CHuiFxEffect *) ?SetMargin@CHuiFxFilter@@QAEXABVTSize@@@Z @ 1460 NONAME ; void CHuiFxFilter::SetMargin(class TSize const &) ?PrepareDrawL@CHuiFxFilterLayer@@UAEHAAVCHuiFxEngine@@@Z @ 1461 NONAME ; int CHuiFxFilterLayer::PrepareDrawL(class CHuiFxEngine &) - ?Draw@CHuiFxVisualLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2@Z @ 1462 NONAME ; void CHuiFxVisualLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) + ?Draw@CHuiFxVisualLayer@@UAEXAAVCHuiFxEngine@@AAVCHuiGc@@AAVCHuiFxRenderbuffer@@2H@Z @ 1462 NONAME ; void CHuiFxVisualLayer::Draw(class CHuiFxEngine &, class CHuiGc &, class CHuiFxRenderbuffer &, class CHuiFxRenderbuffer &) ?SkinInstance@CHuiStatic@@SAPAVMAknsSkinInstance@@XZ @ 1463 NONAME ; class MAknsSkinInstance * CHuiStatic::SkinInstance(void) ?SetTrackCommandSet@CHuiCanvasVisual@@QAEXAAV?$TBuf@$0BAA@@@H@Z @ 1464 NONAME ; void CHuiCanvasVisual::SetTrackCommandSet(class TBuf<256> &, int) ?PopTransformationMatrix@CHuiCanvasGc@@UAEXXZ @ 1465 NONAME ; void CHuiCanvasGc::PopTransformationMatrix(void) diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF --- a/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/eabi/hitchcocku.DEF Tue May 25 17:55:19 2010 +0300 @@ -1733,7 +1733,7 @@ _ZN12CHuiFxEffect10ConstructLEv @ 1732 NONAME _ZN12CHuiFxEffect11AdvanceTimeEf @ 1733 NONAME _ZN12CHuiFxEffect20SetEffectEndObserverEP21MAlfGfxEffectObserveri @ 1734 NONAME - _ZN12CHuiFxEffect4DrawER6CHuiGcRK5TRect @ 1735 NONAME + _ZN12CHuiFxEffect4DrawER6CHuiGcRK5TRecti @ 1735 NONAME _ZN12CHuiFxEffect4NewLER12CHuiFxEngine @ 1736 NONAME _ZN12CHuiFxEffect7ChangedEv @ 1737 NONAME _ZN12CHuiFxEffect9AddLayerLEPK11CHuiFxLayer @ 1738 NONAME @@ -1773,7 +1773,7 @@ _ZN16CHuiFxGroupLayer10VisualAreaER5TRect @ 1772 NONAME _ZN16CHuiFxGroupLayer11AdvanceTimeEf @ 1773 NONAME _ZN16CHuiFxGroupLayer12PrepareDrawLER12CHuiFxEngine @ 1774 NONAME - _ZN16CHuiFxGroupLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_ @ 1775 NONAME + _ZN16CHuiFxGroupLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_i @ 1775 NONAME _ZN16CHuiFxGroupLayer4NewLEi @ 1776 NONAME _ZN16CHuiFxGroupLayer9AddLayerLEPK11CHuiFxLayer @ 1777 NONAME _ZN16CHuiFxGroupLayerC1Ev @ 1778 NONAME @@ -1784,14 +1784,14 @@ _ZN17CHuiFxFilterLayer10ConstructLEP12CHuiFxFilter @ 1783 NONAME _ZN17CHuiFxFilterLayer11AdvanceTimeEf @ 1784 NONAME _ZN17CHuiFxFilterLayer12PrepareDrawLER12CHuiFxEngine @ 1785 NONAME - _ZN17CHuiFxFilterLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_ @ 1786 NONAME + _ZN17CHuiFxFilterLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_i @ 1786 NONAME _ZN17CHuiFxVisualLayer10ConstructLEP14MHuiEffectable @ 1787 NONAME _ZN17CHuiFxVisualLayer10VisualAreaER5TRect @ 1788 NONAME _ZN17CHuiFxVisualLayer11AdvanceTimeEf @ 1789 NONAME _ZN17CHuiFxVisualLayer12PrepareDrawLER12CHuiFxEngine @ 1790 NONAME _ZN17CHuiFxVisualLayer18RegisterParameterLERK7TDesC16P4TRgb @ 1791 NONAME _ZN17CHuiFxVisualLayer18RegisterParameterLERK7TDesC16Pf @ 1792 NONAME - _ZN17CHuiFxVisualLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_ @ 1793 NONAME + _ZN17CHuiFxVisualLayer4DrawER12CHuiFxEngineR6CHuiGcR18CHuiFxRenderbufferS5_i @ 1793 NONAME _ZN17CHuiFxVisualLayer4NewLEP14MHuiEffectable @ 1794 NONAME _ZN17CHuiFxVisualLayer9ParameterERK7TDesC16 @ 1795 NONAME _ZN17CHuiFxVisualLayerD0Ev @ 1796 NONAME diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEffect.h Tue May 25 17:55:19 2010 +0300 @@ -102,7 +102,7 @@ IMPORT_C static CHuiFxEffect* NewL(CHuiFxEngine& aEngine); IMPORT_C void AddLayerL(const CHuiFxLayer* aLayer); // takes ownership IMPORT_C void AdvanceTime(TReal32 aElapsedTime); - IMPORT_C TBool Draw(CHuiGc& aGc, const TRect& aDisplayRect); + IMPORT_C TBool Draw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aHasSurface); IMPORT_C CHuiFxEngine& Engine() const; IMPORT_C TBool VisualArea(TRect& aRect) const; IMPORT_C TBool Changed(); @@ -168,7 +168,7 @@ * * @return ETrue if drawing was done, otherwise EFalse */ - TBool CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque, const TRegion& aClipRegion, TInt aAlpha = 255); + TBool CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque, const TRegion& aClipRegion, TBool aHasSurface, TInt aAlpha = 255); TBool CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque); void FxmlVisualInputs(RArray &aArray); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilter.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilter.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilter.h Tue May 25 17:55:19 2010 +0300 @@ -34,7 +34,7 @@ IMPORT_C virtual ~CHuiFxFilter(); IMPORT_C virtual TBool PrepareDrawL(CHuiFxEngine& aEngine); IMPORT_C virtual TBool Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& aTargetRect, const TRect& aSourceRect) = 0; + const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface) = 0; // CalculateMargin will be called before PrepareDrawL(), so // parameters are not ready, so margin calculation need to use // either previous frame parameter values, or should be independent diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilterLayer.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilterLayer.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxFilterLayer.h Tue May 25 17:55:19 2010 +0300 @@ -31,7 +31,7 @@ IMPORT_C ~CHuiFxFilterLayer(); IMPORT_C static CHuiFxFilterLayer* NewL(CHuiFxFilter* aFilter); // takes ownership IMPORT_C TBool PrepareDrawL(CHuiFxEngine& aEngine); - IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource); + IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, TBool aHasSurface); IMPORT_C CHuiFxFilter& Filter() const; IMPORT_C TBool Changed() const; IMPORT_C void AdvanceTime(TReal32 aElapsedTime); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxGroupLayer.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxGroupLayer.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxGroupLayer.h Tue May 25 17:55:19 2010 +0300 @@ -28,7 +28,7 @@ IMPORT_C ~CHuiFxGroupLayer(); IMPORT_C static CHuiFxGroupLayer* NewL(TBool aIsRoot = EFalse); IMPORT_C TBool PrepareDrawL(CHuiFxEngine& aEngine); - IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource); + IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, TBool aHasSurface); IMPORT_C void AddLayerL(const CHuiFxLayer* aLayer); // takes ownership IMPORT_C void AdvanceTime(TReal32 aElapsedTime); IMPORT_C TBool Changed() const; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxLayer.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxLayer.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxLayer.h Tue May 25 17:55:19 2010 +0300 @@ -32,7 +32,7 @@ IMPORT_C virtual ~CHuiFxLayer(); IMPORT_C virtual TBool PrepareDrawL(CHuiFxEngine& aEngine); - virtual void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource) = 0; + virtual void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, TBool aHasSurface) = 0; IMPORT_C virtual TBool VisualArea(TRect& aRect); IMPORT_C virtual TBool Margin( TMargins &m ); IMPORT_C virtual void AdvanceTime(TReal32 aElapsedTime); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxVisualLayer.h Tue May 25 17:55:19 2010 +0300 @@ -32,7 +32,7 @@ IMPORT_C static CHuiFxVisualLayer* NewL(MHuiEffectable* aVisual); // param mandatory IMPORT_C ~CHuiFxVisualLayer(); IMPORT_C TBool PrepareDrawL(CHuiFxEngine& aEngine); - IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource); + IMPORT_C void Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, TBool aHasSurface); IMPORT_C TBool VisualArea( TRect& aRect ); IMPORT_C void AdvanceTime(TReal32 aElapsedTime); IMPORT_C TBool Changed() const; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h --- a/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiRosterImpl.h Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BevelFilter.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BevelFilter.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BevelFilter.h Tue May 25 17:55:19 2010 +0300 @@ -29,7 +29,7 @@ CHuiFxVg10BevelFilter *CloneL() const; protected: void ConstructL(); - void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight); + void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool aHasSurface); private: TReal32 iOutlineX; TReal32 iOutlineY; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BlurFilter.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BlurFilter.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10BlurFilter.h Tue May 25 17:55:19 2010 +0300 @@ -28,9 +28,9 @@ static CHuiFxVg10BlurFilter* NewL(); TBool Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& aTargetRect, const TRect& aSourceRect); + const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface); - void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight); + void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool aHasSurface); void CalculateMargin(TMargins &aMargin) const; CHuiFxVg10BlurFilter *CloneL() const; protected: diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10ColorMatrixFilterBase.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10ColorMatrixFilterBase.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10ColorMatrixFilterBase.h Tue May 25 17:55:19 2010 +0300 @@ -29,7 +29,7 @@ static CHuiFxVg10ColorMatrixFilterBase* NewL(); protected: void ConstructL(); - void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight); + void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool aHasSurface); virtual void UpdateColorMatrix(); void CopyFromL(const CHuiFxVg10ColorMatrixFilterBase *aOldFilter); CHuiFxVg10ColorMatrixFilterBase *CloneL() const; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10FilterBase.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10FilterBase.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10FilterBase.h Tue May 25 17:55:19 2010 +0300 @@ -35,10 +35,10 @@ public: // from CHuiFxFilter virtual TBool Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& aTargetRect, const TRect& aSourceRect); + const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface); private: - virtual void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight) = 0; + virtual void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool aHasSurface) = 0; protected: TBool wasEnoughMemory(); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10OutlineFilter.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10OutlineFilter.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10OutlineFilter.h Tue May 25 17:55:19 2010 +0300 @@ -28,7 +28,7 @@ static CHuiFxVg10OutlineFilter* NewL(); protected: void ConstructL(); - void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight); + void DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool aHasSurface); void CalculateMargin(TMargins &aMargin) const; CHuiFxVg10OutlineFilter *CloneL() const; private: diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10TransformFilter.h --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10TransformFilter.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/inc/HuiFxVg10TransformFilter.h Tue May 25 17:55:19 2010 +0300 @@ -26,9 +26,9 @@ public: // from CHuiFxFilter virtual TBool Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& aTargetRect, const TRect& aSourceRect); + const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface); static CHuiFxVg10TransformFilter* NewL(); - void DrawEffect(CHuiFxEngine& /*aEngine*/, VGImage /*aTargetImage*/, VGImage /*aSourceImage*/, TInt /*aWidth*/, TInt /*aHeight*/) {} + void DrawEffect(CHuiFxEngine& /*aEngine*/, VGImage /*aTargetImage*/, VGImage /*aSourceImage*/, TInt /*aWidth*/, TInt /*aHeight*/, TBool /*aHasSurface*/) {} void CalculateMargin(TMargins &aMargin) const; CHuiFxVg10TransformFilter *CloneL() const; protected: diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BevelFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BevelFilter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BevelFilter.cpp Tue May 25 17:55:19 2010 +0300 @@ -59,7 +59,7 @@ return filter; } -void CHuiFxVg10BevelFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight) +void CHuiFxVg10BevelFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool /*aHasSurface*/) { VGfloat outline_x = clamp(iOutlineX, EPSILON, 128.0f); VGfloat outline_y = clamp(iOutlineY, EPSILON, 128.0f); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BlurFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BlurFilter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BlurFilter.cpp Tue May 25 17:55:19 2010 +0300 @@ -84,7 +84,7 @@ } TBool CHuiFxVg10BlurFilter::Draw(CHuiFxEngine& aEngine, CHuiGc& /* aGc */, CHuiFxRenderbuffer& aTarget, - CHuiFxRenderbuffer& aSource, const TRect& aTargetRect, const TRect& aSourceRect) + CHuiFxRenderbuffer& aSource, const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface) { aTarget.BindAsTexture(ERenderbufferUsageWriteOnly); aSource.BindAsTexture(ERenderbufferUsageReadOnly); @@ -96,7 +96,7 @@ if(opacity > EPSILON) { - DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height()); + DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height(), aHasSurface); } else { @@ -116,7 +116,7 @@ return wasEnoughMemory(); } -void CHuiFxVg10BlurFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight) +void CHuiFxVg10BlurFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool /*aHasSurface*/) { const VGfloat blur_x = clamp(iBlurX, EPSILON, 128.0f); const VGfloat blur_y = clamp(iBlurY, EPSILON, 128.0f); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10BrightnessContrastFilter.cpp Tue May 25 17:55:19 2010 +0300 @@ -87,8 +87,5 @@ iColorMatrix[16] = oOff; iColorMatrix[17] = oOff; iColorMatrix[18] = oOff; - 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 + iColorMatrix[19] = 0.0f; } diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10ColorMatrixFilterBase.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10ColorMatrixFilterBase.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10ColorMatrixFilterBase.cpp Tue May 25 17:55:19 2010 +0300 @@ -44,7 +44,7 @@ CHuiFxVg10FilterBase::CopyFromL(aOldFilter); memcpy(iColorMatrix, aOldFilter->iColorMatrix, sizeof(iColorMatrix)); } -void CHuiFxVg10ColorMatrixFilterBase::DrawEffect(CHuiFxEngine& /*aEngine*/, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight ) +void CHuiFxVg10ColorMatrixFilterBase::DrawEffect(CHuiFxEngine& /*aEngine*/, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight,TBool aHasSurface ) { // take opacity into account const VGfloat opacity = clamp(iOpacity, 0.0f, 1.0f); @@ -55,6 +55,8 @@ { UpdateColorMatrix(); } + + iColorMatrix[19] = aHasSurface ? 0.5f : 0.0f; vgColorMatrix(aTargetImage, aSourceImage, iColorMatrix); } else diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10FilterBase.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10FilterBase.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10FilterBase.cpp Tue May 25 17:55:19 2010 +0300 @@ -25,7 +25,7 @@ TBool CHuiFxVg10FilterBase::Draw(CHuiFxEngine& aEngine, CHuiGc& /* aGc */, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& aTargetRect, const TRect& aSourceRect) + const TRect& aTargetRect, const TRect& aSourceRect, TBool aHasSurface) { aTarget.BindAsTexture(ERenderbufferUsageWriteOnly); aSource.BindAsTexture(ERenderbufferUsageReadOnly); @@ -37,7 +37,7 @@ if(opacity > EPSILON) { - DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height()); + DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height(), aHasSurface); } else { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OutlineFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OutlineFilter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OutlineFilter.cpp Tue May 25 17:55:19 2010 +0300 @@ -70,7 +70,7 @@ } -void CHuiFxVg10OutlineFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight) +void CHuiFxVg10OutlineFilter::DrawEffect(CHuiFxEngine& aEngine, VGImage aTargetImage, VGImage aSourceImage, TInt aWidth, TInt aHeight, TBool /*aHasSurface*/) { VGfloat outline_x = clamp(iOutlineX, EPSILON, 128.0f); VGfloat outline_y = clamp(iOutlineY, EPSILON, 128.0f); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10TransformFilter.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10TransformFilter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10TransformFilter.cpp Tue May 25 17:55:19 2010 +0300 @@ -154,7 +154,7 @@ TBool CHuiFxVg10TransformFilter::Draw(CHuiFxEngine& /*aEngine*/, CHuiGc& /*aGc*/, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, - const TRect& /*aTargetRect*/, const TRect& aSourceRect) + const TRect& /*aTargetRect*/, const TRect& aSourceRect, TBool /*aHasSurface*/) { aSource.BindAsTexture(ERenderbufferUsageReadOnly); aTarget.BindAsRenderTarget(); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp --- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiVg10Gc.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasVisual.cpp Tue May 25 17:55:19 2010 +0300 @@ -342,8 +342,15 @@ TBool CHuiCanvasVisual::CanSkipDrawing() const { + if(Display()->RosterImpl().AlfEventWindow() == this) + { + return EFalse; + } + if (Effect()) { + TBool hasStoredContent = (IsDelayedEffectSource() || Freezed()) && (StoredRenderBuffer() || iCanvasVisualData->iStoredRenderBuffer); + TBool semiTranparentEffectActive = Effect()->IsSemitransparent(); if ((iOpacity.Now() <= EPSILON && !semiTranparentEffectActive)) { @@ -356,7 +363,8 @@ !HasCommandBuffers(ETrue /*include children*/) && !IsBackgroundDrawingEnabled() && !IsExternalContentDrawingEnabled()&& - !IsExternalContentDrawingEnabled(ETrue /*include children*/)) + !IsExternalContentDrawingEnabled(ETrue /*include children*/) && + !hasStoredContent ) { return ETrue; } @@ -451,22 +459,27 @@ transparent |= iOpacity.Now() < 1.0f; // Opacity less than 1.0f -> always transparent TBool refreshCache = EFalse; + TBool layer = EFalse; if (EffectIsAppliedToChildren()) { refreshCache |= ChildTreeChanged(EHuiCanvasFlagExcludeFromParentEffect); iCanvasVisualData->iPaintedRegion.Clear(); - CollectRecursivePaintedRegion(iCanvasVisualData->iPaintedRegion, EHuiCanvasFlagExcludeFromParentEffect); + layer = CollectRecursivePaintedRegion(iCanvasVisualData->iPaintedRegion, EHuiCanvasFlagExcludeFromParentEffect); } else { refreshCache |= Changed(); iCanvasVisualData->iPaintedRegion.Clear(); - CollectPaintedRegion(iCanvasVisualData->iPaintedRegion, 0); + layer = CollectPaintedRegion(iCanvasVisualData->iPaintedRegion, 0); } - - didDrawEffect = Effect()->CachedDraw(aGc, area, refreshCache, !transparent, iCanvasVisualData->iPaintedRegion); + + if(Display()->RosterImpl().AlfEventWindow() == this) + { + refreshCache |= Display()->RosterImpl().NativeAppsContentChanged(); + } + didDrawEffect = Effect()->CachedDraw(aGc, area, refreshCache, !transparent, iCanvasVisualData->iPaintedRegion,layer ); } @@ -536,10 +549,10 @@ RDebug::Print(_L("CHuiCanvasVisual::DrawSelf - tracked visual")); } #endif - + TBool alfEventWindow = (Display()->RosterImpl().AlfEventWindow() == this); TReal32 effectiveOpacity = EffectiveOpacity(); - - if (effectiveOpacity <= 0 || !HasCommandBuffers(ETrue)) + TBool hasStoredContent = (IsContentDrawingEnabled() && (IsDelayedEffectSource() || Freezed())) && (StoredRenderBuffer() || iCanvasVisualData->iStoredRenderBuffer); + if ((effectiveOpacity <= 0 || !HasCommandBuffers(ETrue)) && !alfEventWindow && !hasStoredContent) { // 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 @@ -555,7 +568,7 @@ } } - if (IsContentDrawingEnabled() && (IsDelayedEffectSource() || Freezed())) + if (hasStoredContent) { // Select right draw mode THuiCanvasDrawMode drawMode = (Flags() & EHuiVisualFlagOpaqueHint) ? EHuiCanvasDrawModeNormal : EHuiCanvasDrawModeBlend; @@ -572,6 +585,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 +1016,7 @@ } background.iPaintedRect = backgroundItems[aIndex].Rect(); + backgroundItems.Close(); return background; } else @@ -1509,7 +1529,7 @@ } } -void CHuiCanvasVisual::CollectPaintedRegion(TRegion& aPaintRegion, TInt aExcludeCanvasFlags) const +TBool CHuiCanvasVisual::CollectPaintedRegion(TRegion& aPaintRegion, TInt aExcludeCanvasFlags) const { // Only our own painted areas. TInt paintedAreaCount = PaintedAreaCount(); @@ -1518,12 +1538,13 @@ aPaintRegion.AddRect( CanvasPaintedArea(i).iPaintedRect.Round() ); } aPaintRegion.Tidy(); + return !iCanvasVisualData->iLayerExtent.IsEmpty(); } -void CHuiCanvasVisual::CollectRecursivePaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const +TBool CHuiCanvasVisual::CollectRecursivePaintedRegion(TRegion& aRecursivePaintRegion, TInt aExcludeCanvasFlags) const { // First our own painted areas... - CollectPaintedRegion(aRecursivePaintRegion, aExcludeCanvasFlags); + TBool layer = CollectPaintedRegion(aRecursivePaintRegion, aExcludeCanvasFlags); // ...then children (and their children). const TInt count = Count(); @@ -1543,13 +1564,14 @@ if (visual->Flags() & EHuiVisualFlagWserv) { CHuiCanvasVisual* canvasVisual = (CHuiCanvasVisual*)visual; - canvasVisual->CollectRecursivePaintedRegion(aRecursivePaintRegion, aExcludeCanvasFlags); + layer |= canvasVisual->CollectRecursivePaintedRegion(aRecursivePaintRegion, aExcludeCanvasFlags); } } } } } aRecursivePaintRegion.Tidy(); + return layer; } EXPORT_C TRect CHuiCanvasVisual::CommandBufferCoverage(TInt aOrientation) diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiDisplay.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxEffect.cpp Tue May 25 17:55:19 2010 +0300 @@ -261,13 +261,13 @@ TBool CHuiFxEffect::CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque) { RRegion dummy; - TBool ret = CachedDraw(aGc, aDisplayRect, aRefreshCachedRenderTarget, aOpaque, dummy); + TBool ret = CachedDraw(aGc, aDisplayRect, aRefreshCachedRenderTarget, aOpaque, dummy,EFalse); dummy.Close(); return ret; } // TODO: effect area should be reduced if aClipRegion is smaller than aDisplayRect. -TBool CHuiFxEffect::CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque, const TRegion& aClipRegion, TInt aAlpha) +TBool CHuiFxEffect::CachedDraw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aRefreshCachedRenderTarget, TBool aOpaque, const TRegion& aClipRegion, TBool aHasSurface, TInt aAlpha) { #ifdef HUIFX_TRACE RDebug::Print(_L("CHuiFxEffect::CachedDraw - 0x%x"), this); @@ -364,7 +364,7 @@ if (cachedRenderTargetNeedsRefresh) { // Render to cached render target - iRoot->Draw(*iEngine, aGc, *iCachedRenderTarget, *iCachedRenderTarget); + iRoot->Draw(*iEngine, aGc, *iCachedRenderTarget, *iCachedRenderTarget, aHasSurface); #ifdef HUIFX_TRACE RDebug::Print(_L("CHuiFxEffect::CachedDraw - refreshed cached render buffer 0x%x"), this); #endif @@ -420,13 +420,13 @@ } // Normal drawing - iRoot->Draw(*iEngine, aGc, *target, *target); + iRoot->Draw(*iEngine, aGc, *target, *target, aHasSurface); } return ETrue; } -EXPORT_C TBool CHuiFxEffect::Draw(CHuiGc& aGc, const TRect& aDisplayRect) +EXPORT_C TBool CHuiFxEffect::Draw(CHuiGc& aGc, const TRect& aDisplayRect, TBool aHasSurface) { // Prepare all layers #ifdef HUIFX_TRACE @@ -483,7 +483,7 @@ return EFalse; } - iRoot->Draw(*iEngine, aGc, *target, *target); + iRoot->Draw(*iEngine, aGc, *target, *target, aHasSurface); return ETrue; } diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxFilterLayer.cpp Tue May 25 17:55:19 2010 +0300 @@ -90,7 +90,7 @@ iFilter->AdvanceTime(aElapsedTime); } -EXPORT_C void CHuiFxFilterLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource) +EXPORT_C void CHuiFxFilterLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, TBool aHasSurface) { #ifdef HUIFX_TRACE RDebug::Print(_L("CHuiFxFilterLayer::Draw - 0x%x "), this); @@ -107,7 +107,7 @@ TRect targetRect(TPoint(0, 0), TargetRect().Size()); TInt alpha = 0xff; // TODO - iFilter->Draw(aEngine, aGc, *backBuffer, aSource, targetRect, SourceRect()); + iFilter->Draw(aEngine, aGc, *backBuffer, aSource, targetRect, SourceRect(), aHasSurface); // Composite the result TRect compositionSourceRect(targetRect); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiFxGroupLayer.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxGroupLayer.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxGroupLayer.cpp Tue May 25 17:55:19 2010 +0300 @@ -172,7 +172,7 @@ } EXPORT_C void CHuiFxGroupLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer& aTarget, - CHuiFxRenderbuffer& aSource) + CHuiFxRenderbuffer& aSource, TBool aHasSurface) { #ifdef HUIFX_TRACE RDebug::Print(_L("CHuiFxGroupLayer::Draw - 0x%x "), this); @@ -230,7 +230,7 @@ for (TInt i = 0; i < iLayers.Count(); i++) { - iLayers[i]->Draw(aEngine, aGc, *backBuffer, *sourceBuffer); + iLayers[i]->Draw(aEngine, aGc, *backBuffer, *sourceBuffer, aHasSurface); } // The root group does not support composition diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiFxVisualLayer.cpp Tue May 25 17:55:19 2010 +0300 @@ -233,7 +233,7 @@ return ETrue; } -EXPORT_C void CHuiFxVisualLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer &aTarget, CHuiFxRenderbuffer& /*aSource*/) +EXPORT_C void CHuiFxVisualLayer::Draw(CHuiFxEngine& aEngine, CHuiGc& aGc, CHuiFxRenderbuffer &aTarget, CHuiFxRenderbuffer& /*aSource*/, TBool /*aHasSurface*/) { #ifdef HUIFX_TRACE RDebug::Print(_L("CHuiFxVisualLayer::Draw - 0x%x "), this); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiRosterImpl.cpp Tue May 25 17:55:19 2010 +0300 @@ -504,7 +504,7 @@ iEffect->ForceCachedRenderTargetUsage(ETrue); } RRegion dummy; - didDrawEffect = iEffect->CachedDraw(aGc, displayRect, refreshCache, opaque, dummy, iEffectOpacity*255); + didDrawEffect = iEffect->CachedDraw(aGc, displayRect, refreshCache, opaque, dummy, EFalse, iEffectOpacity*255); dummy.Close(); } @@ -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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiVisual.cpp Tue May 25 17:55:19 2010 +0300 @@ -156,6 +156,19 @@ delete iVisualData->iStoredRenderBuffer; iVisualData->iStoredRenderBuffer = aRenderBuffer; } + else + { + if (aRenderBuffer != iVisualData->iStoredRenderBuffer) + { +#ifdef _DEBUG + RDebug::Printf("CHuiVisual::SetStoredRenderBuffer - Warning: Not enabled (%x / %x)", + aRenderBuffer, iVisualData->iStoredRenderBuffer); +#endif + // Ownership was passed, but we do not need it. + delete aRenderBuffer; + aRenderBuffer = NULL; + } + } } EXPORT_C void CHuiVisual::SetStoredRenderBufferModificationsEnabled(TBool aEnabled) { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaspainter.cpp Tue May 25 17:55:19 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++) { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp --- a/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/coretoolkit/src/huicanvaswspainter.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/goommonitor/inc/goomactionlist.h --- a/uiacceltk/hitchcock/goommonitor/inc/goomactionlist.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/inc/goomactionlist.h Tue May 25 17:55:19 2010 +0300 @@ -265,6 +265,8 @@ TUint iCurrentPluginRun; RArray iLowOnMemWgs; TBool iUseSwRendering; + TBool iTryOptional; // we did everything we could but still missing some bits, try again with different app targets + TBool iOptionalTried; // no need to overperform though }; #include "goomactionlist.inl" diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/goommonitor/inc/goomwindowgrouplist.h --- a/uiacceltk/hitchcock/goommonitor/inc/goomwindowgrouplist.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/inc/goomwindowgrouplist.h Tue May 25 17:55:19 2010 +0300 @@ -42,10 +42,10 @@ static CGOomWindowGroupList* NewL(RWsSession& aWs); // Update the list of window groups - void RefreshL(); + void RefreshL(TBool aOptionalOnly = EFalse); // Update the list of window groups, non-leaving version - void Refresh(); + void Refresh(TBool aOptionalOnly = EFalse); // Return the number of application instances in this list inline TUint Count() const; @@ -133,6 +133,7 @@ CApaWindowGroupName* iWgName; HBufC* iWgNameBuf; // owned by iWgName RArray iLowOnMemWgs; + RArray iOptionalUids; RAlfBridgerClient iAlfClient; }; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp Tue May 25 17:55:19 2010 +0300 @@ -217,7 +217,7 @@ // iActionRefs.Reset(); // iCurrentActionIndex = 0; - aWindowGroupList.RefreshL(); + aWindowGroupList.RefreshL(iTryOptional); for (TInt i = 0; aWindowGroupList.LowOnMemWgs(i) != KErrNotFound ; i++ ) { @@ -426,11 +426,23 @@ if (!memoryFreeingActionRun) { // No usable memory freeing action has been found, so we give up - TRACES("CGOomActionList::FreeMemory: No usable memory freeing action has been found"); TInt freeMemory; - FreeMemoryAboveTarget(freeMemory); - iServer.CloseAppsFinished(freeMemory, EFalse); - iMonitor.WaitAndSynchroniseMemoryState(); + + if ( !FreeMemoryAboveTarget(freeMemory) && !iTryOptional && !iOptionalTried && freeMemory < 25*1024*1024 ) // magic, should read this from config + { + iTryOptional = ETrue; + iOptionalTried = ETrue; + iMonitor.RunCloseAppActions(iMaxPriority); + } + else + { + iTryOptional = EFalse; + iOptionalTried = EFalse; + + TRACES("CGOomActionList::FreeMemory: No usable memory freeing action has been found"); + iServer.CloseAppsFinished(freeMemory, EFalse); + iMonitor.WaitAndSynchroniseMemoryState(); + } } } @@ -636,8 +648,18 @@ MemoryGood(); } */ - iServer.CloseAppsFinished(freeMemory, EFalse); - iMonitor.WaitAndSynchroniseMemoryState(); + if (!iTryOptional && !iOptionalTried && freeMemory < 25*1024*1024 ) // magic, should read this from config + { + iTryOptional = ETrue; + iOptionalTried = EFalse; + iMonitor.RunCloseAppActions(iMaxPriority); + } + else + { + iTryOptional = EFalse; + iServer.CloseAppsFinished(freeMemory, EFalse); + iMonitor.WaitAndSynchroniseMemoryState(); + } } else { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Tue May 25 17:55:19 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 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/goommonitor/src/goomwindowgrouplist.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goomwindowgrouplist.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/src/goomwindowgrouplist.cpp Tue May 25 17:55:19 2010 +0300 @@ -43,18 +43,18 @@ } // Update the list of window groups -void CGOomWindowGroupList::Refresh() +void CGOomWindowGroupList::Refresh(TBool aOptionalOnly) { FUNC_LOG; #ifdef _DEBUG - TRAPD(err, RefreshL()); + TRAPD(err, RefreshL(aOptionalOnly)); if (err) { TRACES1("CGOomWindowGroupList::Refresh(): RefreshL leave %d", err); } #else - TRAP_IGNORE(RefreshL()); + TRAP_IGNORE(RefreshL(aOptionalOnly)); // Ignore any error // Errors are very unlikely, the only possibility is OOM errors (which should be very unlikely due to pre-created, re-reserved lists) // The outcome of any error is that the most foreground operations will be missing from the list @@ -64,7 +64,7 @@ // Update the list of window groups // Should be called whenever the -void CGOomWindowGroupList::RefreshL() +void CGOomWindowGroupList::RefreshL(TBool aOptionalOnly) { FUNC_LOG; @@ -76,9 +76,27 @@ RArray inactiveSurfaces; // ignore possible errors, we have information from profiling extension anyway - iAlfClient.GetListOfInactiveWindowGroupsWSurfaces(&inactiveSurfaces); - iAlfClient.GetListOfWindowGroupsWSurfaces(&iLowOnMemWgs); + if (!aOptionalOnly) + { + iAlfClient.GetListOfInactiveWindowGroupsWSurfaces(&inactiveSurfaces); + iAlfClient.GetListOfWindowGroupsWSurfaces(&iLowOnMemWgs); + } + else + { // first iteration: try to cope with window group ID's only + // Most likely that needs to be revisited because apps fail to name their window + // groups properly on external screens... + iAlfClient.GetOptionalGraphicsMemUsers(&inactiveSurfaces); + iOptionalUids.Reset(); + TInt count = inactiveSurfaces.Count(); + for (TInt i = 0; i privMemUsed; RArray sparedProcessIds; - //if (inactiveSurfaces.Count() == 1) // ALF only - // { - NOK_resource_profiling eglQueryProfilingData = (NOK_resource_profiling)eglGetProcAddress("eglQueryProfilingDataNOK"); + if (!aOptionalOnly) + { + NOK_resource_profiling eglQueryProfilingData = (NOK_resource_profiling)eglGetProcAddress("eglQueryProfilingDataNOK"); - if (!eglQueryProfilingData && inactiveSurfaces.Count() == 0) + if (!eglQueryProfilingData && inactiveSurfaces.Count() == 0) { TRACES("RefreshL EGL_NOK_resource_profiling not available"); return; } - if (eglQueryProfilingData) + if (eglQueryProfilingData) { EGLint data_count; EGLint* prof_data; @@ -206,7 +224,7 @@ } } } - + } // Refresh window group list // get all window groups, with info about parents TInt numGroups = iWs.NumWindowGroups(); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alfgfxtransadapter/src/gfxtransenginetfx.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alfgfxtransadapter/src/gfxtransenginetfx.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alfgfxtransadapter/src/gfxtransenginetfx.cpp Tue May 25 17:55:19 2010 +0300 @@ -456,13 +456,8 @@ } TInt err = KErrNone; - TInt action = 0; const CTransitionData* transdata; err = iClient->GetTransitionData( aHandle, transdata ); - if ( err == KErrNone ) - { - action = transdata->iAction; - } switch(aState) { diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfdrawerengine.h Tue May 25 17:55:19 2010 +0300 @@ -42,7 +42,6 @@ virtual TUint& Action() = 0; virtual TInt& Flags() = 0; virtual void IncreaseControlHandle() = 0; - virtual void IncreaseFullScreenHandle() = 0; virtual TInt CurrentControlHandle() = 0; virtual TInt CurrentFullScreenHandle() = 0; virtual void StartEndChecker() = 0; diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/inc/alfserverdrawer.h Tue May 25 17:55:19 2010 +0300 @@ -95,7 +95,6 @@ void IncreaseControlHandle(); TInt CurrentControlHandle(); - void IncreaseFullScreenHandle(); TInt CurrentFullScreenHandle(); void StartEndChecker(); diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/alfserverdrawer.cpp Tue May 25 17:55:19 2010 +0300 @@ -43,8 +43,15 @@ // 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; + +// Note, The timeouts are DIFFERENT for EMULATOR AND ARMV5 +#ifdef __WINS__ +const TInt KAlfAppStartEffectTimeout = 800000; +const TInt KAlfLongEffectTimeout = 10000000; +#else const TInt KAlfAppStartEffectTimeout = 300000; const TInt KAlfLongEffectTimeout = 5000000; +#endif const TInt KAlfActiveControlFxGranularity = 4; const TInt KAlfLongApplicationStartContext = 20; @@ -671,7 +678,7 @@ // I don't think we need this TInt index = 0; - IncreaseFullScreenHandle(); + iCurrentFullScreenHandle = iToSid.iId; iFullScreenTransitionEndObserver->Cancel(); iFinishFullScreen->Cancel(); @@ -685,9 +692,10 @@ RMemWriteStream stream( bridgeBuffer, bufferSize ); // The writes should not leave if we have calculated our buffer length correctly. stream.WriteInt32L( MAlfGfxEffectPlugin::EBeginFullscreen ); - stream.WriteInt32L( iToSid.iId ); //iCurrentFullScreenHandle ); + stream.WriteInt32L( iToSid.iId ); stream.WriteInt32L( iType ); - stream.WriteInt32L( 0 ); // timeout triggered + stream.WriteInt32L( 0 ); // timeout? 0 always in BeginFullScreen + stream.WriteInt32L( 0 ); if ( iType == AknTransEffect::EParameterType && isExit ) { stream.WriteInt32L( iToWg ); @@ -810,7 +818,7 @@ // It appears that folder open and close never send endfullscreen, so for them the effect // must be started as soon as we get beginfullscreen - isAppStartEffect = EFalse; // disable different timeout effect for appstart effects + // isAppStartEffect = EFalse; // disable different timeout effect for appstart effects if (isAppStartEffect) { @@ -837,13 +845,14 @@ __ALFFXLOGSTRING("CAlfServerDrawer::SendEndFullscreen END no need"); return KErrNone; } - iFullScreenEndSent = ETrue; __ALFFXLOGSTRING("CAlfServerDrawer::SendEndFullscreen"); iFullScreenTransitionEndObserver->Cancel(); iFullScreenTimeout->Cancel(); iFinishFullScreen->Cancel(); + TBool timeout = iFullScreenTimeout->iTimeoutTriggered; TBool triggerStartEffectTimeout= iFullScreenTimeout->iTimeoutTriggered && iFullScreenTimeout->iIsStartEffect; + iFullScreenEndSent = !triggerStartEffectTimeout; iFullScreenTimeout->iTimeoutTriggered = EFalse; iFullScreenTimeout->iIsStartEffect = EFalse; @@ -879,7 +888,7 @@ // also the effect file name or something else to identify the effect // that is going to be used - TInt bufferSize = 12 * sizeof(TInt); // operation, type, 2 wg ids, 2 app uids, flags and rect, timeoutTriggered + TInt bufferSize = 13 * sizeof(TInt); // operation, type, 2 wg ids, 2 app uids, flags and rect, timeoutTriggered bufferSize += sizeof(TPtrC); bufferSize += resourceDir.Length() * 2; bufferSize += sizeof(TPtrC); @@ -904,6 +913,7 @@ stream.WriteInt32L( iCurrentFullScreenHandle ); stream.WriteInt32L( iType ); stream.WriteInt32L( triggerStartEffectTimeout ); + stream.WriteInt32L( timeout ); stream.WriteInt32L( iToWg ); stream.WriteInt32L( iFromWg ); @@ -934,6 +944,10 @@ iFullScreenFinished = EFalse; iFullScreenTimeout->iIsStartEffect = EFalse; + if (triggerStartEffectTimeout) + { + return KErrNone; + } if ( iAction == AknTransEffect::EApplicationExit /*|| iAction == 1001*/ ) { @@ -1286,13 +1300,6 @@ highestHandle++; iCurrentControlHandle = highestHandle; } - -void CAlfServerDrawer::IncreaseFullScreenHandle() - { - TInt highestHandle = iCurrentControlHandle > iCurrentFullScreenHandle ? iCurrentControlHandle : iCurrentFullScreenHandle; - highestHandle++; - iCurrentFullScreenHandle = highestHandle; - } // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- @@ -1339,7 +1346,7 @@ iFullScreenTimeout->Cancel(); // If we don't get an EndFullScreen in a timely manner, // we generate an EndFullScreen signal by ourselves - EndFullscreen(); + EndFullscreen(ETrue); } } diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/states.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/states.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/states.cpp Tue May 25 17:55:19 2010 +0300 @@ -238,6 +238,9 @@ return CPhase1State::NewL(iEngine,iHandler); } return NULL; + case EEndFullscreen: + iEngine.SendEndFullscreen(); + return NULL; case EBeginComponent: error = iEngine.SendBeginControlTransition(); if ( error == KErrNone ) diff -r 423dd85009cf -r ac3859d43844 uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/wsserverdrawercontroller.cpp --- a/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/wsserverdrawercontroller.cpp Fri May 14 02:53:35 2010 +0300 +++ b/uiacceltk/hitchcock/plugins/alftranseffect/alftranseffectplugin/src/wsserverdrawercontroller.cpp Tue May 25 17:55:19 2010 +0300 @@ -66,7 +66,8 @@ // startup blocked because startup exit leaves the screen black. // must be debugged 0x100058F4, // startup blocked for the time being - 0x101f857A // camera + 0x101f857A, // camera + 0x2002d07f // ovistore_2002D07F.exe, this does not draw anything, but launcher // Application shell is Ok, folder open and close have KAknApplicationShellViewId // as both to and from ids. There is only one visual, so some sort of blur effect works... //, KAknApplicationShellViewId @@ -84,8 +85,8 @@ { 0x0, // DO NOT REMOVE 0x0! this is here for compile reasons, it will not be included in the AllowedCustomUid check 0x101f857A, // camera - 0x2002A540 // conversation.exe , other launchable from messaging don't have effect either - + 0x2002A540, // conversation.exe , other launchable from messaging don't have effect either + 0x2002d07f // ovistore_2002D07F.exe, this does not draw anything, but launcher //0xUID //Add UIds of applications that shouldn't have effects here }; @@ -485,7 +486,7 @@ } iAppInfo[index].iAction = aAction; - RDebug::Printf("CAppInfoCache::SetAction - Returned action %d", iAppInfo[index].iAction); + __ALFFXLOGSTRING1("CAppInfoCache::SetAction - Returned action %d", iAppInfo[index].iAction); return iAppInfo[index].iAction; } @@ -804,15 +805,14 @@ //we should know if its a dsa app before end can be called if(iDSAActive) { - __ALFFXLOGSTRING("CWsServerDrawerController::BeginFullscreen - Phone is booting. Abort."); + __ALFFXLOGSTRING("CWsServerDrawerController::BeginFullscreen - DSA active. Abort."); return; //Do nothing if dsa active. } //Special argument calls does not initiate any FS effect and is caught here. - // TODO: remove && !iEngine->WaitingForRootWgId() when appuids available from wserv if(fstype == CStateHandler::ENone) { - __ALFFXLOGSTRING("CWsServerDrawerController::BeginFullscreen - Phone is booting. Abort."); + __ALFFXLOGSTRING("CWsServerDrawerController::BeginFullscreen - Special argument. Abort."); return; }