| Index: content/browser/compositor/delegated_frame_host.cc
|
| diff --git a/content/browser/compositor/delegated_frame_host.cc b/content/browser/compositor/delegated_frame_host.cc
|
| index f45e7f40c1c3028defaba8746b6d81954ee7bd0f..9c653bd617b09ef4c5905387a0974e806e368fde 100644
|
| --- a/content/browser/compositor/delegated_frame_host.cc
|
| +++ b/content/browser/compositor/delegated_frame_host.cc
|
| @@ -128,11 +128,11 @@ void DelegatedFrameHost::CopyFromCompositingSurface(
|
| const gfx::Rect& src_subrect,
|
| const gfx::Size& output_size,
|
| ReadbackRequestCallback& callback,
|
| - const SkColorType color_type) {
|
| + const SkColorType preferred_color_type) {
|
| // Only ARGB888 and RGB565 supported as of now.
|
| - bool format_support = ((color_type == kAlpha_8_SkColorType) ||
|
| - (color_type == kRGB_565_SkColorType) ||
|
| - (color_type == kN32_SkColorType));
|
| + bool format_support = ((preferred_color_type == kAlpha_8_SkColorType) ||
|
| + (preferred_color_type == kRGB_565_SkColorType) ||
|
| + (preferred_color_type == kN32_SkColorType));
|
| DCHECK(format_support);
|
| if (!CanCopyToBitmap()) {
|
| callback.Run(SkBitmap(), content::READBACK_SURFACE_UNAVAILABLE);
|
| @@ -140,11 +140,9 @@ void DelegatedFrameHost::CopyFromCompositingSurface(
|
| }
|
|
|
| scoped_ptr<cc::CopyOutputRequest> request =
|
| - cc::CopyOutputRequest::CreateRequest(base::Bind(
|
| - &DelegatedFrameHost::CopyFromCompositingSurfaceHasResult,
|
| - output_size,
|
| - color_type,
|
| - callback));
|
| + cc::CopyOutputRequest::CreateRequest(
|
| + base::Bind(&DelegatedFrameHost::CopyFromCompositingSurfaceHasResult,
|
| + output_size, preferred_color_type, callback));
|
| if (!src_subrect.IsEmpty())
|
| request->set_area(src_subrect);
|
| RequestCopyOfOutput(request.Pass());
|
| @@ -582,15 +580,17 @@ void DelegatedFrameHost::PrepareTextureCopyOutputResult(
|
| base::ScopedClosureRunner scoped_callback_runner(
|
| base::Bind(callback, SkBitmap(), content::READBACK_FAILED));
|
|
|
| - // TODO(sikugu): We should be able to validate the format here using
|
| + // TODO(siva.gunturi): We should be able to validate the format here using
|
| // GLHelper::IsReadbackConfigSupported before we processs the result.
|
| - // See crbug.com/415682.
|
| + // See crbug.com/415682 and crbug.com/415131.
|
| scoped_ptr<SkBitmap> bitmap(new SkBitmap);
|
| - if (!bitmap->tryAllocPixels(SkImageInfo::Make(dst_size_in_pixel.width(),
|
| - dst_size_in_pixel.height(),
|
| - color_type,
|
| - kOpaque_SkAlphaType)))
|
| + if (!bitmap->tryAllocPixels(SkImageInfo::Make(
|
| + dst_size_in_pixel.width(), dst_size_in_pixel.height(), color_type,
|
| + kOpaque_SkAlphaType))) {
|
| + scoped_callback_runner.Reset(base::Bind(
|
| + callback, SkBitmap(), content::READBACK_BITMAP_ALLOCATION_FAILURE));
|
| return;
|
| + }
|
|
|
| ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
|
| GLHelper* gl_helper = factory->GetGLHelper();
|
| @@ -627,13 +627,13 @@ void DelegatedFrameHost::PrepareTextureCopyOutputResult(
|
| // static
|
| void DelegatedFrameHost::PrepareBitmapCopyOutputResult(
|
| const gfx::Size& dst_size_in_pixel,
|
| - const SkColorType color_type,
|
| + const SkColorType preferred_color_type,
|
| ReadbackRequestCallback& callback,
|
| scoped_ptr<cc::CopyOutputResult> result) {
|
| + SkColorType color_type = preferred_color_type;
|
| if (color_type != kN32_SkColorType && color_type != kAlpha_8_SkColorType) {
|
| - NOTIMPLEMENTED();
|
| - callback.Run(SkBitmap(), READBACK_FORMAT_NOT_SUPPORTED);
|
| - return;
|
| + // Switch back to default colortype if format not supported.
|
| + color_type = kN32_SkColorType;
|
| }
|
| DCHECK(result->HasBitmap());
|
| scoped_ptr<SkBitmap> source = result->TakeBitmap();
|
| @@ -663,7 +663,7 @@ void DelegatedFrameHost::PrepareBitmapCopyOutputResult(
|
| bool success = grayscale_bitmap.tryAllocPixels(
|
| SkImageInfo::MakeA8(scaled_bitmap.width(), scaled_bitmap.height()));
|
| if (!success) {
|
| - callback.Run(SkBitmap(), content::READBACK_MEMORY_ALLOCATION_FAILURE);
|
| + callback.Run(SkBitmap(), content::READBACK_BITMAP_ALLOCATION_FAILURE);
|
| return;
|
| }
|
| SkCanvas canvas(grayscale_bitmap);
|
|
|