// 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 #include "base/hash/hash.h" #include "base/metrics/field_trial_params.h" #include "base/no_destructor.h" #include "base/numerics/ranges.h" #include "base/strings/string_number_conversions.h" #include "media/base/media_switches.h" namespace { // Get the finch parameter `name`, and clamp it to the given values. Return // `default_value` if there is no parameter, or if the experiment is off. template T GetParam(const char* name, T minimum_value, T default_value, T maximum_value) { return static_cast(GetParam(name, static_cast(minimum_value), static_cast(default_value), static_cast(maximum_value))); } template <> int GetParam(const char* name, int minimum_value, int default_value, int maximum_value) { return base::ClampToRange( base::FeatureParam(&::media::kMediaOptimizer, name, default_value) .Get(), minimum_value, maximum_value); } template <> base::TimeDelta GetParam(const char* name, base::TimeDelta minimum_value, base::TimeDelta default_value, base::TimeDelta maximum_value) { return base::TimeDelta::FromMilliseconds(GetParam( name, minimum_value.InMilliseconds(), default_value.InMilliseconds(), maximum_value.InMilliseconds())); } } // namespace namespace media { template Tuneable::Tuneable(const char* name, T minimum_value, T default_value, T maximum_value) { // Fetch the finch-provided value, clamped to the min, max and defaulted to // the hardcoded default if it's unset. t_ = GetParam(name, minimum_value, default_value, maximum_value); } template Tuneable::~Tuneable() = default; // All allowed Tuneable types. Be sure that GenerateRandom() and GetParam() // do something sane for any type you add. template class MEDIA_EXPORT Tuneable; template class MEDIA_EXPORT Tuneable; template class MEDIA_EXPORT Tuneable; } // namespace media