--- a/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Wed Jun 09 11:48:49 2010 +0300
+++ b/uiacceltk/hitchcock/goommonitor/src/goommemorymonitor.cpp Tue Jun 22 12:40:35 2010 +0300
@@ -102,6 +102,8 @@
#ifdef _DEBUG
delete iLogger;
#endif
+
+ iClientsRequestingMemory.Close();
}
// ---------------------------------------------------------
@@ -231,8 +233,12 @@
TRACES1("FreeMemThresholdCrossedL : crossed low threshold %d", iLowThreshold);
iMemAllocationsGrowing->Stop();
iMemAllocationsGoingDown->Continue();
- if((iTrigger == EGOomTriggerNone) && !NeedToPostponeMemGood() && !iSynchTimer->IsActive() )
+ if((iTrigger == EGOomTriggerNone) && !NeedToPostponeMemGood())
+ {
+ if(iSynchTimer->IsActive())
+ iSynchTimer->Cancel();
StartFreeSomeRamL(iGoodThreshold, EGOomTriggerThresholdCrossed);
+ }
}
#endif
}
@@ -252,7 +258,7 @@
// Refresh the low and good memory thresholds as they may have changed due to the new foreground application
RefreshThresholds(aForegroundAppUid);
- if(iCurrentTarget)
+ if(iCurrentTarget || ALWAYS_SW_REND)
{
StartFreeSomeRamL(iCurrentTarget, EGOomTriggerFocusChanged);
}
@@ -275,6 +281,13 @@
TRACES2("MemoryMonitor::StartFreeSomeRamL freeMemoryAboveTarget = %d, freeMemory = %d", freeMemoryAboveCurrentTarget, freeMemory);
+ if(ALWAYS_SW_REND)
+ {
+ if(iMemMode == EGOomLowMemMode)
+ return;
+ }
+ else
+ {
if (freeMemoryAboveCurrentTarget)
{
/*if(freeMemory >= iGoodThreshold && !NeedToPostponeMemGood())
@@ -282,14 +295,17 @@
iGOomActionList->MemoryGood();
}
*/
- if(!iGOomActionList->UseSwRendering())
+ if(!(iGOomActionList->UseSwRendering() && (iMemMode != EGOomLowMemMode)))
{
iServer->CloseAppsFinished(freeMemory, ETrue);
WaitAndSynchroniseMemoryState();
- return;
+ if(aTrigger == EGOomTriggerRequestMemory)
+ User::Leave(KErrCompletion);
+ else
+ return;
}
}
-
+ }
// update wg list only when actually about to use it
//iGOomWindowGroupList->Refresh();
@@ -304,9 +320,40 @@
iGOomActionList->SetCurrentTarget(iCurrentTarget);
iTrigger = aTrigger;
+
+ iGOomActionList->SetUseSwRendering(ETrue); //Always use SW rendering in low mode .. (for now..)
// Run the memory freeing actions
iGOomActionList->FreeMemory(aMaxPriority);
+ SwitchMemMode(EGOomLowMemMode);
+ }
+
+void CMemoryMonitor::SwitchMemMode(TGOomMemMode aMemMode)
+ {
+ if(iMemMode == aMemMode)
+ return;
+
+#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
+ TWsEvent event;
+
+ if(aMemMode == EGOomLowMemMode)
+ {
+ iLowOnMemWgs.Reset();
+ iGOomWindowGroupList->GetListOfWindowGroupsWSurfaces(iLowOnMemWgs);
+ event.SetType(KGoomMemoryLowEvent);
+ }
+ else
+ {
+ event.SetType(KGoomMemoryGoodEvent);
+ }
+
+ for (TInt i = iLowOnMemWgs.Count()-1; i>=0; i--)
+ {
+ iWs.SendEventToWindowGroup(iLowOnMemWgs[i], event);
+ }
+#endif
+
+ iMemMode = aMemMode;
}
void CMemoryMonitor::RunCloseAppActions(TInt aMaxPriority)
@@ -736,7 +783,6 @@
}
}
- TRACES1("Going to process new request %d",iPostponeMemGood);
return ETrue;
}
@@ -776,15 +822,9 @@
TInt current = GetFreeMemory();
if(current >= iGoodThreshold)
{
- if(!NeedToPostponeMemGood())
- {
- TRACES("SynchroniseMemoryState calling MemoryGOOD");
- iGOomActionList->MemoryGood();
- }
- else
- {
- iMemAllocationsGoingDown->Continue();
- }
+ iClientsRequestingMemory.Reset();
+ TRACES("SynchroniseMemoryState calling MemoryGOOD");
+ iGOomActionList->MemoryGood();
}
else if(current < iLowThreshold)
{