Index: chrome/browser/ui/webui/performance_monitor/performance_monitor_ui_util.cc |
diff --git a/chrome/browser/ui/webui/performance_monitor/performance_monitor_ui_util.cc b/chrome/browser/ui/webui/performance_monitor/performance_monitor_ui_util.cc |
deleted file mode 100644 |
index 5bf736ba5398789aed7350b80bfe3c970685be18..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/webui/performance_monitor/performance_monitor_ui_util.cc |
+++ /dev/null |
@@ -1,195 +0,0 @@ |
-// 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. |
- |
-#include "chrome/browser/ui/webui/performance_monitor/performance_monitor_ui_util.h" |
- |
-#include <algorithm> |
- |
-#include "base/time/time.h" |
-#include "chrome/browser/performance_monitor/metric.h" |
- |
-namespace performance_monitor { |
- |
-namespace { |
- |
-// Sorts the vector and returns the median. We don't need to sort it, but it is |
-// a by-product of finding the median, and allows us to pass a pointer, rather |
-// than construct another array. |
-double SortAndGetMedian(std::vector<double>* values) { |
- size_t size = values->size(); |
- if (!size) |
- return 0.0; |
- |
- std::sort(values->begin(), values->end()); |
- return size % 2 == 0 ? |
- (values->at(size / 2) + values->at((size / 2) - 1)) / 2.0 : |
- values->at(size / 2); |
-} |
- |
-} // namespace |
- |
-Aggregator::Aggregator() { |
-} |
- |
-Aggregator::~Aggregator() { |
-} |
- |
-scoped_ptr<VectorOfMetricVectors> Aggregator::AggregateMetrics( |
- MetricType metric_type, |
- const Database::MetricVector* metrics, |
- const base::Time& start, |
- const std::vector<TimeRange>& intervals, |
- const base::TimeDelta& resolution) { |
- scoped_ptr<VectorOfMetricVectors> results(new VectorOfMetricVectors()); |
- |
- Database::MetricVector::const_iterator metric = metrics->begin(); |
- while (metric != metrics->end() && metric->time < start) |
- ++metric; |
- |
- // For each interval, advance the metric to the start of the interval, and |
- // append a metric vector for the aggregated data within that interval, |
- // according to the appropriate strategy. |
- for (std::vector<TimeRange>::const_iterator interval = intervals.begin(); |
- interval != intervals.end(); ++interval) { |
- while (metric != metrics->end() && metric->time < interval->start) |
- ++metric; |
- |
- results->push_back(*AggregateInterval( |
- metric_type, |
- &metric, |
- metrics->end(), |
- interval == intervals.begin() ? start : interval->start, |
- interval->end, |
- resolution)); |
- } |
- |
- return results.Pass(); |
-} |
- |
-scoped_ptr<Database::MetricVector> NoAggregation::AggregateInterval( |
- MetricType metric_type, |
- Database::MetricVector::const_iterator* metric, |
- const Database::MetricVector::const_iterator& metric_end, |
- const base::Time& time_start, |
- const base::Time& time_end, |
- const base::TimeDelta& resolution) { |
- scoped_ptr<Database::MetricVector> aggregated_series( |
- new Database::MetricVector()); |
- |
- for (; *metric != metric_end && (*metric)->time <= time_end; ++(*metric)) |
- aggregated_series->push_back(**metric); |
- |
- return aggregated_series.Pass(); |
-} |
- |
-scoped_ptr<Database::MetricVector> MedianAggregation::AggregateInterval( |
- MetricType metric_type, |
- Database::MetricVector::const_iterator* metric, |
- const Database::MetricVector::const_iterator& metric_end, |
- const base::Time& time_start, |
- const base::Time& time_end, |
- const base::TimeDelta& resolution) { |
- scoped_ptr<Database::MetricVector> aggregated_series( |
- new Database::MetricVector()); |
- base::Time window_start = time_start; |
- |
- while (*metric != metric_end && (*metric)->time <= time_end) { |
- std::vector<double> values; |
- while (*metric != metric_end && |
- (*metric)->time <= time_end && |
- (*metric)->time < window_start + resolution) { |
- values.push_back((*metric)->value); |
- ++(*metric); |
- } |
- |
- if (!values.empty()) { |
- aggregated_series->push_back(Metric(metric_type, |
- window_start + resolution, |
- SortAndGetMedian(&values))); |
- } |
- window_start += resolution; |
- } |
- |
- return aggregated_series.Pass(); |
-} |
- |
-scoped_ptr<Database::MetricVector> MeanAggregation::AggregateInterval( |
- MetricType metric_type, |
- Database::MetricVector::const_iterator* metric, |
- const Database::MetricVector::const_iterator& metric_end, |
- const base::Time& time_start, |
- const base::Time& time_end, |
- const base::TimeDelta& resolution) { |
- scoped_ptr<Database::MetricVector> aggregated_series( |
- new Database::MetricVector()); |
- |
- while (*metric != metric_end && (*metric)->time <= time_end) { |
- // Finds the beginning of the next aggregation window. |
- int64 window_offset = ((*metric)->time - time_start) / resolution; |
- base::Time window_start = time_start + (window_offset * resolution); |
- base::Time window_end = window_start + resolution; |
- base::Time last_sample_time = window_start; |
- double integrated = 0.0; |
- double metric_value = 0.0; |
- |
- // Aggregate the step function defined by the Metrics in |metrics|. |
- while (*metric != metric_end && (*metric)->time <= window_end) { |
- metric_value = (*metric)->value; |
- integrated += metric_value * |
- ((*metric)->time - last_sample_time).InSecondsF(); |
- last_sample_time = (*metric)->time; |
- ++(*metric); |
- } |
- if (*metric != metric_end) |
- metric_value = (*metric)->value; |
- |
- // If the window splits an area of the step function, split the |
- // aggregation at the end of the window. |
- integrated += metric_value * (window_end - last_sample_time).InSecondsF(); |
- double average = integrated / resolution.InSecondsF(); |
- aggregated_series->push_back(Metric(metric_type, window_end, average)); |
- } |
- |
- return aggregated_series.Pass(); |
-} |
- |
-double GetConversionFactor(UnitDetails from, UnitDetails to) { |
- if (from.measurement_type != to.measurement_type) { |
- LOG(ERROR) << "Invalid conversion requested"; |
- return 0.0; |
- } |
- |
- return static_cast<double>(from.amount_in_base_units) / |
- static_cast<double>(to.amount_in_base_units); |
-} |
- |
-scoped_ptr<VectorOfMetricVectors> AggregateMetric( |
- MetricType type, |
- const Database::MetricVector* metrics, |
- const base::Time& start, |
- const std::vector<TimeRange>& intervals, |
- const base::TimeDelta& resolution, |
- AggregationMethod method) { |
- if (!metrics || intervals.empty()) |
- return scoped_ptr<VectorOfMetricVectors>(); |
- |
- CHECK(resolution > base::TimeDelta()); |
- |
- switch (method) { |
- case AGGREGATION_METHOD_NONE: |
- return NoAggregation().AggregateMetrics( |
- type, metrics, start, intervals, resolution); |
- case AGGREGATION_METHOD_MEDIAN: |
- return MedianAggregation().AggregateMetrics( |
- type, metrics, start, intervals, resolution); |
- case AGGREGATION_METHOD_MEAN: |
- return MeanAggregation().AggregateMetrics( |
- type, metrics, start, intervals, resolution); |
- default: |
- NOTREACHED(); |
- return scoped_ptr<VectorOfMetricVectors>(); |
- } |
-} |
- |
-} // namespace performance_monitor |