Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / performance_monitor / key_builder.h
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_
6 #define CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_
7
8 #include <map>
9
10 #include "chrome/browser/performance_monitor/event.h"
11 #include "chrome/browser/performance_monitor/metric.h"
12
13 namespace performance_monitor {
14
15 struct RecentKey {
16   RecentKey(const std::string& recent_time,
17             MetricType recent_type,
18             const std::string& recent_activity);
19   ~RecentKey();
20
21   const std::string time;
22   const MetricType type;
23   const std::string activity;
24 };
25
26 struct MaxValueKey {
27   MaxValueKey(MetricType max_value_type,
28               const std::string& max_value_activity)
29       : type(max_value_type),
30         activity(max_value_activity) {}
31   ~MaxValueKey() {}
32
33   const MetricType type;
34   const std::string activity;
35 };
36
37 struct MetricKey {
38   MetricKey(const std::string& metric_time,
39             MetricType metric_type,
40             const std::string& metric_activity);
41   ~MetricKey();
42
43   const std::string time;
44   const MetricType type;
45   const std::string activity;
46 };
47
48 // This class is responsible for building the keys which are used internally by
49 // PerformanceMonitor's database. These keys should only be referenced by the
50 // database, and should not be used externally.
51 class KeyBuilder {
52  public:
53   KeyBuilder();
54   ~KeyBuilder();
55
56   // Key Creation: Create the keys for different databases. The schemas are
57   // listed with the methods. A '-' in the schema represents kDelimeter.
58
59   // Key Schema: <Time>
60   std::string CreateActiveIntervalKey(const base::Time& time);
61
62   // Key Schema: <Metric>-<Time>-<Activity>
63   std::string CreateMetricKey(const base::Time& time,
64                               const MetricType type,
65                               const std::string& activity);
66
67   // Key Schema: <Time>-<Event Type>
68   std::string CreateEventKey(const base::Time& time, const EventType type);
69
70   // Key Schema: <Time>-<Metric>-<Activity>
71   std::string CreateRecentKey(const base::Time& time,
72                               const MetricType type,
73                               const std::string& activity);
74
75   // Key Schema: <Activity>-<Metric>
76   std::string CreateRecentMapKey(const MetricType type,
77                                  const std::string& activity);
78
79   std::string CreateMaxValueKey(const MetricType type,
80                                 const std::string& activity);
81
82   EventType EventKeyToEventType(const std::string& key);
83   RecentKey SplitRecentKey(const std::string& key);
84   MetricKey SplitMetricKey(const std::string& key);
85
86  private:
87   // Populate the maps from [Event, Metric]Type to key characters.
88   void PopulateKeyMaps();
89
90   std::map<EventType, int> event_type_to_event_key_char_;
91   std::map<int, EventType> event_key_char_to_event_type_;
92   std::map<MetricType, int> metric_type_to_metric_key_char_;
93   std::map<int, MetricType> metric_key_char_to_metric_type_;
94 };
95
96 }  // namespace performance_monitor
97
98 #endif  // CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_