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