A live thumbnail sometimes is not updated. 38/28338/2
authorRyota Okubi <ryota.okubi@mail.toyota-td.jp>
Fri, 3 Oct 2014 05:41:11 +0000 (14:41 +0900)
committerMikko Ylinen <mikko.ylinen@intel.com>
Mon, 6 Oct 2014 10:59:18 +0000 (03:59 -0700)
In ico-uxf-weston-plugin(weston plugin), when Weston will finish
a certain processing and will be in an idle state, it investigated
whether the buffer number of surface changed, and if it is changing,
it will have judged with drawing having changed.
A buffer number changes because an application calls SwapBuffer.
However, since Weston may process at once 2 times of SwapBuffers which
the application called continuously and a buffer number returns by
SwapBuffer in that case, drawing judges that it is not changing and
does not remake a live thumbnail.
Even if the buffer number of repair was the same, when having passed
beyond the definite period of time, it corresponded by remaking a live
thumbnail.

Change-Id: Id241741344a4b8e7736dc5efad06c5ece1d78810
Signed-off-by: Ryota Okubi <ryota.okubi@mail.toyota-td.jp>
src/ico_window_mgr.c

index ba42be8..d9261de 100644 (file)
@@ -102,6 +102,9 @@ struct uifw_gl_surface_state {      /* struct gl_surface_state  */
                                             /* show/hide animation with position    */
 #define ICO_WINDOW_MGR_ANIMATION_POS    0x10000000
 
+/* Waiting time for updating of livethumbnail(ms)   */
+#define ICO_WINDOW_MGR_THUMBNAIL_WAITTIME   1000
+
 /* Multi Windiw Manager                 */
 struct ico_win_mgr {
     struct weston_compositor *compositor;   /* Weston compositor                    */
@@ -1392,7 +1395,7 @@ ico_ivi_surfacePropertyNotification(struct ivi_layout_surface *ivisurf,
                 send_event ++;
                 send_visible = 0;
                 usurf->visible = 0;
-                if ((usurf->animation.show_anima != ICO_WINDOW_MGR_ANIMATION_NONE) &&
+                if ((usurf->animation.hide_anima != ICO_WINDOW_MGR_ANIMATION_NONE) &&
                     (win_mgr_hook_animation != NULL))   {
                     /* hide with animation      */
                     retanima =
@@ -1715,8 +1718,6 @@ win_mgr_check_mapsurface(struct weston_animation *animation,
 #endif
         if ((sm->interval >= 0) || (sm->eventque == 0)) {
             win_mgr_change_mapsurface(sm, 0, curtime);
-        }
-        if ((sm->interval >= 0) && (sm->eventque != 0)) {
             if (sm->interval < wait)    {
                 wait = sm->interval;
             }
@@ -1726,9 +1727,10 @@ win_mgr_check_mapsurface(struct weston_animation *animation,
     /* check frame interval         */
     if (wait < 2000)    {
         wait = wait / 2;
+        if (wait < 33)  wait = 33;                  /* mimimum 33ms (30fsp) */
     }
     else    {
-        wait = 1000;
+        wait = ICO_WINDOW_MGR_THUMBNAIL_WAITTIME;   /* maximum 1000ms       */
     }
     wl_event_source_timer_update(_ico_win_mgr->wait_mapevent, wait);
 }
@@ -1850,17 +1852,21 @@ win_mgr_change_mapsurface(struct uifw_surface_map *sm, int event, uint32_t curti
 #endif /*PERFORMANCE_EVALUATIONS*/
                 }
                 else    {
-                    if (es->buffer_ref.buffer->legacy_buffer != sm->curbuf) {
+                    dtime = (int)((curtime - sm->lasttime) & 0x7fffffff);
+                    if ((es->buffer_ref.buffer->legacy_buffer != sm->curbuf) ||
+                        ((sm->interval >= 0) &&
+                         (dtime >= ICO_WINDOW_MGR_THUMBNAIL_WAITTIME))) {
 #if  PERFORMANCE_EVALUATIONS > 0
-                        uifw_perf("SWAP_BUFFER appid=%s surface=%08x CONTENTS",
-                                  sm->usurf->uclient->appid, sm->usurf->surfaceid);
+                        if (es->buffer_ref.buffer->legacy_buffer != sm->curbuf) {
+                            uifw_perf("SWAP_BUFFER appid=%s surface=%08x CONTENTS",
+                                      sm->usurf->uclient->appid, sm->usurf->surfaceid);
+                        }
 #endif /*PERFORMANCE_EVALUATIONS*/
                         if (sm->interval < 0)   {
                             sm->eventque = 1;
                             event = 0;
                         }
                         else if (sm->interval > 0)  {
-                            dtime = (int)(curtime - sm->lasttime);
                             if (dtime < sm->interval)   {
                                 sm->eventque = 1;
                                 event = 0;
@@ -1872,7 +1878,6 @@ win_mgr_change_mapsurface(struct uifw_surface_map *sm, int event, uint32_t curti
                             event = 0;
                         }
                         else if (sm->interval > 0)  {
-                            dtime = (int)(curtime - sm->lasttime);
                             if (dtime < sm->interval)   {
                                 event = 0;
                             }
@@ -1890,8 +1895,11 @@ win_mgr_change_mapsurface(struct uifw_surface_map *sm, int event, uint32_t curti
             sm->curbuf = es->buffer_ref.buffer->legacy_buffer;
         }
         else    {
+            dtime = (int)((curtime - sm->lasttime) & 0x7fffffff);
             if ((sm->eventque != 0) ||
-                (es->buffer_ref.buffer == NULL) || (es->buffer_ref.buffer != sm->curbuf)) {
+                (es->buffer_ref.buffer == NULL) || (es->buffer_ref.buffer != sm->curbuf) ||
+                ((sm->interval >= 0) &&
+                 (dtime >= ICO_WINDOW_MGR_THUMBNAIL_WAITTIME))) {
                 sm->curbuf = es->buffer_ref.buffer;
                 if (es->buffer_ref.buffer != NULL)  {
                     width = es->buffer_ref.buffer->width;
@@ -1930,7 +1938,6 @@ win_mgr_change_mapsurface(struct uifw_surface_map *sm, int event, uint32_t curti
                                 event = 0;
                             }
                             else if (sm->interval > 0)  {
-                                dtime = (int)(curtime - sm->lasttime);
                                 if (dtime < sm->interval)   {
                                     sm->eventque = 1;
                                     event = 0;