| Index: cc/raster/raster_buffer_provider.cc
|
| diff --git a/cc/raster/raster_buffer_provider.cc b/cc/raster/raster_buffer_provider.cc
|
| index 100de97b5fea57fa4253b29114d2de94949b4e51..d0d6ae415bcb5795df99a93b4624d0bc3c9ec0e1 100644
|
| --- a/cc/raster/raster_buffer_provider.cc
|
| +++ b/cc/raster/raster_buffer_provider.cc
|
| @@ -52,6 +52,7 @@ void RasterBufferProvider::PlaybackToMemory(
|
| const gfx::Rect& canvas_bitmap_rect,
|
| const gfx::Rect& canvas_playback_rect,
|
| float scale,
|
| + const gfx::Vector2dF& translation,
|
| const RasterSource::PlaybackSettings& playback_settings) {
|
| TRACE_EVENT0("disabled-by-default-cc.debug",
|
| "RasterBufferProvider::PlaybackToMemory");
|
| @@ -78,19 +79,25 @@ void RasterBufferProvider::PlaybackToMemory(
|
| case BGRA_8888: {
|
| sk_sp<SkSurface> surface =
|
| SkSurface::MakeRasterDirect(info, memory, stride, &surface_props);
|
| - raster_source->PlaybackToCanvas(surface->getCanvas(), canvas_bitmap_rect,
|
| - canvas_playback_rect, scale,
|
| - playback_settings);
|
| + SkCanvas* canvas = surface->getCanvas();
|
| + canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y());
|
| + canvas->clipRect(gfx::RectToSkRect(canvas_playback_rect));
|
| + canvas->translate(translation.x(), translation.y());
|
| + canvas->scale(scale, scale);
|
| + raster_source->PlaybackToCanvas(surface->getCanvas(), playback_settings);
|
| return;
|
| }
|
| case RGBA_4444:
|
| case ETC1: {
|
| sk_sp<SkSurface> surface = SkSurface::MakeRaster(info, &surface_props);
|
| + SkCanvas* canvas = surface->getCanvas();
|
| + canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y());
|
| // TODO(reveman): Improve partial raster support by reducing the size of
|
| - // playback rect passed to PlaybackToCanvas. crbug.com/519070
|
| - raster_source->PlaybackToCanvas(surface->getCanvas(), canvas_bitmap_rect,
|
| - canvas_bitmap_rect, scale,
|
| - playback_settings);
|
| + // the clip rect here. crbug.com/519070
|
| + canvas->clipRect(gfx::RectToSkRect(canvas_bitmap_rect));
|
| + canvas->translate(translation.x(), translation.y());
|
| + canvas->scale(scale, scale);
|
| + raster_source->PlaybackToCanvas(surface->getCanvas(), playback_settings);
|
|
|
| if (format == ETC1) {
|
| TRACE_EVENT0("cc",
|
|
|