| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/ref_counted.h" | 5 #include "base/memory/ref_counted.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/test/simple_test_tick_clock.h" | 7 #include "base/test/simple_test_tick_clock.h" |
| 8 #include "base/time/tick_clock.h" | 8 #include "base/time/tick_clock.h" |
| 9 #include "media/cast/cast_environment.h" | 9 #include "media/cast/cast_environment.h" |
| 10 #include "media/cast/logging/logging_defines.h" | 10 #include "media/cast/logging/logging_defines.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 | 58 |
| 59 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 59 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 60 | 60 |
| 61 RtpTimestamp rtp_timestamp = 0; | 61 RtpTimestamp rtp_timestamp = 0; |
| 62 uint32 frame_id = 0; | 62 uint32 frame_id = 0; |
| 63 | 63 |
| 64 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); | 64 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); |
| 65 | 65 |
| 66 cast_environment_->Logging()->InsertEncodedFrameEvent( | 66 cast_environment_->Logging()->InsertEncodedFrameEvent( |
| 67 sender_clock_->NowTicks(), | 67 sender_clock_->NowTicks(), |
| 68 kVideoFrameEncoded, | 68 FRAME_ENCODED, VIDEO_EVENT, |
| 69 rtp_timestamp, | 69 rtp_timestamp, |
| 70 frame_id, | 70 frame_id, |
| 71 1234, | 71 1234, |
| 72 true, | 72 true, |
| 73 5678); | 73 5678); |
| 74 | 74 |
| 75 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 75 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 76 | 76 |
| 77 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); | 77 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); |
| 78 cast_environment_->Logging()->InsertFrameEvent( | 78 cast_environment_->Logging()->InsertFrameEvent( |
| 79 receiver_clock_.NowTicks(), kVideoAckSent, rtp_timestamp, frame_id); | 79 receiver_clock_.NowTicks(), FRAME_ACK_SENT, VIDEO_EVENT, |
| 80 rtp_timestamp, frame_id); |
| 80 | 81 |
| 81 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 82 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 82 | 83 |
| 83 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); | 84 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); |
| 84 cast_environment_->Logging()->InsertFrameEvent( | 85 cast_environment_->Logging()->InsertFrameEvent( |
| 85 sender_clock_->NowTicks(), kVideoAckReceived, rtp_timestamp, frame_id); | 86 sender_clock_->NowTicks(), FRAME_ACK_RECEIVED, VIDEO_EVENT, |
| 87 rtp_timestamp, frame_id); |
| 86 | 88 |
| 87 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 89 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 88 | 90 |
| 89 int64 lower_bound_ms = lower_bound.InMilliseconds(); | 91 int64 lower_bound_ms = lower_bound.InMilliseconds(); |
| 90 int64 upper_bound_ms = upper_bound.InMilliseconds(); | 92 int64 upper_bound_ms = upper_bound.InMilliseconds(); |
| 91 EXPECT_EQ(70, lower_bound_ms); | 93 EXPECT_EQ(70, lower_bound_ms); |
| 92 EXPECT_EQ(110, upper_bound_ms); | 94 EXPECT_EQ(110, upper_bound_ms); |
| 93 EXPECT_GE(true_offset_ms, lower_bound_ms); | 95 EXPECT_GE(true_offset_ms, lower_bound_ms); |
| 94 EXPECT_LE(true_offset_ms, upper_bound_ms); | 96 EXPECT_LE(true_offset_ms, upper_bound_ms); |
| 95 } | 97 } |
| 96 | 98 |
| 97 // Same scenario as above, but event C arrives before event B. It doens't mean | 99 // Same scenario as above, but event C arrives before event B. It doens't mean |
| 98 // event C occurred before event B. | 100 // event C occurred before event B. |
| 99 TEST_F(ReceiverTimeOffsetEstimatorImplTest, EventCArrivesBeforeEventB) { | 101 TEST_F(ReceiverTimeOffsetEstimatorImplTest, EventCArrivesBeforeEventB) { |
| 100 int64 true_offset_ms = 100; | 102 int64 true_offset_ms = 100; |
| 101 receiver_clock_.Advance(base::TimeDelta::FromMilliseconds(true_offset_ms)); | 103 receiver_clock_.Advance(base::TimeDelta::FromMilliseconds(true_offset_ms)); |
| 102 | 104 |
| 103 base::TimeDelta lower_bound; | 105 base::TimeDelta lower_bound; |
| 104 base::TimeDelta upper_bound; | 106 base::TimeDelta upper_bound; |
| 105 | 107 |
| 106 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 108 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 107 | 109 |
| 108 RtpTimestamp rtp_timestamp = 0; | 110 RtpTimestamp rtp_timestamp = 0; |
| 109 uint32 frame_id = 0; | 111 uint32 frame_id = 0; |
| 110 | 112 |
| 111 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); | 113 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); |
| 112 | 114 |
| 113 cast_environment_->Logging()->InsertEncodedFrameEvent( | 115 cast_environment_->Logging()->InsertEncodedFrameEvent( |
| 114 sender_clock_->NowTicks(), | 116 sender_clock_->NowTicks(), |
| 115 kVideoFrameEncoded, | 117 FRAME_ENCODED, VIDEO_EVENT, |
| 116 rtp_timestamp, | 118 rtp_timestamp, |
| 117 frame_id, | 119 frame_id, |
| 118 1234, | 120 1234, |
| 119 true, | 121 true, |
| 120 5678); | 122 5678); |
| 121 | 123 |
| 122 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 124 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 123 | 125 |
| 124 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); | 126 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); |
| 125 base::TimeTicks event_b_time = receiver_clock_.NowTicks(); | 127 base::TimeTicks event_b_time = receiver_clock_.NowTicks(); |
| 126 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); | 128 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); |
| 127 base::TimeTicks event_c_time = sender_clock_->NowTicks(); | 129 base::TimeTicks event_c_time = sender_clock_->NowTicks(); |
| 128 | 130 |
| 129 cast_environment_->Logging()->InsertFrameEvent( | 131 cast_environment_->Logging()->InsertFrameEvent( |
| 130 event_c_time, kVideoAckReceived, rtp_timestamp, frame_id); | 132 event_c_time, FRAME_ACK_RECEIVED, VIDEO_EVENT, rtp_timestamp, frame_id); |
| 131 | 133 |
| 132 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 134 EXPECT_FALSE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 133 | 135 |
| 134 cast_environment_->Logging()->InsertFrameEvent( | 136 cast_environment_->Logging()->InsertFrameEvent( |
| 135 event_b_time, kVideoAckSent, rtp_timestamp, frame_id); | 137 event_b_time, FRAME_ACK_SENT, VIDEO_EVENT, rtp_timestamp, frame_id); |
| 136 | 138 |
| 137 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 139 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 138 | 140 |
| 139 int64 lower_bound_ms = lower_bound.InMilliseconds(); | 141 int64 lower_bound_ms = lower_bound.InMilliseconds(); |
| 140 int64 upper_bound_ms = upper_bound.InMilliseconds(); | 142 int64 upper_bound_ms = upper_bound.InMilliseconds(); |
| 141 EXPECT_EQ(70, lower_bound_ms); | 143 EXPECT_EQ(70, lower_bound_ms); |
| 142 EXPECT_EQ(110, upper_bound_ms); | 144 EXPECT_EQ(110, upper_bound_ms); |
| 143 EXPECT_GE(true_offset_ms, lower_bound_ms); | 145 EXPECT_GE(true_offset_ms, lower_bound_ms); |
| 144 EXPECT_LE(true_offset_ms, upper_bound_ms); | 146 EXPECT_LE(true_offset_ms, upper_bound_ms); |
| 145 } | 147 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 159 int frame_id_c = 2; | 161 int frame_id_c = 2; |
| 160 | 162 |
| 161 // Frame 1 times: [20, 30+100, 60] | 163 // Frame 1 times: [20, 30+100, 60] |
| 162 // Frame 2 times: [30, 50+100, 55] | 164 // Frame 2 times: [30, 50+100, 55] |
| 163 // Frame 3 times: [77, 80+100, 110] | 165 // Frame 3 times: [77, 80+100, 110] |
| 164 // Bound should end up at [95, 103] | 166 // Bound should end up at [95, 103] |
| 165 // Events times in chronological order: 20, 30 x2, 50, 55, 60, 77, 80, 110 | 167 // Events times in chronological order: 20, 30 x2, 50, 55, 60, 77, 80, 110 |
| 166 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); | 168 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); |
| 167 cast_environment_->Logging()->InsertEncodedFrameEvent( | 169 cast_environment_->Logging()->InsertEncodedFrameEvent( |
| 168 sender_clock_->NowTicks(), | 170 sender_clock_->NowTicks(), |
| 169 kVideoFrameEncoded, | 171 FRAME_ENCODED, VIDEO_EVENT, |
| 170 rtp_timestamp_a, | 172 rtp_timestamp_a, |
| 171 frame_id_a, | 173 frame_id_a, |
| 172 1234, | 174 1234, |
| 173 true, | 175 true, |
| 174 5678); | 176 5678); |
| 175 | 177 |
| 176 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); | 178 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); |
| 177 cast_environment_->Logging()->InsertEncodedFrameEvent( | 179 cast_environment_->Logging()->InsertEncodedFrameEvent( |
| 178 sender_clock_->NowTicks(), | 180 sender_clock_->NowTicks(), |
| 179 kVideoFrameEncoded, | 181 FRAME_ENCODED, VIDEO_EVENT, |
| 180 rtp_timestamp_b, | 182 rtp_timestamp_b, |
| 181 frame_id_b, | 183 frame_id_b, |
| 182 1234, | 184 1234, |
| 183 true, | 185 true, |
| 184 5678); | 186 5678); |
| 185 cast_environment_->Logging()->InsertFrameEvent( | 187 cast_environment_->Logging()->InsertFrameEvent( |
| 186 receiver_clock_.NowTicks(), kVideoAckSent, rtp_timestamp_a, frame_id_a); | 188 receiver_clock_.NowTicks(), FRAME_ACK_SENT, VIDEO_EVENT, |
| 189 rtp_timestamp_a, frame_id_a); |
| 187 | 190 |
| 188 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); | 191 AdvanceClocks(base::TimeDelta::FromMilliseconds(20)); |
| 189 cast_environment_->Logging()->InsertFrameEvent( | 192 cast_environment_->Logging()->InsertFrameEvent( |
| 190 receiver_clock_.NowTicks(), kVideoAckSent, rtp_timestamp_b, frame_id_b); | 193 receiver_clock_.NowTicks(), FRAME_ACK_SENT, VIDEO_EVENT, |
| 194 rtp_timestamp_b, frame_id_b); |
| 191 | 195 |
| 192 AdvanceClocks(base::TimeDelta::FromMilliseconds(5)); | 196 AdvanceClocks(base::TimeDelta::FromMilliseconds(5)); |
| 193 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), | 197 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), |
| 194 kVideoAckReceived, | 198 FRAME_ACK_RECEIVED, |
| 199 VIDEO_EVENT, |
| 195 rtp_timestamp_b, | 200 rtp_timestamp_b, |
| 196 frame_id_b); | 201 frame_id_b); |
| 197 | 202 |
| 198 AdvanceClocks(base::TimeDelta::FromMilliseconds(5)); | 203 AdvanceClocks(base::TimeDelta::FromMilliseconds(5)); |
| 199 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), | 204 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), |
| 200 kVideoAckReceived, | 205 FRAME_ACK_RECEIVED, |
| 206 VIDEO_EVENT, |
| 201 rtp_timestamp_a, | 207 rtp_timestamp_a, |
| 202 frame_id_a); | 208 frame_id_a); |
| 203 | 209 |
| 204 AdvanceClocks(base::TimeDelta::FromMilliseconds(17)); | 210 AdvanceClocks(base::TimeDelta::FromMilliseconds(17)); |
| 205 cast_environment_->Logging()->InsertEncodedFrameEvent( | 211 cast_environment_->Logging()->InsertEncodedFrameEvent( |
| 206 sender_clock_->NowTicks(), | 212 sender_clock_->NowTicks(), |
| 207 kVideoFrameEncoded, | 213 FRAME_ENCODED, VIDEO_EVENT, |
| 208 rtp_timestamp_c, | 214 rtp_timestamp_c, |
| 209 frame_id_c, | 215 frame_id_c, |
| 210 1234, | 216 1234, |
| 211 true, | 217 true, |
| 212 5678); | 218 5678); |
| 213 | 219 |
| 214 AdvanceClocks(base::TimeDelta::FromMilliseconds(3)); | 220 AdvanceClocks(base::TimeDelta::FromMilliseconds(3)); |
| 215 cast_environment_->Logging()->InsertFrameEvent( | 221 cast_environment_->Logging()->InsertFrameEvent( |
| 216 receiver_clock_.NowTicks(), kVideoAckSent, rtp_timestamp_c, frame_id_c); | 222 receiver_clock_.NowTicks(), FRAME_ACK_SENT, VIDEO_EVENT, |
| 223 rtp_timestamp_c, frame_id_c); |
| 217 | 224 |
| 218 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); | 225 AdvanceClocks(base::TimeDelta::FromMilliseconds(30)); |
| 219 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), | 226 cast_environment_->Logging()->InsertFrameEvent(sender_clock_->NowTicks(), |
| 220 kVideoAckReceived, | 227 FRAME_ACK_RECEIVED, |
| 228 VIDEO_EVENT, |
| 221 rtp_timestamp_c, | 229 rtp_timestamp_c, |
| 222 frame_id_c); | 230 frame_id_c); |
| 223 | 231 |
| 224 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); | 232 EXPECT_TRUE(estimator_.GetReceiverOffsetBounds(&lower_bound, &upper_bound)); |
| 225 int64 lower_bound_ms = lower_bound.InMilliseconds(); | 233 int64 lower_bound_ms = lower_bound.InMilliseconds(); |
| 226 int64 upper_bound_ms = upper_bound.InMilliseconds(); | 234 int64 upper_bound_ms = upper_bound.InMilliseconds(); |
| 227 EXPECT_EQ(95, lower_bound_ms); | 235 EXPECT_EQ(95, lower_bound_ms); |
| 228 EXPECT_EQ(103, upper_bound_ms); | 236 EXPECT_EQ(103, upper_bound_ms); |
| 229 EXPECT_GE(true_offset_ms, lower_bound_ms); | 237 EXPECT_GE(true_offset_ms, lower_bound_ms); |
| 230 EXPECT_LE(true_offset_ms, upper_bound_ms); | 238 EXPECT_LE(true_offset_ms, upper_bound_ms); |
| 231 } | 239 } |
| 232 | 240 |
| 233 } // namespace cast | 241 } // namespace cast |
| 234 } // namespace media | 242 } // namespace media |
| OLD | NEW |