Chromium Code Reviews| Index: chrome/browser/tab_contents/thumbnail_generator.cc |
| diff --git a/chrome/browser/tab_contents/thumbnail_generator.cc b/chrome/browser/tab_contents/thumbnail_generator.cc |
| index 83899a226b2264ff17ca291e8387f0e69267f284..d000f4d347ddc1bbd22c8e5494e360711ea087f5 100644 |
| --- a/chrome/browser/tab_contents/thumbnail_generator.cc |
| +++ b/chrome/browser/tab_contents/thumbnail_generator.cc |
| @@ -21,6 +21,7 @@ |
| #include "content/public/browser/notification_types.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| +#include "content/public/browser/render_widget_host_view.h" |
| #include "content/public/browser/web_contents.h" |
| #include "googleurl/src/gurl.h" |
| #include "skia/ext/image_operations.h" |
| @@ -72,14 +73,25 @@ SkBitmap GetBitmapForRenderWidgetHost( |
| ThumbnailGenerator::ClipResult* clip_result) { |
| base::TimeTicks begin_compute_thumbnail = base::TimeTicks::Now(); |
| - SkBitmap result; |
| - |
| // Get the bitmap as a Skia object so we can resample it. This is a large |
| // allocation and we can tolerate failure here, so give up if the allocation |
| - // fails. |
| + // fails. First try to read from the compositing surface, then to read from |
| + // the backing store. |
| + content::RenderWidgetHostView* view = render_widget_host->GetView(); |
| skia::PlatformCanvas temp_canvas; |
| - if (!render_widget_host->CopyFromBackingStore(&temp_canvas)) |
| - return result; |
| + bool copy_result = false; |
| + // TODO(mazda): Copy the shrinked size of compositing surface instead of the |
| + // whole view size. |
|
vangelis
2012/03/13 19:40:49
Don't we want to use the desired_width/height here
mazda
2012/03/14 12:07:46
Can I resolve the TODO in another CL? Since this s
|
| + if (view) { |
| + copy_result = render_widget_host->CopyFromCompositingSurface( |
| + view->GetViewBounds().size(), |
| + &temp_canvas); |
| + } |
| + if (!copy_result) |
| + copy_result = render_widget_host->CopyFromBackingStore(&temp_canvas); |
| + if (!copy_result) |
| + return SkBitmap(); |
| + |
| const SkBitmap& bmp_with_scrollbars = |
| skia::GetTopDevice(temp_canvas)->accessBitmap(false); |
| // Clip the edgemost 15 pixels as that will commonly hold a scrollbar, which |
| @@ -91,6 +103,7 @@ SkBitmap GetBitmapForRenderWidgetHost( |
| SkBitmap bmp; |
| bmp_with_scrollbars.extractSubset(&bmp, scrollbarless_rect); |
| + SkBitmap result; |
| // Check if a clipped thumbnail is requested. |
| if (options & ThumbnailGenerator::kClippedThumbnail) { |
| SkBitmap clipped_bitmap = ThumbnailGenerator::GetClippedBitmap( |