| // Copyright (c) 2012 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 CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_ |
| #define CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_ |
| |
| #include <map> |
| |
| #include "chrome/browser/performance_monitor/event.h" |
| #include "chrome/browser/performance_monitor/metric.h" |
| |
| namespace performance_monitor { |
| |
| struct RecentKey { |
| RecentKey(const std::string& recent_time, |
| MetricType recent_type, |
| const std::string& recent_activity); |
| ~RecentKey(); |
| |
| const std::string time; |
| const MetricType type; |
| const std::string activity; |
| }; |
| |
| struct MaxValueKey { |
| MaxValueKey(MetricType max_value_type, |
| const std::string& max_value_activity) |
| : type(max_value_type), |
| activity(max_value_activity) {} |
| ~MaxValueKey() {} |
| |
| const MetricType type; |
| const std::string activity; |
| }; |
| |
| struct MetricKey { |
| MetricKey(const std::string& metric_time, |
| MetricType metric_type, |
| const std::string& metric_activity); |
| ~MetricKey(); |
| |
| const std::string time; |
| const MetricType type; |
| const std::string activity; |
| }; |
| |
| // This class is responsible for building the keys which are used internally by |
| // PerformanceMonitor's database. These keys should only be referenced by the |
| // database, and should not be used externally. |
| class KeyBuilder { |
| public: |
| KeyBuilder(); |
| ~KeyBuilder(); |
| |
| // Key Creation: Create the keys for different databases. The schemas are |
| // listed with the methods. A '-' in the schema represents kDelimeter. |
| |
| // Key Schema: <Time> |
| std::string CreateActiveIntervalKey(const base::Time& time); |
| |
| // Key Schema: <Metric>-<Time>-<Activity> |
| std::string CreateMetricKey(const base::Time& time, |
| const MetricType type, |
| const std::string& activity); |
| |
| // Key Schema: <Time>-<Event Type> |
| std::string CreateEventKey(const base::Time& time, const EventType type); |
| |
| // Key Schema: <Time>-<Metric>-<Activity> |
| std::string CreateRecentKey(const base::Time& time, |
| const MetricType type, |
| const std::string& activity); |
| |
| // Key Schema: <Activity>-<Metric> |
| std::string CreateRecentMapKey(const MetricType type, |
| const std::string& activity); |
| |
| std::string CreateMaxValueKey(const MetricType type, |
| const std::string& activity); |
| |
| EventType EventKeyToEventType(const std::string& key); |
| RecentKey SplitRecentKey(const std::string& key); |
| MetricKey SplitMetricKey(const std::string& key); |
| |
| private: |
| // Populate the maps from [Event, Metric]Type to key characters. |
| void PopulateKeyMaps(); |
| |
| std::map<EventType, int> event_type_to_event_key_char_; |
| std::map<int, EventType> event_key_char_to_event_type_; |
| std::map<MetricType, int> metric_type_to_metric_key_char_; |
| std::map<int, MetricType> metric_key_char_to_metric_type_; |
| }; |
| |
| } // namespace performance_monitor |
| |
| #endif // CHROME_BROWSER_PERFORMANCE_MONITOR_KEY_BUILDER_H_ |