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

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

Powered by Google App Engine
This is Rietveld 408576698