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

Side by Side Diff: chrome/browser/chromeos/memory/oom_priority_manager_unittest.cc

Issue 1188823002: [MemoryPressure] Move chrome/browser/chromeos/* to chrome/browser/memory/*. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed sky@ comments. Created 5 years, 6 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include <algorithm>
6 #include <vector>
7
8 #include "base/logging.h"
9 #include "base/strings/string16.h"
10 #include "base/time/time.h"
11 #include "chrome/browser/chromeos/memory/oom_priority_manager.h"
12 #include "chrome/common/url_constants.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "url/gurl.h"
15
16 namespace chromeos {
17
18 typedef testing::Test OomPriorityManagerTest;
19
20 namespace {
21 enum TestIndicies {
22 kSelected,
23 kPinned,
24 kApp,
25 kPlayingAudio,
26 kRecent,
27 kOld,
28 kReallyOld,
29 kOldButPinned,
30 kReloadableUI,
31 };
32 } // namespace
33
34 // Tests the sorting comparator so that we know it's producing the
35 // desired order.
36 TEST_F(OomPriorityManagerTest, Comparator) {
37 chromeos::OomPriorityManager::TabStatsList test_list;
38 const base::TimeTicks now = base::TimeTicks::Now();
39
40 // Add kSelected last to verify we are sorting the array.
41
42 {
43 OomPriorityManager::TabStats stats;
44 stats.is_pinned = true;
45 stats.renderer_handle = kPinned;
46 stats.child_process_host_id = kPinned;
47 test_list.push_back(stats);
48 }
49
50 {
51 OomPriorityManager::TabStats stats;
52 stats.is_app = true;
53 stats.renderer_handle = kApp;
54 stats.child_process_host_id = kApp;
55 test_list.push_back(stats);
56 }
57
58 {
59 OomPriorityManager::TabStats stats;
60 stats.is_playing_audio = true;
61 stats.renderer_handle = kPlayingAudio;
62 stats.child_process_host_id = kPlayingAudio;
63 test_list.push_back(stats);
64 }
65
66 {
67 OomPriorityManager::TabStats stats;
68 stats.last_active = now - base::TimeDelta::FromSeconds(10);
69 stats.renderer_handle = kRecent;
70 stats.child_process_host_id = kRecent;
71 test_list.push_back(stats);
72 }
73
74 {
75 OomPriorityManager::TabStats stats;
76 stats.last_active = now - base::TimeDelta::FromMinutes(15);
77 stats.renderer_handle = kOld;
78 stats.child_process_host_id = kOld;
79 test_list.push_back(stats);
80 }
81
82 {
83 OomPriorityManager::TabStats stats;
84 stats.last_active = now - base::TimeDelta::FromDays(365);
85 stats.renderer_handle = kReallyOld;
86 stats.child_process_host_id = kReallyOld;
87 test_list.push_back(stats);
88 }
89
90 {
91 OomPriorityManager::TabStats stats;
92 stats.is_pinned = true;
93 stats.last_active = now - base::TimeDelta::FromDays(365);
94 stats.renderer_handle = kOldButPinned;
95 stats.child_process_host_id = kOldButPinned;
96 test_list.push_back(stats);
97 }
98
99 {
100 OomPriorityManager::TabStats stats;
101 stats.is_reloadable_ui = true;
102 stats.renderer_handle = kReloadableUI;
103 stats.child_process_host_id = kReloadableUI;
104 test_list.push_back(stats);
105 }
106
107 // This entry sorts to the front, so by adding it last we verify that
108 // we are actually sorting the array.
109 {
110 OomPriorityManager::TabStats stats;
111 stats.is_selected = true;
112 stats.renderer_handle = kSelected;
113 stats.child_process_host_id = kSelected;
114 test_list.push_back(stats);
115 }
116
117 std::sort(test_list.begin(),
118 test_list.end(),
119 OomPriorityManager::CompareTabStats);
120
121 int index = 0;
122 EXPECT_EQ(kSelected, test_list[index++].renderer_handle);
123 EXPECT_EQ(kPinned, test_list[index++].renderer_handle);
124 EXPECT_EQ(kOldButPinned, test_list[index++].renderer_handle);
125 EXPECT_EQ(kApp, test_list[index++].renderer_handle);
126 EXPECT_EQ(kPlayingAudio, test_list[index++].renderer_handle);
127 EXPECT_EQ(kRecent, test_list[index++].renderer_handle);
128 EXPECT_EQ(kOld, test_list[index++].renderer_handle);
129 EXPECT_EQ(kReallyOld, test_list[index++].renderer_handle);
130 EXPECT_EQ(kReloadableUI, test_list[index++].renderer_handle);
131
132 index = 0;
133 EXPECT_EQ(kSelected, test_list[index++].child_process_host_id);
134 EXPECT_EQ(kPinned, test_list[index++].child_process_host_id);
135 EXPECT_EQ(kOldButPinned, test_list[index++].child_process_host_id);
136 EXPECT_EQ(kApp, test_list[index++].child_process_host_id);
137 EXPECT_EQ(kPlayingAudio, test_list[index++].child_process_host_id);
138 EXPECT_EQ(kRecent, test_list[index++].child_process_host_id);
139 EXPECT_EQ(kOld, test_list[index++].child_process_host_id);
140 EXPECT_EQ(kReallyOld, test_list[index++].child_process_host_id);
141 EXPECT_EQ(kReloadableUI, test_list[index++].child_process_host_id);
142 }
143
144 TEST_F(OomPriorityManagerTest, IsReloadableUI) {
145 EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
146 GURL(chrome::kChromeUIDownloadsURL)));
147 EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
148 GURL(chrome::kChromeUIHistoryURL)));
149 EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
150 GURL(chrome::kChromeUINewTabURL)));
151 EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
152 GURL(chrome::kChromeUISettingsURL)));
153
154 // Debugging URLs are not included.
155 EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
156 GURL(chrome::kChromeUIDiscardsURL)));
157 EXPECT_FALSE(OomPriorityManager::IsReloadableUI(
158 GURL(chrome::kChromeUINetInternalsURL)));
159
160 // Prefix matches are included.
161 EXPECT_TRUE(OomPriorityManager::IsReloadableUI(
162 GURL("chrome://settings/fakeSetting")));
163 }
164
165 TEST_F(OomPriorityManagerTest, GetProcessHandles) {
166 OomPriorityManager::TabStats stats;
167 std::vector<OomPriorityManager::ProcessInfo> process_id_pairs;
168
169 // Empty stats list gives empty |process_id_pairs| list.
170 OomPriorityManager::TabStatsList empty_list;
171 process_id_pairs =
172 OomPriorityManager::GetChildProcessInfos(empty_list);
173 EXPECT_EQ(0u, process_id_pairs.size());
174
175 // Two tabs in two different processes generates two
176 // |child_process_host_id| out.
177 OomPriorityManager::TabStatsList two_list;
178 stats.child_process_host_id = 100;
179 stats.renderer_handle = 101;
180 two_list.push_back(stats);
181 stats.child_process_host_id = 200;
182 stats.renderer_handle = 201;
183 two_list.push_back(stats);
184 process_id_pairs = OomPriorityManager::GetChildProcessInfos(two_list);
185 EXPECT_EQ(2u, process_id_pairs.size());
186 EXPECT_EQ(100, process_id_pairs[0].first);
187 EXPECT_EQ(101, process_id_pairs[0].second);
188 EXPECT_EQ(200, process_id_pairs[1].first);
189 EXPECT_EQ(201, process_id_pairs[1].second);
190
191 // Zero handles are removed.
192 OomPriorityManager::TabStatsList zero_handle_list;
193 stats.child_process_host_id = 100;
194 stats.renderer_handle = 0;
195 zero_handle_list.push_back(stats);
196 process_id_pairs =
197 OomPriorityManager::GetChildProcessInfos(zero_handle_list);
198 EXPECT_EQ(0u, process_id_pairs.size());
199
200 // Two tabs in the same process generates one handle out. When a duplicate
201 // occurs the later instance is dropped.
202 OomPriorityManager::TabStatsList same_process_list;
203 stats.child_process_host_id = 100;
204 stats.renderer_handle = 101;
205 same_process_list.push_back(stats);
206 stats.child_process_host_id = 200;
207 stats.renderer_handle = 201;
208 same_process_list.push_back(stats);
209 stats.child_process_host_id = 300;
210 stats.renderer_handle = 101; // Duplicate.
211 same_process_list.push_back(stats);
212 process_id_pairs =
213 OomPriorityManager::GetChildProcessInfos(same_process_list);
214 EXPECT_EQ(2u, process_id_pairs.size());
215 EXPECT_EQ(100, process_id_pairs[0].first);
216 EXPECT_EQ(101, process_id_pairs[0].second);
217 EXPECT_EQ(200, process_id_pairs[1].first);
218 EXPECT_EQ(201, process_id_pairs[1].second);
219 }
220
221 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698