| Index: cc/raster/gpu_raster_buffer_provider.cc
|
| diff --git a/cc/raster/gpu_raster_buffer_provider.cc b/cc/raster/gpu_raster_buffer_provider.cc
|
| index 85a77c201b3e62858684bcaae2729df63f4e35dd..841158fbbcc2dfeb078695c50af0bc0e1def708e 100644
|
| --- a/cc/raster/gpu_raster_buffer_provider.cc
|
| +++ b/cc/raster/gpu_raster_buffer_provider.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "cc/base/histograms.h"
|
| +#include "cc/base/scale_translate2d.h"
|
| #include "cc/playback/image_hijack_canvas.h"
|
| #include "cc/playback/raster_source.h"
|
| #include "cc/raster/scoped_gpu_raster.h"
|
| @@ -32,7 +33,7 @@ static sk_sp<SkPicture> PlaybackToPicture(
|
| const gfx::Size& resource_size,
|
| const gfx::Rect& raster_full_rect,
|
| const gfx::Rect& raster_dirty_rect,
|
| - float scale,
|
| + const ScaleTranslate2d& transform,
|
| const RasterSource::PlaybackSettings& playback_settings) {
|
| // GPU raster doesn't do low res tiles, so should always include images.
|
| DCHECK(!playback_settings.skip_images);
|
| @@ -63,6 +64,9 @@ static sk_sp<SkPicture> PlaybackToPicture(
|
| sk_sp<SkCanvas> canvas = sk_ref_sp(
|
| recorder.beginRecording(resource_size.width(), resource_size.height()));
|
| canvas->save();
|
| + canvas->translate(-raster_full_rect.x(), -raster_full_rect.y());
|
| + canvas->clipRect(gfx::RectToSkRect(playback_rect));
|
| + transform.ApplyToCanvas(canvas.get());
|
|
|
| // The GPU image decode controller assumes that Skia is done with an image
|
| // when playback is complete. However, in this case, where we play back to a
|
| @@ -74,7 +78,7 @@ static sk_sp<SkPicture> PlaybackToPicture(
|
| RasterSource::PlaybackSettings settings = playback_settings;
|
| settings.use_image_hijack_canvas = false;
|
| raster_source->PlaybackToCanvas(canvas.get(), raster_full_rect, playback_rect,
|
| - scale, settings);
|
| + transform, settings);
|
| canvas->restore();
|
| return recorder.finishRecordingAsPicture();
|
| }
|
| @@ -146,13 +150,13 @@ void GpuRasterBufferProvider::RasterBufferImpl::Playback(
|
| const gfx::Rect& raster_full_rect,
|
| const gfx::Rect& raster_dirty_rect,
|
| uint64_t new_content_id,
|
| - float scale,
|
| + const ScaleTranslate2d& transform,
|
| const RasterSource::PlaybackSettings& playback_settings) {
|
| TRACE_EVENT0("cc", "GpuRasterBuffer::Playback");
|
| client_->PlaybackOnWorkerThread(&lock_, sync_token_,
|
| resource_has_previous_content_, raster_source,
|
| raster_full_rect, raster_dirty_rect,
|
| - new_content_id, scale, playback_settings);
|
| + new_content_id, transform, playback_settings);
|
| }
|
|
|
| GpuRasterBufferProvider::GpuRasterBufferProvider(
|
| @@ -244,7 +248,7 @@ void GpuRasterBufferProvider::PlaybackOnWorkerThread(
|
| const gfx::Rect& raster_full_rect,
|
| const gfx::Rect& raster_dirty_rect,
|
| uint64_t new_content_id,
|
| - float scale,
|
| + const ScaleTranslate2d& transform,
|
| const RasterSource::PlaybackSettings& playback_settings) {
|
| ContextProvider::ScopedContextLock scoped_context(worker_context_provider_);
|
| gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL();
|
| @@ -261,7 +265,7 @@ void GpuRasterBufferProvider::PlaybackOnWorkerThread(
|
|
|
| sk_sp<SkPicture> picture = PlaybackToPicture(
|
| raster_source, resource_has_previous_content, resource_lock->size(),
|
| - raster_full_rect, raster_dirty_rect, scale, playback_settings);
|
| + raster_full_rect, raster_dirty_rect, transform, playback_settings);
|
|
|
| // Turn on distance fields for layers that have ever animated.
|
| bool use_distance_field_text =
|
|
|