bug fix: TC-67(same cause TC-1333) 29/28229/1
authorRyota Okubi <ryota.okubi@mail.toyota-td.jp>
Wed, 1 Oct 2014 02:23:12 +0000 (11:23 +0900)
committerRyota Okubi <ryota.okubi@mail.toyota-td.jp>
Wed, 1 Oct 2014 02:24:39 +0000 (11:24 +0900)
TC-67 - Some launched Apps' thumbnail show blank content.
A live thumbnail will not be displayed,if time will be taken before
attach a buffer, after an application generates surface.
For details, please see https://bugs.tizen.org/jira/browse/TC-1333.

Change-Id: Ia4c22ed0135530da5e8d06106f05dcc618aaeb38
Bug-Tizen: TC-67 TC-1333
Signed-off-by: Ryota Okubi <ryota.okubi@mail.toyota-td.jp>
src/homescreen/CicoHSMenuTile.cpp
src/homescreen/CicoHSMenuTile.h

index 2a6e115..0f0d125 100644 (file)
@@ -58,6 +58,8 @@ CicoHSMenuTile::CicoHSMenuTile(const char *appid,
     thumb.surface = 0;
     thumb.fbcount = 0;
     thumb.pixel_data = NULL;
+    thumb.thumb_timer = NULL;
+    thumb.orgsurface = 0;
     this->page = page;
     this->subpage = subpage;
     this->position = position;
@@ -83,6 +85,10 @@ CicoHSMenuTile::CicoHSMenuTile(const char *appid,
 /*--------------------------------------------------------------------------*/
 CicoHSMenuTile::~CicoHSMenuTile(void)
 {
+    if (thumb.thumb_timer)  {
+        ecore_timer_del(thumb.thumb_timer);
+        thumb.thumb_timer = NULL;
+    }
 }
 
 /*--------------------------------------------------------------------------*/
@@ -108,6 +114,10 @@ CicoHSMenuTile::CreateObject(Evas *evas)
     small_icon = NULL;
     thumb_reduce_x = ICO_HS_MENUTILE_THUMBNAIL_REDUCE_PIX;
     thumb_reduce_y = ICO_HS_MENUTILE_THUMBNAIL_REDUCE_PIX;
+    if (thumb.thumb_timer)  {
+        ecore_timer_del(thumb.thumb_timer);
+        thumb.thumb_timer = NULL;
+    }
 
     /*tile*/
     tile = evas_object_image_filled_add(evas);
@@ -189,6 +199,10 @@ CicoHSMenuTile::FreeObject(void)
         ico_syc_unmap_thumb(thumb.surface);
         thumb.surface = 0;
     }
+    if (thumb.thumb_timer)  {
+        ecore_timer_del(thumb.thumb_timer);
+        thumb.thumb_timer = NULL;
+    }
     if (tile != NULL){
         evas_object_del(tile);
         tile = NULL;
@@ -501,6 +515,10 @@ CicoHSMenuTile::ValidMenuIcon(void)
                 evas_object_show(tile);
             }
         }
+        if (thumb.thumb_timer)  {
+            ecore_timer_del(thumb.thumb_timer);
+            thumb.thumb_timer = NULL;
+        }
         if (small_icon) {
             evas_object_hide(small_icon);
         }
@@ -524,6 +542,8 @@ CicoHSMenuTile::ValidThumbnail(int surface)
     ICO_DBG("CicoHSMenuTile::ValidThumbnail(appid=%p<%s>) run=%d surf=%08x",
             this->appid, appid, app_running, surface);
 
