// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_AUDIO_ALIVE_CHECKER_H_ #define MEDIA_AUDIO_ALIVE_CHECKER_H_ #include <memory> #include "base/functional/callback_forward.h" #include "base/memory/scoped_refptr.h" #include "base/memory/weak_ptr.h" #include "base/task/sequenced_task_runner.h" #include "base/task/single_thread_task_runner.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "media/audio/power_observer_helper.h" #include "media/base/media_export.h" namespace media { // A class that checks if a client that is expected to have regular activity // is alive. For example, audio streams expect regular callbacks from the // operating system. The client informs regularly that it's alive by calling // NotifyAlive(). At a certain interval the AliveChecker checks that it has been // notified within a timeout period. If not, it runs a callback to inform about // detecting dead. The callback is run once and further checking is stopped at // detection. Checking can be restarted if desired. // // The AliveChecker can pause checking when the machine is suspending, i.e. // between suspend and resume notification from base::PowerMonitor. Checking // during this period can cause false positives. Shorter timeout gives higher // risk of false positives. // // It lives on the task runner it's created on; all functions except // NotifyAlive() must be called on it. NotifyAlive() can be called on any task // runner. // // It stops at the first NotifyAlive() call if // |stop_at_first_alive_notification| is specified at construction time. This // can be useful for example if the platform doesn't support suspend/resume // notifications, as Linux. class MEDIA_EXPORT AliveChecker { … }; } // namespace media #endif // MEDIA_AUDIO_ALIVE_CHECKER_H_