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

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: Clarify effects of race condition. 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
« no previous file with comments | « no previous file | cc/trees/thread_proxy.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 67c548f19df92fe1f0990475689a157718a7d392..65da1153de09b98965a946a18509e088259327e1 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"
@@ -18,6 +19,10 @@ namespace cc {
namespace {
+// Synthetic delay for raster tasks that are required for activation. Global to
+// avoid static initializer on critical path.
+base::debug::TraceEventSyntheticDelay* g_raster_required_for_activation_delay;
+
// Subclass of Allocator that takes a suitably allocated pointer and uses
// it as the pixel memory for the bitmap.
class IdentityAllocator : public SkBitmap::Allocator {
@@ -191,6 +196,7 @@ class RasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
}
ChangeBitmapConfigIfNeeded(bitmap, buffer);
+ g_raster_required_for_activation_delay->End();
return true;
}
@@ -466,6 +472,9 @@ RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider,
client_(NULL),
resource_provider_(resource_provider),
weak_ptr_factory_(this) {
+ g_raster_required_for_activation_delay =
+ base::debug::TraceEventSyntheticDelay::Lookup(
+ "cc.RasterRequiredForActivation");
reveman 2013/12/12 19:29:43 what if this is done on two threads at the same ti
}
RasterWorkerPool::~RasterWorkerPool() {
@@ -487,6 +496,14 @@ void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) {
raster_tasks_.swap(queue->tasks_);
raster_tasks_required_for_activation_.swap(
queue->tasks_required_for_activation_);
+ // Note: a raster task from the previous task set may call End() even after
+ // this reset. When this happens, the synthetic delay will get activated
+ // early, increasing the total activation delay the length of one raster
+ // task. Because tasks from the old set may still be needed to activate the
+ // new tree, we can't entirely discount them. This is therefore a compromise
+ // to ensure the activation delay is always at least as long as configured.
+ g_raster_required_for_activation_delay->ResetAndBeginMultiple(
+ raster_tasks_required_for_activation_.size());
reveman 2013/12/12 19:29:43 This seems a bit too flaky to me. Could we do this
}
bool RasterWorkerPool::IsRasterTaskRequiredForActivation(
« no previous file with comments | « no previous file | cc/trees/thread_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698