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

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

Issue 26031002: cc: Remove unused metrics from RenderingStats. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed raster_worker_pool_perftest.cc Created 7 years, 2 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
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/raster_worker_pool_perftest.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/resources/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include "base/json/json_writer.h" 7 #include "base/json/json_writer.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "cc/debug/benchmark_instrumentation.h" 10 #include "cc/debug/benchmark_instrumentation.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 } 48 }
49 }; 49 };
50 50
51 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { 51 class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
52 public: 52 public:
53 RasterWorkerPoolTaskImpl(const Resource* resource, 53 RasterWorkerPoolTaskImpl(const Resource* resource,
54 PicturePileImpl* picture_pile, 54 PicturePileImpl* picture_pile,
55 gfx::Rect content_rect, 55 gfx::Rect content_rect,
56 float contents_scale, 56 float contents_scale,
57 RasterMode raster_mode, 57 RasterMode raster_mode,
58 bool is_tile_in_pending_tree_now_bin,
59 TileResolution tile_resolution, 58 TileResolution tile_resolution,
60 int layer_id, 59 int layer_id,
61 const void* tile_id, 60 const void* tile_id,
62 int source_frame_number, 61 int source_frame_number,
63 RenderingStatsInstrumentation* rendering_stats, 62 RenderingStatsInstrumentation* rendering_stats,
64 const RasterWorkerPool::RasterTask::Reply& reply, 63 const RasterWorkerPool::RasterTask::Reply& reply,
65 TaskVector* dependencies) 64 TaskVector* dependencies)
66 : internal::RasterWorkerPoolTask(resource, dependencies), 65 : internal::RasterWorkerPoolTask(resource, dependencies),
67 picture_pile_(picture_pile), 66 picture_pile_(picture_pile),
68 content_rect_(content_rect), 67 content_rect_(content_rect),
69 contents_scale_(contents_scale), 68 contents_scale_(contents_scale),
70 raster_mode_(raster_mode), 69 raster_mode_(raster_mode),
71 is_tile_in_pending_tree_now_bin_(is_tile_in_pending_tree_now_bin),
72 tile_resolution_(tile_resolution), 70 tile_resolution_(tile_resolution),
73 layer_id_(layer_id), 71 layer_id_(layer_id),
74 tile_id_(tile_id), 72 tile_id_(tile_id),
75 source_frame_number_(source_frame_number), 73 source_frame_number_(source_frame_number),
76 rendering_stats_(rendering_stats), 74 rendering_stats_(rendering_stats),
77 reply_(reply) {} 75 reply_(reply) {}
78 76
79 void RunAnalysisOnThread(unsigned thread_index) { 77 void RunAnalysisOnThread(unsigned thread_index) {
80 TRACE_EVENT1("cc", 78 TRACE_EVENT1("cc",
81 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread", 79 "RasterWorkerPoolTaskImpl::RunAnalysisOnThread",
82 "data", 80 "data",
83 TracedValue::FromValue(DataAsValue().release())); 81 TracedValue::FromValue(DataAsValue().release()));
84 82
85 DCHECK(picture_pile_.get()); 83 DCHECK(picture_pile_.get());
86 DCHECK(rendering_stats_); 84 DCHECK(rendering_stats_);
87 85
88 PicturePileImpl* picture_clone = 86 PicturePileImpl* picture_clone =
89 picture_pile_->GetCloneForDrawingOnThread(thread_index); 87 picture_pile_->GetCloneForDrawingOnThread(thread_index);
90 88
91 DCHECK(picture_clone); 89 DCHECK(picture_clone);
92 90
93 base::TimeTicks start_time = rendering_stats_->StartRecording();
94 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_); 91 picture_clone->AnalyzeInRect(content_rect_, contents_scale_, &analysis_);
95 base::TimeDelta duration = rendering_stats_->EndRecording(start_time);
96 92
97 // Record the solid color prediction. 93 // Record the solid color prediction.
98 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed", 94 UMA_HISTOGRAM_BOOLEAN("Renderer4.SolidColorTilesAnalyzed",
99 analysis_.is_solid_color); 95 analysis_.is_solid_color);
100 rendering_stats_->AddAnalysisResult(duration, analysis_.is_solid_color);
101 96
102 // Clear the flag if we're not using the estimator. 97 // Clear the flag if we're not using the estimator.
103 analysis_.is_solid_color &= kUseColorEstimator; 98 analysis_.is_solid_color &= kUseColorEstimator;
104 } 99 }
105 100
106 bool RunRasterOnThread(unsigned thread_index, 101 bool RunRasterOnThread(unsigned thread_index,
107 void* buffer, 102 void* buffer,
108 gfx::Size size, 103 gfx::Size size,
109 int stride) { 104 int stride) {
110 TRACE_EVENT2( 105 TRACE_EVENT2(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 break; 158 break;
164 case HIGH_QUALITY_RASTER_MODE: 159 case HIGH_QUALITY_RASTER_MODE:
165 break; 160 break;
166 case NUM_RASTER_MODES: 161 case NUM_RASTER_MODES:
167 default: 162 default:
168 NOTREACHED(); 163 NOTREACHED();
169 } 164 }
170 165
171 canvas.setDrawFilter(draw_filter.get()); 166 canvas.setDrawFilter(draw_filter.get());
172 167
168 base::TimeDelta prev_rasterize_time =
169 rendering_stats_->GetImplThreadRenderingStats().rasterize_time;
170
171 picture_clone->RasterToBitmap(
172 &canvas, content_rect_, contents_scale_, rendering_stats_);
173
173 if (rendering_stats_->record_rendering_stats()) { 174 if (rendering_stats_->record_rendering_stats()) {
174 PicturePileImpl::RasterStats raster_stats; 175 base::TimeDelta current_rasterize_time =
175 picture_clone->RasterToBitmap( 176 rendering_stats_->GetImplThreadRenderingStats().rasterize_time;
176 &canvas, content_rect_, contents_scale_, &raster_stats);
177 rendering_stats_->AddRaster(
178 raster_stats.total_rasterize_time,
179 raster_stats.best_rasterize_time,
180 raster_stats.total_pixels_rasterized,
181 is_tile_in_pending_tree_now_bin_);
182
183 HISTOGRAM_CUSTOM_COUNTS( 177 HISTOGRAM_CUSTOM_COUNTS(
184 "Renderer4.PictureRasterTimeUS", 178 "Renderer4.PictureRasterTimeUS",
185 raster_stats.total_rasterize_time.InMicroseconds(), 179 (current_rasterize_time - prev_rasterize_time).InMicroseconds(),
186 0, 180 0,
187 100000, 181 100000,
188 100); 182 100);
189 } else {
190 picture_clone->RasterToBitmap(
191 &canvas, content_rect_, contents_scale_, NULL);
192 } 183 }
193 184
194 ChangeBitmapConfigIfNeeded(bitmap, buffer); 185 ChangeBitmapConfigIfNeeded(bitmap, buffer);
195 186
196 return true; 187 return true;
197 } 188 }
198 189
199 // Overridden from internal::RasterWorkerPoolTask: 190 // Overridden from internal::RasterWorkerPoolTask:
200 virtual bool RunOnWorkerThread(unsigned thread_index, 191 virtual bool RunOnWorkerThread(unsigned thread_index,
201 void* buffer, 192 void* buffer,
202 gfx::Size size, 193 gfx::Size size,
203 int stride) 194 int stride)
204 OVERRIDE { 195 OVERRIDE {
205 RunAnalysisOnThread(thread_index); 196 RunAnalysisOnThread(thread_index);
206 return RunRasterOnThread(thread_index, buffer, size, stride); 197 return RunRasterOnThread(thread_index, buffer, size, stride);
207 } 198 }
208 virtual void CompleteOnOriginThread() OVERRIDE { 199 virtual void CompleteOnOriginThread() OVERRIDE {
209 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled()); 200 reply_.Run(analysis_, !HasFinishedRunning() || WasCanceled());
210 } 201 }
211 202
212 protected: 203 protected:
213 virtual ~RasterWorkerPoolTaskImpl() {} 204 virtual ~RasterWorkerPoolTaskImpl() {}
214 205
215 private: 206 private:
216 scoped_ptr<base::Value> DataAsValue() const { 207 scoped_ptr<base::Value> DataAsValue() const {
217 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue()); 208 scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
218 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release()); 209 res->Set("tile_id", TracedValue::CreateIDRef(tile_id_).release());
219 res->SetBoolean("is_tile_in_pending_tree_now_bin",
220 is_tile_in_pending_tree_now_bin_);
221 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release()); 210 res->Set("resolution", TileResolutionAsValue(tile_resolution_).release());
222 res->SetInteger("source_frame_number", source_frame_number_); 211 res->SetInteger("source_frame_number", source_frame_number_);
223 res->SetInteger("layer_id", layer_id_); 212 res->SetInteger("layer_id", layer_id_);
224 return res.PassAs<base::Value>(); 213 return res.PassAs<base::Value>();
225 } 214 }
226 215
227 void ChangeBitmapConfigIfNeeded(const SkBitmap& bitmap, 216 void ChangeBitmapConfigIfNeeded(const SkBitmap& bitmap,
228 void* buffer) { 217 void* buffer) {
229 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::ChangeBitmapConfigIfNeeded"); 218 TRACE_EVENT0("cc", "RasterWorkerPoolTaskImpl::ChangeBitmapConfigIfNeeded");
230 SkBitmap::Config config = SkBitmapConfigFromFormat( 219 SkBitmap::Config config = SkBitmapConfigFromFormat(
231 resource()->format()); 220 resource()->format());
232 if (bitmap.getConfig() != config) { 221 if (bitmap.getConfig() != config) {
233 SkBitmap bitmap_dest; 222 SkBitmap bitmap_dest;
234 IdentityAllocator allocator(buffer); 223 IdentityAllocator allocator(buffer);
235 bitmap.copyTo(&bitmap_dest, config, &allocator); 224 bitmap.copyTo(&bitmap_dest, config, &allocator);
236 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the 225 // TODO(kaanb): The GL pipeline assumes a 4-byte alignment for the
237 // bitmap data. This check will be removed once crbug.com/293728 is fixed. 226 // bitmap data. This check will be removed once crbug.com/293728 is fixed.
238 CHECK_EQ(0u, bitmap_dest.rowBytes() % 4); 227 CHECK_EQ(0u, bitmap_dest.rowBytes() % 4);
239 } 228 }
240 } 229 }
241 230
242 PicturePileImpl::Analysis analysis_; 231 PicturePileImpl::Analysis analysis_;
243 scoped_refptr<PicturePileImpl> picture_pile_; 232 scoped_refptr<PicturePileImpl> picture_pile_;
244 gfx::Rect content_rect_; 233 gfx::Rect content_rect_;
245 float contents_scale_; 234 float contents_scale_;
246 RasterMode raster_mode_; 235 RasterMode raster_mode_;
247 bool is_tile_in_pending_tree_now_bin_;
248 TileResolution tile_resolution_; 236 TileResolution tile_resolution_;
249 int layer_id_; 237 int layer_id_;
250 const void* tile_id_; 238 const void* tile_id_;
251 int source_frame_number_; 239 int source_frame_number_;
252 RenderingStatsInstrumentation* rendering_stats_; 240 RenderingStatsInstrumentation* rendering_stats_;
253 const RasterWorkerPool::RasterTask::Reply reply_; 241 const RasterWorkerPool::RasterTask::Reply reply_;
254 242
255 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl); 243 DISALLOW_COPY_AND_ASSIGN(RasterWorkerPoolTaskImpl);
256 }; 244 };
257 245
258 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask { 246 class ImageDecodeWorkerPoolTaskImpl : public internal::WorkerPoolTask {
259 public: 247 public:
260 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref, 248 ImageDecodeWorkerPoolTaskImpl(skia::LazyPixelRef* pixel_ref,
261 int layer_id, 249 int layer_id,
262 RenderingStatsInstrumentation* rendering_stats, 250 RenderingStatsInstrumentation* rendering_stats,
263 const RasterWorkerPool::Task::Reply& reply) 251 const RasterWorkerPool::Task::Reply& reply)
264 : pixel_ref_(pixel_ref), 252 : pixel_ref_(pixel_ref),
265 layer_id_(layer_id), 253 layer_id_(layer_id),
266 rendering_stats_(rendering_stats), 254 rendering_stats_(rendering_stats),
267 reply_(reply) {} 255 reply_(reply) {}
268 256
269 // Overridden from internal::WorkerPoolTask: 257 // Overridden from internal::WorkerPoolTask:
270 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 258 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
271 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); 259 TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread");
272 devtools_instrumentation::ScopedImageDecodeTask image_decode_task( 260 devtools_instrumentation::ScopedImageDecodeTask image_decode_task(
273 pixel_ref_); 261 pixel_ref_);
274 base::TimeTicks start_time = rendering_stats_->StartRecording();
275 pixel_ref_->Decode(); 262 pixel_ref_->Decode();
276 base::TimeDelta duration = rendering_stats_->EndRecording(start_time);
277 rendering_stats_->AddDeferredImageDecode(duration);
278 } 263 }
279 virtual void CompleteOnOriginThread() OVERRIDE { 264 virtual void CompleteOnOriginThread() OVERRIDE {
280 reply_.Run(!HasFinishedRunning()); 265 reply_.Run(!HasFinishedRunning());
281 } 266 }
282 267
283 protected: 268 protected:
284 virtual ~ImageDecodeWorkerPoolTaskImpl() {} 269 virtual ~ImageDecodeWorkerPoolTaskImpl() {}
285 270
286 private: 271 private:
287 skia::LazyPixelRef* pixel_ref_; 272 skia::LazyPixelRef* pixel_ref_;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 RasterWorkerPool::RasterTask::~RasterTask() { 412 RasterWorkerPool::RasterTask::~RasterTask() {
428 } 413 }
429 414
430 // static 415 // static
431 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask( 416 RasterWorkerPool::RasterTask RasterWorkerPool::CreateRasterTask(
432 const Resource* resource, 417 const Resource* resource,
433 PicturePileImpl* picture_pile, 418 PicturePileImpl* picture_pile,
434 gfx::Rect content_rect, 419 gfx::Rect content_rect,
435 float contents_scale, 420 float contents_scale,
436 RasterMode raster_mode, 421 RasterMode raster_mode,
437 bool is_tile_in_pending_tree_now_bin,
438 TileResolution tile_resolution, 422 TileResolution tile_resolution,
439 int layer_id, 423 int layer_id,
440 const void* tile_id, 424 const void* tile_id,
441 int source_frame_number, 425 int source_frame_number,
442 RenderingStatsInstrumentation* rendering_stats, 426 RenderingStatsInstrumentation* rendering_stats,
443 const RasterTask::Reply& reply, 427 const RasterTask::Reply& reply,
444 Task::Set* dependencies) { 428 Task::Set* dependencies) {
445 return RasterTask( 429 return RasterTask(
446 new RasterWorkerPoolTaskImpl(resource, 430 new RasterWorkerPoolTaskImpl(resource,
447 picture_pile, 431 picture_pile,
448 content_rect, 432 content_rect,
449 contents_scale, 433 contents_scale,
450 raster_mode, 434 raster_mode,
451 is_tile_in_pending_tree_now_bin,
452 tile_resolution, 435 tile_resolution,
453 layer_id, 436 layer_id,
454 tile_id, 437 tile_id,
455 source_frame_number, 438 source_frame_number,
456 rendering_stats, 439 rendering_stats,
457 reply, 440 reply,
458 &dependencies->tasks_)); 441 &dependencies->tasks_));
459 } 442 }
460 443
461 // static 444 // static
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 579
597 internal::GraphNode* decode_node = CreateGraphNodeForTask( 580 internal::GraphNode* decode_node = CreateGraphNodeForTask(
598 decode_task, priority, graph); 581 decode_task, priority, graph);
599 decode_node->add_dependent(raster_node); 582 decode_node->add_dependent(raster_node);
600 } 583 }
601 584
602 return raster_node; 585 return raster_node;
603 } 586 }
604 587
605 } // namespace cc 588 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool.h ('k') | cc/resources/raster_worker_pool_perftest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698