| Index: cc/resources/raster_worker_pool.cc
|
| diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
|
| index b017038ba53f572523c255e59c1623ce6a9a89c7..e3606092aa3a4bdec0fe8f72632e3731c7552e02 100644
|
| --- a/cc/resources/raster_worker_pool.cc
|
| +++ b/cc/resources/raster_worker_pool.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "cc/resources/raster_worker_pool.h"
|
|
|
| +#include "base/debug/trace_event_synthetic_delay.h"
|
| #include "base/json/json_writer.h"
|
| #include "base/metrics/histogram.h"
|
| #include "base/values.h"
|
| @@ -38,6 +39,17 @@ class IdentityAllocator : public SkBitmap::Allocator {
|
| // a tile is of solid color.
|
| const bool kUseColorEstimator = true;
|
|
|
| +// 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 DisableLCDTextFilter : public SkDrawFilter {
|
| public:
|
| // SkDrawFilter interface.
|
| @@ -348,9 +360,10 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
|
| }
|
| virtual void CompleteOnOriginThread() OVERRIDE {}
|
|
|
| - private:
|
| + protected:
|
| virtual ~RasterFinishedWorkerPoolTaskImpl() {}
|
|
|
| + private:
|
| void RunOnOriginThread() const {
|
| on_raster_finished_callback_.Run(this);
|
| }
|
| @@ -361,6 +374,43 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
|
| DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl);
|
| };
|
|
|
| +class RasterRequiredForActivationFinishedWorkerPoolTaskImpl
|
| + : public RasterFinishedWorkerPoolTaskImpl {
|
| + public:
|
| + RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
|
| + const Callback& on_raster_finished_callback,
|
| + size_t tasks_required_for_activation_count)
|
| + : RasterFinishedWorkerPoolTaskImpl(on_raster_finished_callback),
|
| + 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_);
|
| + }
|
| + }
|
| +
|
| + // Overridden from RasterFinishedWorkerPoolTaskImpl:
|
| + virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
|
| + TRACE_EVENT0("cc",
|
| + "RasterRequiredForActivationFinishedWorkerPoolTaskImpl::"
|
| + "RunOnWorkerThread");
|
| + if (tasks_required_for_activation_count_) {
|
| + g_raster_required_for_activation_delay.Get().delay->EndParallel(
|
| + activation_delay_end_time_);
|
| + }
|
| + RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread(thread_index);
|
| + }
|
| +
|
| + private:
|
| + virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {}
|
| +
|
| + base::TimeTicks activation_delay_end_time_;
|
| + const size_t tasks_required_for_activation_count_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(
|
| + RasterRequiredForActivationFinishedWorkerPoolTaskImpl);
|
| +};
|
| +
|
| const char* kWorkerThreadNamePrefix = "CompositorRaster";
|
|
|
| } // namespace
|
| @@ -598,11 +648,13 @@ scoped_refptr<internal::WorkerPoolTask>
|
| }
|
|
|
| scoped_refptr<internal::WorkerPoolTask>
|
| - RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() {
|
| + RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
|
| + size_t tasks_required_for_activation_count) {
|
| return make_scoped_refptr(
|
| - new RasterFinishedWorkerPoolTaskImpl(
|
| + new RasterRequiredForActivationFinishedWorkerPoolTaskImpl(
|
| base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
|
| - weak_ptr_factory_.GetWeakPtr())));
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + tasks_required_for_activation_count));
|
| }
|
|
|
| void RasterWorkerPool::OnRasterFinished(
|
|
|