| // 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. |
| |
| #ifndef MEDIA_BASE_TUNEABLE_H_ |
| #define MEDIA_BASE_TUNEABLE_H_ |
| |
| #include "base/macros.h" |
| #include "base/unguessable_token.h" |
| #include "media/base/media_export.h" |
| |
| namespace media { |
| |
| // One tuneable value. Each Tuneable has: |
| // name - Used to set the finch parameter name. |
| // value - Current runtime value. All Tuneable instances with the same name |
| // will return the same value. This value will be a constant over the |
| // lifetime of the process as well. |
| // min / default / max values - hardcoded range and default for this tuneable. |
| // |
| // Via finch, one may enable randomization of the Tuneables, such that a value |
| // will be chosen at random between a finch-provided miniumum and maximum. This |
| // minumum and maximum will be constrained by the hardcoded one provided during |
| // construction. Different Tuneable instances for the same name are still |
| // guaranteed to be equal, as described above. |
| template <typename T> |
| class MEDIA_EXPORT Tuneable { |
| public: |
| Tuneable(const char* name, T minimum_value, T default_value, T maximum_value); |
| Tuneable(const Tuneable&) = delete; |
| Tuneable(Tuneable&&) = delete; |
| ~Tuneable(); |
| |
| Tuneable& operator=(const Tuneable&) = delete; |
| Tuneable& operator=(Tuneable&&) = delete; |
| |
| T value() const { return t_; } |
| |
| void set_for_testing(T value) { t_ = value; } |
| |
| private: |
| T t_; |
| }; |
| |
| // Set the random number seed that the tuneable will use to choose its value. |
| // Must be called before the first tuneable is constructed. |
| void MEDIA_EXPORT SetRandomSeedForTuneables(const base::UnguessableToken& seed); |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_TUNEABLE_H_ |