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_METRIC_H_
6#define CHROME_BROWSER_PERFORMANCE_MONITOR_METRIC_H_
7
8#include <string>
9#include "base/time/time.h"
10
11namespace performance_monitor {
12
13// IMPORTANT: To add new metrics, please
14// - Place the new metric above METRIC_NUMBER_OF_METRICS.
15// - Add a member to the MetricKeyChar enum in key_builder.cc.
16// - Add the appropriate messages in generated_resources.grd.
17// - Add the appropriate functions in
18//   chrome/browser/ui/webui/performance_monitor/performance_monitor_l10n.h.
19enum MetricType {
20  METRIC_UNDEFINED,
21
22  // CPU and memory usage are combined for all Chrome-related processes.
23  METRIC_CPU_USAGE,
24  METRIC_PRIVATE_MEMORY_USAGE,
25  METRIC_SHARED_MEMORY_USAGE,
26
27  // Timing measurements; these are all independent metrics (e.g., session
28  // restore time is independent of startup time, even though they may happen
29  // in sequence). Test startup time refers to any non-normal startup time, e.g.
30  // when we run test suites.
31  METRIC_STARTUP_TIME,
32  METRIC_TEST_STARTUP_TIME,
33  METRIC_SESSION_RESTORE_TIME,
34  METRIC_PAGE_LOAD_TIME,
35
36  // Total number of bytes read since PerformanceMonitor first started running.
37  METRIC_NETWORK_BYTES_READ,
38
39  METRIC_NUMBER_OF_METRICS
40};
41
42struct Metric {
43 public:
44  Metric();
45  Metric(MetricType metric_type,
46         const base::Time& metric_time,
47         const double metric_value);
48  Metric(MetricType metric_type,
49         const std::string& metric_time,
50         const std::string& metric_value);
51  ~Metric();
52
53  // Check the value in the metric to make sure that it is reasonable. Since
54  // some metric-gathering methods will fail and return incorrect values, we
55  // need to try to weed these out as best we can.
56  bool IsValid() const;
57
58  // This converts the double stored in value to a string format. This will
59  // not perform any checking on the validity of the metric, and only makes
60  // sense if the metric IsValid().
61  std::string ValueAsString() const;
62
63  MetricType type;
64  base::Time time;
65  double value;
66};
67
68}  // namespace performance_monitor
69
70#endif  // CHROME_BROWSER_PERFORMANCE_MONITOR_METRIC_H_
71