+    thumb.orgsurface = surface;
+
     if ((! app_running) || (surface == 0))  {
         if (thumb.surface != 0) {
             sprintf(sWork, ICO_HS_THUMB_ICODIR ICO_HS_THUMB_FILEDIR "/%08x."
@@ -579,6 +599,10 @@ CicoHSMenuTile::ValidThumbnail(int surface)
             if (small_icon) {
                 evas_object_hide(small_icon);
             }
+            if (thumb.thumb_timer)  {
+                ecore_timer_del(thumb.thumb_timer);
+                thumb.thumb_timer = NULL;
+            }
             ICO_DBG("CicoHSMenuTile::ValidThumbnail: %s(%08x) hide small icon",
                     appid, surface);
         }
@@ -587,6 +611,28 @@ CicoHSMenuTile::ValidThumbnail(int surface)
 
 /*--------------------------------------------------------------------------*/
 /**
+ * @brief   CicoHSMenuTile::RetryThumbnail
+ *          check and retry thumbnail
+ *
+ * @param       none
+ * @return      none
+ */
+/*--------------------------------------------------------------------------*/
+void
+CicoHSMenuTile::RetryThumbnail(void)
+{
+    thumb.thumb_timer = NULL;
+
+    ICO_DBG("CicoHSMenuTile::RetryThumbnaili: surf=%08x app=%s", thumb.orgsurface, appid);
+
+    if ((icon == tile) && (thumb.orgsurface != 0))  {
+        app_running = false;
+        ValidThumbnail(thumb.orgsurface);
+    }
+}
+
+/*--------------------------------------------------------------------------*/
+/**
  * @brief   CicoHSMenuTile::SetThumbnail
  *          tile is thumbnail
  *
@@ -785,6 +831,11 @@ CicoHSMenuTile::SetThumbnail(ico_syc_thumb_info_t *info)
         free(thumb.pixel_data);
         thumb.pixel_data = NULL;
         icon = tile;
+        if (thumb.thumb_timer)  {
+            ecore_timer_del(thumb.thumb_timer);
+        }
+        thumb.thumb_timer = ecore_timer_add(ICO_HS_MENUTILE_THUMBNAIL_RETRYTIME,
+                                            CicoHSMenuTile::TimerThumbnail, (void *)this);
     }
 
     if (icon != old_icon)   {
@@ -807,6 +858,25 @@ CicoHSMenuTile::SetThumbnail(ico_syc_thumb_info_t *info)
 
 /*--------------------------------------------------------------------------*/
 /**
+ * @brief   CicoHSMenuTile::TimerThumbnail
+ *          recheck thumbnail
+ *
+ * @param[in]   data    CicoHSMenuTile object
+ * @return      fixed ECORE_CALLBACK_CANCEL
+ */
+/*--------------------------------------------------------------------------*/
+Eina_Bool
+CicoHSMenuTile::TimerThumbnail(void *data)
+{
+    CicoHSMenuTile  *tile = (CicoHSMenuTile *)data;
+
+    tile->RetryThumbnail();
+
+    return ECORE_CALLBACK_CANCEL;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
  * @brief   CicoHSMenuTile::ShowMenu
  *          change menu show/hide for live thumbnail update cycle
  *
index 1950504..e3dbb06 100644 (file)
@@ -82,6 +82,8 @@
 #define ICO_HS_MENUTILE_THUMBNAIL_REDUCE_RATE  10
 #define ICO_HS_MENUTILE_THUMBNAIL_REDUCTION     4
 
+#define ICO_HS_MENUTILE_THUMBNAIL_RETRYTIME     (0.3f)      /* thumbnail retry time(sec) */
+
 /*shared memory buffer*/
 #define ICO_HS_THUMB_ICODIR       "/tmp/ico"
 #define ICO_HS_THUMB_FILEDIR       "/thumbnail"
@@ -97,6 +99,8 @@ struct _CicoHSMenuTile_thumb {
     int         fbcount;                // frame buffer change counter
     char        *pixel_data;            // glReadPixels data buffer
     int         pixel_bufsize;          // data buffer size
+    Ecore_Timer *thumb_timer;           // retry timer
+    int         orgsurface;             // original surface id
 };
 
 class CicoHSMenuTile
@@ -127,6 +131,8 @@ class CicoHSMenuTile
     void SetThumbnail(ico_syc_thumb_info_t *info);
     void ShowMenu(bool show);
     void SetOrgThumbnail(CicoHSMenuTile *orgTile);
+    void RetryThumbnail(void);
+    static Eina_Bool TimerThumbnail(void *data);
 
   private:
     char appid[ICO_HS_MAX_PROCESS_NAME];