root/chrome/browser/performance_monitor/key_builder.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// 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_

/* [<][>][^][v][top][bottom][index][help] */