From ace83468098e40964bf2fec6553ac3f1300ee5d8 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Thu, 22 Feb 2018 17:23:00 +0900 Subject: [PATCH] Add flush timer When all instances are paused, appcore_multiwindow_base adds the timer to flush memory. Change-Id: I778b946079f147d34b89684ae0569bfcda03c004 Signed-off-by: Hwankyu Jhun --- .../appcore_multiwindow_base_window.c | 54 ++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/src/multiwindow_base/appcore_multiwindow_base_window.c b/src/multiwindow_base/appcore_multiwindow_base_window.c index cb2061c..8a980ce 100644 --- a/src/multiwindow_base/appcore_multiwindow_base_window.c +++ b/src/multiwindow_base/appcore_multiwindow_base_window.c @@ -37,6 +37,7 @@ typedef struct _win_context { } win_context; static GList *__win_contexts; +static guint __flush_timer; static gint __comp(gconstpointer a, gconstpointer b) { @@ -85,6 +86,47 @@ static win_context *__find_win_context_by_wid(int wid) return node->data; } +static bool __is_resumed(void) +{ + win_context *ctx; + GList *iter; + + iter = __win_contexts; + while (iter) { + ctx = (win_context *)iter->data; + if (appcore_multiwindow_base_instance_is_resumed(ctx->inst)) + return true; + iter = g_list_next(iter); + } + + return false; +} + +static gboolean __flush_memory(gpointer data) +{ + _DBG("Flush memory"); + appcore_base_flush_memory(); + __flush_timer = 0; + return G_SOURCE_REMOVE; +} + +static void __add_flush_timer(void) +{ + if (__flush_timer) + return; + + __flush_timer = g_timeout_add(5000, __flush_memory, NULL); +} + +static void __remove_flush_timer(void) +{ + if (!__flush_timer) + return; + + g_source_remove(__flush_timer); + __flush_timer = 0; +} + EXPORT_API void appcore_multiwindow_base_window_on_show(int type, void *event) { } @@ -113,10 +155,14 @@ EXPORT_API void appcore_multiwindow_base_window_on_visibility(int type, void *ev if (!cxt) return; - if (ev->fully_obscured) + if (ev->fully_obscured) { appcore_multiwindow_base_instance_pause(cxt->inst); - else + if (!__is_resumed()) + __add_flush_timer(); + } else { appcore_multiwindow_base_instance_resume(cxt->inst); + __remove_flush_timer(); + } } EXPORT_API void appcore_multiwindow_base_window_on_pre_visibility(int type, void *event) @@ -127,8 +173,10 @@ EXPORT_API void appcore_multiwindow_base_window_on_pre_visibility(int type, void if (!cxt) return; - if (ev->type == ECORE_WL_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED) + if (ev->type == ECORE_WL_WINDOW_VISIBILITY_TYPE_PRE_UNOBSCURED) { appcore_multiwindow_base_instance_resume(cxt->inst); + __remove_flush_timer(); + } } EXPORT_API void appcore_multiwindow_base_window_bind(appcore_multiwindow_base_instance_h h, Ecore_Wl_Window *wl_win) -- 2.7.4