summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-12 20:36:22 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-12 20:36:22 +0000
commit82afe4b44a1d5e0fddf92726be00c6fceefd5cc9 (patch)
tree4c121eea6374e420008533b52aecf82fe48e6c3b
parentefb660512fdb54c4a07a65e4d9d6c4e7bbbe8e8c (diff)
downloadchromium_src-82afe4b44a1d5e0fddf92726be00c6fceefd5cc9.zip
chromium_src-82afe4b44a1d5e0fddf92726be00c6fceefd5cc9.tar.gz
chromium_src-82afe4b44a1d5e0fddf92726be00c6fceefd5cc9.tar.bz2
Downsample thumbnail by powers of two before doing lanczos
This speeds up the resizing portion of thumbnailing from 40ms->15ms on my linux z600 at nearly fullscreen resolution. Thumbnail resizing times on weaker hardware (like netbooks) has been observed in the 150ms+ range, so hopefully this is a proportional speedup there as well. TEST=none BUG=62820 Review URL: http://codereview.chromium.org/4846002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65982 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/render_view.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 28d0f86..8bd4675 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -95,6 +95,7 @@
#include "gfx/native_widget_types.h"
#include "gfx/point.h"
#include "gfx/rect.h"
+#include "gfx/skbitmap_operations.h"
#include "grit/generated_resources.h"
#include "grit/renderer_resources.h"
#include "media/base/media_switches.h"
@@ -1105,14 +1106,19 @@ bool RenderView::CaptureThumbnail(WebView* view,
SkBitmap subset;
device.accessBitmap(false).extractSubset(&subset, src_rect);
- // Resample the subset that we want to get it the right size.
+ // First do a fast downsample by powers of two to get close to the final size.
+ SkBitmap downsampled_subset =
+ SkBitmapOperations::DownsampleByTwoUntilSize(subset, w, h);
+
+ // Do a high-quality resize from the downscaled size to the final size.
*thumbnail = skia::ImageOperations::Resize(
- subset, skia::ImageOperations::RESIZE_LANCZOS3, w, h);
+ downsampled_subset, skia::ImageOperations::RESIZE_LANCZOS3, w, h);
score->boring_score = CalculateBoringScore(thumbnail);
HISTOGRAM_TIMES("Renderer4.Thumbnail",
base::TimeTicks::Now() - beginning_time);
+
return true;
}