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

Side by Side Diff: components/task_scheduler_util/common/variations_util_unittest.cc

Issue 2568793003: Control TaskScheduler initialization params in renderers via field trial. (Closed)
Patch Set: do not define command line functions on ios Created 3 years, 11 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 "components/task_scheduler_util/common/variations_util.h" 5 #include "components/task_scheduler_util/common/variations_util.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "build/build_config.h"
12 #include "base/command_line.h"
13 #include "base/macros.h"
14 #include "base/metrics/field_trial.h"
11 #include "base/task_scheduler/scheduler_worker_pool_params.h" 15 #include "base/task_scheduler/scheduler_worker_pool_params.h"
12 #include "base/threading/platform_thread.h" 16 #include "base/threading/platform_thread.h"
17 #include "components/variations/variations_associated_data.h"
13 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
14 19
15 namespace task_scheduler_util { 20 namespace task_scheduler_util {
16 21
17 namespace { 22 namespace {
18 23
19 using StandbyThreadPolicy = 24 using StandbyThreadPolicy =
20 base::SchedulerWorkerPoolParams::StandbyThreadPolicy; 25 base::SchedulerWorkerPoolParams::StandbyThreadPolicy;
21 using ThreadPriority = base::ThreadPriority; 26 using ThreadPriority = base::ThreadPriority;
22 27
28 constexpr char kFieldTrialName[] = "BrowserScheduler";
29 constexpr char kFieldTrialTestGroup[] = "Test";
30 constexpr char kTaskSchedulerVariationParamsSwitch[] =
31 "task-scheduler-variation-params";
32
23 std::vector<SchedulerImmutableWorkerPoolParams> GetImmutableWorkerPoolParams() { 33 std::vector<SchedulerImmutableWorkerPoolParams> GetImmutableWorkerPoolParams() {
24 std::vector<SchedulerImmutableWorkerPoolParams> constant_worker_pool_params; 34 std::vector<SchedulerImmutableWorkerPoolParams> constant_worker_pool_params;
25 constant_worker_pool_params.emplace_back("Background", 35 constant_worker_pool_params.emplace_back("Background",
26 ThreadPriority::BACKGROUND); 36 ThreadPriority::BACKGROUND);
27 constant_worker_pool_params.emplace_back("BackgroundFileIO", 37 constant_worker_pool_params.emplace_back("BackgroundFileIO",
28 ThreadPriority::BACKGROUND); 38 ThreadPriority::BACKGROUND);
29 constant_worker_pool_params.emplace_back("Foreground", 39 constant_worker_pool_params.emplace_back("Foreground",
30 ThreadPriority::NORMAL); 40 ThreadPriority::NORMAL);
31 constant_worker_pool_params.emplace_back("ForegroundFileIO", 41 constant_worker_pool_params.emplace_back("ForegroundFileIO",
32 ThreadPriority::NORMAL); 42 ThreadPriority::NORMAL);
33 return constant_worker_pool_params; 43 return constant_worker_pool_params;
34 } 44 }
35 45
46 class TaskSchedulerUtilVariationsUtilTest : public testing::Test {
47 public:
48 TaskSchedulerUtilVariationsUtilTest() : field_trial_list_(nullptr) {}
49 ~TaskSchedulerUtilVariationsUtilTest() override {
50 // Ensure that the maps are cleared between tests, since they are stored as
51 // process singletons.
52 variations::testing::ClearAllVariationIDs();
53 variations::testing::ClearAllVariationParams();
54 }
55
56 private:
57 base::FieldTrialList field_trial_list_;
58
59 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerUtilVariationsUtilTest);
60 };
61
36 } // namespace 62 } // namespace
37 63
38 TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { 64 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) {
39 std::map<std::string, std::string> variation_params; 65 std::map<std::string, std::string> variation_params;
40 variation_params["Background"] = "1;1;1;0;42"; 66 variation_params["Background"] = "1;1;1;0;42";
41 variation_params["BackgroundFileIO"] = "2;2;1;0;52"; 67 variation_params["BackgroundFileIO"] = "2;2;1;0;52";
42 variation_params["Foreground"] = "4;4;1;0;62"; 68 variation_params["Foreground"] = "4;4;1;0;62";
43 variation_params["ForegroundFileIO"] = "8;8;1;0;72"; 69 variation_params["ForegroundFileIO"] = "8;8;1;0;72";
44 70
45 auto params_vector = 71 auto params_vector =
46 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params); 72 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params);
47 ASSERT_EQ(4U, params_vector.size()); 73 ASSERT_EQ(4U, params_vector.size());
48 74
(...skipping 19 matching lines...) Expand all
68 params_vector[2].suggested_reclaim_time()); 94 params_vector[2].suggested_reclaim_time());
69 95
70 EXPECT_EQ("ForegroundFileIO", params_vector[3].name()); 96 EXPECT_EQ("ForegroundFileIO", params_vector[3].name());
71 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint()); 97 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint());
72 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); 98 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy());
73 EXPECT_EQ(8U, params_vector[3].max_threads()); 99 EXPECT_EQ(8U, params_vector[3].max_threads());
74 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), 100 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72),
75 params_vector[3].suggested_reclaim_time()); 101 params_vector[3].suggested_reclaim_time());
76 } 102 }
77 103
78 TEST(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { 104 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) {
79 std::map<std::string, std::string> variation_params; 105 std::map<std::string, std::string> variation_params;
80 variation_params["Background"] = "1;1;1;0;42;lazy"; 106 variation_params["Background"] = "1;1;1;0;42;lazy";
81 variation_params["BackgroundFileIO"] = "2;2;1;0;52;one"; 107 variation_params["BackgroundFileIO"] = "2;2;1;0;52;one";
82 variation_params["Foreground"] = "4;4;1;0;62;lazy"; 108 variation_params["Foreground"] = "4;4;1;0;62;lazy";
83 variation_params["ForegroundFileIO"] = "8;8;1;0;72;one"; 109 variation_params["ForegroundFileIO"] = "8;8;1;0;72;one";
84 110
85 auto params_vector = 111 auto params_vector =
86 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params); 112 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params);
87 ASSERT_EQ(4U, params_vector.size()); 113 ASSERT_EQ(4U, params_vector.size());
88 114
(...skipping 21 matching lines...) Expand all
110 params_vector[2].suggested_reclaim_time()); 136 params_vector[2].suggested_reclaim_time());
111 137
112 EXPECT_EQ("ForegroundFileIO", params_vector[3].name()); 138 EXPECT_EQ("ForegroundFileIO", params_vector[3].name());
113 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint()); 139 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint());
114 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); 140 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy());
115 EXPECT_EQ(8U, params_vector[3].max_threads()); 141 EXPECT_EQ(8U, params_vector[3].max_threads());
116 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), 142 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72),
117 params_vector[3].suggested_reclaim_time()); 143 params_vector[3].suggested_reclaim_time());
118 } 144 }
119 145
120 TEST(TaskSchedulerUtilVariationsUtilTest, NoData) { 146 TEST_F(TaskSchedulerUtilVariationsUtilTest, NoData) {
121 EXPECT_TRUE(GetWorkerPoolParams(GetImmutableWorkerPoolParams(), 147 EXPECT_TRUE(GetWorkerPoolParams(GetImmutableWorkerPoolParams(),
122 std::map<std::string, std::string>()) 148 std::map<std::string, std::string>())
123 .empty()); 149 .empty());
124 } 150 }
125 151
126 TEST(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { 152 TEST_F(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) {
127 std::map<std::string, std::string> variation_params; 153 std::map<std::string, std::string> variation_params;
128 variation_params["Background"] = "1;1;1;0"; 154 variation_params["Background"] = "1;1;1;0";
129 variation_params["BackgroundFileIO"] = "2;2;1;0"; 155 variation_params["BackgroundFileIO"] = "2;2;1;0";
130 variation_params["Foreground"] = "4;4;1;0"; 156 variation_params["Foreground"] = "4;4;1;0";
131 variation_params["ForegroundFileIO"] = "8;8;1;0"; 157 variation_params["ForegroundFileIO"] = "8;8;1;0";
132 EXPECT_TRUE( 158 EXPECT_TRUE(
133 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params) 159 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params)
134 .empty()); 160 .empty());
135 } 161 }
136 162
137 TEST(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { 163 TEST_F(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) {
138 std::map<std::string, std::string> variation_params; 164 std::map<std::string, std::string> variation_params;
139 variation_params["Background"] = "a;b;c;d;e"; 165 variation_params["Background"] = "a;b;c;d;e";
140 variation_params["BackgroundFileIO"] = "a;b;c;d;e"; 166 variation_params["BackgroundFileIO"] = "a;b;c;d;e";
141 variation_params["Foreground"] = "a;b;c;d;e"; 167 variation_params["Foreground"] = "a;b;c;d;e";
142 variation_params["ForegroundFileIO"] = "a;b;c;d;e"; 168 variation_params["ForegroundFileIO"] = "a;b;c;d;e";
143 EXPECT_TRUE( 169 EXPECT_TRUE(
144 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params) 170 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params)
145 .empty()); 171 .empty());
146 } 172 }
147 173
174 #if !defined(OS_IOS)
175 // Verify that AddVariationParamsToCommandLine() serializes BrowserScheduler
176 // variation params that start with the specified prefix to the command line and
177 // that GetVariationParamsFromCommandLine() correctly deserializes them.
178 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLine) {
179 std::map<std::string, std::string> in_variation_params;
180 in_variation_params["PrefixFoo"] = "Foo";
181 in_variation_params["PrefixBar"] = "Bar";
182 in_variation_params["NoPrefix"] = "NoPrefix";
183 ASSERT_TRUE(variations::AssociateVariationParams(
184 kFieldTrialName, kFieldTrialTestGroup, in_variation_params));
185
186 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
187 AddVariationParamsToCommandLine("Prefix", &command_line);
188 const std::map<std::string, std::string> out_variation_params =
189 GetVariationParamsFromCommandLine(command_line);
190
191 std::map<std::string, std::string> expected_out_variation_params;
192 expected_out_variation_params["PrefixFoo"] = "Foo";
193 expected_out_variation_params["PrefixBar"] = "Bar";
194 EXPECT_EQ(expected_out_variation_params, out_variation_params);
195 }
196
197 // Verify that AddVariationParamsToCommandLine() doesn't add anything to the
198 // command line when a BrowserScheduler variation param key contains |. A key
199 // that contains | wouldn't be deserialized correctly by
200 // GetVariationParamsFromCommandLine().
201 TEST_F(TaskSchedulerUtilVariationsUtilTest,
202 CommandLineSeparatorInVariationParamsKey) {
203 std::map<std::string, std::string> in_variation_params;
204 in_variation_params["PrefixFoo"] = "Foo";
205 in_variation_params["PrefixKey|"] = "Value";
206 ASSERT_TRUE(variations::AssociateVariationParams(
207 kFieldTrialName, kFieldTrialTestGroup, in_variation_params));
208
209 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
210 AddVariationParamsToCommandLine("Prefix", &command_line);
211 EXPECT_TRUE(
212 command_line.GetSwitchValueASCII(kTaskSchedulerVariationParamsSwitch)
213 .empty());
214 }
215
216 // Verify that AddVariationParamsToCommandLine() doesn't add anything to the
217 // command line when a BrowserScheduler variation param value contains |. A
218 // value that contains | wouldn't be deserialized correctly by
219 // GetVariationParamsFromCommandLine().
220 TEST_F(TaskSchedulerUtilVariationsUtilTest,
221 CommandLineSeparatorInVariationParamsValue) {
222 std::map<std::string, std::string> in_variation_params;
223 in_variation_params["PrefixFoo"] = "Foo";
224 in_variation_params["PrefixKey"] = "Value|";
225 ASSERT_TRUE(variations::AssociateVariationParams(
226 kFieldTrialName, kFieldTrialTestGroup, in_variation_params));
227
228 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
229 AddVariationParamsToCommandLine("Prefix", &command_line);
230 EXPECT_TRUE(
231 command_line.GetSwitchValueASCII(kTaskSchedulerVariationParamsSwitch)
232 .empty());
233 }
234
235 // Verify that GetVariationParamsFromCommandLine() returns an empty map when the
236 // command line doesn't have a --task-scheduler-variation-params switch.
237 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLineNoSwitch) {
238 base::CommandLine command_line(base::CommandLine::NO_PROGRAM);
239 EXPECT_TRUE(GetVariationParamsFromCommandLine(command_line).empty());
240 }
241 #endif // !defined(OS_IOS)
242
148 } // namespace task_scheduler_util 243 } // namespace task_scheduler_util
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698