struct heart_memory_table *table;
struct heart_memory_data *md;
+ if (!heart_memory_app_list)
+ return NULL;
+
if (!appid) {
_E("Wrong message arguments!");
return NULL;
return NULL;
}
- if (!heart_memory_app_list) {
- _E("hashtable heart_memory_app_list is NULL");
- return NULL;
- }
-
/* read from hash and make reply hash */
/* loop in file read and make reply */
ret = pthread_mutex_lock(&heart_memory_mutex);
/* Get HEART-memory data only if this module is enabled */
if (find_module("MEMORY") != NULL)
- md = heart_memory_get_data(appid, DATA_6HOUR);
+ md = heart_memory_get_data(appid, DATA_LATEST);
if (md) {
- unsigned int rss;
+ unsigned int rss, after, size;
rss = KBYTE_TO_MBYTE(md->avg_rss);
free(md);
- /*
- * if launching app is predicted to consume all memory,
- * free memory up to leave threshold after launching the app.
- */
- if (before <= rss) {
- _D("run history based proactive killer, (before), required level = %u MB",
- memcg_root->threshold_leave + rss);
- lowmem_trigger_force_reclaim(memcg_root->threshold_leave + rss);
- return;
- }
-
- unsigned int after = before - rss;
- _D("available after launch = %u MB, available = %u MB, rss = %u MB",
- after, before, rss);
-
+ after = before - rss;
/*
* after launching app, ensure that available memory is
* above threshold_leave
if (after >= memcg_root->threshold[LOWMEM_MEDIUM])
return;
- _D("run history based proactive killer (after), required level = %u MB",
- memcg_root->threshold_leave + THRESHOLD_MARGIN);
- lowmem_trigger_force_reclaim(memcg_root->threshold_leave + THRESHOLD_MARGIN);
+ if (proactive_threshold - rss >= memcg_root->threshold[LOWMEM_MEDIUM])
+ size = proactive_threshold;
+ else
+ size = rss + memcg_root->threshold[LOWMEM_MEDIUM] + THRESHOLD_MARGIN;
+
+ _D("history based proactive LMK : avg rss %u, available %u required = %u MB",
+ rss, before, size);
+ lowmem_trigger_force_reclaim(size);
return;
}