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

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: Rebased. Fixed PerfRasterWorkerPool. Created 6 years, 11 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/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/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/paint_simplifier.h" 14 #include "skia/ext/paint_simplifier.h"
14 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
15 #include "third_party/skia/include/core/SkPixelRef.h" 16 #include "third_party/skia/include/core/SkPixelRef.h"
16 #include "third_party/skia/include/gpu/GrContext.h" 17 #include "third_party/skia/include/gpu/GrContext.h"
(...skipping 14 matching lines...) Expand all
31 return true; 32 return true;
32 } 33 }
33 private: 34 private:
34 void* buffer_; 35 void* buffer_;
35 }; 36 };
36 37
37 // Flag to indicate whether we should try and detect that 38 // Flag to indicate whether we should try and detect that
38 // a tile is of solid color. 39 // a tile is of solid color.
39 const bool kUseColorEstimator = true; 40 const bool kUseColorEstimator = true;
40 41
42 // Synthetic delay for raster tasks that are required for activation. Global to
43 // avoid static initializer on critical path.
44 struct RasterRequiredForActivationSyntheticDelayInitializer {
45 RasterRequiredForActivationSyntheticDelayInitializer()
46 : delay(base::debug::TraceEventSyntheticDelay::Lookup(
47 "cc.RasterRequiredForActivation")) {}
48 base::debug::TraceEventSyntheticDelay* delay;
49 };
50 static base::LazyInstance<RasterRequiredForActivationSyntheticDelayInitializer>
51 g_raster_required_for_activation_delay = LAZY_INSTANCE_INITIALIZER;
52
41 class DisableLCDTextFilter : public SkDrawFilter { 53 class DisableLCDTextFilter : public SkDrawFilter {
42 public: 54 public:
43 // SkDrawFilter interface. 55 // SkDrawFilter interface.
44 virtual bool filter(SkPaint* paint, SkDrawFilter::Type type) OVERRIDE { 56 virtual bool filter(SkPaint* paint, SkDrawFilter::Type type) OVERRIDE {
45 if (type != SkDrawFilter::kText_Type) 57 if (type != SkDrawFilter::kText_Type)
46 return true; 58 return true;
47 59
48 paint->setLCDRenderText(false); 60 paint->setLCDRenderText(false);
49 return true; 61 return true;
50 } 62 }
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 // Overridden from internal::WorkerPoolTask: 353 // Overridden from internal::WorkerPoolTask:
342 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 354 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
343 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread"); 355 TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread");
344 origin_loop_->PostTask( 356 origin_loop_->PostTask(
345 FROM_HERE, 357 FROM_HERE,
346 base::Bind(&RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread, 358 base::Bind(&RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread,
347 this)); 359 this));
348 } 360 }
349 virtual void CompleteOnOriginThread() OVERRIDE {} 361 virtual void CompleteOnOriginThread() OVERRIDE {}
350 362
351 private: 363 protected:
352 virtual ~RasterFinishedWorkerPoolTaskImpl() {} 364 virtual ~RasterFinishedWorkerPoolTaskImpl() {}
353 365
366 private:
354 void RunOnOriginThread() const { 367 void RunOnOriginThread() const {
355 on_raster_finished_callback_.Run(this); 368 on_raster_finished_callback_.Run(this);
356 } 369 }
357 370
358 scoped_refptr<base::MessageLoopProxy> origin_loop_; 371 scoped_refptr<base::MessageLoopProxy> origin_loop_;
359 const Callback on_raster_finished_callback_; 372 const Callback on_raster_finished_callback_;
360 373
361 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl); 374 DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl);
362 }; 375 };
363 376
377 class RasterRequiredForActivationFinishedWorkerPoolTaskImpl
378 : public RasterFinishedWorkerPoolTaskImpl {
379 public:
380 RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
381 const Callback& on_raster_finished_callback,
382 size_t tasks_required_for_activation_count)
383 : RasterFinishedWorkerPoolTaskImpl(on_raster_finished_callback),
384 tasks_required_for_activation_count_(
385 tasks_required_for_activation_count) {
386 if (tasks_required_for_activation_count_) {
387 g_raster_required_for_activation_delay.Get().delay->BeginParallel(
388 &activation_delay_end_time_);
389 }
390 }
391
392 // Overridden from RasterFinishedWorkerPoolTaskImpl:
393 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
394 TRACE_EVENT0("cc",
395 "RasterRequiredForActivationFinishedWorkerPoolTaskImpl::"
396 "RunOnWorkerThread");
397 if (tasks_required_for_activation_count_) {
398 g_raster_required_for_activation_delay.Get().delay->EndParallel(
399 activation_delay_end_time_);
400 }
401 RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread(thread_index);
402 }
403
404 private:
405 virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {}
406
407 base::TimeTicks activation_delay_end_time_;
408 const size_t tasks_required_for_activation_count_;
409
410 DISALLOW_COPY_AND_ASSIGN(
411 RasterRequiredForActivationFinishedWorkerPoolTaskImpl);
412 };
413
364 const char* kWorkerThreadNamePrefix = "CompositorRaster"; 414 const char* kWorkerThreadNamePrefix = "CompositorRaster";
365 415
366 } // namespace 416 } // namespace
367 417
368 namespace internal { 418 namespace internal {
369 419
370 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource, 420 RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource,
371 TaskVector* dependencies, 421 TaskVector* dependencies,
372 bool use_gpu_rasterization) 422 bool use_gpu_rasterization)
373 : did_run_(false), 423 : did_run_(false),
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 641
592 scoped_refptr<internal::WorkerPoolTask> 642 scoped_refptr<internal::WorkerPoolTask>
593 RasterWorkerPool::CreateRasterFinishedTask() { 643 RasterWorkerPool::CreateRasterFinishedTask() {
594 return make_scoped_refptr( 644 return make_scoped_refptr(
595 new RasterFinishedWorkerPoolTaskImpl( 645 new RasterFinishedWorkerPoolTaskImpl(
596 base::Bind(&RasterWorkerPool::OnRasterFinished, 646 base::Bind(&RasterWorkerPool::OnRasterFinished,
597 weak_ptr_factory_.GetWeakPtr()))); 647 weak_ptr_factory_.GetWeakPtr())));
598 } 648 }
599 649
600 scoped_refptr<internal::WorkerPoolTask> 650 scoped_refptr<internal::WorkerPoolTask>
601 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() { 651 RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
652 size_t tasks_required_for_activation_count) {
602 return make_scoped_refptr( 653 return make_scoped_refptr(
603 new RasterFinishedWorkerPoolTaskImpl( 654 new RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
604 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished, 655 base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
605 weak_ptr_factory_.GetWeakPtr()))); 656 weak_ptr_factory_.GetWeakPtr()),
657 tasks_required_for_activation_count));
606 } 658 }
607 659
608 void RasterWorkerPool::OnRasterFinished( 660 void RasterWorkerPool::OnRasterFinished(
609 const internal::WorkerPoolTask* source) { 661 const internal::WorkerPoolTask* source) {
610 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished"); 662 TRACE_EVENT0("cc", "RasterWorkerPool::OnRasterFinished");
611 663
612 // Early out if current |raster_finished_task_| is not the source. 664 // Early out if current |raster_finished_task_| is not the source.
613 if (source != raster_finished_task_.get()) 665 if (source != raster_finished_task_.get())
614 return; 666 return;
615 667
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 731
680 internal::GraphNode* decode_node = CreateGraphNodeForTask( 732 internal::GraphNode* decode_node = CreateGraphNodeForTask(
681 decode_task, priority, graph); 733 decode_task, priority, graph);
682 decode_node->add_dependent(raster_node); 734 decode_node->add_dependent(raster_node);
683 } 735 }
684 736
685 return raster_node; 737 return raster_node;
686 } 738 }
687 739
688 } // namespace cc 740 } // 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