diff options
author | Inkyun Kil <inkyun.kil@samsung.com> | 2020-01-06 17:16:48 +0900 |
---|---|---|
committer | Inkyun Kil <inkyun.kil@samsung.com> | 2020-02-27 12:33:46 +0900 |
commit | 6aaa96407f840732974b0aad544f45567df3d68b (patch) | |
tree | b6d4a60518c6285ada3bfdd6480cbb24ce2c3abc | |
parent | 25300f79c57a12a9510b14f3ff83d35337234325 (diff) | |
download | alarm-manager-6aaa96407f840732974b0aad544f45567df3d68b.tar.gz alarm-manager-6aaa96407f840732974b0aad544f45567df3d68b.tar.bz2 alarm-manager-6aaa96407f840732974b0aad544f45567df3d68b.zip |
Change Inexact interval to 15minutes.
Change-Id: I0f4cc40da7a5ef7d96d2d217bc792229c9505147
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
-rw-r--r-- | include/alarm-internal.h | 4 | ||||
-rw-r--r-- | server/alarm-manager.c | 43 |
2 files changed, 24 insertions, 23 deletions
diff --git a/include/alarm-internal.h b/include/alarm-internal.h index faaf2ad..b95a43c 100644 --- a/include/alarm-internal.h +++ b/include/alarm-internal.h @@ -38,12 +38,14 @@ extern "C" { #define MAX_PKG_NAME_LEN MAX_SERVICE_NAME_LEN-8 #define MAX_PKG_ID_LEN 512 #define MAX_APP_ID_LEN 256 -#define MIN_INEXACT_INTERVAL 600 +#define MIN_INEXACT_INTERVAL 900 #define REGULAR_UID_MIN 5000 #define BILLION 1000000000 /* for calculating nano seconds */ #define MILLION 1000000 /* for calculating micro seconds */ +#define INEXACT_INTERVAL_QUANTUM 900 + typedef struct { GDBusConnection *connection; GDBusConnection *session_conn; diff --git a/server/alarm-manager.c b/server/alarm-manager.c index 0824bca..ebbb90e 100644 --- a/server/alarm-manager.c +++ b/server/alarm-manager.c @@ -98,7 +98,7 @@ typedef struct { char *unique_name; } appid_cache_t; -static long __get_proper_interval(long interval, int alarm_type); +static long __get_proper_interval(long interval); static void __alarm_add_to_list(__alarm_info_t *__alarm_info); static void __alarm_generate_alarm_id(__alarm_info_t *__alarm_info, alarm_id_t *alarm_id); static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id, @@ -460,8 +460,7 @@ static __alarm_info_t *__alarm_update_in_list(uid_t uid, alarm_id_t alarm_id, found_base_info->alarm_type |= ALARM_TYPE_PERIOD; found_base_info->mode.repeat = ALARM_REPEAT_MODE_REPEAT; found_base_info->mode.u_interval.interval = - __get_proper_interval(base_info->mode.u_interval.interval, - found_base_info->alarm_type); + __get_proper_interval(base_info->mode.u_interval.interval); } else if (update_flag == ALARM_UPDATE_FLAG_WEEK) { found_base_info->alarm_type &= ~ALARM_TYPE_INEXACT; found_base_info->mode = base_info->mode; @@ -841,6 +840,7 @@ static bool __alarm_create_appsvc(base_info_t *base_info, alarm_id_t *alarm_id, __alarm_info->alarm_id = -1; __alarm_info->requested_interval = requested_interval; __alarm_info->global = false; + __alarm_info->method = CUT_OFF; if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) { *error_code = ERR_ALARM_SYSTEM_FAIL; @@ -1023,6 +1023,7 @@ static bool __alarm_create_noti(base_info_t *base_info, alarm_id_t *alarm_id, __alarm_info->alarm_id = -1; __alarm_info->requested_interval = requested_interval; __alarm_info->global = false; + __alarm_info->method = CUT_OFF; if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) { *error_code = ERR_ALARM_SYSTEM_FAIL; @@ -1856,26 +1857,24 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty return ALARMMGR_RESULT_SUCCESS; } -static long __get_proper_interval(long interval, int alarm_type) +static long __get_proper_interval(long interval) { - GSList *gs_iter = NULL; - __alarm_info_t *entry = NULL; - long maxInterval = 60; + long adjusted_interval; - for (gs_iter = alarm_context.alarms; gs_iter != NULL; gs_iter = g_slist_next(gs_iter)) { - entry = (__alarm_info_t *)gs_iter->data; - if (entry->base_info.alarm_type & ALARM_TYPE_PERIOD) { - if (entry->base_info.mode.u_interval.interval <= interval && - entry->base_info.mode.u_interval.interval > maxInterval) - maxInterval = entry->base_info.mode.u_interval.interval; - } + if (interval < INEXACT_INTERVAL_QUANTUM) { + adjusted_interval = INEXACT_INTERVAL_QUANTUM; + } else if (interval % INEXACT_INTERVAL_QUANTUM == 0) { + adjusted_interval = interval; + } else { + long quotient = interval / INEXACT_INTERVAL_QUANTUM; + long remainder = interval % INEXACT_INTERVAL_QUANTUM; + adjusted_interval = remainder > INEXACT_INTERVAL_QUANTUM / 2 ? + quotient * INEXACT_INTERVAL_QUANTUM + INEXACT_INTERVAL_QUANTUM : + quotient * INEXACT_INTERVAL_QUANTUM; } - while ((maxInterval * 2 <= interval && maxInterval < LONG_MAX / 2) || - (alarm_type & ALARM_TYPE_INEXACT && maxInterval < MIN_INEXACT_INTERVAL)) - maxInterval *= 2; - - return maxInterval; + LOGE("adjusted_interval : %ld", adjusted_interval); + return adjusted_interval; } static gboolean __alarm_expired_directly(gpointer user_data) @@ -2318,7 +2317,7 @@ int alarm_manager_alarm_create_appsvc(GVariant *parameters, uid_t uid, pid_t pid if ((base_info.alarm_type & ALARM_TYPE_INEXACT)) { base_info.alarm_type |= ALARM_TYPE_PERIOD; base_info.mode.u_interval.interval = - __get_proper_interval(mode_interval, base_info.alarm_type); + __get_proper_interval(mode_interval); } else if (mode_interval <= 0) { base_info.mode.u_interval.interval = 0; } @@ -2384,7 +2383,7 @@ int alarm_manager_alarm_create_noti(GVariant *parameters, uid_t uid, pid_t pid, if ((base_info.alarm_type & ALARM_TYPE_INEXACT)) { base_info.alarm_type |= ALARM_TYPE_PERIOD; base_info.mode.u_interval.interval = - __get_proper_interval(mode_interval, base_info.alarm_type); + __get_proper_interval(mode_interval); } else if (mode_interval <= 0) { base_info.mode.u_interval.interval = 0; } @@ -2534,7 +2533,7 @@ int alarm_manager_alarm_create_periodic(GVariant *parameters, uid_t uid, if (is_ref) base_info.mode.u_interval.interval = interval * 60; else - base_info.mode.u_interval.interval = __get_proper_interval(interval * 60, base_info.alarm_type); + base_info.mode.u_interval.interval = __get_proper_interval(interval * 60); } if (!__alarm_create(&base_info, &_alarm_id, uid, pid, (periodic_method_e)method, interval * 60, is_ref, |