Fix emulator build error
[platform/framework/web/chromium-efl.git] / components / memory_pressure / system_memory_pressure_evaluator_fuchsia.cc
1 // Copyright 2020 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/memory_pressure/system_memory_pressure_evaluator_fuchsia.h"
6
7 #include <lib/sys/cpp/component_context.h>
8
9 #include "base/fuchsia/fuchsia_logging.h"
10 #include "base/fuchsia/process_context.h"
11 #include "base/strings/string_piece.h"
12 #include "base/time/time.h"
13 #include "components/memory_pressure/memory_pressure_voter.h"
14
15 namespace memory_pressure {
16
17 namespace {
18
19 base::MemoryPressureListener::MemoryPressureLevel
20 FuchsiaToBaseMemoryPressureLevel(fuchsia::memorypressure::Level level) {
21   switch (level) {
22     case fuchsia::memorypressure::Level::NORMAL:
23       return base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE;
24
25     case fuchsia::memorypressure::Level::WARNING:
26       return base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE;
27
28     case fuchsia::memorypressure::Level::CRITICAL:
29       return base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL;
30   };
31 }
32
33 }  // namespace
34
35 SystemMemoryPressureEvaluatorFuchsia::SystemMemoryPressureEvaluatorFuchsia(
36     std::unique_ptr<memory_pressure::MemoryPressureVoter> voter)
37     : memory_pressure::SystemMemoryPressureEvaluator(std::move(voter)),
38       binding_(this) {
39   binding_.set_error_handler(base::LogFidlErrorAndExitProcess(
40       FROM_HERE, "fuchsia.memorypressure.Provider"));
41
42   DVLOG(1) << "Registering for memory pressure updates.";
43   auto provider = base::ComponentContextForProcess()
44                       ->svc()
45                       ->Connect<fuchsia::memorypressure::Provider>();
46   provider->RegisterWatcher(binding_.NewBinding());
47 }
48
49 SystemMemoryPressureEvaluatorFuchsia::~SystemMemoryPressureEvaluatorFuchsia() =
50     default;
51
52 void SystemMemoryPressureEvaluatorFuchsia::OnLevelChanged(
53     fuchsia::memorypressure::Level level,
54     OnLevelChangedCallback callback) {
55   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
56
57   VLOG(1) << "OnLevelChanged: level=" << static_cast<uint32_t>(level);
58
59   base::MemoryPressureListener::MemoryPressureLevel new_level =
60       FuchsiaToBaseMemoryPressureLevel(level);
61
62   VLOG(1) << "MemoryPressureLevel: " << new_level;
63
64   // Set the new vote, and determine whether to notify listeners.
65   SetCurrentVote(new_level);
66   switch (new_level) {
67     case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE:
68       // By convention no notifications are sent when returning to NONE level.
69       SendCurrentVote(false);
70       renotify_current_vote_timer_.Stop();
71       break;
72     case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_MODERATE:
73     case base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL:
74       SendCurrentVote(true);
75       // This will reset the timer if already running.
76       renotify_current_vote_timer_.Start(
77           FROM_HERE, kRenotifyVotePeriod,
78           base::BindRepeating(
79               &SystemMemoryPressureEvaluatorFuchsia::SendCurrentVote,
80               base::Unretained(this), true));
81       break;
82   }
83
84   callback();
85 }
86
87 }  // namespace memory_pressure