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

Side by Side Diff: cc/resources/picture_pile_impl.cc

Issue 389973004: cc: Give TilingData back a Size instead of a Rect. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tilingsize: comments Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « cc/resources/picture_pile_base.cc ('k') | cc/resources/picture_pile_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 106
107 // If this picture has opaque contents, it is guaranteeing that it will 107 // If this picture has opaque contents, it is guaranteeing that it will
108 // draw an opaque rect the size of the layer. If it is not, then we must 108 // draw an opaque rect the size of the layer. If it is not, then we must
109 // clear this canvas ourselves. 109 // clear this canvas ourselves.
110 if (contents_opaque_ || contents_fill_bounds_completely_) { 110 if (contents_opaque_ || contents_fill_bounds_completely_) {
111 // Even if completely covered, for rasterizations that touch the edge of the 111 // Even if completely covered, for rasterizations that touch the edge of the
112 // layer, we also need to raster the background color underneath the last 112 // layer, we also need to raster the background color underneath the last
113 // texel (since the recording won't cover it) and outside the last texel 113 // texel (since the recording won't cover it) and outside the last texel
114 // (due to linear filtering when using this texture). 114 // (due to linear filtering when using this texture).
115 gfx::Rect content_tiling_rect = gfx::ToEnclosingRect( 115 gfx::Rect content_tiling_rect = gfx::ToEnclosingRect(
116 gfx::ScaleRect(tiling_.tiling_rect(), contents_scale)); 116 gfx::ScaleRect(gfx::Rect(tiling_.tiling_size()), contents_scale));
117 117
118 // The final texel of content may only be partially covered by a 118 // The final texel of content may only be partially covered by a
119 // rasterization; this rect represents the content rect that is fully 119 // rasterization; this rect represents the content rect that is fully
120 // covered by content. 120 // covered by content.
121 gfx::Rect deflated_content_tiling_rect = content_tiling_rect; 121 gfx::Rect deflated_content_tiling_rect = content_tiling_rect;
122 deflated_content_tiling_rect.Inset(0, 0, 1, 1); 122 deflated_content_tiling_rect.Inset(0, 0, 1, 1);
123 if (!deflated_content_tiling_rect.Contains(canvas_rect)) { 123 if (!deflated_content_tiling_rect.Contains(canvas_rect)) {
124 if (clear_canvas_with_debug_color_) { 124 if (clear_canvas_with_debug_color_) {
125 // Any non-painted areas outside of the content bounds are left in 125 // Any non-painted areas outside of the content bounds are left in
126 // this color. If this is seen then it means that cc neglected to 126 // this color. If this is seen then it means that cc neglected to
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 SkCanvas* canvas, 262 SkCanvas* canvas,
263 SkDrawPictureCallback* callback, 263 SkDrawPictureCallback* callback,
264 const gfx::Rect& canvas_rect, 264 const gfx::Rect& canvas_rect,
265 float contents_scale, 265 float contents_scale,
266 RenderingStatsInstrumentation* rendering_stats_instrumentation, 266 RenderingStatsInstrumentation* rendering_stats_instrumentation,
267 bool is_analysis) { 267 bool is_analysis) {
268 DCHECK(contents_scale >= min_contents_scale_); 268 DCHECK(contents_scale >= min_contents_scale_);
269 269
270 canvas->translate(-canvas_rect.x(), -canvas_rect.y()); 270 canvas->translate(-canvas_rect.x(), -canvas_rect.y());
271 gfx::Rect content_tiling_rect = gfx::ToEnclosingRect( 271 gfx::Rect content_tiling_rect = gfx::ToEnclosingRect(
272 gfx::ScaleRect(tiling_.tiling_rect(), contents_scale)); 272 gfx::ScaleRect(gfx::Rect(tiling_.tiling_size()), contents_scale));
273 content_tiling_rect.Intersect(canvas_rect); 273 content_tiling_rect.Intersect(canvas_rect);
274 274
275 canvas->clipRect(gfx::RectToSkRect(content_tiling_rect), 275 canvas->clipRect(gfx::RectToSkRect(content_tiling_rect),
276 SkRegion::kIntersect_Op); 276 SkRegion::kIntersect_Op);
277 277
278 PictureRegionMap picture_region_map; 278 PictureRegionMap picture_region_map;
279 CoalesceRasters( 279 CoalesceRasters(
280 canvas_rect, content_tiling_rect, contents_scale, &picture_region_map); 280 canvas_rect, content_tiling_rect, contents_scale, &picture_region_map);
281 281
282 #ifndef NDEBUG 282 #ifndef NDEBUG
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 canvas->clipRect(gfx::RectToSkRect(it.rect()), SkRegion::kDifference_Op); 338 canvas->clipRect(gfx::RectToSkRect(it.rect()), SkRegion::kDifference_Op);
339 paint.setColor(DebugColors::MissingPictureFillColor()); 339 paint.setColor(DebugColors::MissingPictureFillColor());
340 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 340 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
341 canvas->drawPaint(paint); 341 canvas->drawPaint(paint);
342 #endif // NDEBUG 342 #endif // NDEBUG
343 } 343 }
344 344
345 skia::RefPtr<SkPicture> PicturePileImpl::GetFlattenedPicture() { 345 skia::RefPtr<SkPicture> PicturePileImpl::GetFlattenedPicture() {
346 TRACE_EVENT0("cc", "PicturePileImpl::GetFlattenedPicture"); 346 TRACE_EVENT0("cc", "PicturePileImpl::GetFlattenedPicture");
347 347
348 gfx::Rect tiling_rect(tiling_.tiling_rect()); 348 gfx::Rect tiling_rect(tiling_.tiling_size());
349 SkPictureRecorder recorder; 349 SkPictureRecorder recorder;
350 SkCanvas* canvas = 350 SkCanvas* canvas =
351 recorder.beginRecording(tiling_rect.width(), tiling_rect.height()); 351 recorder.beginRecording(tiling_rect.width(), tiling_rect.height());
352 if (!tiling_rect.IsEmpty()) 352 if (!tiling_rect.IsEmpty())
353 RasterToBitmap(canvas, tiling_rect, 1.0, NULL); 353 RasterToBitmap(canvas, tiling_rect, 1.0, NULL);
354 skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording()); 354 skia::RefPtr<SkPicture> picture = skia::AdoptRef(recorder.endRecording());
355 355
356 return picture; 356 return picture;
357 } 357 }
358 358
359 void PicturePileImpl::AnalyzeInRect( 359 void PicturePileImpl::AnalyzeInRect(
360 const gfx::Rect& content_rect, 360 const gfx::Rect& content_rect,
361 float contents_scale, 361 float contents_scale,
362 PicturePileImpl::Analysis* analysis) { 362 PicturePileImpl::Analysis* analysis) {
363 AnalyzeInRect(content_rect, contents_scale, analysis, NULL); 363 AnalyzeInRect(content_rect, contents_scale, analysis, NULL);
364 } 364 }
365 365
366 void PicturePileImpl::AnalyzeInRect( 366 void PicturePileImpl::AnalyzeInRect(
367 const gfx::Rect& content_rect, 367 const gfx::Rect& content_rect,
368 float contents_scale, 368 float contents_scale,
369 PicturePileImpl::Analysis* analysis, 369 PicturePileImpl::Analysis* analysis,
370 RenderingStatsInstrumentation* stats_instrumentation) { 370 RenderingStatsInstrumentation* stats_instrumentation) {
371 DCHECK(analysis); 371 DCHECK(analysis);
372 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect"); 372 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect");
373 373
374 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect( 374 gfx::Rect layer_rect = gfx::ScaleToEnclosingRect(
375 content_rect, 1.0f / contents_scale); 375 content_rect, 1.0f / contents_scale);
376 376
377 layer_rect.Intersect(tiling_.tiling_rect()); 377 layer_rect.Intersect(gfx::Rect(tiling_.tiling_size()));
378 378
379 skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height()); 379 skia::AnalysisCanvas canvas(layer_rect.width(), layer_rect.height());
380 380
381 RasterForAnalysis(&canvas, layer_rect, 1.0f, stats_instrumentation); 381 RasterForAnalysis(&canvas, layer_rect, 1.0f, stats_instrumentation);
382 382
383 analysis->is_solid_color = canvas.GetColorIfSolid(&analysis->solid_color); 383 analysis->is_solid_color = canvas.GetColorIfSolid(&analysis->solid_color);
384 } 384 }
385 385
386 // Since there are situations when we can skip analysis, the variables have to 386 // Since there are situations when we can skip analysis, the variables have to
387 // be set to their safest values. That is, we have to assume that the tile is 387 // be set to their safest values. That is, we have to assume that the tile is
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 ++it) { 450 ++it) {
451 Picture* picture = it->second.GetPicture(); 451 Picture* picture = it->second.GetPicture();
452 if (picture && (processed_pictures.count(picture) == 0)) { 452 if (picture && (processed_pictures.count(picture) == 0)) {
453 picture->EmitTraceSnapshot(); 453 picture->EmitTraceSnapshot();
454 processed_pictures.insert(picture); 454 processed_pictures.insert(picture);
455 } 455 }
456 } 456 }
457 } 457 }
458 458
459 } // namespace cc 459 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_pile_base.cc ('k') | cc/resources/picture_pile_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698