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

Unified Diff: cc/worker_pool.cc

Issue 12095053: cc: Avoid expensive RenderingStats collection. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 7 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/worker_pool.h ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/worker_pool.cc
diff --git a/cc/worker_pool.cc b/cc/worker_pool.cc
index 684e15e454319e6c9da7cc445fec048a802adca5..5797ab473c30aa4169f7136544aef5e3fe79e870 100644
--- a/cc/worker_pool.cc
+++ b/cc/worker_pool.cc
@@ -26,8 +26,8 @@ class WorkerPoolTaskImpl : public internal::WorkerPoolTask {
: internal::WorkerPoolTask(reply),
task_(task) {}
- virtual void Run() OVERRIDE {
- task_.Run(&rendering_stats_);
+ virtual void Run(RenderingStats* rendering_stats) OVERRIDE {
+ task_.Run(rendering_stats);
}
private:
@@ -57,10 +57,14 @@ void WorkerPoolTask::Completed() {
} // namespace internal
-WorkerPool::Worker::Worker(WorkerPool* worker_pool, const std::string name)
+WorkerPool::Worker::Worker(
+ WorkerPool* worker_pool,
+ const std::string name,
+ scoped_ptr<RenderingStats> rendering_stats)
: base::Thread(name.c_str()),
worker_pool_(worker_pool),
- weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
+ weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
+ rendering_stats_(rendering_stats.Pass()) {
Start();
DCHECK(IsRunning());
}
@@ -88,7 +92,9 @@ void WorkerPool::Worker::PostTask(scoped_ptr<internal::WorkerPoolTask> task) {
message_loop_proxy()->PostTaskAndReply(
FROM_HERE,
- base::Bind(&Worker::RunTask, base::Unretained(task.get())),
+ base::Bind(&Worker::RunTask,
+ base::Unretained(task.get()),
+ base::Unretained(rendering_stats_.get())),
base::Bind(&Worker::OnTaskCompleted, weak_ptr_factory_.GetWeakPtr()));
pending_tasks_.push_back(task.Pass());
@@ -105,39 +111,32 @@ void WorkerPool::Worker::Init() {
}
// static
-void WorkerPool::Worker::RunTask(internal::WorkerPoolTask* task) {
- task->Run();
+void WorkerPool::Worker::RunTask(
+ internal::WorkerPoolTask* task, RenderingStats* rendering_stats) {
+ task->Run(rendering_stats);
}
void WorkerPool::Worker::OnTaskCompleted() {
CHECK(!pending_tasks_.empty());
scoped_ptr<internal::WorkerPoolTask> task = pending_tasks_.take_front();
-
task->Completed();
- rendering_stats_.totalRasterizeTime +=
- task->rendering_stats().totalRasterizeTime;
- rendering_stats_.totalPixelsRasterized +=
- task->rendering_stats().totalPixelsRasterized;
- rendering_stats_.totalDeferredImageDecodeTime +=
- task->rendering_stats().totalDeferredImageDecodeTime;
- rendering_stats_.totalDeferredImageDecodeCount +=
- task->rendering_stats().totalDeferredImageDecodeCount;
-
worker_pool_->DidNumPendingTasksChange();
}
-WorkerPool::WorkerPool(size_t num_threads)
+WorkerPool::WorkerPool(size_t num_threads, bool record_rendering_stats)
: workers_need_sorting_(false),
shutdown_(false) {
const std::string thread_name_prefix = kWorkerThreadNamePrefix;
while (workers_.size() < num_threads) {
int thread_number = workers_.size() + 1;
- workers_.push_back(
- new Worker(this,
- thread_name_prefix +
- StringPrintf("Worker%d", thread_number).c_str()));
+ scoped_ptr<RenderingStats> rendering_stats = record_rendering_stats ?
+ make_scoped_ptr(new RenderingStats) : scoped_ptr<RenderingStats>();
+ workers_.push_back(new Worker(
+ this,
+ thread_name_prefix + StringPrintf("Worker%d", thread_number).c_str(),
+ rendering_stats.Pass()));
}
}
@@ -181,14 +180,15 @@ void WorkerPool::GetRenderingStats(RenderingStats* stats) {
for (WorkerVector::iterator it = workers_.begin();
it != workers_.end(); ++it) {
Worker* worker = *it;
+ CHECK(worker->rendering_stats());
stats->totalRasterizeTime +=
- worker->rendering_stats().totalRasterizeTime;
+ worker->rendering_stats()->totalRasterizeTime;
stats->totalPixelsRasterized +=
- worker->rendering_stats().totalPixelsRasterized;
+ worker->rendering_stats()->totalPixelsRasterized;
stats->totalDeferredImageDecodeCount +=
- worker->rendering_stats().totalDeferredImageDecodeCount;
+ worker->rendering_stats()->totalDeferredImageDecodeCount;
stats->totalDeferredImageDecodeTime +=
- worker->rendering_stats().totalDeferredImageDecodeTime;
+ worker->rendering_stats()->totalDeferredImageDecodeTime;
}
}
« no previous file with comments | « cc/worker_pool.h ('k') | content/browser/web_contents/web_contents_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698