diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-12 20:36:22 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-12 20:36:22 +0000 |
commit | 82afe4b44a1d5e0fddf92726be00c6fceefd5cc9 (patch) | |
tree | 4c121eea6374e420008533b52aecf82fe48e6c3b | |
parent | efb660512fdb54c4a07a65e4d9d6c4e7bbbe8e8c (diff) | |
download | chromium_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.cc | 10 |
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; } |