[Performance][Memory] Scaled history/tab/bookmark snapshots 68/70168/4
authorm.kawonczyk <m.kawonczyk@samsung.com>
Wed, 18 May 2016 10:46:18 +0000 (12:46 +0200)
committerlee <juku1999@samsung.com>
Mon, 23 May 2016 10:36:35 +0000 (03:36 -0700)
[Issue]        N/A
[Problem]      Thumbnails created by api, while having same
               proportions as ordered, were to big. It resulted
               in worse performance and memory (bigger images
               needed to be converted to png and saved in
               database)
[Solution]     Call ewk_view_screenshot_contents_get with
               different scale_factor.
[Verify]       Open browser and check every location that have
               webpage screenshot (quick access, tab manager and
               bookmark manager). Pictures should be displayed
               correctly. Images should be smaller in database
               and converting to png should be much faster.

Change-Id: I60078f6b55616b7b77b88a8eb873b0e399333fe4

services/WebEngineService/WebView.cpp

index e5c235649bb50c9fa113dda9ae36c02b847ccd51..a7306dae02218ca37483657b55216bb20c676b5b 100755 (executable)
@@ -791,6 +791,14 @@ tools::BrowserImagePtr WebView::captureSnapshot(int targetWidth, int targetHeigh
     if (vw == 0 || vh == 0)
         return std::make_shared<BrowserImage>();
 
+    double scale = targetWidth / (double)(vw * getZoomFactor());
+    double scale_max, scale_min;
+    ewk_view_scale_range_get(m_ewkView, &scale_min, &scale_max);
+    if (scale < scale_min)
+        scale = scale_min;
+    else if (scale > scale_max)
+        scale = scale_max;
+
     Eina_Rectangle area;
     double snapshotProportions = (double)(targetWidth) /(double)(targetHeight);
     double webkitProportions = (double)(vw) /(double)(vh);
@@ -816,11 +824,11 @@ tools::BrowserImagePtr WebView::captureSnapshot(int targetWidth, int targetHeigh
         SnapshotItemData *snapshot_data = new SnapshotItemData();
         snapshot_data->web_view = this;
         snapshot_data->snapshot_type = snapshot_type;
-        bool result = ewk_view_screenshot_contents_get_async(m_ewkView, area, 1.0, evas_object_evas_get(m_ewkView), __screenshotCaptured, snapshot_data);
+        bool result = ewk_view_screenshot_contents_get_async(m_ewkView, area, scale, evas_object_evas_get(m_ewkView), __screenshotCaptured, snapshot_data);
         if (!result)
             BROWSER_LOGD("[%s:%d] ewk_view_screenshot_contents_get_async API failed", __func__, __LINE__);
     } else {
-        Evas_Object *snapshot = ewk_view_screenshot_contents_get(m_ewkView, area, 1.0, evas_object_evas_get(m_ewkView));
+        Evas_Object *snapshot = ewk_view_screenshot_contents_get(m_ewkView, area, scale, evas_object_evas_get(m_ewkView));
         BROWSER_LOGD("[%s:%d] Snapshot (screenshot) catched, evas pointer: %p",__func__, __LINE__, snapshot);
         if (snapshot)
             return std::make_shared<tools::BrowserImage>(snapshot);