123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2020 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 "media/base/tuneable.h"
- #include "base/strings/string_number_conversions.h"
- #include "base/test/scoped_feature_list.h"
- #include "media/base/media_switches.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace media {
- class TuneableTest : public ::testing::Test {
- public:
- TuneableTest() = default;
- TuneableTest(const TuneableTest&) = delete;
- TuneableTest& operator=(const TuneableTest&) = delete;
- void SetUp() override {
- // Note that we might need to call value() to cache `tuneable_cached_` here.
- // We don't currently, since it's not needed.
- // Set everything else to non-default values. We do this because we can't
- // do it in the tests without it doing odd things.
- // params[kTuneableIntSetToNot123] = "124"; // Not 123.
- // params[kTuneableInt0] = "0";
- // params[kTuneableInt5] = "5";
- // params[kTuneableInt10] = "10";
- // Set some tuneables to fixed values.
- SetFinchParameters(kTuneableIntSetToNot123, 124);
- SetFinchParameters(kTuneableInt0, 0);
- SetFinchParameters(kTuneableInt5, 5);
- SetFinchParameters(kTuneableInt10, 100);
- // TimeDelta should be given in milliseconds.
- SetFinchParameters(kTuneableTimeDeltaFiveSeconds, 5000);
- scoped_feature_list_.InitAndEnableFeatureWithParameters(kMediaOptimizer,
- params_);
- }
- // Set the finch-chosen parameters for tuneable `name`.
- void SetFinchParameters(const char* name, int value) {
- params_[name] = base::NumberToString(value);
- }
- // Return the tuneable name for the `x`-th numbered tuneable.
- std::string GetNameForNumberedTuneable(const char* basename, int x) {
- std::string name(basename);
- name[0] = "0123456789ABCDEF"[x & 15];
- name[1] = "0123456789ABCDEF"[(x >> 4) & 15];
- return name;
- }
- base::test::ScopedFeatureList scoped_feature_list_;
- base::FieldTrialParams params_;
- // Params will set this to not 123. We default it to 123 before Setup runs,
- // so we make sure that it uses the hardcoded defaults properly.
- static constexpr const char* kTuneableIntSetToNot123 = "t_int_not_123";
- Tuneable<int> tuneable_cached_{kTuneableIntSetToNot123, 0, 123, 200};
- static constexpr const char* kTuneableIntUnset = "t_int_unset";
- static constexpr const char* kTuneableInt0 = "t_int_0";
- static constexpr const char* kTuneableInt5 = "t_int_5";
- static constexpr const char* kTuneableInt10 = "t_int_10";
- static constexpr const char* kTuneableTimeDeltaFiveSeconds = "t_time_5s";
- };
- TEST_F(TuneableTest, IntTuneableCached) {
- // Verify that `tuneable_cached_` is, in fact, 123 even though the params try
- // to set it to something else. This kind of, sort of, guarantees that it's
- // cached properly.
- EXPECT_EQ(tuneable_cached_.value(), 123);
- }
- TEST_F(TuneableTest, IntTuneableFromDefaultWithClamps) {
- // The default value should be used, and correctly clamped.
- constexpr int min_value = 0;
- constexpr int default_value = 4;
- constexpr int max_value = 10;
- Tuneable<int> t_min(kTuneableIntUnset, min_value, min_value - 1, max_value);
- EXPECT_EQ(t_min.value(), min_value);
- Tuneable<int> t_default(kTuneableIntUnset, min_value, default_value,
- max_value);
- EXPECT_EQ(t_default.value(), default_value);
- Tuneable<int> t_max(kTuneableIntUnset, min_value, max_value + 1, max_value);
- EXPECT_EQ(t_max.value(), max_value);
- }
- TEST_F(TuneableTest, IntTuneableFromParams) {
- // Verify that params override the defaults, and are clamped correctly.
- constexpr int min_value = 1;
- constexpr int default_value = 4; // That's not the same as the param.
- constexpr int max_value = 9;
- Tuneable<int> t_min(kTuneableInt0, min_value, default_value, max_value);
- EXPECT_EQ(t_min.value(), min_value);
- Tuneable<int> t_param(kTuneableInt5, min_value, default_value, max_value);
- EXPECT_EQ(t_param.value(), 5);
- Tuneable<int> t_max(kTuneableInt10, min_value, default_value, max_value);
- EXPECT_EQ(t_max.value(), max_value);
- }
- TEST_F(TuneableTest, OtherSpecializationsCompile) {
- // Since it's all templated, just be happy if it compiles and does something
- // somewhat sane.
- constexpr base::TimeDelta min_value = base::Seconds(0);
- constexpr base::TimeDelta default_value = base::Seconds(5);
- constexpr base::TimeDelta max_value = base::Seconds(10);
- Tuneable<base::TimeDelta> time_delta_tuneable("whatever", min_value,
- default_value, max_value);
- // Since the tuneable is not provided in the finch parameters, it should
- // equal the default.
- EXPECT_EQ(time_delta_tuneable.value(), default_value);
- Tuneable<size_t> size_t_tuneable("whatever_else", 0u, 100u, 500u);
- EXPECT_EQ(size_t_tuneable.value(), 100u);
- }
- TEST_F(TuneableTest, TimeDeltaIsSpecifiedInMilliseconds) {
- // Since the finch params are constructed with the assumption that the value
- // will be interpreted as milliseconds, make sure that the Tuneable actually
- // does interpret it that way.
- constexpr base::TimeDelta min_value = base::Seconds(0);
- constexpr base::TimeDelta max_value = base::Seconds(100);
- Tuneable<base::TimeDelta> t(kTuneableTimeDeltaFiveSeconds, min_value,
- min_value, max_value);
- EXPECT_EQ(t.value(), base::Seconds(5));
- }
- } // namespace media
|