cast_system_memory_pressure_evaluator.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. // Copyright 2016 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 CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_
  5. #define CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_
  6. #include <string>
  7. #include "base/containers/flat_set.h"
  8. #include "base/memory/scoped_refptr.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "chromecast/browser/cast_system_memory_pressure_evaluator_adjuster.h"
  11. #include "components/memory_pressure/system_memory_pressure_evaluator.h"
  12. namespace base {
  13. class SingleThreadTaskRunner;
  14. } // namespace base
  15. namespace chromecast {
  16. // Memory pressure evaluator for Cast: polls for current memory
  17. // usage periodically and sends memory pressure notifications.
  18. class CastSystemMemoryPressureEvaluator
  19. : public memory_pressure::SystemMemoryPressureEvaluator,
  20. public CastSystemMemoryPressureEvaluatorAdjuster {
  21. public:
  22. explicit CastSystemMemoryPressureEvaluator(
  23. std::unique_ptr<memory_pressure::MemoryPressureVoter> voter);
  24. CastSystemMemoryPressureEvaluator(const CastSystemMemoryPressureEvaluator&) =
  25. delete;
  26. CastSystemMemoryPressureEvaluator& operator=(
  27. const CastSystemMemoryPressureEvaluator&) = delete;
  28. ~CastSystemMemoryPressureEvaluator() override;
  29. // CastSystemMemoryPressureEvaluatorAdjuster implementation:
  30. void ConfigRelaxMemoryPressureThresholds(
  31. float relaxed_critical_memory_fraction,
  32. float relaxed_moderate_memory_fraction) override;
  33. void RelaxMemoryPressureThresholds(
  34. std::string requesting_app_session_id) override;
  35. void RestoreMemoryPressureThresholds(
  36. const std::string& requesting_app_session_id) override;
  37. private:
  38. void PollPressureLevel();
  39. void UpdateMemoryPressureLevel(
  40. base::MemoryPressureListener::MemoryPressureLevel new_level);
  41. void AdjustMemoryFractions(bool relax);
  42. // Fractions in effect.
  43. float critical_memory_fraction_;
  44. float moderate_memory_fraction_;
  45. // Fractions when the thrsholds are relaxed.
  46. float relaxed_critical_memory_fraction_;
  47. float relaxed_moderate_memory_fraction_;
  48. // When negative, no valid critical/moderate memory fraction present
  49. // in command line parameters.
  50. float const critical_memory_fraction_command_line_;
  51. float const moderate_memory_fraction_command_line_;
  52. base::flat_set<std::string> apps_needing_relaxed_memory_pressure_thresholds_;
  53. const int system_reserved_kb_;
  54. scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
  55. base::WeakPtrFactory<CastSystemMemoryPressureEvaluator> weak_ptr_factory_;
  56. };
  57. } // namespace chromecast
  58. #endif // CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_