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

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: 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 side-by-side diff with in-line comments
Download patch
Index: cc/resources/raster_worker_pool.cc
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
index 06fd18e62e0ec2bdc9d440ee0ae6eb925c867ef4..40b0546ef7bd004b9c19f43aa4c7ea6ca1b8f323 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"
@@ -35,6 +36,20 @@ class IdentityAllocator : public SkBitmap::Allocator {
// a tile is of solid color.
const bool kUseColorEstimator = true;
+template <const char* delay_name>
+struct SyntheticDelayInitializer {
+ SyntheticDelayInitializer()
+ : delay(base::debug::TraceEventSyntheticDelay::Lookup(delay_name)) {}
+ base::debug::TraceEventSyntheticDelay* delay;
+};
+
+// Synthetic delay for raster tasks that are required for activation. Global to
+// avoid static initializer on critical path.
+const char kRasterRequiredForActivation[] = "cc.RasterRequiredForActivation";
+static base::LazyInstance<
+ SyntheticDelayInitializer<kRasterRequiredForActivation> >
+ g_raster_required_for_activation_delay = LAZY_INSTANCE_INITIALIZER;
+
class DisableLCDTextFilter : public SkDrawFilter {
public:
// SkDrawFilter interface.
@@ -291,14 +306,24 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
Callback;
RasterFinishedWorkerPoolTaskImpl(
- const Callback& on_raster_finished_callback)
+ const Callback& on_raster_finished_callback,
+ bool tasks_pending_for_activation)
: origin_loop_(base::MessageLoopProxy::current().get()),
- on_raster_finished_callback_(on_raster_finished_callback) {
+ on_raster_finished_callback_(on_raster_finished_callback),
+ tasks_pending_for_activation_(tasks_pending_for_activation) {
+ if (tasks_pending_for_activation_) {
+ g_raster_required_for_activation_delay.Get().delay->BeginParallel(
+ &activation_delay_end_time_);
+ }
}
// Overridden from internal::WorkerPoolTask:
virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread");
+ 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
+ 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:
+ activation_delay_end_time_);
+ }
origin_loop_->PostTask(
FROM_HERE,
base::Bind(&RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread,
@@ -315,6 +340,8 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
scoped_refptr<base::MessageLoopProxy> origin_loop_;
const Callback on_raster_finished_callback_;
+ const bool tasks_pending_for_activation_;
+ base::TimeTicks activation_delay_end_time_;
DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl);
};
@@ -502,15 +529,18 @@ scoped_refptr<internal::WorkerPoolTask>
return make_scoped_refptr(
new RasterFinishedWorkerPoolTaskImpl(
base::Bind(&RasterWorkerPool::OnRasterFinished,
- weak_ptr_factory_.GetWeakPtr())));
+ weak_ptr_factory_.GetWeakPtr()),
+ false));
}
scoped_refptr<internal::WorkerPoolTask>
- RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask() {
+ RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
+ size_t num_tasks_pending_for_activation) {
return make_scoped_refptr(
new RasterFinishedWorkerPoolTaskImpl(
base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished,
- weak_ptr_factory_.GetWeakPtr())));
+ weak_ptr_factory_.GetWeakPtr()),
+ num_tasks_pending_for_activation > 0u));
}
void RasterWorkerPool::OnRasterFinished(

Powered by Google App Engine
This is Rietveld 408576698