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

Unified Diff: base/task_scheduler/scheduler_worker.cc

Issue 2430633003: TaskScheduler: Record TaskScheduler.NumTasksBeforeDetach.* from OnDetach(). (Closed)
Patch Set: self-review Created 4 years, 2 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
Index: base/task_scheduler/scheduler_worker.cc
diff --git a/base/task_scheduler/scheduler_worker.cc b/base/task_scheduler/scheduler_worker.cc
index 59b756c019da77ba2c0b92bcb0a60a55707e4c81..ff3c09751b607b2d451e1a7f9c7b6369a51ea6bd 100644
--- a/base/task_scheduler/scheduler_worker.cc
+++ b/base/task_scheduler/scheduler_worker.cc
@@ -36,10 +36,7 @@ class SchedulerWorker::Thread : public PlatformThread::Delegate {
// Set if this thread was detached.
std::unique_ptr<Thread> detached_thread;
- outer_->delegate_->OnMainEntry(
- outer_, outer_->last_detach_time_.is_null()
- ? TimeDelta::Max()
- : TimeTicks::Now() - outer_->last_detach_time_);
+ outer_->delegate_->OnMainEntry(outer_);
// A SchedulerWorker starts out waiting for work.
WaitForWork();
@@ -60,9 +57,9 @@ class SchedulerWorker::Thread : public PlatformThread::Delegate {
if (outer_->delegate_->CanDetach(outer_)) {
detached_thread = outer_->Detach();
if (detached_thread) {
+ outer_ = nullptr;
DCHECK_EQ(detached_thread.get(), this);
PlatformThread::Detach(thread_handle_);
- outer_ = nullptr;
break;
}
}
@@ -258,7 +255,11 @@ std::unique_ptr<SchedulerWorker::Thread> SchedulerWorker::Detach() {
// guarantee that we call GetWork() after a successful wakeup.
if (thread_->IsWakeUpPending())
return nullptr;
- last_detach_time_ = TimeTicks::Now();
+
+ // Call OnDetach() within the scope of |thread_lock_| to prevent the delegate
+ // from being used concurrently from an old and a new thread.
+ delegate_->OnDetach();
+
return std::move(thread_);
}

Powered by Google App Engine
This is Rietveld 408576698