diff options
author | Hwankyu Jhun <h.jhun@samsung.com> | 2020-04-07 15:26:43 +0900 |
---|---|---|
committer | HwanKyu Jhun <h.jhun@samsung.com> | 2020-04-08 02:09:51 +0000 |
commit | e4371145601eb5b15d3065b000ba61157bcc623b (patch) | |
tree | 1bf51785bb33804219f8e7e7d812cfaf9a7dfa4c | |
parent | b5b47fcdbc83499d737b95fbf0e7c9fdb92bf353 (diff) | |
download | launchpad-e4371145601eb5b15d3065b000ba61157bcc623b.tar.gz launchpad-e4371145601eb5b15d3065b000ba61157bcc623b.tar.bz2 launchpad-e4371145601eb5b15d3065b000ba61157bcc623b.zip |
Add a new tag for loader
If "APP_CHECK" is "OFF", the launchpad doesn't check whether the
application is installed or not.
Change-Id: I74aa5c02429c945194113a8a29649d71bf068256
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
-rw-r--r-- | src/launchpad/inc/loader_info.h | 1 | ||||
-rw-r--r-- | src/launchpad/src/launchpad.c | 38 | ||||
-rw-r--r-- | src/launchpad/src/loader_info.c | 5 |
3 files changed, 30 insertions, 14 deletions
diff --git a/src/launchpad/inc/loader_info.h b/src/launchpad/inc/loader_info.h index 5111519..e3ae865 100644 --- a/src/launchpad/inc/loader_info.h +++ b/src/launchpad/inc/loader_info.h @@ -53,6 +53,7 @@ typedef struct _loader_info { int deactivation_method; unsigned int ttl; bool is_hydra; + bool app_check; } loader_info_t; typedef void (*loader_info_foreach_cb)(loader_info_t *info, void *data); diff --git a/src/launchpad/src/launchpad.c b/src/launchpad/src/launchpad.c index 79ac8f6..a5931f2 100644 --- a/src/launchpad/src/launchpad.c +++ b/src/launchpad/src/launchpad.c @@ -116,6 +116,7 @@ typedef struct { guint live_timer; int state; bool is_hydra; + bool app_check; io_channel_h client_channel; io_channel_h channel; io_channel_h hydra_channel; @@ -178,7 +179,7 @@ static candidate_process_context_t *__add_slot(int type, int loader_id, int detection_method, int activation_method, int deactivation_method, unsigned int ttl, int timeout_val, int threshold_max, int threshold_min, bool on_boot, - bool app_exists, bool is_hydra); + bool app_exists, bool is_hydra, bool app_check); static int __remove_slot(int type, int loader_id); static int __add_default_slots(void); static gboolean __handle_idle_checker(gpointer data); @@ -211,7 +212,7 @@ static gboolean __handle_queuing_slots(gpointer data) return G_SOURCE_REMOVE;; } - if (!cpc->app_exists) { + if (cpc->app_check && !cpc->app_exists) { _W("The application is not installed. Type(%d)", cpc->type); return G_SOURCE_CONTINUE; } @@ -1601,7 +1602,7 @@ static gboolean __handle_idle_checker(gpointer data) } cpc = (candidate_process_context_t *)data; - if (!cpc->app_exists) { + if (cpc->app_check && !cpc->app_exists) { _W("The application is not installed. Type(%d)", cpc->type); __sequencer.idle_checker = 0; __sequencer.running_cpc = NULL; @@ -1660,7 +1661,7 @@ static int __add_idle_checker(int detection_method, GList *cur) continue; } - if (!cpc->app_exists) { + if (cpc->app_check && !cpc->app_exists) { iter = g_list_next(iter); continue; } @@ -1729,7 +1730,9 @@ static int __dispatch_cmd_add_loader(bundle *kb) DEFAULT_CPU_THRESHOLD_MAX, DEFAULT_CPU_THRESHOLD_MIN, false, - true, 0); + true, + false, + true); __set_timer(cpc); free(loader_name); return lid; @@ -1776,7 +1779,9 @@ static int __dispatch_cmd_add_app_defined_loader(bundle *kb) DEFAULT_CPU_THRESHOLD_MAX, DEFAULT_CPU_THRESHOLD_MIN, false, - true, 0); + true, + false, + true); if (cpc == NULL) { _E("cpc is NULL"); bundle_free_encoded_rawdata(&extra); @@ -1887,7 +1892,7 @@ static void __update_slot(int type, bool app_exists) return; cpc->app_exists = app_exists; - if (!cpc->app_exists) { + if (cpc->app_check && !cpc->app_exists) { if (cpc->pid > 0) __dispose_candidate_process(cpc); __sequencer_remove_slot(cpc); @@ -1971,7 +1976,7 @@ static void __activate_slot(candidate_process_context_t *cpc) if (!cpc->touched && !cpc->on_boot) return; - if (!cpc->app_exists || cpc->pid > CANDIDATE_NONE) + if ((cpc->app_check && !cpc->app_exists) || cpc->pid > CANDIDATE_NONE) return; if (cpc->detection_method & METHOD_TIMEOUT) @@ -2161,7 +2166,7 @@ static bool __handle_launch_event(int fd, io_condition_e cond, void *data) _W("Launch directly %d %p", loader_id, cpc); pid = __launch_directly(menu_info->appid, app_path, clifd, kb, menu_info, NULL); - if (org_cpc && org_cpc->app_exists && + if (org_cpc && (!org_cpc->app_check || org_cpc->app_exists) && org_cpc->pid == CANDIDATE_NONE && !__sequencer_slot_exist(org_cpc)) { if (org_cpc->timer > 0) { @@ -2232,7 +2237,7 @@ static candidate_process_context_t *__create_slot(int type, int loader_id, int activation_method, int deactivation_method, unsigned int ttl, int timeout_val, int threshold_max, int threshold_min, - bool on_boot, bool app_exists, bool is_hydra) + bool on_boot, bool app_exists, bool is_hydra, bool app_check) { candidate_process_context_t *cpc; @@ -2290,6 +2295,7 @@ static candidate_process_context_t *__create_slot(int type, int loader_id, cpc->ttl = ttl; cpc->live_timer = 0; cpc->is_hydra = is_hydra; + cpc->app_check = app_check; cpc->score = WIN_SCORE; cpc->pss = 0; @@ -2308,7 +2314,7 @@ static candidate_process_context_t *__add_slot(int type, int loader_id, int activation_method, int deactivation_method, unsigned int ttl, int timeout_val, int threshold_max, int threshold_min, - bool on_boot, bool app_exists, bool is_hydra) + bool on_boot, bool app_exists, bool is_hydra, bool app_check) { candidate_process_context_t *cpc; int fd; @@ -2325,7 +2331,7 @@ static candidate_process_context_t *__add_slot(int type, int loader_id, activation_method, deactivation_method, ttl, timeout_val, threshold_max, threshold_min, - on_boot, app_exists, is_hydra); + on_boot, app_exists, is_hydra, app_check); if (cpc == NULL) return NULL; @@ -2614,7 +2620,9 @@ static void __add_slot_from_info(gpointer data, gpointer user_data) info->cpu_threshold_max, info->cpu_threshold_min, false, - info->app_exists, info->is_hydra); + info->app_exists, + info->is_hydra, + info->app_check); if (cpc == NULL) return; @@ -2641,7 +2649,9 @@ static void __add_slot_from_info(gpointer data, gpointer user_data) info->cpu_threshold_max, info->cpu_threshold_min, info->on_boot, - info->app_exists, info->is_hydra); + info->app_exists, + info->is_hydra, + info->app_check); if (cpc == NULL) return; diff --git a/src/launchpad/src/loader_info.c b/src/launchpad/src/loader_info.c index 2c5c5da..3493366 100644 --- a/src/launchpad/src/loader_info.c +++ b/src/launchpad/src/loader_info.c @@ -42,6 +42,7 @@ #define TAG_CPU_THRESHOLD_MIN "CPU_THRESHOLD_MIN" #define TAG_ON_BOOT "ON_BOOT" #define TAG_HYDRA "HYDRA" +#define TAG_APP_CHECK "APP_CHECK" #define VAL_ON "ON" #define VAL_OFF "OFF" @@ -84,6 +85,7 @@ static loader_info_t *__create_loader_info() info->deactivation_method = 0; info->ttl = 600; /* 10 minutes */ info->is_hydra = false; + info->app_check = true; return info; } @@ -305,6 +307,9 @@ static GList *__parse_file(GList *list, const char *path) } else { cur_info->is_hydra = 0; } + } else if (strcasecmp(TAG_APP_CHECK, tok1) == 0) { + if (tok2 && strcasecmp(VAL_OFF, tok2) == 0) + cur_info->app_check = false; } } |