diff -r dd05fdd05078 -r 180438f24a1e uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Tue Jul 06 14:56:00 2010 +0300 +++ b/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Mon Aug 02 12:09:20 2010 +0300 @@ -253,7 +253,17 @@ { return; } - iForegroundAppUid = aForegroundAppUid; + + if(iForegroundAppUid != aForegroundAppUid) + { + iForegroundAppUid = aForegroundAppUid; + iForegroundAppHasChanged = ETrue; + iRendswitched = 0; + } + else + { + iForegroundAppHasChanged = EFalse; + } // Refresh the low and good memory thresholds as they may have changed due to the new foreground application RefreshThresholds(aForegroundAppUid); @@ -325,31 +335,59 @@ // Run the memory freeing actions iGOomActionList->FreeMemory(aMaxPriority); - SwitchMemMode(EGOomLowMemMode); } void CMemoryMonitor::SwitchMemMode(TGOomMemMode aMemMode) { if(iMemMode == aMemMode) + { + if(iMemMode == EGOomGoodMemMode) + { + TRACES("CMemoryMonitor::SwitchMemMode NOT switching rendering mode. Already in GOOD Mode"); + } + else + { + TRACES("CMemoryMonitor::SwitchMemMode NOT switching rendering mode. Already in LOW Mode"); + } return; + } #ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS TWsEvent event; if(aMemMode == EGOomLowMemMode) { + if(iRendswitched < 3) + iRendswitched ++; + else + return; + iLowOnMemWgs.Reset(); iGOomWindowGroupList->GetListOfWindowGroupsWSurfaces(iLowOnMemWgs); event.SetType(KGoomMemoryLowEvent); + TRACES("CMemoryMonitor::SwitchMemMode. Switching rendering mode to SW, Sending KGoomMemoryLowEvent"); } else { + if(iRendswitched > 0) + { + if(iRendswitched < 3) + iRendswitched ++; + else + { + TRACES("CMemoryMonitor::SwitchMemMode GOOM Detected SW-HW-SW looping. NOT switching to HW rendering mode"); + return; + } + } + event.SetType(KGoomMemoryGoodEvent); + TRACES("CMemoryMonitor::SwitchMemMode. Switching rendering mode to HW, Sending KGoomMemoryGoodEvent"); } for (TInt i = iLowOnMemWgs.Count()-1; i>=0; i--) { iWs.SendEventToWindowGroup(iLowOnMemWgs[i], event); + TRACES1("CMemoryMonitor::SwitchMemMode. Sending event to wg %d",iLowOnMemWgs[i]); } #endif