blob: 7b6bcf30e311f5f47067f3afdf2fea8d343481b7 [file] [log] [blame]
Than McIntosh8c7c7db2015-09-03 15:16:04 -04001/*
Andreas Gampe9590c642017-12-27 10:57:34 -08002 *
3 * Copyright 2015, The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
Than McIntosh8c7c7db2015-09-03 15:16:04 -040017
18#ifndef SYSTEM_EXTRAS_PERFPROFD_CONFIGREADER_H_
19#define SYSTEM_EXTRAS_PERFPROFD_CONFIGREADER_H_
20
21#include <string>
22#include <map>
23
Andreas Gampee44ae142017-12-21 10:02:23 -080024#include "config.h"
25
Than McIntosh8c7c7db2015-09-03 15:16:04 -040026//
27// This table describes the perfprofd config file syntax in terms of
28// key/value pairs. Values come in two flavors: strings, or unsigned
29// integers. In the latter case the reader sets allowable
30// minimum/maximum for the setting.
31//
32class ConfigReader {
33
34 public:
35 ConfigReader();
36 ~ConfigReader();
37
38 // Ask for the current setting of a config item
39 unsigned getUnsignedValue(const char *key) const;
Andreas Gampee44ae142017-12-21 10:02:23 -080040 bool getBoolValue(const char *key) const;
Than McIntosh8c7c7db2015-09-03 15:16:04 -040041 std::string getStringValue(const char *key) const;
42
43 // read the specified config file, applying any settings it contains
44 // returns true for successful read, false if conf file cannot be opened.
45 bool readFile();
46
Andreas Gampef73ddfa2018-03-29 14:52:57 -070047 bool Read(const std::string& data, bool fail_on_error);
48
Than McIntosh8c7c7db2015-09-03 15:16:04 -040049 // set/get path to config file
50 static void setConfigFilePath(const char *path);
51 static const char *getConfigFilePath();
52
53 // override a config item (for unit testing purposes)
54 void overrideUnsignedEntry(const char *key, unsigned new_value);
55
Andreas Gampee44ae142017-12-21 10:02:23 -080056 void FillConfig(Config* config);
57
Than McIntosh8c7c7db2015-09-03 15:16:04 -040058 private:
59 void addUnsignedEntry(const char *key,
60 unsigned default_value,
61 unsigned min_value,
62 unsigned max_value);
63 void addStringEntry(const char *key, const char *default_value);
64 void addDefaultEntries();
Andreas Gampef73ddfa2018-03-29 14:52:57 -070065 bool parseLine(const char *key, const char *value, unsigned linecount);
Than McIntosh8c7c7db2015-09-03 15:16:04 -040066
67 typedef struct { unsigned minv, maxv; } values;
68 std::map<std::string, values> u_info;
69 std::map<std::string, unsigned> u_entries;
70 std::map<std::string, std::string> s_entries;
71 bool trace_config_read;
72};
73
74#endif