blob: edc782c0addbd694421e3bbb59cb478bb32eec2f [file] [log] [blame]
Åsa Perssonf8ba95e2018-11-02 11:38:46 +01001/*
2 * Copyright 2018 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include "rtc_base/experiments/cpu_speed_experiment.h"
12
13#include "rtc_base/gunit.h"
14#include "test/field_trial.h"
15#include "test/gmock.h"
16
17namespace webrtc {
18
19TEST(CpuSpeedExperimentTest, GetConfigsFailsIfNotEnabled) {
20 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
21}
22
23TEST(CpuSpeedExperimentTest, GetConfigsFailsForTooFewParameters) {
24 webrtc::test::ScopedFieldTrials field_trials(
25 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-1,2000,-10,3000/");
26 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
27}
28
29TEST(CpuSpeedExperimentTest, GetConfigs) {
30 webrtc::test::ScopedFieldTrials field_trials(
31 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-1,2000,-10,3000,-16/");
32
33 const absl::optional<std::vector<CpuSpeedExperiment::Config>> kConfigs =
34 CpuSpeedExperiment::GetConfigs();
35 ASSERT_TRUE(kConfigs);
36 EXPECT_THAT(*kConfigs,
37 ::testing::ElementsAre(CpuSpeedExperiment::Config{1000, -1},
38 CpuSpeedExperiment::Config{2000, -10},
39 CpuSpeedExperiment::Config{3000, -16}));
40}
41
42TEST(CpuSpeedExperimentTest, GetValue) {
43 webrtc::test::ScopedFieldTrials field_trials(
44 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-5,2000,-10,3000,-12/");
45
46 const absl::optional<std::vector<CpuSpeedExperiment::Config>> kConfigs =
47 CpuSpeedExperiment::GetConfigs();
48 ASSERT_TRUE(kConfigs);
49 ASSERT_EQ(3u, (*kConfigs).size());
50 EXPECT_EQ(-5, CpuSpeedExperiment::GetValue(1, *kConfigs));
51 EXPECT_EQ(-5, CpuSpeedExperiment::GetValue(1000, *kConfigs));
52 EXPECT_EQ(-10, CpuSpeedExperiment::GetValue(1000 + 1, *kConfigs));
53 EXPECT_EQ(-10, CpuSpeedExperiment::GetValue(2000, *kConfigs));
54 EXPECT_EQ(-12, CpuSpeedExperiment::GetValue(2000 + 1, *kConfigs));
55 EXPECT_EQ(-12, CpuSpeedExperiment::GetValue(3000, *kConfigs));
56 EXPECT_EQ(-16, CpuSpeedExperiment::GetValue(3000 + 1, *kConfigs));
57}
58
59TEST(CpuSpeedExperimentTest, GetConfigsFailsForTooSmallValue) {
60 // Supported range: [-16, -1].
61 webrtc::test::ScopedFieldTrials field_trials(
62 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-1,2000,-10,3000,-17/");
63 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
64}
65
66TEST(CpuSpeedExperimentTest, GetConfigsFailsForTooLargeValue) {
67 // Supported range: [-16, -1].
68 webrtc::test::ScopedFieldTrials field_trials(
69 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,0,2000,-10,3000,-16/");
70 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
71}
72
73TEST(CpuSpeedExperimentTest, GetConfigsFailsIfPixelsDecreasing) {
74 webrtc::test::ScopedFieldTrials field_trials(
75 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-5,999,-10,3000,-16/");
76 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
77}
78
79TEST(CpuSpeedExperimentTest, GetConfigsFailsIfCpuSpeedIncreasing) {
80 webrtc::test::ScopedFieldTrials field_trials(
81 "WebRTC-VP8-CpuSpeed-Arm/Enabled-1000,-5,2000,-4,3000,-16/");
82 EXPECT_FALSE(CpuSpeedExperiment::GetConfigs());
83}
84
85} // namespace webrtc