diff -r 15bf7259bb7c -r d8a3531bc6b8 uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp --- a/uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp Tue Feb 02 07:56:43 2010 +0200 +++ b/uiacceltk/hitchcock/goommonitor/src/goomactionlist.cpp Mon Feb 22 17:57:49 2010 +0200 @@ -177,9 +177,30 @@ else actionType = TActionRef::ESystemPlugin; + + //get skip plugin config for foreground app + TUint foregroundUid = iMonitor.ForegroundAppUid(); + if(aConfig.GetApplicationConfig(foregroundUid).iSkipPluginId == iPluginList->Uid(pluginIndex)) + { + TRACES2("Skiping plugin %x, configured for app %x", iPluginList->Uid(pluginIndex), foregroundUid); + actionsIndex++; + continue ; //skip this and continue with next plugin + } + + TUint activeClientId = iMonitor.ActiveClientId(); + if(activeClientId!=0 && activeClientId!=foregroundUid) + { + if(aConfig.GetApplicationConfig(activeClientId).iSkipPluginId == iPluginList->Uid(pluginIndex)) + { + TRACES2("Skiping plugin %x, configured for app %x", iPluginList->Uid(pluginIndex), foregroundUid); + actionsIndex++; + continue ; //skip this and continue with next plugin + } + } + TActionRef ref = TActionRef(actionType, priority, syncMode, ramEstimate, *(iRunPluginActions[actionsIndex]), aWindowGroupList.GetIndexFromAppId(pluginConfig.TargetApp())); iAppsProtectedByPlugins.Append(pluginConfig.TargetApp()); - TRACES1("Creating Plugin Action Item TargetAppId %x", pluginConfig.TargetApp()); + TRACES2("Creating Plugin Action Item %x , TargetAppId %x", iPluginList->Uid(pluginIndex), pluginConfig.TargetApp()); //It is valid to have plugins with equal priority User::LeaveIfError(iActionRefs.InsertInOrderAllowRepeats(ref, ComparePriorities)); @@ -193,8 +214,8 @@ { FUNC_LOG; - iActionRefs.Reset(); - iCurrentActionIndex = 0; +// iActionRefs.Reset(); +// iCurrentActionIndex = 0; aWindowGroupList.RefreshL(); @@ -218,20 +239,23 @@ { CGOomCloseAppConfig* appCloseConfig = NULL; - CApaWindowGroupName* wgName = aWindowGroupList.WgName(); - __ASSERT_DEBUG(wgName, GOomMonitorPanic(KInvalidWgName)); - // Get the app ID for the wglist item // This sets the window group name TInt32 appId = aWindowGroupList.AppId(wgIndex, ETrue); - - if ( !appId || foregroundUid.iUid ==appId || wgName->IsSystem() || wgName->Hidden() || (iAppsProtectedByPlugins.Find(appId) != KErrNotFound)) + + CApaWindowGroupName* wgName = aWindowGroupList.WgName(); + __ASSERT_DEBUG(wgName, GOomMonitorPanic(KInvalidWgName)); + + + TBool skipped = EFalse; + if ( !appId || foregroundUid.iUid ==appId || (iAppsProtectedByPlugins.Find(appId) != KErrNotFound)) { //If the UID is NULL at this point, we assume the process is not an application //and therefore is not a suitable candidate for closure. //We also do not close system or hidden apps. TRACES3("BuildActionListL: Not adding process to action list; UID = %x, wgIndex = %d, wgid = %d", appId, wgIndex, aWindowGroupList.WgId(wgIndex).iId); - TRACES3("BuildActionListL: IsSystem = %d, Hidden = %d, Foregroundapp %x", wgName->IsSystem() ? 1 : 0, wgName->Hidden() ? 1 : 0, foregroundUid); + TRACES1("BuildActionListL: Foregroundapp %x", foregroundUid); + skipped = ETrue; } else if (aWindowGroupList.IsBusy(wgIndex) || wgName->IsBusy()) @@ -252,6 +276,11 @@ // Find the app close config for this app ID appCloseConfig = aConfig.GetApplicationConfig(appId).GetAppCloseConfig(); } + + if(!appCloseConfig && !skipped) + { + appCloseConfig = aConfig.GetApplicationConfig(KGOomDefaultAppId).GetAppCloseConfig(); + } // Create the app close action and add it to the action list if (appCloseConfig) @@ -260,7 +289,7 @@ TInt wgId = aWindowGroupList.WgId(wgIndex).iId; TGOomSyncMode syncMode = appCloseConfig->iSyncMode; TInt ramEstimate = appCloseConfig->iRamEstimate; - TActionRef ref = TActionRef(TActionRef::EAppClose, priority, syncMode, ramEstimate, wgId, wgIndex); + TActionRef ref = TActionRef(TActionRef::EAppClose, priority, syncMode, ramEstimate, wgId, wgIndex, appCloseConfig->iCloseTimeout, appCloseConfig->iWaitAfterClose); //AppClose Actions should always have a unique prioirity determined by the application's z order. TInt err = iActionRefs.InsertInOrder(ref, ComparePriorities); @@ -320,7 +349,7 @@ //Double checking again if this app is now in foreground, if yes then we dont kill CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(iWs, iWs.GetFocusWindowGroup()); - RDebug::Print(wgName->WindowGroupName()); + TInt32 fgApp = wgName->AppUid().iUid; TInt32 appId = iMonitor.GetWindowGroupList()->AppIdfromWgId(ref.WgId(), ETrue); if(appId == fgApp) @@ -334,11 +363,13 @@ else { action = &(ref.RunPlugin()); + iCurrentPluginRun = ref.RunPlugin().Id(); } iFreeingMemory = ETrue; TRACES2("CGOomActionList::FreeMemory: Running action %d which has priority %d", iCurrentActionIndex,ref.Priority()); action->FreeMemory(iCurrentTarget - memoryEstimate); + iCurrentPluginRun = 0; memoryFreeingActionRun = ETrue; // Actions with EContinueIgnoreMaxBatchSize don't add to the tally of running actions @@ -379,10 +410,7 @@ TRACES("CGOomActionList::FreeMemory: No usable memory freeing action has been found"); iMonitor.ResetTargets(); TInt freeMemory; - if (FreeMemoryAboveTarget(freeMemory) && !iMonitor.NeedToPostponeMemGood()) - { - MemoryGood(); - } + FreeMemoryAboveTarget(freeMemory); iServer.CloseAppsFinished(freeMemory, EFalse); } } @@ -587,6 +615,7 @@ iRunningKillAppActions = ETrue; iMonitor.RunCloseAppActions(iMaxPriority); } + iMonitor.WaitAndSynchroniseMemoryState(); } else { @@ -607,6 +636,7 @@ iRunningKillAppActions = EFalse; iMonitor.ResetTargets(); iServer.CloseAppsFinished(freeMemory, ETrue); + iMonitor.WaitAndSynchroniseMemoryState(); } } @@ -653,14 +683,15 @@ } } -void CGOomActionList::SetPriority(TInt aWgIndex, TInt aPriority) + +void CGOomActionList::SetPriority(TInt aWgId, TInt aPriority) { FUNC_LOG; TInt idx = iActionRefs.Count()-1; while(idx >= 0) { - if(iActionRefs[idx].WgIndex() == aWgIndex) + if(iActionRefs[idx].WgId() == aWgId) { break; } @@ -669,15 +700,22 @@ if(idx >= 0) { - TRACES2("CGOomActionList::SetPriority Setting app wgindex %d, index %d as busy", aWgIndex, idx); + TRACES2("CGOomActionList::SetPriority Setting app wgid %d, index %d as busy", aWgId, idx); iActionRefs[idx].SetPriority(aPriority); - if (!iFreeingMemory) - { - iActionRefs.Sort(ComparePriorities); - } } else { - TRACES1("CGOomActionList::SetPriority wgindex %d not in the hitlist", aWgIndex); + TRACES1("CGOomActionList::SetPriority wgd %d not in the hitlist", aWgId); } } + + +TUint CGOomActionList::CurrentPluginRun() + { + return iCurrentPluginRun; + } + +TBool CGOomActionList::IsRunningKillAppActions() + { + return iRunningKillAppActions; + }