power_observer_helper.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_AUDIO_POWER_OBSERVER_HELPER_H_
  5. #define MEDIA_AUDIO_POWER_OBSERVER_HELPER_H_
  6. #include "base/callback_forward.h"
  7. #include "base/gtest_prod_util.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "base/power_monitor/power_observer.h"
  10. #include "base/task/sequenced_task_runner.h"
  11. #include "media/base/media_export.h"
  12. namespace media {
  13. // Helper class that implements PowerSuspendObserver and handles threading. A
  14. // task runner is given, on which suspend and resume notification callbacks are
  15. // run. It also provides a function to check if we are suspending on the task
  16. // runner.
  17. // Note that on Linux suspend/resume information is not supported.
  18. class MEDIA_EXPORT PowerObserverHelper : public base::PowerSuspendObserver {
  19. public:
  20. PowerObserverHelper(scoped_refptr<base::SequencedTaskRunner> task_runner,
  21. base::RepeatingClosure suspend_callback,
  22. base::RepeatingClosure resume_callback);
  23. PowerObserverHelper(const PowerObserverHelper&) = delete;
  24. PowerObserverHelper& operator=(const PowerObserverHelper&) = delete;
  25. ~PowerObserverHelper() override;
  26. // Must be called on |task_runner|.
  27. virtual bool IsSuspending() const;
  28. protected:
  29. base::SequencedTaskRunner* TaskRunnerForTesting() const {
  30. return task_runner_.get();
  31. }
  32. base::RepeatingClosure* SuspendCallbackForTesting() {
  33. return &suspend_callback_;
  34. }
  35. base::RepeatingClosure* ResumeCallbackForTesting() {
  36. return &resume_callback_;
  37. }
  38. private:
  39. FRIEND_TEST_ALL_PREFIXES(PowerObserverHelperTest,
  40. SuspendAndResumeNotificationsTwice);
  41. FRIEND_TEST_ALL_PREFIXES(PowerObserverHelperTest,
  42. TwoSuspendAndTwoResumeNotifications);
  43. // The task runner on which |is_suspending_| should live and the callbacks
  44. // should be run on.
  45. scoped_refptr<base::SequencedTaskRunner> task_runner_;
  46. // Suspend and resume callbacks. Run on |task_runner_|.
  47. base::RepeatingClosure suspend_callback_;
  48. base::RepeatingClosure resume_callback_;
  49. // base::PowerSuspendObserver implementation.
  50. void OnSuspend() override;
  51. void OnResume() override;
  52. // Flag if we are suspending.
  53. bool is_suspending_ = false;
  54. base::WeakPtrFactory<PowerObserverHelper> weak_factory_{this};
  55. };
  56. } // namespace media
  57. #endif // MEDIA_AUDIO_POWER_OBSERVER_HELPER_H_