summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInkyun Kil <inkyun.kil@samsung.com>2020-01-06 17:16:48 +0900
committerInkyun Kil <inkyun.kil@samsung.com>2020-02-27 12:33:46 +0900
commit6aaa96407f840732974b0aad544f45567df3d68b (patch)
treeb6d4a60518c6285ada3bfdd6480cbb24ce2c3abc
parent25300f79c57a12a9510b14f3ff83d35337234325 (diff)
downloadalarm-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.h4
-rw-r--r--server/alarm-manager.c43
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,