diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/base/threading/hang_watcher.cc | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/threading/hang_watcher.cc')
-rw-r--r-- | chromium/base/threading/hang_watcher.cc | 39 |
1 files changed, 13 insertions, 26 deletions
diff --git a/chromium/base/threading/hang_watcher.cc b/chromium/base/threading/hang_watcher.cc index 9a4cddea653..ccd1ea215c8 100644 --- a/chromium/base/threading/hang_watcher.cc +++ b/chromium/base/threading/hang_watcher.cc @@ -118,7 +118,6 @@ HangWatcher::HangWatcher() DCHECK(!g_instance); g_instance = this; - Start(); } HangWatcher::~HangWatcher() { @@ -147,22 +146,21 @@ void HangWatcher::Wait() { while (true) { // Amount by which the actual time spent sleeping can deviate from // the target time and still be considered timely. - constexpr base::TimeDelta wait_drift_tolerance = + constexpr base::TimeDelta kWaitDriftTolerance = base::TimeDelta::FromMilliseconds(100); - base::TimeTicks time_before_wait = tick_clock_->NowTicks(); + const base::TimeTicks time_before_wait = tick_clock_->NowTicks(); // Sleep until next scheduled monitoring or until signaled. - bool was_signaled = should_monitor_.TimedWait(monitor_period_); + const bool was_signaled = should_monitor_.TimedWait(monitor_period_); - if (after_wait_callback_) { + if (after_wait_callback_) after_wait_callback_.Run(time_before_wait); - } - base::TimeTicks time_after_wait = tick_clock_->NowTicks(); - base::TimeDelta wait_time = time_after_wait - time_before_wait; - bool wait_was_normal = - wait_time <= (monitor_period_ + wait_drift_tolerance); + const base::TimeTicks time_after_wait = tick_clock_->NowTicks(); + const base::TimeDelta wait_time = time_after_wait - time_before_wait; + const bool wait_was_normal = + wait_time <= (monitor_period_ + kWaitDriftTolerance); if (!wait_was_normal) { // If the time spent waiting was too high it might indicate the machine is @@ -190,9 +188,8 @@ void HangWatcher::Wait() { } // Stop waiting. - if (wait_was_normal || was_signaled) { + if (wait_was_normal || was_signaled) return; - } } } @@ -202,20 +199,15 @@ void HangWatcher::Run() { DCHECK_CALLED_ON_VALID_THREAD(hang_watcher_thread_checker_); while (keep_monitoring_.load(std::memory_order_relaxed)) { - // If there is nothing to watch sleep until there is. - if (IsWatchListEmpty()) { - should_monitor_.Wait(); - } else { - Monitor(); + Wait(); + if (!IsWatchListEmpty() && + keep_monitoring_.load(std::memory_order_relaxed)) { + Monitor(); if (after_monitor_closure_for_testing_) { after_monitor_closure_for_testing_.Run(); } } - - if (keep_monitoring_.load(std::memory_order_relaxed)) { - Wait(); - } } } @@ -238,11 +230,6 @@ ScopedClosureRunner HangWatcher::RegisterThread() { watch_states_.push_back( internal::HangWatchState::CreateHangWatchStateForCurrentThread()); - // Now that there is a thread to monitor we wake the HangWatcher thread. - if (watch_states_.size() == 1) { - should_monitor_.Signal(); - } - return ScopedClosureRunner(BindOnce(&HangWatcher::UnregisterThread, Unretained(HangWatcher::GetInstance()))); } |