Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index 32d94bfb62dff45b444ea54d6292ae291887dd28..6a4a15a1b8014f937b2ce7c55450119ba7cd3830 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -262,6 +262,7 @@ void RenderWidgetHostViewAndroid::SetBounds(const gfx::Rect& rect) { |
void RenderWidgetHostViewAndroid::GetScaledContentBitmap( |
float scale, |
gfx::Size* out_size, |
+ bool config_565, |
const base::Callback<void(bool, const SkBitmap&)>& result_callback) { |
if (!IsSurfaceAvailableForCopy()) { |
result_callback.Run(false, SkBitmap()); |
@@ -277,8 +278,11 @@ void RenderWidgetHostViewAndroid::GetScaledContentBitmap( |
gfx::Size dst_size( |
gfx::ToCeiledSize(gfx::ScaleSize(bounds, scale / device_scale_factor))); |
*out_size = dst_size; |
+ SkBitmap::Config config = config_565 ? |
+ SkBitmap::kRGB_565_Config : |
+ SkBitmap::kARGB_8888_Config; |
CopyFromCompositingSurface( |
- src_subrect, dst_size, result_callback, SkBitmap::kARGB_8888_Config); |
+ src_subrect, dst_size, result_callback, config); |
} |
bool RenderWidgetHostViewAndroid::PopulateBitmapWithContents(jobject jbitmap) { |
@@ -670,16 +674,19 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |
ConvertRectToPixel(device_scale_factor, src_subrect); |
if (using_synchronous_compositor_) { |
- SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback); |
+ SynchronousCopyContents(src_subrect_in_pixel, dst_size_in_pixel, callback, |
+ bitmap_config); |
UMA_HISTOGRAM_TIMES("Compositing.CopyFromSurfaceTimeSynchronous", |
base::TimeTicks::Now() - start_time); |
return; |
} |
scoped_ptr<cc::CopyOutputRequest> request; |
- if (src_subrect_in_pixel.size() == dst_size_in_pixel) { |
+ if ((src_subrect_in_pixel.size() == dst_size_in_pixel) && |
+ (bitmap_config == SkBitmap::kARGB_8888_Config)) { |
request = cc::CopyOutputRequest::CreateBitmapRequest(base::Bind( |
&RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult, |
dst_size_in_pixel, |
+ bitmap_config, |
start_time, |
callback)); |
} else { |
@@ -922,7 +929,8 @@ void RenderWidgetHostViewAndroid::SetOverlayVideoMode(bool enabled) { |
void RenderWidgetHostViewAndroid::SynchronousCopyContents( |
const gfx::Rect& src_subrect_in_pixel, |
const gfx::Size& dst_size_in_pixel, |
- const base::Callback<void(bool, const SkBitmap&)>& callback) { |
+ const base::Callback<void(bool, const SkBitmap&)>& callback, |
+ const SkBitmap::Config config) { |
SynchronousCompositor* compositor = |
SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), |
host_->GetRoutingID()); |
@@ -932,7 +940,7 @@ void RenderWidgetHostViewAndroid::SynchronousCopyContents( |
} |
SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, |
+ bitmap.setConfig(config, |
dst_size_in_pixel.width(), |
dst_size_in_pixel.height()); |
bitmap.allocPixels(); |
@@ -1454,9 +1462,15 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
// static |
void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( |
const gfx::Size& dst_size_in_pixel, |
+ const SkBitmap::Config config, |
const base::TimeTicks& start_time, |
const base::Callback<void(bool, const SkBitmap&)>& callback, |
scoped_ptr<cc::CopyOutputResult> result) { |
+ if (config != SkBitmap::kARGB_8888_Config) { |
+ NOTIMPLEMENTED(); |
+ callback.Run(false, SkBitmap()); |
+ return; |
+ } |
DCHECK(result->HasBitmap()); |
base::ScopedClosureRunner scoped_callback_runner( |
base::Bind(callback, false, SkBitmap())); |