OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 <algorithm> | 5 #include <algorithm> |
6 #include <limits> | 6 #include <limits> |
7 | 7 |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "cc/base/region.h" | 9 #include "cc/base/region.h" |
10 #include "cc/debug/debug_colors.h" | 10 #include "cc/debug/debug_colors.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 } | 63 } |
64 | 64 |
65 PicturePileImpl* PicturePileImpl::GetCloneForDrawingOnThread( | 65 PicturePileImpl* PicturePileImpl::GetCloneForDrawingOnThread( |
66 unsigned thread_index) const { | 66 unsigned thread_index) const { |
67 CHECK_GT(clones_for_drawing_.clones_.size(), thread_index); | 67 CHECK_GT(clones_for_drawing_.clones_.size(), thread_index); |
68 return clones_for_drawing_.clones_[thread_index].get(); | 68 return clones_for_drawing_.clones_[thread_index].get(); |
69 } | 69 } |
70 | 70 |
71 void PicturePileImpl::RasterDirect( | 71 void PicturePileImpl::RasterDirect( |
72 SkCanvas* canvas, | 72 SkCanvas* canvas, |
73 gfx::Rect canvas_rect, | 73 const gfx::Rect& canvas_rect, |
74 float contents_scale, | 74 float contents_scale, |
75 RenderingStatsInstrumentation* rendering_stats_instrumentation) { | 75 RenderingStatsInstrumentation* rendering_stats_instrumentation) { |
76 RasterCommon(canvas, | 76 RasterCommon(canvas, |
77 NULL, | 77 NULL, |
78 canvas_rect, | 78 canvas_rect, |
79 contents_scale, | 79 contents_scale, |
80 rendering_stats_instrumentation, | 80 rendering_stats_instrumentation, |
81 false); | 81 false); |
82 } | 82 } |
83 | 83 |
84 void PicturePileImpl::RasterForAnalysis( | 84 void PicturePileImpl::RasterForAnalysis( |
85 skia::AnalysisCanvas* canvas, | 85 skia::AnalysisCanvas* canvas, |
86 gfx::Rect canvas_rect, | 86 const gfx::Rect& canvas_rect, |
87 float contents_scale, | 87 float contents_scale, |
88 RenderingStatsInstrumentation* stats_instrumentation) { | 88 RenderingStatsInstrumentation* stats_instrumentation) { |
89 RasterCommon( | 89 RasterCommon( |
90 canvas, canvas, canvas_rect, contents_scale, stats_instrumentation, true); | 90 canvas, canvas, canvas_rect, contents_scale, stats_instrumentation, true); |
91 } | 91 } |
92 | 92 |
93 void PicturePileImpl::RasterToBitmap( | 93 void PicturePileImpl::RasterToBitmap( |
94 SkCanvas* canvas, | 94 SkCanvas* canvas, |
95 gfx::Rect canvas_rect, | 95 const gfx::Rect& canvas_rect, |
96 float contents_scale, | 96 float contents_scale, |
97 RenderingStatsInstrumentation* rendering_stats_instrumentation) { | 97 RenderingStatsInstrumentation* rendering_stats_instrumentation) { |
98 if (clear_canvas_with_debug_color_) { | 98 if (clear_canvas_with_debug_color_) { |
99 // Any non-painted areas will be left in this color. | 99 // Any non-painted areas will be left in this color. |
100 canvas->clear(DebugColors::NonPaintedFillColor()); | 100 canvas->clear(DebugColors::NonPaintedFillColor()); |
101 } | 101 } |
102 | 102 |
103 // If this picture has opaque contents, it is guaranteeing that it will | 103 // If this picture has opaque contents, it is guaranteeing that it will |
104 // draw an opaque rect the size of the layer. If it is not, then we must | 104 // draw an opaque rect the size of the layer. If it is not, then we must |
105 // clear this canvas ourselves. | 105 // clear this canvas ourselves. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 } | 138 } |
139 | 139 |
140 RasterCommon(canvas, | 140 RasterCommon(canvas, |
141 NULL, | 141 NULL, |
142 canvas_rect, | 142 canvas_rect, |
143 contents_scale, | 143 contents_scale, |
144 rendering_stats_instrumentation, | 144 rendering_stats_instrumentation, |
145 false); | 145 false); |
146 } | 146 } |
147 | 147 |
148 void PicturePileImpl::CoalesceRasters(gfx::Rect canvas_rect, | 148 void PicturePileImpl::CoalesceRasters(const gfx::Rect& canvas_rect, |
149 gfx::Rect content_rect, | 149 const gfx::Rect& content_rect, |
150 float contents_scale, | 150 float contents_scale, |
151 PictureRegionMap* results) { | 151 PictureRegionMap* results) { |
152 DCHECK(results); | 152 DCHECK(results); |
153 // Rasterize the collection of relevant picture piles. | 153 // Rasterize the collection of relevant picture piles. |
154 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect( | 154 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect( |
155 content_rect, 1.f / contents_scale); | 155 content_rect, 1.f / contents_scale); |
156 | 156 |
157 // Coalesce rasters of the same picture into different rects: | 157 // Coalesce rasters of the same picture into different rects: |
158 // - Compute the clip of each of the pile chunks, | 158 // - Compute the clip of each of the pile chunks, |
159 // - Subtract it from the canvas rect to get difference region | 159 // - Subtract it from the canvas rect to get difference region |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
200 } | 200 } |
201 | 201 |
202 Region& region = it->second; | 202 Region& region = it->second; |
203 region.Subtract(content_clip); | 203 region.Subtract(content_clip); |
204 } | 204 } |
205 } | 205 } |
206 | 206 |
207 void PicturePileImpl::RasterCommon( | 207 void PicturePileImpl::RasterCommon( |
208 SkCanvas* canvas, | 208 SkCanvas* canvas, |
209 SkDrawPictureCallback* callback, | 209 SkDrawPictureCallback* callback, |
210 gfx::Rect canvas_rect, | 210 const gfx::Rect& canvas_rect, |
211 float contents_scale, | 211 float contents_scale, |
212 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 212 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
213 bool is_analysis) { | 213 bool is_analysis) { |
214 DCHECK(contents_scale >= min_contents_scale_); | 214 DCHECK(contents_scale >= min_contents_scale_); |
215 | 215 |
216 canvas->translate(-canvas_rect.x(), -canvas_rect.y()); | 216 canvas->translate(-canvas_rect.x(), -canvas_rect.y()); |
217 gfx::SizeF total_content_size = gfx::ScaleSize(tiling_.total_size(), | 217 gfx::SizeF total_content_size = gfx::ScaleSize(tiling_.total_size(), |
218 contents_scale); | 218 contents_scale); |
219 gfx::Rect total_content_rect(gfx::ToCeiledSize(total_content_size)); | 219 gfx::Rect total_content_rect(gfx::ToCeiledSize(total_content_size)); |
220 gfx::Rect content_rect = total_content_rect; | 220 gfx::Rect content_rect = total_content_rect; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 layer_rect.height(), | 302 layer_rect.height(), |
303 SkPicture::kUsePathBoundsForClip_RecordingFlag); | 303 SkPicture::kUsePathBoundsForClip_RecordingFlag); |
304 | 304 |
305 RasterToBitmap(canvas, layer_rect, 1.0, NULL); | 305 RasterToBitmap(canvas, layer_rect, 1.0, NULL); |
306 picture->endRecording(); | 306 picture->endRecording(); |
307 | 307 |
308 return picture; | 308 return picture; |
309 } | 309 } |
310 | 310 |
311 void PicturePileImpl::AnalyzeInRect( | 311 void PicturePileImpl::AnalyzeInRect( |
312 gfx::Rect content_rect, | 312 const gfx::Rect& content_rect, |
313 float contents_scale, | 313 float contents_scale, |
314 PicturePileImpl::Analysis* analysis) { | 314 PicturePileImpl::Analysis* analysis) { |
315 AnalyzeInRect(content_rect, contents_scale, analysis, NULL); | 315 AnalyzeInRect(content_rect, contents_scale, analysis, NULL); |
316 } | 316 } |
317 | 317 |
318 void PicturePileImpl::AnalyzeInRect( | 318 void PicturePileImpl::AnalyzeInRect( |
319 gfx::Rect content_rect, | 319 const gfx::Rect& content_rect, |
320 float contents_scale, | 320 float contents_scale, |
321 PicturePileImpl::Analysis* analysis, | 321 PicturePileImpl::Analysis* analysis, |
322 RenderingStatsInstrumentation* stats_instrumentation) { | 322 RenderingStatsInstrumentation* stats_instrumentation) { |
323 DCHECK(analysis); | 323 DCHECK(analysis); |
324 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect"); | 324 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect"); |
325 | 325 |
326 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect( | 326 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect( |
327 content_rect, 1.0f / contents_scale); | 327 content_rect, 1.0f / contents_scale); |
328 | 328 |
329 layer_rect.Intersect(gfx::Rect(tiling_.total_size())); | 329 layer_rect.Intersect(gfx::Rect(tiling_.total_size())); |
(...skipping 13 matching lines...) Expand all Loading... |
343 | 343 |
344 PicturePileImpl::Analysis::Analysis() | 344 PicturePileImpl::Analysis::Analysis() |
345 : is_solid_color(false), | 345 : is_solid_color(false), |
346 has_text(false) { | 346 has_text(false) { |
347 } | 347 } |
348 | 348 |
349 PicturePileImpl::Analysis::~Analysis() { | 349 PicturePileImpl::Analysis::~Analysis() { |
350 } | 350 } |
351 | 351 |
352 PicturePileImpl::PixelRefIterator::PixelRefIterator( | 352 PicturePileImpl::PixelRefIterator::PixelRefIterator( |
353 gfx::Rect content_rect, | 353 const gfx::Rect& content_rect, |
354 float contents_scale, | 354 float contents_scale, |
355 const PicturePileImpl* picture_pile) | 355 const PicturePileImpl* picture_pile) |
356 : picture_pile_(picture_pile), | 356 : picture_pile_(picture_pile), |
357 layer_rect_(gfx::ScaleToEnclosingRect( | 357 layer_rect_(gfx::ScaleToEnclosingRect( |
358 content_rect, 1.f / contents_scale)), | 358 content_rect, 1.f / contents_scale)), |
359 tile_iterator_(&picture_pile_->tiling_, layer_rect_) { | 359 tile_iterator_(&picture_pile_->tiling_, layer_rect_) { |
360 // Early out if there isn't a single tile. | 360 // Early out if there isn't a single tile. |
361 if (!tile_iterator_) | 361 if (!tile_iterator_) |
362 return; | 362 return; |
363 | 363 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 ++it) { | 405 ++it) { |
406 Picture* picture = it->second.GetPicture(); | 406 Picture* picture = it->second.GetPicture(); |
407 if (picture && (processed_pictures.count(picture) == 0)) { | 407 if (picture && (processed_pictures.count(picture) == 0)) { |
408 picture->EmitTraceSnapshot(); | 408 picture->EmitTraceSnapshot(); |
409 processed_pictures.insert(picture); | 409 processed_pictures.insert(picture); |
410 } | 410 } |
411 } | 411 } |
412 } | 412 } |
413 | 413 |
414 } // namespace cc | 414 } // namespace cc |
OLD | NEW |