Chromium Code Reviews| Index: cc/resources/raster_worker_pool.cc |
| diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc |
| index 255d5af5f71e16c5614a4dc6e85fda3e92e29610..34a34fc3e5b8daa458d34483e14a48b71f1cbe21 100644 |
| --- a/cc/resources/raster_worker_pool.cc |
| +++ b/cc/resources/raster_worker_pool.cc |
| @@ -15,21 +15,13 @@ |
| namespace cc { |
| namespace { |
| -// Synthetic delay for raster tasks that are required for activation. Global to |
| -// avoid static initializer on critical path. |
| -struct RasterRequiredForActivationSyntheticDelayInitializer { |
| - RasterRequiredForActivationSyntheticDelayInitializer() |
| - : delay(base::debug::TraceEventSyntheticDelay::Lookup( |
| - "cc.RasterRequiredForActivation")) {} |
| - base::debug::TraceEventSyntheticDelay* delay; |
| -}; |
| -static base::LazyInstance<RasterRequiredForActivationSyntheticDelayInitializer> |
| - g_raster_required_for_activation_delay = LAZY_INSTANCE_INITIALIZER; |
| - |
| class RasterTaskGraphRunner : public TaskGraphRunner, |
| public base::DelegateSimpleThread::Delegate { |
| public: |
| - RasterTaskGraphRunner() { |
| + RasterTaskGraphRunner() |
| + : trace_event_synthetic_delay_( |
| + base::debug::TraceEventSyntheticDelay::Lookup( |
| + "cc.RasterRequiredForActivation")) { |
| size_t num_threads = RasterWorkerPool::GetNumRasterThreads(); |
| while (workers_.size() < num_threads) { |
| scoped_ptr<base::DelegateSimpleThread> worker = |
| @@ -48,6 +40,10 @@ class RasterTaskGraphRunner : public TaskGraphRunner, |
| virtual ~RasterTaskGraphRunner() { NOTREACHED(); } |
| + base::debug::TraceEventSyntheticDelay* trace_event_synthetic_delay() const { |
| + return trace_event_synthetic_delay_; |
| + } |
| + |
| private: |
| // Overridden from base::DelegateSimpleThread::Delegate: |
| virtual void Run() OVERRIDE { |
| @@ -55,6 +51,7 @@ class RasterTaskGraphRunner : public TaskGraphRunner, |
| } |
| ScopedPtrDeque<base::DelegateSimpleThread> workers_; |
| + base::debug::TraceEventSyntheticDelay* trace_event_synthetic_delay_; |
|
reveman
2014/08/27 00:34:37
I think |synthetic_delay_| is verbose enough.
boliu
2014/08/27 01:14:49
Done.
|
| }; |
| base::LazyInstance<RasterTaskGraphRunner>::Leaky g_task_graph_runner = |
| @@ -103,13 +100,14 @@ class RasterRequiredForActivationFinishedTaskImpl |
| RasterRequiredForActivationFinishedTaskImpl( |
| base::SequencedTaskRunner* task_runner, |
| const base::Closure& on_raster_finished_callback, |
| - size_t tasks_required_for_activation_count) |
| + size_t tasks_required_for_activation_count, |
| + base::debug::TraceEventSyntheticDelay* delay) |
| : RasterFinishedTaskImpl(task_runner, on_raster_finished_callback), |
| + delay_(delay), |
| tasks_required_for_activation_count_( |
| tasks_required_for_activation_count) { |
| if (tasks_required_for_activation_count_) { |
| - g_raster_required_for_activation_delay.Get().delay->BeginParallel( |
| - &activation_delay_end_time_); |
| + delay_->BeginParallel(&activation_delay_end_time_); |
| } |
| } |
| @@ -119,8 +117,7 @@ class RasterRequiredForActivationFinishedTaskImpl |
| "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnWorkerThread"); |
| if (tasks_required_for_activation_count_) { |
| - g_raster_required_for_activation_delay.Get().delay->EndParallel( |
| - activation_delay_end_time_); |
| + delay_->EndParallel(activation_delay_end_time_); |
| } |
| RasterFinished(); |
| } |
| @@ -128,6 +125,7 @@ class RasterRequiredForActivationFinishedTaskImpl |
| private: |
| virtual ~RasterRequiredForActivationFinishedTaskImpl() {} |
| + base::debug::TraceEventSyntheticDelay* delay_; |
|
reveman
2014/08/27 00:34:37
How about just using g_task_graph_runner.Get().syn
boliu
2014/08/27 01:14:49
Done.
|
| base::TimeTicks activation_delay_end_time_; |
| const size_t tasks_required_for_activation_count_; |
| @@ -191,7 +189,8 @@ RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask( |
| return make_scoped_refptr(new RasterRequiredForActivationFinishedTaskImpl( |
| task_runner, |
| on_raster_finished_callback, |
| - tasks_required_for_activation_count)); |
| + tasks_required_for_activation_count, |
| + g_task_graph_runner.Get().trace_event_synthetic_delay())); |
| } |
| // static |