Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(995)

Unified Diff: media/base/download_rate_monitor_unittest.cc

Issue 9269027: Revert 118546 because it caused PrerenderHTML5VideoNetwork to timeout on windows and linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/download_rate_monitor.cc ('k') | media/base/pipeline.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/download_rate_monitor_unittest.cc
===================================================================
--- media/base/download_rate_monitor_unittest.cc (revision 118589)
+++ media/base/download_rate_monitor_unittest.cc (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// 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.
@@ -15,216 +15,151 @@
class DownloadRateMonitorTest : public ::testing::Test {
public:
- DownloadRateMonitorTest()
- : canplaythrough_cb_(base::Bind(&DownloadRateMonitorTest::CanPlayThrough,
- base::Unretained(this))) { }
+ DownloadRateMonitorTest() {
+ monitor_.set_total_bytes(kMediaSizeInBytes);
+ }
virtual ~DownloadRateMonitorTest() { }
MOCK_METHOD0(CanPlayThrough, void());
protected:
- static const int kMediaDuration = 120;
- static const int kMediaBitrate = 1024 * 1024 * 8;
- static const int kMediaByterate = kMediaBitrate / 8;
- static const int kMediaSizeInBytes = kMediaDuration * kMediaByterate;
- static const int kDeferThreshold = 30 * kMediaByterate;
+ static const int kMediaSizeInBytes = 20 * 1024 * 1024;
- // Simulates downloading |bytes_to_download| bytes of the media file, at
- // |download_speed_in_bps| bytes per second.
- void SimulateNetwork(int bytes_to_download, int download_speed_in_bps) {
- int bytes_downloaded = 0;
- while (bytes_downloaded < bytes_to_download &&
- !data_source_.is_deferred()) {
- int bytes_left_to_download = bytes_to_download - bytes_downloaded;
- int packet_size = std::min(download_speed_in_bps, bytes_left_to_download);
- time_elapsed_ += base::TimeDelta::FromMilliseconds(
- 1000 * packet_size / download_speed_in_bps);
- data_source_.ReceiveData(
- packet_size, time_elapsed_ + base::Time::UnixEpoch());
- bytes_downloaded += packet_size;
+ // Simulates downloading of the media file. Packets are timed evenly in
+ // |ms_between_packets| intervals, starting at |starting_time|, which is
+ // number of seconds since unix epoch (Jan 1, 1970).
+ // Returns the number of bytes buffered in the media file after the
+ // network activity.
+ int SimulateNetwork(double starting_time,
+ int starting_bytes,
+ int bytes_per_packet,
+ int ms_between_packets,
+ int number_of_packets) {
+ int bytes_buffered = starting_bytes;
+ base::Time packet_time = base::Time::FromDoubleT(starting_time);
+
+ monitor_.SetNetworkActivity(true);
+ // Loop executes (number_of_packets + 1) times because a packet needs a
+ // starting and end point.
+ for (int i = 0; i < number_of_packets + 1; ++i) {
+ monitor_.SetBufferedBytes(bytes_buffered, packet_time);
+ packet_time += base::TimeDelta::FromMilliseconds(ms_between_packets);
+ bytes_buffered += bytes_per_packet;
}
+ monitor_.SetNetworkActivity(false);
+ return bytes_buffered;
}
- void Initialize() {
- Initialize(false, false);
+ void StartMonitor(int bitrate) {
+ StartMonitor(bitrate, false, false);
}
- void Initialize(bool streaming, bool local_source) {
- data_source_.Initialize(
- kMediaBitrate, streaming, local_source, canplaythrough_cb_);
+ void StartMonitor(int bitrate, bool streaming, bool local_source) {
+ monitor_.Start(base::Bind(&DownloadRateMonitorTest::CanPlayThrough,
+ base::Unretained(this)), bitrate, streaming, local_source);
}
- bool DownloadIsDeferred() {
- return data_source_.is_deferred();
- }
+ DownloadRateMonitor monitor_;
- void SeekTo(int offset) {
- data_source_.SeekTo(offset);
- }
-
- // Returns the size of |seconds| seconds of media data in bytes.
- int SecondsToBytes(int seconds) {
- return seconds * kMediaByterate;
- }
-
private:
- // Helper class to simulate a buffered data source.
- class FakeDataSource {
- public:
- FakeDataSource()
- : total_bytes_(kMediaSizeInBytes),
- buffered_bytes_(0),
- offset_(0),
- defer_threshold_(kDeferThreshold),
- is_downloading_data_(true) { }
-
- bool is_deferred() { return !is_downloading_data_; }
-
- void ReceiveData(int bytes_received, base::Time packet_time) {
- CHECK(is_downloading_data_);
- buffered_bytes_ += bytes_received;
- // This simulates that the download is being deferred.
- if (buffered_bytes_ >= defer_threshold_)
- is_downloading_data_ = false;
-
- // Update monitor's state.
- monitor_.SetNetworkActivity(is_downloading_data_);
- monitor_.set_total_bytes(total_bytes_);
- monitor_.SetBufferedBytes(buffered_bytes_ + offset_, packet_time);
- }
-
- void Initialize(int bitrate, bool streaming, bool local_source,
- const base::Closure& canplaythrough_cb) {
- monitor_.Start(canplaythrough_cb, bitrate, streaming, local_source);
- }
-
- void SeekTo(int byte_position) {
- offset_ = byte_position;
- // Simulate recreating the buffer after a seek.
- buffered_bytes_ = 0;
- is_downloading_data_ = true;
- }
-
- private:
- DownloadRateMonitor monitor_;
-
- // Size of the media file being downloaded, in bytes.
- int total_bytes_;
-
- // Number of bytes currently in buffer.
- int buffered_bytes_;
-
- // The byte offset into the file from which the download began.
- int offset_;
-
- // The size of |buffered_bytes_| at which downloading should defer.
- int defer_threshold_;
-
- // True if download is active (not deferred_, false otherwise.
- bool is_downloading_data_;
- };
-
- FakeDataSource data_source_;
- base::Closure canplaythrough_cb_;
-
- // Amount of time elapsed while downloading data.
- base::TimeDelta time_elapsed_;
-
DISALLOW_COPY_AND_ASSIGN(DownloadRateMonitorTest);
};
TEST_F(DownloadRateMonitorTest, DownloadRateGreaterThanBitrate) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+
// Simulate downloading at double the media's bitrate.
- Initialize();
+ StartMonitor(media_bitrate);
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(SecondsToBytes(20), 2 * kMediaByterate);
+ SimulateNetwork(1, 0, 2 * media_bitrate / 8, 1000, 10);
}
-TEST_F(DownloadRateMonitorTest, DownloadRateLessThanBitrate_Defer) {
- Initialize();
+// If the user pauses and the pipeline stops downloading data, make sure the
+// DownloadRateMonitor understands that the download is not stalling.
+TEST_F(DownloadRateMonitorTest, DownloadRateGreaterThanBitrate_Pause) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+ static const int download_byte_rate = 1.1 * media_bitrate / 8;
- // Download slower than the media's bitrate, but buffer enough data such that
- // the data source defers.
+ // Start downloading faster than the media's bitrate.
+ StartMonitor(media_bitrate);
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(kDeferThreshold, 0.3 * kMediaByterate);
- CHECK(DownloadIsDeferred());
+ int buffered = SimulateNetwork(1, 0, download_byte_rate, 1000, 2);
+
+ // Then "pause" for 3 minutes and continue downloading at same rate.
+ SimulateNetwork(60 * 3, buffered, download_byte_rate, 1000, 4);
}
TEST_F(DownloadRateMonitorTest, DownloadRateGreaterThanBitrate_SeekForward) {
- // Start downloading faster than the media's bitrate.
- Initialize();
- SimulateNetwork(SecondsToBytes(3), 1.1 * kMediaByterate);
+ static const int media_bitrate = 1024 * 1024 * 8;
+ static const int download_byte_rate = 1.1 * media_bitrate / 8;
- // Then seek forward mid-file and continue downloading at same rate.
- SeekTo(kMediaSizeInBytes / 2);
+ // Start downloading faster than the media's bitrate.
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(7 * kMediaByterate, 1.1 * kMediaByterate);
+ StartMonitor(media_bitrate);
+ SimulateNetwork(1, 0, download_byte_rate, 1000, 2);
- // Verify deferring is not what caused CanPlayThrough to fire.
- CHECK(!DownloadIsDeferred());
+ // Then seek forward mid-file and continue downloading at same rate.
+ SimulateNetwork(4, kMediaSizeInBytes / 2, download_byte_rate, 1000, 4);
}
TEST_F(DownloadRateMonitorTest, DownloadRateGreaterThanBitrate_SeekBackward) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+ static const int download_byte_rate = 1.1 * media_bitrate / 8;
+
// Start downloading faster than the media's bitrate, in middle of file.
- Initialize();
- SeekTo(kMediaSizeInBytes / 2);
- SimulateNetwork(SecondsToBytes(3), 1.1 * kMediaByterate);
+ StartMonitor(media_bitrate);
+ SimulateNetwork(1, kMediaSizeInBytes / 2, download_byte_rate, 1000, 2);
// Then seek back to beginning and continue downloading at same rate.
- SeekTo(0);
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(SecondsToBytes(7), 1.1 * kMediaByterate);
-
- // Verify deferring is not what caused CanPlayThrough to fire.
- CHECK(!DownloadIsDeferred());
+ SimulateNetwork(4, 0, download_byte_rate, 1000, 4);
}
-TEST_F(DownloadRateMonitorTest, DownloadRateLessThanByterate) {
+TEST_F(DownloadRateMonitorTest, DownloadRateLessThanBitrate) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+
// Simulate downloading at half the media's bitrate.
EXPECT_CALL(*this, CanPlayThrough())
.Times(0);
- Initialize();
- SimulateNetwork(SecondsToBytes(10), kMediaByterate / 2);
+ StartMonitor(media_bitrate);
+ SimulateNetwork(1, 0, media_bitrate / 8 / 2, 1000, 10);
}
TEST_F(DownloadRateMonitorTest, MediaSourceIsLocal) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+
// Simulate no data downloaded.
EXPECT_CALL(*this, CanPlayThrough());
- Initialize(false, true);
+ StartMonitor(media_bitrate, false, true);
}
TEST_F(DownloadRateMonitorTest, MediaSourceIsStreaming) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+
// Simulate downloading at the media's bitrate while streaming.
EXPECT_CALL(*this, CanPlayThrough());
- Initialize(true, false);
- SimulateNetwork(SecondsToBytes(10), kMediaByterate);
+ StartMonitor(media_bitrate, true, false);
+ SimulateNetwork(1, 0, media_bitrate / 8, 1000, 10);
}
TEST_F(DownloadRateMonitorTest, VeryFastDownloadRate) {
+ static const int media_bitrate = 1024 * 1024 * 8;
+
// Simulate downloading half the video very quickly in one chunk.
- Initialize();
+ StartMonitor(media_bitrate);
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(kMediaSizeInBytes / 2, kMediaSizeInBytes * 10);
+ SimulateNetwork(1, 0, kMediaSizeInBytes / 2, 10, 1);
}
TEST_F(DownloadRateMonitorTest, DownloadEntireVideo) {
+ static const int seconds_of_data = 20;
+ static const int media_bitrate = kMediaSizeInBytes * 8 / seconds_of_data;
+
// Simulate downloading entire video at half the bitrate of the video.
- Initialize();
+ StartMonitor(media_bitrate);
EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(kMediaSizeInBytes, kMediaByterate / 2);
+ SimulateNetwork(1, 0, media_bitrate / 8 / 2, 1000, seconds_of_data * 2);
}
-TEST_F(DownloadRateMonitorTest, DownloadEndOfVideo) {
- Initialize();
- // Seek to 10s before the end of the file, then download the remainder of the
- // file at half the bitrate.
- SeekTo((kMediaDuration - 10) * kMediaByterate);
- EXPECT_CALL(*this, CanPlayThrough());
- SimulateNetwork(SecondsToBytes(10), kMediaByterate/ 2);
-
- // Verify deferring is not what caused CanPlayThrough to fire.
- CHECK(!DownloadIsDeferred());
-}
-
} // namespace media
« no previous file with comments | « media/base/download_rate_monitor.cc ('k') | media/base/pipeline.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698