| Index: cc/playback/display_item_list.cc
|
| diff --git a/cc/playback/display_item_list.cc b/cc/playback/display_item_list.cc
|
| index 3ad738ab7dbd0b554e659ac0ff21f2ed9583040a..511e5bbf149e3ee7d5b75145e7691a997938abe7 100644
|
| --- a/cc/playback/display_item_list.cc
|
| +++ b/cc/playback/display_item_list.cc
|
| @@ -119,17 +119,31 @@ void DisplayItemList::Raster(SkCanvas* canvas,
|
| SkPicture::AbortCallback* callback,
|
| const gfx::Rect& canvas_target_playback_rect,
|
| float contents_scale) const {
|
| + canvas->save();
|
| +
|
| + if (!canvas_target_playback_rect.IsEmpty()) {
|
| + // canvas_target_playback_rect is specified in device space. We can't
|
| + // use clipRect because canvas CTM will be applied on it. Use clipRegion
|
| + // instead because it ignores canvas CTM.
|
| + SkRegion device_clip;
|
| + device_clip.setRect(gfx::RectToSkIRect(canvas_target_playback_rect));
|
| + canvas->clipRegion(device_clip);
|
| + }
|
| +
|
| + canvas->scale(contents_scale, contents_scale);
|
| + Raster(canvas, callback);
|
| + canvas->restore();
|
| +}
|
| +
|
| +void DisplayItemList::Raster(SkCanvas* canvas,
|
| + SkPicture::AbortCallback* callback) const {
|
| if (!settings_.use_cached_picture) {
|
| - canvas->save();
|
| - canvas->scale(contents_scale, contents_scale);
|
| for (const auto& item : items_)
|
| - item.Raster(canvas, canvas_target_playback_rect, callback);
|
| - canvas->restore();
|
| + item.Raster(canvas, callback);
|
| } else {
|
| DCHECK(picture_);
|
|
|
| canvas->save();
|
| - canvas->scale(contents_scale, contents_scale);
|
| canvas->translate(layer_rect_.x(), layer_rect_.y());
|
| if (callback) {
|
| // If we have a callback, we need to call |draw()|, |drawPicture()|
|
| @@ -148,7 +162,7 @@ void DisplayItemList::Raster(SkCanvas* canvas,
|
| void DisplayItemList::ProcessAppendedItem(const DisplayItem* item) {
|
| if (settings_.use_cached_picture) {
|
| DCHECK(recorder_);
|
| - item->Raster(recorder_->getRecordingCanvas(), gfx::Rect(), nullptr);
|
| + item->Raster(recorder_->getRecordingCanvas(), nullptr);
|
| }
|
| if (!retain_individual_display_items_) {
|
| items_.Clear();
|
| @@ -159,7 +173,7 @@ void DisplayItemList::RasterIntoCanvas(const DisplayItem& item) {
|
| DCHECK(recorder_);
|
| DCHECK(!retain_individual_display_items_);
|
|
|
| - item.Raster(recorder_->getRecordingCanvas(), gfx::Rect(), nullptr);
|
| + item.Raster(recorder_->getRecordingCanvas(), nullptr);
|
| }
|
|
|
| bool DisplayItemList::RetainsIndividualDisplayItems() const {
|
|
|