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

Side by Side Diff: media/cast/congestion_control/congestion_control_unittest.cc

Issue 388663003: Cast: Reshuffle files under media/cast (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: missing includes Created 6 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2013 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.
4
5 #include <stdint.h>
6
7 #include "base/test/simple_test_tick_clock.h"
8 #include "media/cast/cast_defines.h"
9 #include "media/cast/congestion_control/congestion_control.h"
10 #include "media/cast/test/fake_single_thread_task_runner.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace media {
14 namespace cast {
15
16 static const uint32 kMaxBitrateConfigured = 5000000;
17 static const uint32 kMinBitrateConfigured = 500000;
18 static const int64 kStartMillisecond = INT64_C(12345678900000);
19 static const double kTargetEmptyBufferFraction = 0.9;
20
21 class CongestionControlTest : public ::testing::Test {
22 protected:
23 CongestionControlTest()
24 : task_runner_(new test::FakeSingleThreadTaskRunner(&testing_clock_)) {
25 testing_clock_.Advance(
26 base::TimeDelta::FromMilliseconds(kStartMillisecond));
27 congestion_control_.reset(new CongestionControl(
28 &testing_clock_, kMaxBitrateConfigured, kMinBitrateConfigured, 10));
29 }
30
31 void AckFrame(uint32 frame_id) {
32 congestion_control_->AckFrame(frame_id, testing_clock_.NowTicks());
33 }
34
35 void Run(uint32 frames,
36 size_t frame_size,
37 base::TimeDelta rtt,
38 base::TimeDelta frame_delay,
39 base::TimeDelta ack_time) {
40 for (frame_id_ = 0; frame_id_ < frames; frame_id_++) {
41 congestion_control_->UpdateRtt(rtt);
42 congestion_control_->SendFrameToTransport(
43 frame_id_, frame_size, testing_clock_.NowTicks());
44 task_runner_->PostDelayedTask(FROM_HERE,
45 base::Bind(&CongestionControlTest::AckFrame,
46 base::Unretained(this),
47 frame_id_),
48 ack_time);
49 task_runner_->Sleep(frame_delay);
50 }
51 }
52
53 base::SimpleTestTickClock testing_clock_;
54 scoped_ptr<CongestionControl> congestion_control_;
55 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
56 uint32 frame_id_;
57
58 DISALLOW_COPY_AND_ASSIGN(CongestionControlTest);
59 };
60
61 TEST_F(CongestionControlTest, SimpleRun) {
62 uint32 frame_delay = 33;
63 uint32 frame_size = 10000 * 8;
64 Run(500,
65 frame_size,
66 base::TimeDelta::FromMilliseconds(10),
67 base::TimeDelta::FromMilliseconds(frame_delay),
68 base::TimeDelta::FromMilliseconds(45));
69 // Empty the buffer.
70 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(100));
71
72 uint32 safe_bitrate = frame_size * 1000 / frame_delay;
73 uint32 bitrate = congestion_control_->GetBitrate(
74 testing_clock_.NowTicks() + base::TimeDelta::FromMilliseconds(300),
75 base::TimeDelta::FromMilliseconds(300));
76 EXPECT_NEAR(
77 safe_bitrate / kTargetEmptyBufferFraction, bitrate, safe_bitrate * 0.05);
78
79 bitrate = congestion_control_->GetBitrate(
80 testing_clock_.NowTicks() + base::TimeDelta::FromMilliseconds(200),
81 base::TimeDelta::FromMilliseconds(300));
82 EXPECT_NEAR(safe_bitrate / kTargetEmptyBufferFraction * 2 / 3,
83 bitrate,
84 safe_bitrate * 0.05);
85
86 bitrate = congestion_control_->GetBitrate(
87 testing_clock_.NowTicks() + base::TimeDelta::FromMilliseconds(100),
88 base::TimeDelta::FromMilliseconds(300));
89 EXPECT_NEAR(safe_bitrate / kTargetEmptyBufferFraction * 1 / 3,
90 bitrate,
91 safe_bitrate * 0.05);
92
93 // Add a large (100ms) frame.
94 congestion_control_->SendFrameToTransport(
95 frame_id_++, safe_bitrate * 100 / 1000, testing_clock_.NowTicks());
96
97 // Results should show that we have ~200ms to send
98 bitrate = congestion_control_->GetBitrate(
99 testing_clock_.NowTicks() + base::TimeDelta::FromMilliseconds(300),
100 base::TimeDelta::FromMilliseconds(300));
101 EXPECT_NEAR(safe_bitrate / kTargetEmptyBufferFraction * 2 / 3,
102 bitrate,
103 safe_bitrate * 0.05);
104
105 // Add another large (100ms) frame.
106 congestion_control_->SendFrameToTransport(
107 frame_id_++, safe_bitrate * 100 / 1000, testing_clock_.NowTicks());
108
109 // Resulst should show that we have ~100ms to send
110 bitrate = congestion_control_->GetBitrate(
111 testing_clock_.NowTicks() + base::TimeDelta::FromMilliseconds(300),
112 base::TimeDelta::FromMilliseconds(300));
113 EXPECT_NEAR(safe_bitrate / kTargetEmptyBufferFraction * 1 / 3,
114 bitrate,
115 safe_bitrate * 0.05);
116 }
117
118
119 } // namespace cast
120 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/congestion_control/congestion_control.cc ('k') | media/cast/framer/cast_message_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698