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

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

Issue 12457031: cc: Changed total_pixels_rasterized to be a return value (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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_impl.h ('k') | cc/resources/tile_manager.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 "base/debug/trace_event.h" 5 #include "base/debug/trace_event.h"
6 #include "cc/base/region.h" 6 #include "cc/base/region.h"
7 #include "cc/debug/debug_colors.h" 7 #include "cc/debug/debug_colors.h"
8 #include "cc/debug/rendering_stats.h" 8 #include "cc/debug/rendering_stats.h"
9 #include "cc/resources/picture_pile_impl.h" 9 #include "cc/resources/picture_pile_impl.h"
10 #include "skia/ext/analysis_canvas.h" 10 #include "skia/ext/analysis_canvas.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 64
65 PicturePileImpl::~PicturePileImpl() { 65 PicturePileImpl::~PicturePileImpl() {
66 } 66 }
67 67
68 PicturePileImpl* PicturePileImpl::GetCloneForDrawingOnThread( 68 PicturePileImpl* PicturePileImpl::GetCloneForDrawingOnThread(
69 unsigned thread_index) const { 69 unsigned thread_index) const {
70 CHECK_GT(clones_for_drawing_.clones_.size(), thread_index); 70 CHECK_GT(clones_for_drawing_.clones_.size(), thread_index);
71 return clones_for_drawing_.clones_[thread_index]; 71 return clones_for_drawing_.clones_[thread_index];
72 } 72 }
73 73
74 void PicturePileImpl::Raster( 74 int64 PicturePileImpl::Raster(
75 SkCanvas* canvas, 75 SkCanvas* canvas,
76 gfx::Rect canvas_rect, 76 gfx::Rect canvas_rect,
77 float contents_scale, 77 float contents_scale) {
78 int64* total_pixels_rasterized) {
79 78
80 DCHECK(contents_scale >= min_contents_scale_); 79 DCHECK(contents_scale >= min_contents_scale_);
81 80
82 #ifndef NDEBUG 81 #ifndef NDEBUG
83 // Any non-painted areas will be left in this color. 82 // Any non-painted areas will be left in this color.
84 canvas->clear(DebugColors::NonPaintedFillColor()); 83 canvas->clear(DebugColors::NonPaintedFillColor());
85 #endif // NDEBUG 84 #endif // NDEBUG
86 85
87 canvas->save(); 86 canvas->save();
88 canvas->translate(-canvas_rect.x(), -canvas_rect.y()); 87 canvas->translate(-canvas_rect.x(), -canvas_rect.y());
(...skipping 24 matching lines...) Expand all
113 canvas->drawColor(background_color_, SkXfermode::kSrc_Mode); 112 canvas->drawColor(background_color_, SkXfermode::kSrc_Mode);
114 } 113 }
115 114
116 // Rasterize the collection of relevant picture piles. 115 // Rasterize the collection of relevant picture piles.
117 gfx::Rect layer_rect = gfx::ToEnclosingRect( 116 gfx::Rect layer_rect = gfx::ToEnclosingRect(
118 gfx::ScaleRect(content_rect, 1.f / contents_scale)); 117 gfx::ScaleRect(content_rect, 1.f / contents_scale));
119 118
120 canvas->clipRect(gfx::RectToSkRect(content_rect), 119 canvas->clipRect(gfx::RectToSkRect(content_rect),
121 SkRegion::kReplace_Op); 120 SkRegion::kReplace_Op);
122 Region unclipped(content_rect); 121 Region unclipped(content_rect);
122
123 int64 total_pixels_rasterized = 0;
123 for (TilingData::Iterator tile_iter(&tiling_, layer_rect); 124 for (TilingData::Iterator tile_iter(&tiling_, layer_rect);
124 tile_iter; ++tile_iter) { 125 tile_iter; ++tile_iter) {
125 PictureListMap::iterator map_iter = 126 PictureListMap::iterator map_iter =
126 picture_list_map_.find(tile_iter.index()); 127 picture_list_map_.find(tile_iter.index());
127 if (map_iter == picture_list_map_.end()) 128 if (map_iter == picture_list_map_.end())
128 continue; 129 continue;
129 PictureList& pic_list= map_iter->second; 130 PictureList& pic_list= map_iter->second;
130 if (pic_list.empty()) 131 if (pic_list.empty())
131 continue; 132 continue;
132 133
(...skipping 18 matching lines...) Expand all
151 } else { 152 } else {
152 (*i)->Raster(canvas, content_clip, contents_scale, enable_lcd_text_); 153 (*i)->Raster(canvas, content_clip, contents_scale, enable_lcd_text_);
153 } 154 }
154 155
155 // Don't allow pictures underneath to draw where this picture did. 156 // Don't allow pictures underneath to draw where this picture did.
156 canvas->clipRect( 157 canvas->clipRect(
157 gfx::RectToSkRect(content_clip), 158 gfx::RectToSkRect(content_clip),
158 SkRegion::kDifference_Op); 159 SkRegion::kDifference_Op);
159 unclipped.Subtract(content_clip); 160 unclipped.Subtract(content_clip);
160 161
161 *total_pixels_rasterized += 162 total_pixels_rasterized +=
162 content_clip.width() * content_clip.height(); 163 content_clip.width() * content_clip.height();
163 } 164 }
164 } 165 }
165 166
166 #ifndef NDEBUG 167 #ifndef NDEBUG
167 // Fill the remaining clip with debug color. This allows us to 168 // Fill the remaining clip with debug color. This allows us to
168 // distinguish between non painted areas and problems with missing 169 // distinguish between non painted areas and problems with missing
169 // pictures. 170 // pictures.
170 SkPaint paint; 171 SkPaint paint;
171 paint.setColor(DebugColors::MissingPictureFillColor()); 172 paint.setColor(DebugColors::MissingPictureFillColor());
172 paint.setXfermodeMode(SkXfermode::kSrc_Mode); 173 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
173 canvas->drawPaint(paint); 174 canvas->drawPaint(paint);
174 #endif // NDEBUG 175 #endif // NDEBUG
175 176
176 // We should always paint some part of |content_rect|. 177 // We should always paint some part of |content_rect|.
177 DCHECK(!unclipped.Contains(content_rect)); 178 DCHECK(!unclipped.Contains(content_rect));
178 179
179 canvas->restore(); 180 canvas->restore();
181
182 return total_pixels_rasterized;
180 } 183 }
181 184
182 void PicturePileImpl::GatherPixelRefs( 185 void PicturePileImpl::GatherPixelRefs(
183 gfx::Rect content_rect, 186 gfx::Rect content_rect,
184 float contents_scale, 187 float contents_scale,
185 std::list<skia::LazyPixelRef*>& pixel_refs) { 188 std::list<skia::LazyPixelRef*>& pixel_refs) {
186 std::list<skia::LazyPixelRef*> result; 189 std::list<skia::LazyPixelRef*> result;
187 190
188 gfx::Rect layer_rect = gfx::ToEnclosingRect( 191 gfx::Rect layer_rect = gfx::ToEnclosingRect(
189 gfx::ScaleRect(content_rect, 1.f / contents_scale)); 192 gfx::ScaleRect(content_rect, 1.f / contents_scale));
(...skipping 20 matching lines...) Expand all
210 gfx::Rect layer_rect(tiling_.total_size()); 213 gfx::Rect layer_rect(tiling_.total_size());
211 skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture); 214 skia::RefPtr<SkPicture> picture = skia::AdoptRef(new SkPicture);
212 if (layer_rect.IsEmpty()) 215 if (layer_rect.IsEmpty())
213 return picture; 216 return picture;
214 217
215 SkCanvas* canvas = picture->beginRecording( 218 SkCanvas* canvas = picture->beginRecording(
216 layer_rect.width(), 219 layer_rect.width(),
217 layer_rect.height(), 220 layer_rect.height(),
218 SkPicture::kUsePathBoundsForClip_RecordingFlag); 221 SkPicture::kUsePathBoundsForClip_RecordingFlag);
219 222
220 int64 total_pixels_rasterized = 0; 223 Raster(canvas, layer_rect, 1.0);
221 Raster(canvas, layer_rect, 1.0, &total_pixels_rasterized);
222 picture->endRecording(); 224 picture->endRecording();
223 225
224 return picture; 226 return picture;
225 } 227 }
226 228
227 void PicturePileImpl::AnalyzeInRect(const gfx::Rect& content_rect, 229 void PicturePileImpl::AnalyzeInRect(const gfx::Rect& content_rect,
228 float contents_scale, 230 float contents_scale,
229 PicturePileImpl::Analysis* analysis) { 231 PicturePileImpl::Analysis* analysis) {
230 DCHECK(analysis); 232 DCHECK(analysis);
231 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect"); 233 TRACE_EVENT0("cc", "PicturePileImpl::AnalyzeInRect");
232 234
233 gfx::Rect layer_rect = gfx::ToEnclosingRect( 235 gfx::Rect layer_rect = gfx::ToEnclosingRect(
234 gfx::ScaleRect(content_rect, 1.f / contents_scale)); 236 gfx::ScaleRect(content_rect, 1.f / contents_scale));
235 237
236 SkBitmap empty_bitmap; 238 SkBitmap empty_bitmap;
237 empty_bitmap.setConfig(SkBitmap::kNo_Config, content_rect.width(), 239 empty_bitmap.setConfig(SkBitmap::kNo_Config, content_rect.width(),
238 content_rect.height()); 240 content_rect.height());
239 skia::AnalysisDevice device(empty_bitmap); 241 skia::AnalysisDevice device(empty_bitmap);
240 skia::AnalysisCanvas canvas(&device); 242 skia::AnalysisCanvas canvas(&device);
241 243
242 int64 total_pixels_rasterized = 0; 244 Raster(&canvas, content_rect, contents_scale);
243 Raster(&canvas, content_rect, contents_scale, &total_pixels_rasterized);
244 245
245 analysis->is_transparent = canvas.isTransparent(); 246 analysis->is_transparent = canvas.isTransparent();
246 analysis->is_solid_color = canvas.getColorIfSolid(&analysis->solid_color); 247 analysis->is_solid_color = canvas.getColorIfSolid(&analysis->solid_color);
247 analysis->is_cheap_to_raster = canvas.isCheap(); 248 analysis->is_cheap_to_raster = canvas.isCheap();
248 canvas.consumeLazyPixelRefs(&analysis->lazy_pixel_refs); 249 canvas.consumeLazyPixelRefs(&analysis->lazy_pixel_refs);
249 } 250 }
250 251
251 PicturePileImpl::Analysis::Analysis() : 252 PicturePileImpl::Analysis::Analysis() :
252 is_solid_color(false), 253 is_solid_color(false),
253 is_transparent(false), 254 is_transparent(false),
254 is_cheap_to_raster(false) { 255 is_cheap_to_raster(false) {
255 } 256 }
256 257
257 PicturePileImpl::Analysis::~Analysis() { 258 PicturePileImpl::Analysis::~Analysis() {
258 } 259 }
259 260
260 } // namespace cc 261 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/picture_pile_impl.h ('k') | cc/resources/tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698