RESOURCED_NOTIFIER_APP_INACTIVE,
RESOURCED_NOTIFIER_APP_PRELAUNCH,
RESOURCED_NOTIFIER_APP_ANR,
+
+ /**
+ * FIXME: It is temporary notifier to update cpu affinity for
+ * background app with fixed oom score.
+ */
+ RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE,
/*
* start terminating application
*/
return ret;
}
+static int check_oom_score_for_backgrd(int pid, int oom_score_adj, struct proc_app_info *pai)
+{
+ struct proc_status ps;
+
+ ps.pid = pid;
+ ps.pai = pai;
+
+ if (oom_score_adj > OOMADJ_BACKGRD_UNLOCKED)
+ return 0;
+
+ if (ps.pid < 0)
+ return -1;
+
+ if (ps.pai == NULL)
+ return -1;
+
+ if (proc_oom_priority_is_oom_fixed_process(pid)) {
+ resourced_notify(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, &ps);
+ return 0;
+ }
+
+ if (oom_score_adj == OOMADJ_BACKGRD_PERCEPTIBLE) {
+ resourced_notify(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, &ps);
+ return 0;
+ }
+
+ return -1;
+}
+
int proc_set_backgrd(int pid, int oom_score_adj, struct proc_app_info *pai)
{
int ret = 0;
ret = proc_backgrd_manage(pid, PROC_BACKGROUND_INACTIVE, OOMADJ_BACKGRD_UNLOCKED, pai);
break;
default:
- if (oom_score_adj > OOMADJ_BACKGRD_UNLOCKED)
- ret = 0;
- else
- ret = -1;
+ ret = check_oom_score_for_backgrd(pid, oom_score_adj, pai);
break;
}
return ret;
register_notifier(RESOURCED_NOTIFIER_WIDGET_FOREGRD, cpu_sched_app_foreground);
register_notifier(RESOURCED_NOTIFIER_WIDGET_BACKGRD, cpu_sched_app_background);
+
+ register_notifier(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, cpu_sched_app_background);
}
// register_notifier(RESOURCED_NOTIFIER_RT_SCHEDULER, cpu_sched_rt_scheduler);
unregister_notifier(RESOURCED_NOTIFIER_WIDGET_FOREGRD, cpu_sched_app_foreground);
unregister_notifier(RESOURCED_NOTIFIER_WIDGET_BACKGRD, cpu_sched_app_background);
+
+ unregister_notifier(RESOURCED_NOTIFIER_APP_BACKGRD_WITH_FIXED_OOM_SCORE, cpu_sched_app_background);
}
// unregister_notifier(RESOURCED_NOTIFIER_RT_SCHEDULER, cpu_sched_rt_scheduler);