#include "proc-manager-common.h"
#include "proc-manager-dbus.h"
+/**
+ * @brief Temporary prelaunch flag storage
+ * @details Key(appid), Value(prelaunch flag)
+ * Each key is removed after app is launched
+ */
+static GHashTable *proc_manager_dbus_prelaunch_flag_storage = NULL;
+
/**
* @brief D-Bus signal handler for AppLaunch
*/
static void proc_manager_dbus_app_launch(GVariant *params)
{
int ret;
- int *predefined_osa = NULL;
+ int initial_osa = OOM_SCORE_ADJ_DEFAULT;
pid_t pid = 0;
char *appid = NULL;
char *pkgid = NULL;
char *pkgtype = NULL;
+ int *prelaunch_flag = NULL;
+ int *predefined_osa = NULL;
g_variant_get(params, "(i&s&s&s)", &pid, &appid, &pkgid, &pkgtype);
if (pid == 0 || !appid || !pkgid || !pkgtype) {
_D("App launched : pid(%u), appid(%s), pkgid(%s), pkgtype(%s)",
pid, appid, pkgid, pkgtype);
+ /* Check prelaunch flag */
+ prelaunch_flag = (int *)g_hash_table_lookup(proc_manager_dbus_prelaunch_flag_storage, (gpointer)appid);
+ if (prelaunch_flag) {
+ if (CHECK_BIT(*prelaunch_flag, PROC_MANAGER_PRELAUNCH_FLAG_VIP_ATTRIBUTE)) {
+ initial_osa = OOM_SCORE_ADJ_VIP;
+ }
+
+ /* Remove prelaunch flag after using it */
+ g_hash_table_remove(proc_manager_dbus_prelaunch_flag_storage, (gpointer)appid);
+ }
+
+ /* Check oom_score_predefined_app list*/
predefined_osa = (int *)g_hash_table_lookup(proc_manager_osa_predefined_app_list, (gpointer)appid);
if (predefined_osa) {
- _D("%s is oom_score_adj predefined app. Set to %d", appid, *predefined_osa);
- ret = procfs_set_oom_score_adj(pid, *predefined_osa);
- if (ret < 0)
- _E("Failed to set oom_score_adj for PID %u (%d)", pid, ret);
+ initial_osa = *predefined_osa;
+ _D("%s is oom_score_adj predefined app. Set to %d", appid, initial_osa);
}
+
+ ret = procfs_set_oom_score_adj(pid, initial_osa);
+ if (ret < 0)
+ _E("Failed to set oom_score_adj for PID %u (%d)", pid, ret);
}
/**
{
char *appid = NULL;
char *pkgid = NULL;
+ gchar *key;
+ gint *value;
int flags = -1;
int categories = -1;
_D("App prelaunched : appid(%s), pkgid(%s), flags(0x%x), categories(0x%x)",
appid, pkgid, flags, categories);
+
+ key = g_strndup(appid, strlen(appid));
+ value = g_malloc(sizeof(gint));
+ g_assert(key && value);
+
+ *value = flags;
+ g_hash_table_insert(proc_manager_dbus_prelaunch_flag_storage, key, value);
}
static struct dbus_signal proc_manager_dbus_signals_amd[] = {
return ret;
}
+ proc_manager_dbus_prelaunch_flag_storage = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+ g_assert(proc_manager_dbus_prelaunch_flag_storage);
+
return 0;
}