cpu_probe.cc 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // Copyright 2021 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. #include "services/device/compute_pressure/cpu_probe.h"
  5. #include <memory>
  6. #include "base/sequence_checker.h"
  7. #include "base/threading/scoped_blocking_call.h"
  8. #include "build/build_config.h"
  9. #include "services/device/compute_pressure/pressure_sample.h"
  10. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  11. #include "services/device/compute_pressure/cpu_probe_linux.h"
  12. #elif BUILDFLAG(IS_WIN)
  13. #include "services/device/compute_pressure/cpu_probe_win.h"
  14. #elif BUILDFLAG(IS_MAC)
  15. #include "services/device/compute_pressure/cpu_probe_mac.h"
  16. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  17. namespace device {
  18. constexpr PressureSample CpuProbe::kUnsupportedValue;
  19. CpuProbe::CpuProbe() = default;
  20. CpuProbe::~CpuProbe() = default;
  21. // Default implementation for platforms that don't have one.
  22. class NullCpuProbe : public CpuProbe {
  23. public:
  24. NullCpuProbe() { DETACH_FROM_SEQUENCE(sequence_checker_); }
  25. ~NullCpuProbe() override {
  26. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  27. }
  28. // CpuProbe implementation.
  29. void Update() override {
  30. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  31. // Ensure that this method is called on a sequence that is allowed to do
  32. // IO, even on OSes that don't have a CpuProbe implementation yet.
  33. base::ScopedBlockingCall scoped_blocking_call(
  34. FROM_HERE, base::BlockingType::MAY_BLOCK);
  35. }
  36. PressureSample LastSample() override {
  37. DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
  38. return CpuProbe::kUnsupportedValue;
  39. }
  40. private:
  41. SEQUENCE_CHECKER(sequence_checker_);
  42. };
  43. // static
  44. std::unique_ptr<CpuProbe> CpuProbe::Create() {
  45. #if BUILDFLAG(IS_ANDROID)
  46. return nullptr;
  47. #elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  48. return CpuProbeLinux::Create();
  49. #elif BUILDFLAG(IS_WIN)
  50. return CpuProbeWin::Create();
  51. #elif BUILDFLAG(IS_MAC)
  52. return CpuProbeMac::Create();
  53. #else
  54. return std::make_unique<NullCpuProbe>();
  55. #endif // BUILDFLAG(IS_ANDROID)
  56. }
  57. } // namespace device