Index: components/task_scheduler_util/variations/browser_variations_util_unittest.cc |
diff --git a/components/task_scheduler_util/variations/browser_variations_util_unittest.cc b/components/task_scheduler_util/variations/browser_variations_util_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9350c6d087aaa43c4d06203a2f478e8d73a4bb61 |
--- /dev/null |
+++ b/components/task_scheduler_util/variations/browser_variations_util_unittest.cc |
@@ -0,0 +1,150 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/task_scheduler_util/variations/browser_variations_util.h" |
+ |
+#include <map> |
+#include <vector> |
+ |
+#include "base/metrics/field_trial.h" |
+#include "components/variations/variations_associated_data.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace task_scheduler_util { |
+namespace variations { |
+ |
+namespace { |
+ |
+using StandbyThreadPolicy = |
+ base::SchedulerWorkerPoolParams::StandbyThreadPolicy; |
+ |
+constexpr char kFieldTrialName[] = "BrowserScheduler"; |
+constexpr char kFieldTrialTestGroup[] = "Test"; |
+ |
+class TaskSchedulerUtilBrowserVariationsUtilTest : public ::testing::Test { |
+ public: |
+ TaskSchedulerUtilBrowserVariationsUtilTest() : field_trial_list_(nullptr) {} |
+ |
+ ~TaskSchedulerUtilBrowserVariationsUtilTest() override { |
+ // Ensure that the maps are cleared between tests, since they are stored as |
+ // process singletons. |
+ ::variations::testing::ClearAllVariationIDs(); |
+ ::variations::testing::ClearAllVariationParams(); |
+ } |
+ |
+ private: |
+ base::FieldTrialList field_trial_list_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TaskSchedulerUtilBrowserVariationsUtilTest); |
+}; |
+ |
+} // namespace |
+ |
+TEST_F(TaskSchedulerUtilBrowserVariationsUtilTest, OrderingParams5) { |
+ std::map<std::string, std::string> params; |
+ params["Background"] = "1;1;1;0;42"; |
+ params["BackgroundFileIO"] = "2;2;1;0;52"; |
+ params["Foreground"] = "4;4;1;0;62"; |
+ params["ForegroundFileIO"] = "8;8;1;0;72"; |
+ ASSERT_TRUE(::variations::AssociateVariationParams(kFieldTrialName, |
+ kFieldTrialTestGroup, |
+ params)); |
+ |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ auto params_vector = GetBrowserSchedulerWorkerPoolParamsFromVariations(); |
+ ASSERT_EQ(4U, params_vector.size()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[0].standby_thread_policy()); |
+ EXPECT_EQ(1U, params_vector[0].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), |
+ params_vector[0].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[1].standby_thread_policy()); |
+ EXPECT_EQ(2U, params_vector[1].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(52), |
+ params_vector[1].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[2].standby_thread_policy()); |
+ EXPECT_EQ(4U, params_vector[2].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(62), |
+ params_vector[2].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); |
+ EXPECT_EQ(8U, params_vector[3].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), |
+ params_vector[3].suggested_reclaim_time()); |
+} |
+ |
+TEST_F(TaskSchedulerUtilBrowserVariationsUtilTest, OrderingParams6) { |
+ std::map<std::string, std::string> params; |
+ params["Background"] = "1;1;1;0;42;lazy"; |
+ params["BackgroundFileIO"] = "2;2;1;0;52;one"; |
+ params["Foreground"] = "4;4;1;0;62;lazy"; |
+ params["ForegroundFileIO"] = "8;8;1;0;72;one"; |
+ ASSERT_TRUE(::variations::AssociateVariationParams(kFieldTrialName, |
+ kFieldTrialTestGroup, |
+ params)); |
+ |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ auto params_vector = GetBrowserSchedulerWorkerPoolParamsFromVariations(); |
+ ASSERT_EQ(4U, params_vector.size()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::LAZY, |
+ params_vector[0].standby_thread_policy()); |
+ EXPECT_EQ(1U, params_vector[0].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(42), |
+ params_vector[0].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[1].standby_thread_policy()); |
+ EXPECT_EQ(2U, params_vector[1].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(52), |
+ params_vector[1].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::LAZY, |
+ params_vector[2].standby_thread_policy()); |
+ EXPECT_EQ(4U, params_vector[2].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(62), |
+ params_vector[2].suggested_reclaim_time()); |
+ |
+ EXPECT_EQ(StandbyThreadPolicy::ONE, params_vector[3].standby_thread_policy()); |
+ EXPECT_EQ(8U, params_vector[3].max_threads()); |
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(72), |
+ params_vector[3].suggested_reclaim_time()); |
+} |
+ |
+TEST_F(TaskSchedulerUtilBrowserVariationsUtilTest, NoData) { |
+ auto params_vector = GetBrowserSchedulerWorkerPoolParamsFromVariations(); |
+ EXPECT_TRUE(params_vector.empty()); |
+} |
+ |
+TEST_F(TaskSchedulerUtilBrowserVariationsUtilTest, IncompleteParameters) { |
+ std::map<std::string, std::string> params; |
+ params["Background"] = "1;1;1;0"; |
+ params["BackgroundFileIO"] = "2;2;1;0"; |
+ params["Foreground"] = "4;4;1;0"; |
+ params["ForegroundFileIO"] = "8;8;1;0"; |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ ASSERT_TRUE(::variations::AssociateVariationParams(kFieldTrialName, |
+ kFieldTrialTestGroup, |
+ params)); |
+ auto params_vector = GetBrowserSchedulerWorkerPoolParamsFromVariations(); |
+ EXPECT_TRUE(params_vector.empty()); |
+} |
+ |
+TEST_F(TaskSchedulerUtilBrowserVariationsUtilTest, InvalidParameters) { |
+ std::map<std::string, std::string> params; |
+ params["Background"] = "a;b;c;d;e"; |
+ params["BackgroundFileIO"] = "a;b;c;d;e"; |
+ params["Foreground"] = "a;b;c;d;e"; |
+ params["ForegroundFileIO"] = "a;b;c;d;e"; |
+ base::FieldTrialList::CreateFieldTrial(kFieldTrialName, kFieldTrialTestGroup); |
+ ASSERT_TRUE(::variations::AssociateVariationParams(kFieldTrialName, |
+ kFieldTrialTestGroup, |
+ params)); |
+ auto params_vector = GetBrowserSchedulerWorkerPoolParamsFromVariations(); |
+ EXPECT_TRUE(params_vector.empty()); |
+} |
+ |
+} // namespace variations |
+} // namespace task_scheduler_util |