blob: 310ab8f65b280c1756c91bc6f1ce6dfb733c6942 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_
#define CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_
#include <optional>
#include "base/threading/thread_checker.h"
#include "base/threading/watchdog.h"
#include "base/time/time.h"
#include "build/build_config.h"
// ShutdownWatcherHelper is useless on Android because there is no shutdown,
// Chrome is always killed one way or another (swiped away in the task
// switcher, OOM-killed, etc.).
#if !BUILDFLAG(IS_ANDROID)
// This is a wrapper class for detecting hangs during shutdown.
class ShutdownWatcherHelper : public base::Watchdog::Delegate {
public:
// Create an empty holder for |shutdown_watchdog_|.
ShutdownWatcherHelper();
ShutdownWatcherHelper(const ShutdownWatcherHelper&) = delete;
ShutdownWatcherHelper& operator=(const ShutdownWatcherHelper&) = delete;
// Destructor disarm's shutdown_watchdog_ so that alarm doesn't go off.
~ShutdownWatcherHelper() override;
// Spawns a thread and starts the timer. |duration| specifies how long it will
// wait before it calls alarm.
void Arm(const base::TimeDelta& duration);
// base::Watchdog::Delegate implementation:
void Alarm() override;
private:
std::optional<base::Watchdog> shutdown_watchdog_;
THREAD_CHECKER(thread_checker_);
};
#endif // !BUILDFLAG(IS_ANDROID)
#endif // CHROME_BROWSER_METRICS_SHUTDOWN_WATCHER_HELPER_H_