Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: chrome/browser/memory/tab_manager_delegate_chromeos_unittest.cc

Issue 2855973003: Revert "Do not kill recently killed ARC processes again" (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/memory/tab_manager_delegate_chromeos.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/memory/tab_manager_delegate_chromeos.h" 5 #include "chrome/browser/memory/tab_manager_delegate_chromeos.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 // chrome app. 95 // chrome app.
96 EXPECT_EQ(500, candidates[6].tab()->tab_contents_id); 96 EXPECT_EQ(500, candidates[6].tab()->tab_contents_id);
97 // internal page. 97 // internal page.
98 EXPECT_EQ(200, candidates[7].tab()->tab_contents_id); 98 EXPECT_EQ(200, candidates[7].tab()->tab_contents_id);
99 // background service. 99 // background service.
100 EXPECT_EQ("service", candidates[8].app()->process_name()); 100 EXPECT_EQ("service", candidates[8].app()->process_name());
101 } 101 }
102 102
103 class MockTabManagerDelegate : public TabManagerDelegate { 103 class MockTabManagerDelegate : public TabManagerDelegate {
104 public: 104 public:
105 MockTabManagerDelegate() 105 MockTabManagerDelegate(): TabManagerDelegate(nullptr) {
106 : TabManagerDelegate(nullptr), 106 }
107 always_return_true_from_is_recently_killed_(false) {}
108 107
109 explicit MockTabManagerDelegate(TabManagerDelegate::MemoryStat* mem_stat) 108 explicit MockTabManagerDelegate(TabManagerDelegate::MemoryStat* mem_stat)
110 : TabManagerDelegate(nullptr, mem_stat), 109 : TabManagerDelegate(nullptr, mem_stat) {
111 always_return_true_from_is_recently_killed_(false) {} 110 }
112 111
113 // unit test. 112 // unit test.
114 std::vector<int> GetKilledArcProcesses() { 113 std::vector<int> GetKilledArcProcesses() {
115 return killed_arc_processes_; 114 return killed_arc_processes_;
116 } 115 }
117 116
118 // unit test. 117 // unit test.
119 std::vector<int64_t> GetKilledTabs() { 118 std::vector<int64_t> GetKilledTabs() {
120 return killed_tabs_; 119 return killed_tabs_;
121 } 120 }
122 121
123 // unit test. 122 // unit test.
124 void Clear() { 123 void Clear() {
125 killed_arc_processes_.clear(); 124 killed_arc_processes_.clear();
126 killed_tabs_.clear(); 125 killed_tabs_.clear();
127 } 126 }
128 127
129 // unit test.
130 void set_always_return_true_from_is_recently_killed(
131 bool always_return_true_from_is_recently_killed) {
132 always_return_true_from_is_recently_killed_ =
133 always_return_true_from_is_recently_killed;
134 }
135
136 bool IsRecentlyKilledArcProcess(const std::string& process_name,
137 const base::TimeTicks& now) override {
138 if (always_return_true_from_is_recently_killed_)
139 return true;
140 return TabManagerDelegate::IsRecentlyKilledArcProcess(process_name, now);
141 }
142
143 protected: 128 protected:
144 bool KillArcProcess(const int nspid) override { 129 bool KillArcProcess(const int nspid) override {
145 killed_arc_processes_.push_back(nspid); 130 killed_arc_processes_.push_back(nspid);
146 return true; 131 return true;
147 } 132 }
148 133
149 bool KillTab(int64_t tab_id) override { 134 bool KillTab(int64_t tab_id) override {
150 killed_tabs_.push_back(tab_id); 135 killed_tabs_.push_back(tab_id);
151 return true; 136 return true;
152 } 137 }
153 138
154 chromeos::DebugDaemonClient* GetDebugDaemonClient() override { 139 chromeos::DebugDaemonClient* GetDebugDaemonClient() override {
155 return &debugd_client_; 140 return &debugd_client_;
156 } 141 }
157 142
158 private: 143 private:
159 chromeos::FakeDebugDaemonClient debugd_client_; 144 chromeos::FakeDebugDaemonClient debugd_client_;
160 std::vector<int> killed_arc_processes_; 145 std::vector<int> killed_arc_processes_;
161 std::vector<int64_t> killed_tabs_; 146 std::vector<int64_t> killed_tabs_;
162 bool always_return_true_from_is_recently_killed_;
163 }; 147 };
164 148
165 class MockMemoryStat : public TabManagerDelegate::MemoryStat { 149 class MockMemoryStat : public TabManagerDelegate::MemoryStat {
166 public: 150 public:
167 MockMemoryStat() {} 151 MockMemoryStat() {}
168 ~MockMemoryStat() override {} 152 ~MockMemoryStat() override {}
169 153
170 int TargetMemoryToFreeKB() override { 154 int TargetMemoryToFreeKB() override {
171 return target_memory_to_free_kb_; 155 return target_memory_to_free_kb_;
172 } 156 }
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 EXPECT_EQ(300, oom_score_map[10]); 224 EXPECT_EQ(300, oom_score_map[10]);
241 EXPECT_EQ(344, oom_score_map[20]); 225 EXPECT_EQ(344, oom_score_map[20]);
242 EXPECT_EQ(388, oom_score_map[40]); 226 EXPECT_EQ(388, oom_score_map[40]);
243 EXPECT_EQ(431, oom_score_map[12]); 227 EXPECT_EQ(431, oom_score_map[12]);
244 EXPECT_EQ(475, oom_score_map[11]); 228 EXPECT_EQ(475, oom_score_map[11]);
245 229
246 // Lower priority part. 230 // Lower priority part.
247 EXPECT_EQ(650, oom_score_map[30]); 231 EXPECT_EQ(650, oom_score_map[30]);
248 } 232 }
249 233
250 TEST_F(TabManagerDelegateTest, IsRecentlyKilledArcProcess) {
251 constexpr char kProcessName1[] = "org.chromium.arc.test1";
252 constexpr char kProcessName2[] = "org.chromium.arc.test2";
253
254 // Not owned.
255 MockMemoryStat* memory_stat = new MockMemoryStat();
256 // Instantiate the mock instance.
257 MockTabManagerDelegate tab_manager_delegate(memory_stat);
258
259 // When the process name is not in the map, IsRecentlyKilledArcProcess should
260 // return false.
261 const base::TimeTicks now = base::TimeTicks::Now();
262 EXPECT_FALSE(
263 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
264 EXPECT_FALSE(
265 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
266
267 // Update the map to tell the manager that the process was killed very
268 // recently.
269 tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] = now;
270 EXPECT_TRUE(
271 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
272 EXPECT_FALSE(
273 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
274 tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
275 now - base::TimeDelta::FromMicroseconds(1);
276 EXPECT_TRUE(
277 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
278 EXPECT_FALSE(
279 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
280 tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
281 now - TabManagerDelegate::GetArcRespawnKillDelay();
282 EXPECT_TRUE(
283 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
284 EXPECT_FALSE(
285 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
286
287 // Update the map to tell the manager that the process was killed
288 // (GetArcRespawnKillDelay() + 1) seconds ago. In this case,
289 // IsRecentlyKilledArcProcess(kProcessName1) should return false.
290 tab_manager_delegate.recently_killed_arc_processes_[kProcessName1] =
291 now - TabManagerDelegate::GetArcRespawnKillDelay() -
292 base::TimeDelta::FromSeconds(1);
293 EXPECT_FALSE(
294 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName1, now));
295 EXPECT_FALSE(
296 tab_manager_delegate.IsRecentlyKilledArcProcess(kProcessName2, now));
297 }
298
299 TEST_F(TabManagerDelegateTest, DoNotKillRecentlyKilledArcProcesses) {
300 // Not owned.
301 MockMemoryStat* memory_stat = new MockMemoryStat();
302
303 // Instantiate the mock instance.
304 MockTabManagerDelegate tab_manager_delegate(memory_stat);
305 tab_manager_delegate.set_always_return_true_from_is_recently_killed(true);
306
307 std::vector<arc::ArcProcess> arc_processes;
308 arc_processes.emplace_back(
309 1, 10, "service", arc::mojom::ProcessState::SERVICE, kNotFocused, 500);
310
311 memory_stat->SetTargetMemoryToFreeKB(250000);
312 memory_stat->SetProcessPss(30, 10000);
313 tab_manager_delegate.LowMemoryKillImpl({} /* tab_list */, arc_processes);
314
315 auto killed_arc_processes = tab_manager_delegate.GetKilledArcProcesses();
316 EXPECT_EQ(0U, killed_arc_processes.size());
317 }
318
319 TEST_F(TabManagerDelegateTest, KillMultipleProcesses) { 234 TEST_F(TabManagerDelegateTest, KillMultipleProcesses) {
320 // Not owned. 235 // Not owned.
321 MockMemoryStat* memory_stat = new MockMemoryStat(); 236 MockMemoryStat* memory_stat = new MockMemoryStat();
322 237
323 // Instantiate the mock instance. 238 // Instantiate the mock instance.
324 MockTabManagerDelegate tab_manager_delegate(memory_stat); 239 MockTabManagerDelegate tab_manager_delegate(memory_stat);
325 240
326 std::vector<arc::ArcProcess> arc_processes; 241 std::vector<arc::ArcProcess> arc_processes;
327 arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP, 242 arc_processes.emplace_back(1, 10, "focused", arc::mojom::ProcessState::TOP,
328 kIsFocused, 100); 243 kIsFocused, 100);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 ASSERT_EQ(2U, killed_arc_processes.size()); 306 ASSERT_EQ(2U, killed_arc_processes.size());
392 EXPECT_EQ(3, killed_arc_processes[0]); 307 EXPECT_EQ(3, killed_arc_processes[0]);
393 EXPECT_EQ(5, killed_arc_processes[1]); 308 EXPECT_EQ(5, killed_arc_processes[1]);
394 // Killed tabs and their content id. 309 // Killed tabs and their content id.
395 // Note that process with pid 11 is counted twice. But so far I don't have a 310 // Note that process with pid 11 is counted twice. But so far I don't have a
396 // good way to estimate the memory freed if multiple tabs share one process. 311 // good way to estimate the memory freed if multiple tabs share one process.
397 ASSERT_EQ(3U, killed_tabs.size()); 312 ASSERT_EQ(3U, killed_tabs.size());
398 EXPECT_EQ(2, killed_tabs[0]); 313 EXPECT_EQ(2, killed_tabs[0]);
399 EXPECT_EQ(5, killed_tabs[1]); 314 EXPECT_EQ(5, killed_tabs[1]);
400 EXPECT_EQ(1, killed_tabs[2]); 315 EXPECT_EQ(1, killed_tabs[2]);
401
402 // Check that killed apps are in the map.
403 const TabManagerDelegate::KilledArcProcessesMap& processes_map =
404 tab_manager_delegate.recently_killed_arc_processes_;
405 EXPECT_EQ(2U, processes_map.size());
406 EXPECT_EQ(1U, processes_map.count("service"));
407 EXPECT_EQ(1U, processes_map.count("not-visible"));
408 } 316 }
409 317
410 } // namespace memory 318 } // namespace memory
OLDNEW
« no previous file with comments | « chrome/browser/memory/tab_manager_delegate_chromeos.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698