Index: net/base/bandwidth_metrics.h |
diff --git a/net/base/bandwidth_metrics.h b/net/base/bandwidth_metrics.h |
deleted file mode 100644 |
index 679d65a673b6b1ad3ad05886efae235e4b563b0d..0000000000000000000000000000000000000000 |
--- a/net/base/bandwidth_metrics.h |
+++ /dev/null |
@@ -1,136 +0,0 @@ |
-// Copyright (c) 2011 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 NET_BASE_BANDWIDTH_METRICS_H_ |
-#define NET_BASE_BANDWIDTH_METRICS_H_ |
- |
-#include <list> |
- |
-#include "base/logging.h" |
-#include "base/metrics/histogram.h" |
-#include "base/time/time.h" |
- |
-namespace net { |
- |
-// Tracks statistics about the bandwidth metrics over time. In order to |
-// measure, this class needs to know when individual streams are in progress, |
-// so that it can know when to discount idle time. The BandwidthMetrics |
-// is unidirectional - it should only be used to record upload or download |
-// bandwidth, but not both. |
-// |
-// Note, the easiest thing to do is to just measure each stream and average |
-// them or add them. However, this does not work. If multiple streams are in |
-// progress concurrently, you have to look at the aggregate bandwidth at any |
-// point in time. |
-// |
-// Example: |
-// Imagine 4 streams opening and closing with overlapping time. |
-// We can't measure bandwidth by looking at any individual stream. |
-// We can only measure actual bandwidth by looking at the bandwidth |
-// across all open streams. |
-// |
-// Time ---------------------------------------> |
-// s1 +----------------+ |
-// s2 +----------------+ |
-// s3 +--------------+ |
-// s4 +--------------+ |
-// |
-// Example usage: |
-// |
-// BandwidthMetrics tracker; |
-// |
-// // When a stream is created |
-// tracker.StartStream(); |
-// |
-// // When data is transferred on any stream |
-// tracker.RecordSample(bytes); |
-// |
-// // When the stream is finished |
-// tracker.StopStream(); |
-// |
-// NOTE: This class is not thread safe. |
-// |
-class BandwidthMetrics { |
- public: |
- BandwidthMetrics() |
- : num_streams_in_progress_(0), |
- num_data_samples_(0), |
- data_sum_(0.0), |
- bytes_since_last_start_(0) { |
- } |
- |
- // Get the bandwidth. Returns Kbps (kilo-bits-per-second). |
- double bandwidth() const { |
- return data_sum_ / num_data_samples_; |
- } |
- |
- // Record that we've started a stream. |
- void StartStream() { |
- // If we're the only stream, we've finished some idle time. Record a new |
- // timestamp to indicate the start of data flow. |
- if (++num_streams_in_progress_ == 1) { |
- last_start_ = base::TimeTicks::Now(); |
- bytes_since_last_start_ = 0; |
- } |
- } |
- |
- // Track that we've completed a stream. |
- void StopStream() { |
- if (--num_streams_in_progress_ == 0) { |
- // We don't use small streams when tracking bandwidth because they are not |
- // precise; imagine a 25 byte stream. The sample is too small to make |
- // a good measurement. |
- // 20KB is an arbitrary value. We might want to use a lesser value. |
- static const int64 kRecordSizeThreshold = 20 * 1024; |
- if (bytes_since_last_start_ < kRecordSizeThreshold) |
- return; |
- |
- base::TimeDelta delta = base::TimeTicks::Now() - last_start_; |
- double ms = delta.InMillisecondsF(); |
- if (ms > 0.0) { |
- double kbps = static_cast<double>(bytes_since_last_start_) * 8 / ms; |
- ++num_data_samples_; |
- data_sum_ += kbps; |
- VLOG(1) << "Bandwidth: " << kbps |
- << "Kbps (avg " << bandwidth() << "Kbps)"; |
- int kbps_int = static_cast<int>(kbps); |
- UMA_HISTOGRAM_COUNTS_10000("Net.DownloadBandwidth", kbps_int); |
- } |
- } |
- } |
- |
- // Add a sample of the number of bytes read from the network into the tracker. |
- void RecordBytes(int bytes) { |
- DCHECK(num_streams_in_progress_); |
- bytes_since_last_start_ += static_cast<int64>(bytes); |
- } |
- |
- private: |
- int num_streams_in_progress_; // The number of streams in progress. |
- // TODO(mbelshe): Use a rolling buffer of 30 samples instead of an average. |
- int num_data_samples_; // The number of samples collected. |
- double data_sum_; // The sum of all samples collected. |
- int64 bytes_since_last_start_; // Bytes tracked during this "session". |
- base::TimeTicks last_start_; // Timestamp of the begin of this "session". |
-}; |
- |
-// A utility class for managing the lifecycle of a measured stream. |
-// It is important that we not leave unclosed streams, and this class helps |
-// ensure we always stop them. |
-class ScopedBandwidthMetrics { |
- public: |
- ScopedBandwidthMetrics(); |
- ~ScopedBandwidthMetrics(); |
- |
- void StartStream(); |
- void StopStream(); |
- void RecordBytes(int bytes); |
- |
- private: |
- bool started_; |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_BASE_BANDWIDTH_METRICS_H_ |