blob: e8341424e7c10c363216bf87c4120708ef2c1994 [file] [log] [blame]
rnlee81d32602021-07-27 13:24:07 -07001/*
2 * Copyright (C) 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <cstdint>
20#include <optional>
21#include <string>
22
23namespace android {
24// Manages flags for SurfaceFlinger, including default values, system properties, and Mendel
25// experiment configuration values.
26class FlagManager {
27public:
28 FlagManager() = default;
29 virtual ~FlagManager();
30 void dump(std::string& result) const;
31
32 int64_t demo_flag() const;
33
Matt Buckleyd23c7962021-09-21 20:43:00 +000034 bool use_adpf_cpu_hint() const;
35
Leon Scroggins IIIa37ca992022-02-02 18:08:20 -050036 bool use_skia_tracing() const;
37
rnlee81d32602021-07-27 13:24:07 -070038private:
39 friend class FlagManagerTest;
40
41 // Wrapper for mocking in test.
42 virtual std::string getServerConfigurableFlag(const std::string& experimentFlagName) const;
43
44 template <typename T>
45 T getValue(const std::string& experimentFlagName, std::optional<T> systemPropertyOpt,
46 T defaultValue) const;
47};
48} // namespace android