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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« 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