OLD | NEW |
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" | 11 #include "build/build_config.h" |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/metrics/field_trial.h" | 14 #include "base/metrics/field_trial.h" |
15 #include "base/task_scheduler/scheduler_worker_params.h" | 15 #include "base/task_scheduler/scheduler_worker_params.h" |
16 #include "base/task_scheduler/scheduler_worker_pool_params.h" | 16 #include "base/task_scheduler/scheduler_worker_pool_params.h" |
17 #include "base/threading/platform_thread.h" | |
18 #include "components/variations/variations_associated_data.h" | 17 #include "components/variations/variations_associated_data.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
20 | 19 |
21 namespace task_scheduler_util { | 20 namespace task_scheduler_util { |
22 | 21 |
23 namespace { | 22 namespace { |
24 | 23 |
25 using StandbyThreadPolicy = | 24 using StandbyThreadPolicy = |
26 base::SchedulerWorkerPoolParams::StandbyThreadPolicy; | 25 base::SchedulerWorkerPoolParams::StandbyThreadPolicy; |
27 using ThreadPriority = base::ThreadPriority; | 26 using SchedulerBackwardCompatibility = base::SchedulerBackwardCompatibility; |
28 | 27 |
29 #if !defined(OS_IOS) | 28 #if !defined(OS_IOS) |
30 constexpr char kFieldTrialName[] = "BrowserScheduler"; | 29 constexpr char kFieldTrialName[] = "BrowserScheduler"; |
31 constexpr char kFieldTrialTestGroup[] = "Test"; | 30 constexpr char kFieldTrialTestGroup[] = "Test"; |
32 constexpr char kTaskSchedulerVariationParamsSwitch[] = | 31 constexpr char kTaskSchedulerVariationParamsSwitch[] = |
33 "task-scheduler-variation-params"; | 32 "task-scheduler-variation-params"; |
34 #endif // !defined(OS_IOS) | 33 #endif // !defined(OS_IOS) |
35 | 34 |
36 std::vector<SchedulerImmutableWorkerPoolParams> GetImmutableWorkerPoolParams() { | |
37 std::vector<SchedulerImmutableWorkerPoolParams> constant_worker_pool_params; | |
38 constant_worker_pool_params.emplace_back("Background", | |
39 ThreadPriority::BACKGROUND); | |
40 constant_worker_pool_params.emplace_back("BackgroundFileIO", | |
41 ThreadPriority::BACKGROUND); | |
42 constant_worker_pool_params.emplace_back("Foreground", | |
43 ThreadPriority::NORMAL); | |
44 constant_worker_pool_params.emplace_back( | |
45 "ForegroundFileIO", ThreadPriority::NORMAL, | |
46 base::SchedulerBackwardCompatibility::INIT_COM_STA); | |
47 return constant_worker_pool_params; | |
48 } | |
49 | |
50 class TaskSchedulerUtilVariationsUtilTest : public testing::Test { | 35 class TaskSchedulerUtilVariationsUtilTest : public testing::Test { |
51 public: | 36 public: |
52 TaskSchedulerUtilVariationsUtilTest() : field_trial_list_(nullptr) {} | 37 TaskSchedulerUtilVariationsUtilTest() : field_trial_list_(nullptr) {} |
53 ~TaskSchedulerUtilVariationsUtilTest() override { | 38 ~TaskSchedulerUtilVariationsUtilTest() override { |
54 // Ensure that the maps are cleared between tests, since they are stored as | 39 // Ensure that the maps are cleared between tests, since they are stored as |
55 // process singletons. | 40 // process singletons. |
56 variations::testing::ClearAllVariationIDs(); | 41 variations::testing::ClearAllVariationIDs(); |
57 variations::testing::ClearAllVariationParams(); | 42 variations::testing::ClearAllVariationParams(); |
58 } | 43 } |
59 | 44 |
60 private: | 45 private: |
61 base::FieldTrialList field_trial_list_; | 46 base::FieldTrialList field_trial_list_; |
62 | 47 |
63 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerUtilVariationsUtilTest); | 48 DISALLOW_COPY_AND_ASSIGN(TaskSchedulerUtilVariationsUtilTest); |
64 }; | 49 }; |
65 | 50 |
66 } // namespace | 51 } // namespace |
67 | 52 |
68 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { | 53 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams5) { |
69 std::map<std::string, std::string> variation_params; | 54 const auto worker_pool_params_a = StringToWorkerPoolParams( |
70 variation_params["Background"] = "1;1;1;0;42"; | 55 "1;1;1;0;42", SchedulerBackwardCompatibility::DISABLED); |
71 variation_params["BackgroundFileIO"] = "2;2;1;0;52"; | 56 EXPECT_EQ(StandbyThreadPolicy::ONE, |
72 variation_params["Foreground"] = "4;4;1;0;62"; | 57 worker_pool_params_a.standby_thread_policy()); |
73 variation_params["ForegroundFileIO"] = "8;8;1;0;72"; | 58 EXPECT_EQ(1U, worker_pool_params_a.max_threads()); |
| 59 EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), |
| 60 worker_pool_params_a.suggested_reclaim_time()); |
| 61 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, |
| 62 worker_pool_params_a.backward_compatibility()); |
74 | 63 |
75 auto params_vector = | 64 const auto worker_pool_params_b = StringToWorkerPoolParams( |
76 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params); | 65 "8;8;1;0;72", SchedulerBackwardCompatibility::ENABLED); |
77 ASSERT_EQ(4U, params_vector.size()); | 66 EXPECT_EQ(StandbyThreadPolicy::ONE, |
78 | 67 worker_pool_params_b.standby_thread_policy()); |
79 EXPECT_EQ("Background", params_vector[0].name()); | 68 EXPECT_EQ(8U, worker_pool_params_b.max_threads()); |
80 EXPECT_EQ(ThreadPriority::BACKGROUND, params_vector[0].priority_hint()); | |
81 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[0].standby_thread_policy()); | |
82 EXPECT_EQ(1U, params_vector[0].max_threads()); | |
83 EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), | |
84 params_vector[0].suggested_reclaim_time()); | |
85 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
86 params_vector[0].backward_compatibility()); | |
87 | |
88 EXPECT_EQ("BackgroundFileIO", params_vector[1].name()); | |
89 EXPECT_EQ(ThreadPriority::BACKGROUND, params_vector[1].priority_hint()); | |
90 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[1].standby_thread_policy()); | |
91 EXPECT_EQ(2U, params_vector[1].max_threads()); | |
92 EXPECT_EQ(base::TimeDelta::FromMilliseconds(52), | |
93 params_vector[1].suggested_reclaim_time()); | |
94 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
95 params_vector[1].backward_compatibility()); | |
96 | |
97 EXPECT_EQ("Foreground", params_vector[2].name()); | |
98 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[2].priority_hint()); | |
99 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[2].standby_thread_policy()); | |
100 EXPECT_EQ(4U, params_vector[2].max_threads()); | |
101 EXPECT_EQ(base::TimeDelta::FromMilliseconds(62), | |
102 params_vector[2].suggested_reclaim_time()); | |
103 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
104 params_vector[2].backward_compatibility()); | |
105 | |
106 EXPECT_EQ("ForegroundFileIO", params_vector[3].name()); | |
107 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint()); | |
108 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); | |
109 EXPECT_EQ(8U, params_vector[3].max_threads()); | |
110 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), | 69 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), |
111 params_vector[3].suggested_reclaim_time()); | 70 worker_pool_params_b.suggested_reclaim_time()); |
112 EXPECT_EQ(base::SchedulerBackwardCompatibility::INIT_COM_STA, | 71 EXPECT_EQ(base::SchedulerBackwardCompatibility::INIT_COM_STA, |
113 params_vector[3].backward_compatibility()); | 72 worker_pool_params_b.backward_compatibility()); |
114 } | 73 } |
115 | 74 |
116 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { | 75 TEST_F(TaskSchedulerUtilVariationsUtilTest, OrderingParams6) { |
117 std::map<std::string, std::string> variation_params; | 76 const auto worker_pool_params_a = StringToWorkerPoolParams( |
118 variation_params["Background"] = "1;1;1;0;42;lazy"; | 77 "1;1;1;0;42;lazy", SchedulerBackwardCompatibility::DISABLED); |
119 variation_params["BackgroundFileIO"] = "2;2;1;0;52;one"; | 78 EXPECT_EQ(StandbyThreadPolicy::LAZY, |
120 variation_params["Foreground"] = "4;4;1;0;62;lazy"; | 79 worker_pool_params_a.standby_thread_policy()); |
121 variation_params["ForegroundFileIO"] = "8;8;1;0;72;one"; | 80 EXPECT_EQ(1U, worker_pool_params_a.max_threads()); |
| 81 EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), |
| 82 worker_pool_params_a.suggested_reclaim_time()); |
| 83 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, |
| 84 worker_pool_params_a.backward_compatibility()); |
122 | 85 |
123 auto params_vector = | 86 const auto worker_pool_params_b = StringToWorkerPoolParams( |
124 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params); | 87 "8;8;1;0;72;one", SchedulerBackwardCompatibility::ENABLED); |
125 ASSERT_EQ(4U, params_vector.size()); | 88 EXPECT_EQ(StandbyThreadPolicy::ONE, |
126 | 89 worker_pool_params_b.standby_thread_policy()); |
127 EXPECT_EQ("Background", params_vector[0].name()); | 90 EXPECT_EQ(8U, worker_pool_params_b.max_threads()); |
128 EXPECT_EQ(ThreadPriority::BACKGROUND, params_vector[0].priority_hint()); | |
129 EXPECT_EQ(StandbyThreadPolicy::LAZY, | |
130 params_vector[0].standby_thread_policy()); | |
131 EXPECT_EQ(1U, params_vector[0].max_threads()); | |
132 EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), | |
133 params_vector[0].suggested_reclaim_time()); | |
134 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
135 params_vector[0].backward_compatibility()); | |
136 | |
137 EXPECT_EQ("BackgroundFileIO", params_vector[1].name()); | |
138 EXPECT_EQ(ThreadPriority::BACKGROUND, params_vector[1].priority_hint()); | |
139 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[1].standby_thread_policy()); | |
140 EXPECT_EQ(2U, params_vector[1].max_threads()); | |
141 EXPECT_EQ(base::TimeDelta::FromMilliseconds(52), | |
142 params_vector[1].suggested_reclaim_time()); | |
143 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
144 params_vector[1].backward_compatibility()); | |
145 | |
146 EXPECT_EQ("Foreground", params_vector[2].name()); | |
147 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[2].priority_hint()); | |
148 EXPECT_EQ(StandbyThreadPolicy::LAZY, | |
149 params_vector[2].standby_thread_policy()); | |
150 EXPECT_EQ(4U, params_vector[2].max_threads()); | |
151 EXPECT_EQ(base::TimeDelta::FromMilliseconds(62), | |
152 params_vector[2].suggested_reclaim_time()); | |
153 EXPECT_EQ(base::SchedulerBackwardCompatibility::DISABLED, | |
154 params_vector[2].backward_compatibility()); | |
155 | |
156 EXPECT_EQ("ForegroundFileIO", params_vector[3].name()); | |
157 EXPECT_EQ(ThreadPriority::NORMAL, params_vector[3].priority_hint()); | |
158 EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); | |
159 EXPECT_EQ(8U, params_vector[3].max_threads()); | |
160 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), | 91 EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), |
161 params_vector[3].suggested_reclaim_time()); | 92 worker_pool_params_b.suggested_reclaim_time()); |
162 EXPECT_EQ(base::SchedulerBackwardCompatibility::INIT_COM_STA, | 93 EXPECT_EQ(base::SchedulerBackwardCompatibility::INIT_COM_STA, |
163 params_vector[3].backward_compatibility()); | 94 worker_pool_params_b.backward_compatibility()); |
164 } | |
165 | |
166 TEST_F(TaskSchedulerUtilVariationsUtilTest, NoData) { | |
167 EXPECT_TRUE(GetWorkerPoolParams(GetImmutableWorkerPoolParams(), | |
168 std::map<std::string, std::string>()) | |
169 .empty()); | |
170 } | 95 } |
171 | 96 |
172 TEST_F(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { | 97 TEST_F(TaskSchedulerUtilVariationsUtilTest, IncompleteParameters) { |
173 std::map<std::string, std::string> variation_params; | 98 EXPECT_FALSE(StringToWorkerPoolParams("1;1;1;0").IsValid()); |
174 variation_params["Background"] = "1;1;1;0"; | |
175 variation_params["BackgroundFileIO"] = "2;2;1;0"; | |
176 variation_params["Foreground"] = "4;4;1;0"; | |
177 variation_params["ForegroundFileIO"] = "8;8;1;0"; | |
178 EXPECT_TRUE( | |
179 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params) | |
180 .empty()); | |
181 } | 99 } |
182 | 100 |
183 TEST_F(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { | 101 TEST_F(TaskSchedulerUtilVariationsUtilTest, InvalidParameters) { |
184 std::map<std::string, std::string> variation_params; | 102 EXPECT_FALSE(StringToWorkerPoolParams("a;b;c;d;e").IsValid()); |
185 variation_params["Background"] = "a;b;c;d;e"; | |
186 variation_params["BackgroundFileIO"] = "a;b;c;d;e"; | |
187 variation_params["Foreground"] = "a;b;c;d;e"; | |
188 variation_params["ForegroundFileIO"] = "a;b;c;d;e"; | |
189 EXPECT_TRUE( | |
190 GetWorkerPoolParams(GetImmutableWorkerPoolParams(), variation_params) | |
191 .empty()); | |
192 } | 103 } |
193 | 104 |
194 #if !defined(OS_IOS) | 105 #if !defined(OS_IOS) |
195 // Verify that AddVariationParamsToCommandLine() serializes BrowserScheduler | 106 // Verify that AddVariationParamsToCommandLine() serializes BrowserScheduler |
196 // variation params that start with the specified prefix to the command line and | 107 // variation params that start with the specified prefix to the command line and |
197 // that GetVariationParamsFromCommandLine() correctly deserializes them. | 108 // that GetVariationParamsFromCommandLine() correctly deserializes them. |
198 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLine) { | 109 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLine) { |
199 std::map<std::string, std::string> in_variation_params; | 110 std::map<std::string, std::string> in_variation_params; |
200 in_variation_params["PrefixFoo"] = "Foo"; | 111 in_variation_params["PrefixFoo"] = "Foo"; |
201 in_variation_params["PrefixBar"] = "Bar"; | 112 in_variation_params["PrefixBar"] = "Bar"; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 | 168 |
258 // Verify that GetVariationParamsFromCommandLine() returns an empty map when the | 169 // Verify that GetVariationParamsFromCommandLine() returns an empty map when the |
259 // command line doesn't have a --task-scheduler-variation-params switch. | 170 // command line doesn't have a --task-scheduler-variation-params switch. |
260 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLineNoSwitch) { | 171 TEST_F(TaskSchedulerUtilVariationsUtilTest, CommandLineNoSwitch) { |
261 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); | 172 base::CommandLine command_line(base::CommandLine::NO_PROGRAM); |
262 EXPECT_TRUE(GetVariationParamsFromCommandLine(command_line).empty()); | 173 EXPECT_TRUE(GetVariationParamsFromCommandLine(command_line).empty()); |
263 } | 174 } |
264 #endif // !defined(OS_IOS) | 175 #endif // !defined(OS_IOS) |
265 | 176 |
266 } // namespace task_scheduler_util | 177 } // namespace task_scheduler_util |
OLD | NEW |