Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: cc/playback/raster_source.cc

Issue 2640983002: Rename paint data structures (Closed)
Patch Set: Clean up comments, fix mac build Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/playback/raster_source.h" 5 #include "cc/playback/raster_source.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
11 #include "cc/base/region.h" 11 #include "cc/base/region.h"
12 #include "cc/debug/debug_colors.h" 12 #include "cc/debug/debug_colors.h"
13 #include "cc/paint/paint_recorder.h"
13 #include "cc/playback/display_item_list.h" 14 #include "cc/playback/display_item_list.h"
14 #include "cc/playback/image_hijack_canvas.h" 15 #include "cc/playback/image_hijack_canvas.h"
15 #include "cc/playback/skip_image_canvas.h" 16 #include "cc/playback/skip_image_canvas.h"
16 #include "skia/ext/analysis_canvas.h" 17 #include "skia/ext/analysis_canvas.h"
17 #include "third_party/skia/include/core/SkCanvas.h"
18 #include "third_party/skia/include/core/SkClipStack.h" 18 #include "third_party/skia/include/core/SkClipStack.h"
danakj 2017/01/20 23:34:13 is used?
19 #include "third_party/skia/include/core/SkPictureRecorder.h"
20 #include "ui/gfx/geometry/rect_conversions.h" 19 #include "ui/gfx/geometry/rect_conversions.h"
21 20
22 namespace cc { 21 namespace cc {
23 22
24 scoped_refptr<RasterSource> RasterSource::CreateFromRecordingSource( 23 scoped_refptr<RasterSource> RasterSource::CreateFromRecordingSource(
25 const RecordingSource* other, 24 const RecordingSource* other,
26 bool can_use_lcd_text) { 25 bool can_use_lcd_text) {
27 return make_scoped_refptr(new RasterSource(other, can_use_lcd_text)); 26 return make_scoped_refptr(new RasterSource(other, can_use_lcd_text));
28 } 27 }
29 28
(...skipping 23 matching lines...) Expand all
53 recorded_viewport_(other->recorded_viewport_), 52 recorded_viewport_(other->recorded_viewport_),
54 size_(other->size_), 53 size_(other->size_),
55 clear_canvas_with_debug_color_(other->clear_canvas_with_debug_color_), 54 clear_canvas_with_debug_color_(other->clear_canvas_with_debug_color_),
56 slow_down_raster_scale_factor_for_debug_( 55 slow_down_raster_scale_factor_for_debug_(
57 other->slow_down_raster_scale_factor_for_debug_), 56 other->slow_down_raster_scale_factor_for_debug_),
58 image_decode_cache_(other->image_decode_cache_) {} 57 image_decode_cache_(other->image_decode_cache_) {}
59 58
60 RasterSource::~RasterSource() { 59 RasterSource::~RasterSource() {
61 } 60 }
62 61
63 void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas, 62 void RasterSource::PlaybackToCanvas(PaintCanvas* raster_canvas,
64 const gfx::Rect& canvas_bitmap_rect, 63 const gfx::Rect& canvas_bitmap_rect,
65 const gfx::Rect& canvas_playback_rect, 64 const gfx::Rect& canvas_playback_rect,
66 float raster_scale, 65 float raster_scale,
67 const PlaybackSettings& settings) const { 66 const PlaybackSettings& settings) const {
68 SkIRect raster_bounds = gfx::RectToSkIRect(canvas_bitmap_rect); 67 SkIRect raster_bounds = gfx::RectToSkIRect(canvas_bitmap_rect);
69 if (!canvas_playback_rect.IsEmpty() && 68 if (!canvas_playback_rect.IsEmpty() &&
70 !raster_bounds.intersect(gfx::RectToSkIRect(canvas_playback_rect))) 69 !raster_bounds.intersect(gfx::RectToSkIRect(canvas_playback_rect)))
71 return; 70 return;
72 // Treat all subnormal values as zero for performance. 71 // Treat all subnormal values as zero for performance.
73 ScopedSubnormalFloatDisabler disabler; 72 ScopedSubnormalFloatDisabler disabler;
74 73
75 raster_canvas->save(); 74 raster_canvas->save();
76 raster_canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y()); 75 raster_canvas->translate(-canvas_bitmap_rect.x(), -canvas_bitmap_rect.y());
77 raster_canvas->clipRect(SkRect::MakeFromIRect(raster_bounds)); 76 raster_canvas->clipRect(SkRect::MakeFromIRect(raster_bounds));
78 raster_canvas->scale(raster_scale, raster_scale); 77 raster_canvas->scale(raster_scale, raster_scale);
79 PlaybackToCanvas(raster_canvas, settings); 78 PlaybackToCanvas(raster_canvas, settings);
80 raster_canvas->restore(); 79 raster_canvas->restore();
81 } 80 }
82 81
83 void RasterSource::PlaybackToCanvas(SkCanvas* raster_canvas, 82 void RasterSource::PlaybackToCanvas(PaintCanvas* raster_canvas,
84 const PlaybackSettings& settings) const { 83 const PlaybackSettings& settings) const {
85 if (!settings.playback_to_shared_canvas) 84 if (!settings.playback_to_shared_canvas)
86 PrepareForPlaybackToCanvas(raster_canvas); 85 PrepareForPlaybackToCanvas(raster_canvas);
87 86
88 if (settings.skip_images) { 87 if (settings.skip_images) {
89 SkipImageCanvas canvas(raster_canvas); 88 SkipImageCanvas canvas(raster_canvas);
90 RasterCommon(&canvas, nullptr); 89 RasterCommon(&canvas, nullptr);
91 } else if (settings.use_image_hijack_canvas) { 90 } else if (settings.use_image_hijack_canvas) {
92 const SkImageInfo& info = raster_canvas->imageInfo(); 91 const SkImageInfo& info = raster_canvas->imageInfo();
93 92
94 ImageHijackCanvas canvas(info.width(), info.height(), image_decode_cache_); 93 ImageHijackCanvas canvas(info.width(), info.height(), image_decode_cache_);
95 // Before adding the canvas, make sure that the ImageHijackCanvas is aware 94 // Before adding the canvas, make sure that the ImageHijackCanvas is aware
96 // of the current transform and clip, which may affect the clip bounds. 95 // of the current transform and clip, which may affect the clip bounds.
97 // Since we query the clip bounds of the current canvas to get the list of 96 // Since we query the clip bounds of the current canvas to get the list of
98 // draw commands to process, this is important to produce correct content. 97 // draw commands to process, this is important to produce correct content.
99 SkIRect raster_bounds; 98 SkIRect raster_bounds;
100 raster_canvas->getClipDeviceBounds(&raster_bounds); 99 raster_canvas->getClipDeviceBounds(&raster_bounds);
101 canvas.clipRect(SkRect::MakeFromIRect(raster_bounds)); 100 canvas.clipRect(SkRect::MakeFromIRect(raster_bounds));
102 canvas.setMatrix(raster_canvas->getTotalMatrix()); 101 canvas.setMatrix(raster_canvas->getTotalMatrix());
103 canvas.addCanvas(raster_canvas); 102 canvas.addCanvas(raster_canvas);
104 103
105 RasterCommon(&canvas, nullptr); 104 RasterCommon(&canvas, nullptr);
106 } else { 105 } else {
107 RasterCommon(raster_canvas, nullptr); 106 RasterCommon(raster_canvas, nullptr);
108 } 107 }
109 } 108 }
110 109
111 namespace { 110 namespace {
112 111
113 bool CanvasIsUnclipped(const SkCanvas* canvas) { 112 bool CanvasIsUnclipped(const PaintCanvas* canvas) {
114 if (!canvas->isClipRect()) 113 if (!canvas->isClipRect())
115 return false; 114 return false;
116 115
117 SkIRect bounds; 116 SkIRect bounds;
118 if (!canvas->getClipDeviceBounds(&bounds)) 117 if (!canvas->getClipDeviceBounds(&bounds))
119 return false; 118 return false;
120 119
121 SkISize size = canvas->getBaseLayerSize(); 120 SkISize size = canvas->getBaseLayerSize();
122 return bounds.contains(0, 0, size.width(), size.height()); 121 return bounds.contains(0, 0, size.width(), size.height());
123 } 122 }
124 123
125 } // namespace 124 } // namespace
126 125
127 void RasterSource::PrepareForPlaybackToCanvas(SkCanvas* canvas) const { 126 void RasterSource::PrepareForPlaybackToCanvas(PaintCanvas* canvas) const {
128 // TODO(hendrikw): See if we can split this up into separate functions. 127 // TODO(hendrikw): See if we can split this up into separate functions.
129 128
130 if (CanvasIsUnclipped(canvas)) 129 if (CanvasIsUnclipped(canvas))
131 canvas->discard(); 130 canvas->discard();
132 131
133 // If this raster source has opaque contents, it is guaranteeing that it will 132 // If this raster source has opaque contents, it is guaranteeing that it will
134 // draw an opaque rect the size of the layer. If it is not, then we must 133 // draw an opaque rect the size of the layer. If it is not, then we must
135 // clear this canvas ourselves. 134 // clear this canvas ourselves.
136 if (requires_clear_) { 135 if (requires_clear_) {
137 canvas->clear(SK_ColorTRANSPARENT); 136 canvas->clear(SK_ColorTRANSPARENT);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 canvas->save(); 192 canvas->save();
194 // Use clipRegion to bypass CTM because the rects are device rects. 193 // Use clipRegion to bypass CTM because the rects are device rects.
195 SkRegion interest_region; 194 SkRegion interest_region;
196 interest_region.setRect(interest_rect); 195 interest_region.setRect(interest_rect);
197 interest_region.op(opaque_rect, SkRegion::kDifference_Op); 196 interest_region.op(opaque_rect, SkRegion::kDifference_Op);
198 canvas->clipRegion(interest_region); 197 canvas->clipRegion(interest_region);
199 canvas->clear(background_color_); 198 canvas->clear(background_color_);
200 canvas->restore(); 199 canvas->restore();
201 } 200 }
202 201
203 void RasterSource::RasterCommon(SkCanvas* canvas, 202 void RasterSource::RasterCommon(PaintCanvas* canvas,
204 SkPicture::AbortCallback* callback) const { 203 PaintRecord::AbortCallback* callback) const {
205 DCHECK(display_list_.get()); 204 DCHECK(display_list_.get());
206 int repeat_count = std::max(1, slow_down_raster_scale_factor_for_debug_); 205 int repeat_count = std::max(1, slow_down_raster_scale_factor_for_debug_);
207 for (int i = 0; i < repeat_count; ++i) 206 for (int i = 0; i < repeat_count; ++i)
208 display_list_->Raster(canvas, callback); 207 display_list_->Raster(canvas, callback);
209 } 208 }
210 209
211 sk_sp<SkPicture> RasterSource::GetFlattenedPicture() { 210 sk_sp<PaintRecord> RasterSource::GetFlattenedPicture() {
212 TRACE_EVENT0("cc", "RasterSource::GetFlattenedPicture"); 211 TRACE_EVENT0("cc", "RasterSource::GetFlattenedPicture");
213 212
214 SkPictureRecorder recorder; 213 PaintRecorder recorder;
215 SkCanvas* canvas = recorder.beginRecording(size_.width(), size_.height()); 214 PaintCanvas* canvas = recorder.beginRecording(size_.width(), size_.height());
216 if (!size_.IsEmpty()) { 215 if (!size_.IsEmpty()) {
217 PrepareForPlaybackToCanvas(canvas); 216 PrepareForPlaybackToCanvas(canvas);
218 RasterCommon(canvas, nullptr); 217 RasterCommon(canvas, nullptr);
219 } 218 }
220 219
221 return recorder.finishRecordingAsPicture(); 220 return recorder.finishRecordingAsPicture();
222 } 221 }
223 222
224 size_t RasterSource::GetPictureMemoryUsage() const { 223 size_t RasterSource::GetPictureMemoryUsage() const {
225 if (!display_list_) 224 if (!display_list_)
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 bool can_use_lcd_text = false; 305 bool can_use_lcd_text = false;
307 return scoped_refptr<RasterSource>(new RasterSource(this, can_use_lcd_text)); 306 return scoped_refptr<RasterSource>(new RasterSource(this, can_use_lcd_text));
308 } 307 }
309 308
310 RasterSource::PlaybackSettings::PlaybackSettings() 309 RasterSource::PlaybackSettings::PlaybackSettings()
311 : playback_to_shared_canvas(false), 310 : playback_to_shared_canvas(false),
312 skip_images(false), 311 skip_images(false),
313 use_image_hijack_canvas(true) {} 312 use_image_hijack_canvas(true) {}
314 313
315 } // namespace cc 314 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698