summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHwankyu Jhun <h.jhun@samsung.com>2018-02-22 17:23:00 +0900
committerHwankyu Jhun <h.jhun@samsung.com>2018-02-22 17:23:00 +0900
commitace83468098e40964bf2fec6553ac3f1300ee5d8 (patch)
tree0bcde3e742b88d35c7471fda59c9a74465ed898c
parent1df2343d66036399377da032b40924045b2383ad (diff)
downloadapp-core-ace83468098e40964bf2fec6553ac3f1300ee5d8.tar.gz
app-core-ace83468098e40964bf2fec6553ac3f1300ee5d8.tar.bz2
app-core-ace83468098e40964bf2fec6553ac3f1300ee5d8.zip
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 <h.jhun@samsung.com>
-rw-r--r--src/multiwindow_base/appcore_multiwindow_base_window.c54
1 files 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)