| 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()));
|
|
|