// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_
#define CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_
#include <string>
#include "base/containers/flat_set.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "chromecast/browser/cast_system_memory_pressure_evaluator_adjuster.h"
#include "components/memory_pressure/system_memory_pressure_evaluator.h"
namespace base {
class SingleThreadTaskRunner;
} // namespace base
namespace chromecast {
// Memory pressure evaluator for Cast: polls for current memory
// usage periodically and sends memory pressure notifications.
class CastSystemMemoryPressureEvaluator
: public memory_pressure::SystemMemoryPressureEvaluator,
public CastSystemMemoryPressureEvaluatorAdjuster {
public:
explicit CastSystemMemoryPressureEvaluator(
std::unique_ptr<memory_pressure::MemoryPressureVoter> voter);
CastSystemMemoryPressureEvaluator(const CastSystemMemoryPressureEvaluator&) =
delete;
CastSystemMemoryPressureEvaluator& operator=(
const CastSystemMemoryPressureEvaluator&) = delete;
~CastSystemMemoryPressureEvaluator() override;
// CastSystemMemoryPressureEvaluatorAdjuster implementation:
void ConfigRelaxMemoryPressureThresholds(
float relaxed_critical_memory_fraction,
float relaxed_moderate_memory_fraction) override;
void RelaxMemoryPressureThresholds(
std::string requesting_app_session_id) override;
void RestoreMemoryPressureThresholds(
const std::string& requesting_app_session_id) override;
private:
void PollPressureLevel();
void UpdateMemoryPressureLevel(
base::MemoryPressureListener::MemoryPressureLevel new_level);
void AdjustMemoryFractions(bool relax);
// Fractions in effect.
float critical_memory_fraction_;
float moderate_memory_fraction_;
// Fractions when the thrsholds are relaxed.
float relaxed_critical_memory_fraction_;
float relaxed_moderate_memory_fraction_;
// When negative, no valid critical/moderate memory fraction present
// in command line parameters.
float const critical_memory_fraction_command_line_;
float const moderate_memory_fraction_command_line_;
base::flat_set<std::string> apps_needing_relaxed_memory_pressure_thresholds_;
const int system_reserved_kb_;
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
base::WeakPtrFactory<CastSystemMemoryPressureEvaluator> weak_ptr_factory_;
};
} // namespace chromecast
#endif // CHROMECAST_BROWSER_CAST_SYSTEM_MEMORY_PRESSURE_EVALUATOR_H_