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

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

Issue 83183005: Add synthetic delay points for latency testing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleaner raster worker pool integration. Created 7 years 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
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/debug/trace_event_synthetic_delay.h"
7 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
8 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
9 #include "base/values.h" 10 #include "base/values.h"
10 #include "cc/debug/devtools_instrumentation.h" 11 #include "cc/debug/devtools_instrumentation.h"
11 #include "cc/debug/traced_value.h" 12 #include "cc/debug/traced_value.h"
12 #include "cc/resources/picture_pile_impl.h" 13 #include "cc/resources/picture_pile_impl.h"
13 #include "skia/ext/lazy_pixel_ref.h" 14 #include "skia/ext/lazy_pixel_ref.h"
14 #include "skia/ext/paint_simplifier.h" 15 #include "skia/ext/paint_simplifier.h"
15 #include "third_party/skia/include/core/SkBitmap.h" 16 #include "third_party/skia/include/core/SkBitmap.h"
16 17
(...skipping 11 matching lines...) Expand all
28 return true; 29 return true;
29 } 30 }
30 private: 31 private:
31 void* buffer_; 32 void* buffer_;
32 }; 33 };
33 34
34 // Flag to indicate whether we should try and detect that 35 // Flag to indicate whether we should try and detect that
35 // a tile is of solid color. 36 // a tile is of solid color.
36 const bool kUseColorEstimator = true; 37 const bool kUseColorEstimator = true;
37 38
39 template <const char* delay_name>
40 struct SyntheticDelayInitializer {
41 SyntheticDelayInitializer()
42 : delay(base::debug::TraceEventSyntheticDelay::Lookup(delay_name)) {}
43 base::debug::TraceEventSyntheticDelay* delay;
44 };
45
46 // Synthetic delay for raster tasks that are required for activation. Global to
47 // avoid static initializer on critical path.
48 const char kRasterRequiredForActivation[] = "cc.RasterRequiredForActivation";
49 static base::LazyInstance<
50 SyntheticDelayInitializer<kRasterRequiredForActivation> >
51 g_raster_required_for_activation_delay = LAZY_INSTANCE_INITIALIZER;
52
38 class DisableLCDTextFilter : public SkDrawFilter { 53 class DisableLCDTextFilter : public SkDrawFilter {
39 public: 54 public:
40 // SkDrawFilter interface. 55 // SkDrawFilter interface.
41 virtual bool filter(SkPaint* paint, SkDrawFilter::Type type) OVERRIDE { 56 virtual bool filter(SkPaint* paint, SkDrawFilter::Type type) OVERRIDE {
42 if (type != SkDrawFilter::kText_Type) 57 if (type != SkDrawFilter::kText_Type)
43 return true; 58 return true;
44 59
45 paint->setLCDRenderText(false); 60 paint->setLCDRenderText(false);
46 return true; 61 return true;
47 } 62 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 299
285 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl); 300 DISALLOW_COPY_AND_ASSIGN(ImageDecodeWorkerPoolTaskImpl);
286 }; 301 };
287 302
288 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { 303 class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
289 public: 304 public:
290 typedef base::Callback<void(const internal::WorkerPoolTask* source)> 305 typedef base::Callback<void(const internal::WorkerPoolTask* source)>
291 Callback; 306 Callback;
292 307
293 RasterFinishedWorkerPoolTaskImpl( 308 RasterFinishedWorkerPoolTaskImpl(
294 const Callback& on_raster_finished_callback) 309 const Callback& on_raster_finished_callback,
310 bool tasks_pending_for_activation)
295 : origin_loop_(base::MessageLoopProxy::current().get()), 311 : origin_loop_(base::MessageLoopProxy::current().get()),
296 on_raster_finished_callback_(on_raster_finished_callback) { 312 on_raster_finished_callback_(on_raster_finished_callback),
313 tasks_pending_for_activation_(tasks_pending_for_activation) {
314 if (tasks_pending_for_activation_) {
315 g_raster_required_for_activation_delay.Get().delay->BeginParallel(
316 &activation_delay_end_time_);
317 }
297 } 318 }
298 319
299 // Overridden from internal::WorkerPoolTask: 320 // Overridden from internal::WorkerPoolTask:
300 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 321 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
301 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread"); 322 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread");
323 if (tasks_pending_for_activation_) {
brianderson 2013/12/17 21:59:16 To verify my understanding, this only applies the
Sami 2013/12/18 13:58:20 That's correct. Without this condition we were app
324 g_raster_required_for_activation_delay.Get().delay->EndParallel(
brianderson 2013/12/17 21:59:16 Which patch contains the EndParallel and BeginPara
Sami 2013/12/18 13:58:20 Ah, looks like I forgot to cc you; it's over here:
325 activation_delay_end_time_);
326 }
302 origin_loop_->PostTask( 327 origin_loop_->PostTask(
303 FROM_HERE, 328 FROM_HERE,
304 base::Bind(&RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread, 329 base::Bind(&RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread,
305 this)); 330 this));
306 } 331 }
307 virtual void CompleteOnOriginThread() OVERRIDE {} 332 virtual void CompleteOnOriginThread() OVERRIDE {}
308 333
309 private: 334 private:
310 virtual ~RasterFinishedWorkerPoolTaskImpl() {} 335 virtual ~RasterFinishedWorkerPoolTaskImpl() {}
311 336
312 void RunOnOriginThread() const { 337 void RunOnOriginThread() const {
313 on_raster_finished_callback_.Run(this); 338 on_raster_finished_callback_.Run(this);
314 } 339 }
315 340
316 scoped_refptr<base::MessageLoopProxy> origin_loop_; 341 scoped_refptr<base::MessageLoopProxy> origin_loop_;
317 const Callback on_raster_finished_callback_; 342 const Callback on_raster_finished_callback_;
343 const bool tasks_pending_for_activation_;
344 base::TimeTicks activation_delay_end_time_;
318 345
319 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl); 346 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl);
320 }; 347 };
321 348
322 const char* kWorkerThreadNamePrefix = "CompositorRaster"; 349 const char* kWorkerThreadNamePrefix = "CompositorRaster";
323 350
324 } // namespace 351 } // namespace
325 352
326 namespace internal { 353 namespace internal {
327 354
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 return 522 return
496 raster_tasks_required_for_activation_.find(task) != 523 raster_tasks_required_for_activation_.find(task) !=
497 raster_tasks_required_for_activation_.end(); 524 raster_tasks_required_for_activation_.end();
498 } 525 }
499 526
500 scoped_refptr<internal::WorkerPoolTask> 527 scoped_refptr<internal::WorkerPoolTask>
501 RasterWorkerPool::CreateRasterFinishedTask() { 528 RasterWorkerPool::CreateRasterFinishedTask() {
502 return make_scoped_refptr( 529 return make_scoped_refptr(
503 new RasterFinishedWorkerPoolTaskImpl( 530 new RasterFinishedWorkerPoolTaskImpl(
504 base::Bind(&RasterWorkerPool::OnRasterFinished, 531 base::Bind(&RasterWorkerPool::OnRasterFinished,
505 weak_ptr_factory_.GetWeakPtr()))); 532 weak_ptr_factory_.GetWeakPtr()),
533 false));
506 } 534 }
507 535
508 scoped_refptr<internal::WorkerPoolTask> 536 scoped_refptr<internal::WorkerPoolTask>
509 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() { 537 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
538 size_t num_tasks_pending_for_activation) {
510 return make_scoped_refptr( 539 return make_scoped_refptr(
511 new RasterFinishedWorkerPoolTaskImpl( 540 new RasterFinishedWorkerPoolTaskImpl(
512 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished, 541 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
513 weak_ptr_factory_.GetWeakPtr()))); 542 weak_ptr_factory_.GetWeakPtr()),
543 num_tasks_pending_for_activation > 0u));
514 } 544 }
515 545
516 void RasterWorkerPool::OnRasterFinished( 546 void RasterWorkerPool::OnRasterFinished(
517 const internal::WorkerPoolTask* source) { 547 const internal::WorkerPoolTask* source) {
518 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished"); 548 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished");
519 549
520 // Early out if current |raster_finished_task_| is not the source. 550 // Early out if current |raster_finished_task_| is not the source.
521 if (source != raster_finished_task_.get()) 551 if (source != raster_finished_task_.get())
522 return; 552 return;
523 553
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 617
588 internal::GraphNode* decode_node = CreateGraphNodeForTask( 618 internal::GraphNode* decode_node = CreateGraphNodeForTask(
589 decode_task, priority, graph); 619 decode_task, priority, graph);
590 decode_node->add_dependent(raster_node); 620 decode_node->add_dependent(raster_node);
591 } 621 }
592 622
593 return raster_node; 623 return raster_node;
594 } 624 }
595 625
596 } // namespace cc 626 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698