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", |