Chromium Code Reviews| 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 4f1c64d810b30557b4b3434ce3de598a3915c4f4..354ab4a30ea8d8b439143ee84ed76086979b8d4c 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_android.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
| @@ -633,11 +633,8 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |
| const gfx::Size& dst_size, |
| const base::Callback<void(bool, const SkBitmap&)>& callback, |
| const SkBitmap::Config bitmap_config) { |
| - // Only ARGB888 and RGB565 supported as of now. |
| - bool format_support = ((bitmap_config == SkBitmap::kRGB_565_Config) || |
| - (bitmap_config == SkBitmap::kARGB_8888_Config)); |
| - if (!format_support) { |
| - DCHECK(format_support); |
| + |
| + if (!IsReadBackConfigSupported(bitmap_config)) { |
| callback.Run(false, SkBitmap()); |
| return; |
| } |
| @@ -646,18 +643,6 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |
| callback.Run(false, SkBitmap()); |
| return; |
| } |
| - ImageTransportFactoryAndroid* factory = |
| - ImageTransportFactoryAndroid::GetInstance(); |
| - GLHelper* gl_helper = factory->GetGLHelper(); |
| - if (!gl_helper) |
| - return; |
| - bool check_rgb565_support = gl_helper->CanUseRgb565Readback(); |
| - if ((bitmap_config == SkBitmap::kRGB_565_Config) && |
| - !check_rgb565_support) { |
| - LOG(ERROR) << "Readbackformat rgb565 not supported"; |
| - callback.Run(false, SkBitmap()); |
| - return; |
| - } |
| const gfx::Display& display = |
| gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
| float device_scale_factor = display.device_scale_factor(); |
| @@ -1407,22 +1392,29 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
| base::ScopedClosureRunner scoped_callback_runner( |
| base::Bind(callback, false, SkBitmap())); |
| - if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) |
| + if (!result->HasTexture() || result->IsEmpty() || result->size().IsEmpty()) { |
| + callback.Run(false, SkBitmap()); |
|
no sievers
2014/02/18 19:35:44
You don't need to change all of these. That's what
sivag
2014/02/19 15:49:04
Done.
|
| return; |
| + } |
| scoped_ptr<SkBitmap> bitmap(new SkBitmap); |
| bitmap->setConfig(bitmap_config, |
| dst_size_in_pixel.width(), |
| dst_size_in_pixel.height(), |
| 0, kOpaque_SkAlphaType); |
| - if (!bitmap->allocPixels()) |
| + if (!bitmap->allocPixels()) { |
| + callback.Run(false, SkBitmap()); |
| return; |
| + } |
| ImageTransportFactoryAndroid* factory = |
| ImageTransportFactoryAndroid::GetInstance(); |
| GLHelper* gl_helper = factory->GetGLHelper(); |
| - if (!gl_helper) |
| + |
| + if (!gl_helper) { |
| + callback.Run(false, SkBitmap()); |
| return; |
| + } |
| scoped_ptr<SkAutoLockPixels> bitmap_pixels_lock( |
| new SkAutoLockPixels(*bitmap)); |
| @@ -1432,8 +1424,10 @@ void RenderWidgetHostViewAndroid::PrepareTextureCopyOutputResult( |
| scoped_ptr<cc::SingleReleaseCallback> release_callback; |
| result->TakeTexture(&texture_mailbox, &release_callback); |
| DCHECK(texture_mailbox.IsTexture()); |
| - if (!texture_mailbox.IsTexture()) |
| + if (!texture_mailbox.IsTexture()) { |
| + callback.Run(false, SkBitmap()); |
| return; |
| + } |
| ignore_result(scoped_callback_runner.Release()); |
| @@ -1487,6 +1481,16 @@ void RenderWidgetHostViewAndroid::PrepareBitmapCopyOutputResult( |
| callback.Run(true, *source); |
| } |
| +bool RenderWidgetHostViewAndroid::IsReadBackConfigSupported( |
| + const SkBitmap::Config& bitmap_config) { |
| + ImageTransportFactoryAndroid* factory = |
| + ImageTransportFactoryAndroid::GetInstance(); |
| + GLHelper* gl_helper = factory->GetGLHelper(); |
| + if (!gl_helper) |
| + return false; |
| + return gl_helper->IsReadBackConfigSupported(bitmap_config); |
| +} |
| + |
| // static |
| void RenderWidgetHostViewPort::GetDefaultScreenInfo( |
| blink::WebScreenInfo* results) { |