• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *
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  */
17 
18 #ifndef SYSTEM_EXTRAS_PERFPROFD_CONFIGREADER_H_
19 #define SYSTEM_EXTRAS_PERFPROFD_CONFIGREADER_H_
20 
21 #include <string>
22 #include <map>
23 
24 #include "config.h"
25 
26 //
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 //
32 class 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;
40   bool getBoolValue(const char *key) const;
41   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 
47   bool Read(const std::string& data, bool fail_on_error);
48 
49   // 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 
56   void FillConfig(Config* config);
57 
58  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();
65   bool parseLine(const char *key, const char *value, unsigned linecount);
66 
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
75