Chromium Code Reviews| Index: chrome/browser/performance_monitor/metric.cc |
| diff --git a/chrome/browser/performance_monitor/metric.cc b/chrome/browser/performance_monitor/metric.cc |
| index 4d105f768c70d30b6e143b2bad73e2eb16a17f0c..b13c04cc1fe85fa9e5248d14d096918aeeaabb2e 100644 |
| --- a/chrome/browser/performance_monitor/metric.cc |
| +++ b/chrome/browser/performance_monitor/metric.cc |
| @@ -4,21 +4,76 @@ |
| #include "chrome/browser/performance_monitor/metric.h" |
| +#include "base/basictypes.h" |
| #include "base/logging.h" |
| #include "base/string_number_conversions.h" |
| namespace performance_monitor { |
| +namespace { |
| + |
| +// These constants are designed to keep metrics reasonable. However, due to the |
| +// variety of system configurations which can run chrome, these values may not |
| +// catch *all* erroneous values. For instance, on a one-CPU machine, any CPU |
| +// usage > 100 is erroneous, but on a 16-CPU machine, it's perfectly normal. |
| +// These are "best-guesses" in order to weed out obviously-false values. |
| +const double kMinUndefined = 0.0; |
| +const double kMaxUndefined = 0.0; // No undefined metric is valid. |
| +const double kMinCpuUsage = 0.0; |
| +const double kMaxCpuUsage = 100000.0; // 100% on a 1000-CPU machine. |
| +const double kMinPrivateMemoryUsage = 0.0; |
| +const double kMaxPrivateMemoryUsage = |
| + 1024.0 * 1024.0 * 1024.0 * 1024.0; // 1 TB |
| +const double kMinSharedMemoryUsage = 0.0; |
| +const double kMaxSharedMemoryUsage = 1024.0 * 1024.0 * 1024.0 * 1024.0; // 1 TB |
| +const double kMinStartupTime = 0.0; |
| +const double kMaxStartupTime = 1000000 * 60 * 15; // 15 minutes |
| +const double kMinTestStartupTime = 0.0; |
| +const double kMaxTestStartupTime = 1000000 * 60 * 15; // 15 minutes |
| +const double kMinSessionRestoreTime = 0.0; |
| +const double kMaxSessionRestoreTime = 1000000 * 60 * 15; // 15 minutes |
| +const double kMinPageLoadTime = 0.0; |
| +const double kMaxPageLoadTime = 1000000 * 60 * 15; // 15 minutes |
| +const double kMinNetworkBytesRead = 0.0; |
| +// There really isn't a feasible "max" for network bytes read (even numbers in |
| +// high TB are potentially possible). |
| +const double kMaxNetworkBytesRead = static_cast<double>(kint64max); |
| + |
| +struct MetricBound { |
| + double min; |
| + double max; |
| +}; |
| + |
| +const MetricBound kMetricBounds[] = { |
| + { kMinUndefined, kMaxUndefined }, |
| + { kMinCpuUsage, kMaxCpuUsage }, |
| + { kMinPrivateMemoryUsage, kMaxPrivateMemoryUsage }, |
| + { kMinSharedMemoryUsage, kMaxSharedMemoryUsage }, |
| + { kMinStartupTime, kMaxStartupTime }, |
| + { kMinTestStartupTime, kMaxTestStartupTime }, |
| + { kMinSessionRestoreTime, kMaxSessionRestoreTime }, |
| + { kMinPageLoadTime, kMaxPageLoadTime }, |
| + { kMinNetworkBytesRead, kMaxNetworkBytesRead }, |
| +}; |
| + |
| +COMPILE_ASSERT(ARRAYSIZE_UNSAFE(kMetricBounds) == METRIC_NUMBER_OF_METRICS, |
| + metric_bounds_size_doesnt_match_metric_count); |
| + |
| +} // namespace |
| + |
| Metric::Metric() { |
| value = 0.0; |
| } |
| -Metric::Metric(const base::Time& metric_time, const double metric_value) |
| - : time(metric_time), value(metric_value) { |
| +Metric::Metric(MetricType metric_type, |
| + const base::Time& metric_time, |
| + const double metric_value) |
| + : type(metric_type), time(metric_time), value(metric_value) { |
| } |
| -Metric::Metric(const std::string& metric_time, |
| - const std::string& metric_value) { |
| +Metric::Metric(MetricType metric_type, |
| + const std::string& metric_time, |
| + const std::string& metric_value) : type(metric_type) { |
| int64 conversion = 0; |
| base::StringToInt64(metric_time, &conversion); |
| time = base::Time::FromInternalValue(conversion); |
| @@ -28,4 +83,12 @@ Metric::Metric(const std::string& metric_time, |
| Metric::~Metric() { |
| } |
| +bool Metric::Validate() const { |
|
eaugusti
2012/09/07 23:10:55
Should this validate the type too?
Devlin
2012/09/10 17:49:14
Done (it'll already return false on Undefined metr
|
| + return value < kMetricBounds[type].max && value > kMetricBounds[type].min; |
| +} |
| + |
| +std::string Metric::ValueAsString() const { |
| + return base::DoubleToString(value); |
| +} |
| + |
| } // namespace performance_monitor |