Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / performance_monitor / metric.cc
blob2699c41a6d7de7eea33ac15e78d6cb3d9838c1b2
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.
5 #include "chrome/browser/performance_monitor/metric.h"
7 #include "base/basictypes.h"
8 #include "base/logging.h"
9 #include "base/strings/string_number_conversions.h"
10 #include "base/time/time.h"
11 #include "chrome/browser/performance_monitor/constants.h"
13 namespace performance_monitor {
15 namespace {
17 // For certain metrics (for instance, bytes read), it is possible that there is
18 // no maximum value which we can safely assume.
19 const double kNoMaximum = -1.0;
21 // These constants are designed to keep metrics reasonable. However, due to the
22 // variety of system configurations which can run chrome, these values may not
23 // catch *all* erroneous values. For instance, on a one-CPU machine, any CPU
24 // usage > 100 is erroneous, but on a 16-CPU machine, it's perfectly normal.
25 // These are "best-guesses" in order to weed out obviously-false values. A
26 // metric is valid if it is greater than or equal to the minimum and less than
27 // the maximum, i.e. if it falls in the range [min, max).
28 const double kMinUndefined = 0.0;
29 const double kMaxUndefined = 0.0; // No undefined metric is valid.
30 const double kMinCpuUsage = 0.0;
31 const double kMaxCpuUsage = 100000.0; // 100% on a 1000-CPU machine.
32 const double kMinPrivateMemoryUsage = 0.0;
33 const double kMaxPrivateMemoryUsage = kBytesPerTerabyte;
34 const double kMinSharedMemoryUsage = 0.0;
35 const double kMaxSharedMemoryUsage = kBytesPerTerabyte;
36 const double kMinStartupTime = 0.0;
37 const double kMaxStartupTime = base::Time::kMicrosecondsPerMinute * 15.0;
38 const double kMinTestStartupTime = 0.0;
39 const double kMaxTestStartupTime = base::Time::kMicrosecondsPerMinute * 15.0;
40 const double kMinSessionRestoreTime = 0.0;
41 const double kMaxSessionRestoreTime = base::Time::kMicrosecondsPerMinute * 15.0;
42 const double kMinPageLoadTime = 0.0;
43 const double kMaxPageLoadTime = base::Time::kMicrosecondsPerMinute * 15.0;
44 const double kMinNetworkBytesRead = 0.0;
45 const double kMaxNetworkBytesRead = kNoMaximum;
47 struct MetricBound {
48 double min;
49 double max;
52 const MetricBound kMetricBounds[] = {
53 { kMinUndefined, kMaxUndefined },
54 { kMinCpuUsage, kMaxCpuUsage },
55 { kMinPrivateMemoryUsage, kMaxPrivateMemoryUsage },
56 { kMinSharedMemoryUsage, kMaxSharedMemoryUsage },
57 { kMinStartupTime, kMaxStartupTime },
58 { kMinTestStartupTime, kMaxTestStartupTime },
59 { kMinSessionRestoreTime, kMaxSessionRestoreTime },
60 { kMinPageLoadTime, kMaxPageLoadTime },
61 { kMinNetworkBytesRead, kMaxNetworkBytesRead },
64 COMPILE_ASSERT(ARRAYSIZE_UNSAFE(kMetricBounds) == METRIC_NUMBER_OF_METRICS,
65 metric_bounds_size_doesnt_match_metric_count);
67 } // namespace
69 Metric::Metric() : type(METRIC_UNDEFINED), value(0.0) {
72 Metric::Metric(MetricType metric_type,
73 const base::Time& metric_time,
74 const double metric_value)
75 : type(metric_type), time(metric_time), value(metric_value) {
78 Metric::Metric(MetricType metric_type,
79 const std::string& metric_time,
80 const std::string& metric_value) : type(metric_type) {
81 int64 conversion = 0;
82 base::StringToInt64(metric_time, &conversion);
83 time = base::Time::FromInternalValue(conversion);
84 CHECK(base::StringToDouble(metric_value, &value));
87 Metric::~Metric() {
90 bool Metric::IsValid() const {
91 return type < METRIC_NUMBER_OF_METRICS &&
92 (value < kMetricBounds[type].max ||
93 kMetricBounds[type].max == kNoMaximum) &&
94 value >= kMetricBounds[type].min;
97 std::string Metric::ValueAsString() const {
98 return base::DoubleToString(value);
101 } // namespace performance_monitor