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 "media/cast/logging/stats_event_subscriber.h" | 5 #include "media/cast/logging/stats_event_subscriber.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 |
| 10 #include <memory> |
9 #include <utility> | 11 #include <utility> |
10 | 12 |
11 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/rand_util.h" | 14 #include "base/rand_util.h" |
14 #include "base/test/simple_test_tick_clock.h" | 15 #include "base/test/simple_test_tick_clock.h" |
15 #include "base/time/tick_clock.h" | 16 #include "base/time/tick_clock.h" |
16 #include "base/values.h" | 17 #include "base/values.h" |
17 #include "media/base/fake_single_thread_task_runner.h" | 18 #include "media/base/fake_single_thread_task_runner.h" |
18 #include "media/cast/cast_environment.h" | 19 #include "media/cast/cast_environment.h" |
19 #include "media/cast/logging/logging_defines.h" | 20 #include "media/cast/logging/logging_defines.h" |
20 #include "media/cast/test/fake_receiver_time_offset_estimator.h" | 21 #include "media/cast/test/fake_receiver_time_offset_estimator.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
22 | 23 |
23 namespace { | 24 namespace { |
24 const int kReceiverOffsetSecs = 100; | 25 const int kReceiverOffsetSecs = 100; |
25 } | 26 } |
26 | 27 |
27 namespace media { | 28 namespace media { |
28 namespace cast { | 29 namespace cast { |
29 | 30 |
30 class StatsEventSubscriberTest : public ::testing::Test { | 31 class StatsEventSubscriberTest : public ::testing::Test { |
31 protected: | 32 protected: |
32 StatsEventSubscriberTest() | 33 StatsEventSubscriberTest() |
33 : sender_clock_(new base::SimpleTestTickClock()), | 34 : sender_clock_(new base::SimpleTestTickClock()), |
34 task_runner_(new FakeSingleThreadTaskRunner(sender_clock_)), | 35 task_runner_(new FakeSingleThreadTaskRunner(sender_clock_)), |
35 cast_environment_( | 36 cast_environment_( |
36 new CastEnvironment(scoped_ptr<base::TickClock>(sender_clock_), | 37 new CastEnvironment(std::unique_ptr<base::TickClock>(sender_clock_), |
37 task_runner_, | 38 task_runner_, |
38 task_runner_, | 39 task_runner_, |
39 task_runner_)), | 40 task_runner_)), |
40 fake_offset_estimator_( | 41 fake_offset_estimator_( |
41 base::TimeDelta::FromSeconds(kReceiverOffsetSecs)) { | 42 base::TimeDelta::FromSeconds(kReceiverOffsetSecs)) { |
42 receiver_clock_.Advance(base::TimeDelta::FromSeconds(kReceiverOffsetSecs)); | 43 receiver_clock_.Advance(base::TimeDelta::FromSeconds(kReceiverOffsetSecs)); |
43 cast_environment_->logger()->Subscribe(&fake_offset_estimator_); | 44 cast_environment_->logger()->Subscribe(&fake_offset_estimator_); |
44 } | 45 } |
45 | 46 |
46 ~StatsEventSubscriberTest() override { | 47 ~StatsEventSubscriberTest() override { |
(...skipping 12 matching lines...) Expand all Loading... |
59 subscriber_.reset(new StatsEventSubscriber( | 60 subscriber_.reset(new StatsEventSubscriber( |
60 event_media_type, cast_environment_->Clock(), &fake_offset_estimator_)); | 61 event_media_type, cast_environment_->Clock(), &fake_offset_estimator_)); |
61 cast_environment_->logger()->Subscribe(subscriber_.get()); | 62 cast_environment_->logger()->Subscribe(subscriber_.get()); |
62 } | 63 } |
63 | 64 |
64 base::SimpleTestTickClock* sender_clock_; // Owned by CastEnvironment. | 65 base::SimpleTestTickClock* sender_clock_; // Owned by CastEnvironment. |
65 base::SimpleTestTickClock receiver_clock_; | 66 base::SimpleTestTickClock receiver_clock_; |
66 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; | 67 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; |
67 scoped_refptr<CastEnvironment> cast_environment_; | 68 scoped_refptr<CastEnvironment> cast_environment_; |
68 test::FakeReceiverTimeOffsetEstimator fake_offset_estimator_; | 69 test::FakeReceiverTimeOffsetEstimator fake_offset_estimator_; |
69 scoped_ptr<StatsEventSubscriber> subscriber_; | 70 std::unique_ptr<StatsEventSubscriber> subscriber_; |
70 }; | 71 }; |
71 | 72 |
72 TEST_F(StatsEventSubscriberTest, CaptureEncode) { | 73 TEST_F(StatsEventSubscriberTest, CaptureEncode) { |
73 Init(VIDEO_EVENT); | 74 Init(VIDEO_EVENT); |
74 | 75 |
75 RtpTimeTicks rtp_timestamp; | 76 RtpTimeTicks rtp_timestamp; |
76 uint32_t frame_id = 0; | 77 uint32_t frame_id = 0; |
77 int extra_frames = 50; | 78 int extra_frames = 50; |
78 // Only the first |extra_frames| frames logged will be taken into account | 79 // Only the first |extra_frames| frames logged will be taken into account |
79 // when computing dropped frames. | 80 // when computing dropped frames. |
80 int num_frames = StatsEventSubscriber::kMaxFrameInfoMapSize + 50; | 81 int num_frames = StatsEventSubscriber::kMaxFrameInfoMapSize + 50; |
81 int dropped_frames = 0; | 82 int dropped_frames = 0; |
82 base::TimeTicks start_time = sender_clock_->NowTicks(); | 83 base::TimeTicks start_time = sender_clock_->NowTicks(); |
83 // Drop half the frames during the encode step. | 84 // Drop half the frames during the encode step. |
84 for (int i = 0; i < num_frames; i++) { | 85 for (int i = 0; i < num_frames; i++) { |
85 scoped_ptr<FrameEvent> capture_begin_event(new FrameEvent()); | 86 std::unique_ptr<FrameEvent> capture_begin_event(new FrameEvent()); |
86 capture_begin_event->timestamp = sender_clock_->NowTicks(); | 87 capture_begin_event->timestamp = sender_clock_->NowTicks(); |
87 capture_begin_event->type = FRAME_CAPTURE_BEGIN; | 88 capture_begin_event->type = FRAME_CAPTURE_BEGIN; |
88 capture_begin_event->media_type = VIDEO_EVENT; | 89 capture_begin_event->media_type = VIDEO_EVENT; |
89 capture_begin_event->rtp_timestamp = rtp_timestamp; | 90 capture_begin_event->rtp_timestamp = rtp_timestamp; |
90 cast_environment_->logger()->DispatchFrameEvent( | 91 cast_environment_->logger()->DispatchFrameEvent( |
91 std::move(capture_begin_event)); | 92 std::move(capture_begin_event)); |
92 | 93 |
93 AdvanceClocks(base::TimeDelta::FromMicroseconds(10)); | 94 AdvanceClocks(base::TimeDelta::FromMicroseconds(10)); |
94 scoped_ptr<FrameEvent> capture_end_event(new FrameEvent()); | 95 std::unique_ptr<FrameEvent> capture_end_event(new FrameEvent()); |
95 capture_end_event->timestamp = sender_clock_->NowTicks(); | 96 capture_end_event->timestamp = sender_clock_->NowTicks(); |
96 capture_end_event->type = FRAME_CAPTURE_END; | 97 capture_end_event->type = FRAME_CAPTURE_END; |
97 capture_end_event->media_type = VIDEO_EVENT; | 98 capture_end_event->media_type = VIDEO_EVENT; |
98 capture_end_event->rtp_timestamp = rtp_timestamp; | 99 capture_end_event->rtp_timestamp = rtp_timestamp; |
99 cast_environment_->logger()->DispatchFrameEvent( | 100 cast_environment_->logger()->DispatchFrameEvent( |
100 std::move(capture_end_event)); | 101 std::move(capture_end_event)); |
101 | 102 |
102 if (i % 2 == 0) { | 103 if (i % 2 == 0) { |
103 AdvanceClocks(base::TimeDelta::FromMicroseconds(10)); | 104 AdvanceClocks(base::TimeDelta::FromMicroseconds(10)); |
104 scoped_ptr<FrameEvent> encode_event(new FrameEvent()); | 105 std::unique_ptr<FrameEvent> encode_event(new FrameEvent()); |
105 encode_event->timestamp = sender_clock_->NowTicks(); | 106 encode_event->timestamp = sender_clock_->NowTicks(); |
106 encode_event->type = FRAME_ENCODED; | 107 encode_event->type = FRAME_ENCODED; |
107 encode_event->media_type = VIDEO_EVENT; | 108 encode_event->media_type = VIDEO_EVENT; |
108 encode_event->rtp_timestamp = rtp_timestamp; | 109 encode_event->rtp_timestamp = rtp_timestamp; |
109 encode_event->frame_id = frame_id; | 110 encode_event->frame_id = frame_id; |
110 encode_event->size = 1024; | 111 encode_event->size = 1024; |
111 encode_event->key_frame = true; | 112 encode_event->key_frame = true; |
112 encode_event->target_bitrate = 5678; | 113 encode_event->target_bitrate = 5678; |
113 encode_event->encoder_cpu_utilization = 9.10; | 114 encode_event->encoder_cpu_utilization = 9.10; |
114 encode_event->idealized_bitrate_utilization = 11.12; | 115 encode_event->idealized_bitrate_utilization = 11.12; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 uint32_t frame_id = 0; | 159 uint32_t frame_id = 0; |
159 int num_frames = 10; | 160 int num_frames = 10; |
160 base::TimeTicks start_time = sender_clock_->NowTicks(); | 161 base::TimeTicks start_time = sender_clock_->NowTicks(); |
161 AdvanceClocks(base::TimeDelta::FromMicroseconds(35678)); | 162 AdvanceClocks(base::TimeDelta::FromMicroseconds(35678)); |
162 base::TimeTicks first_event_time = sender_clock_->NowTicks(); | 163 base::TimeTicks first_event_time = sender_clock_->NowTicks(); |
163 base::TimeTicks last_event_time; | 164 base::TimeTicks last_event_time; |
164 int total_size = 0; | 165 int total_size = 0; |
165 for (int i = 0; i < num_frames; i++) { | 166 for (int i = 0; i < num_frames; i++) { |
166 int size = 1000 + base::RandInt(-100, 100); | 167 int size = 1000 + base::RandInt(-100, 100); |
167 total_size += size; | 168 total_size += size; |
168 scoped_ptr<FrameEvent> encode_event(new FrameEvent()); | 169 std::unique_ptr<FrameEvent> encode_event(new FrameEvent()); |
169 encode_event->timestamp = sender_clock_->NowTicks(); | 170 encode_event->timestamp = sender_clock_->NowTicks(); |
170 encode_event->type = FRAME_ENCODED; | 171 encode_event->type = FRAME_ENCODED; |
171 encode_event->media_type = VIDEO_EVENT; | 172 encode_event->media_type = VIDEO_EVENT; |
172 encode_event->rtp_timestamp = rtp_timestamp; | 173 encode_event->rtp_timestamp = rtp_timestamp; |
173 encode_event->frame_id = frame_id; | 174 encode_event->frame_id = frame_id; |
174 encode_event->size = size; | 175 encode_event->size = size; |
175 encode_event->key_frame = true; | 176 encode_event->key_frame = true; |
176 encode_event->target_bitrate = 5678; | 177 encode_event->target_bitrate = 5678; |
177 encode_event->encoder_cpu_utilization = 9.10; | 178 encode_event->encoder_cpu_utilization = 9.10; |
178 encode_event->idealized_bitrate_utilization = 11.12; | 179 encode_event->idealized_bitrate_utilization = 11.12; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 } | 221 } |
221 | 222 |
222 TEST_F(StatsEventSubscriberTest, Decode) { | 223 TEST_F(StatsEventSubscriberTest, Decode) { |
223 Init(VIDEO_EVENT); | 224 Init(VIDEO_EVENT); |
224 | 225 |
225 RtpTimeTicks rtp_timestamp; | 226 RtpTimeTicks rtp_timestamp; |
226 uint32_t frame_id = 0; | 227 uint32_t frame_id = 0; |
227 int num_frames = 10; | 228 int num_frames = 10; |
228 base::TimeTicks start_time = sender_clock_->NowTicks(); | 229 base::TimeTicks start_time = sender_clock_->NowTicks(); |
229 for (int i = 0; i < num_frames; i++) { | 230 for (int i = 0; i < num_frames; i++) { |
230 scoped_ptr<FrameEvent> decode_event(new FrameEvent()); | 231 std::unique_ptr<FrameEvent> decode_event(new FrameEvent()); |
231 decode_event->timestamp = receiver_clock_.NowTicks(); | 232 decode_event->timestamp = receiver_clock_.NowTicks(); |
232 decode_event->type = FRAME_DECODED; | 233 decode_event->type = FRAME_DECODED; |
233 decode_event->media_type = VIDEO_EVENT; | 234 decode_event->media_type = VIDEO_EVENT; |
234 decode_event->rtp_timestamp = rtp_timestamp; | 235 decode_event->rtp_timestamp = rtp_timestamp; |
235 decode_event->frame_id = frame_id; | 236 decode_event->frame_id = frame_id; |
236 cast_environment_->logger()->DispatchFrameEvent(std::move(decode_event)); | 237 cast_environment_->logger()->DispatchFrameEvent(std::move(decode_event)); |
237 | 238 |
238 AdvanceClocks(base::TimeDelta::FromMicroseconds(36789)); | 239 AdvanceClocks(base::TimeDelta::FromMicroseconds(36789)); |
239 rtp_timestamp += RtpTimeDelta::FromTicks(90); | 240 rtp_timestamp += RtpTimeDelta::FromTicks(90); |
240 frame_id++; | 241 frame_id++; |
(...skipping 18 matching lines...) Expand all Loading... |
259 Init(VIDEO_EVENT); | 260 Init(VIDEO_EVENT); |
260 | 261 |
261 RtpTimeTicks rtp_timestamp; | 262 RtpTimeTicks rtp_timestamp; |
262 uint32_t frame_id = 0; | 263 uint32_t frame_id = 0; |
263 int num_frames = 10; | 264 int num_frames = 10; |
264 int late_frames = 0; | 265 int late_frames = 0; |
265 for (int i = 0, delay_ms = -50; i < num_frames; i++, delay_ms += 10) { | 266 for (int i = 0, delay_ms = -50; i < num_frames; i++, delay_ms += 10) { |
266 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms); | 267 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_ms); |
267 if (delay_ms > 0) | 268 if (delay_ms > 0) |
268 late_frames++; | 269 late_frames++; |
269 scoped_ptr<FrameEvent> playout_event(new FrameEvent()); | 270 std::unique_ptr<FrameEvent> playout_event(new FrameEvent()); |
270 playout_event->timestamp = receiver_clock_.NowTicks(); | 271 playout_event->timestamp = receiver_clock_.NowTicks(); |
271 playout_event->type = FRAME_PLAYOUT; | 272 playout_event->type = FRAME_PLAYOUT; |
272 playout_event->media_type = VIDEO_EVENT; | 273 playout_event->media_type = VIDEO_EVENT; |
273 playout_event->rtp_timestamp = rtp_timestamp; | 274 playout_event->rtp_timestamp = rtp_timestamp; |
274 playout_event->frame_id = frame_id; | 275 playout_event->frame_id = frame_id; |
275 playout_event->delay_delta = delay; | 276 playout_event->delay_delta = delay; |
276 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); | 277 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); |
277 | 278 |
278 AdvanceClocks(base::TimeDelta::FromMicroseconds(37890)); | 279 AdvanceClocks(base::TimeDelta::FromMicroseconds(37890)); |
279 rtp_timestamp += RtpTimeDelta::FromTicks(90); | 280 rtp_timestamp += RtpTimeDelta::FromTicks(90); |
(...skipping 11 matching lines...) Expand all Loading... |
291 } | 292 } |
292 | 293 |
293 TEST_F(StatsEventSubscriberTest, E2ELatency) { | 294 TEST_F(StatsEventSubscriberTest, E2ELatency) { |
294 Init(VIDEO_EVENT); | 295 Init(VIDEO_EVENT); |
295 | 296 |
296 RtpTimeTicks rtp_timestamp; | 297 RtpTimeTicks rtp_timestamp; |
297 uint32_t frame_id = 0; | 298 uint32_t frame_id = 0; |
298 int num_frames = 10; | 299 int num_frames = 10; |
299 base::TimeDelta total_latency; | 300 base::TimeDelta total_latency; |
300 for (int i = 0; i < num_frames; i++) { | 301 for (int i = 0; i < num_frames; i++) { |
301 scoped_ptr<FrameEvent> capture_begin_event(new FrameEvent()); | 302 std::unique_ptr<FrameEvent> capture_begin_event(new FrameEvent()); |
302 capture_begin_event->timestamp = sender_clock_->NowTicks(); | 303 capture_begin_event->timestamp = sender_clock_->NowTicks(); |
303 capture_begin_event->type = FRAME_CAPTURE_BEGIN; | 304 capture_begin_event->type = FRAME_CAPTURE_BEGIN; |
304 capture_begin_event->media_type = VIDEO_EVENT; | 305 capture_begin_event->media_type = VIDEO_EVENT; |
305 capture_begin_event->rtp_timestamp = rtp_timestamp; | 306 capture_begin_event->rtp_timestamp = rtp_timestamp; |
306 cast_environment_->logger()->DispatchFrameEvent( | 307 cast_environment_->logger()->DispatchFrameEvent( |
307 std::move(capture_begin_event)); | 308 std::move(capture_begin_event)); |
308 | 309 |
309 int latency_micros = 100000 + base::RandInt(-5000, 50000); | 310 int latency_micros = 100000 + base::RandInt(-5000, 50000); |
310 base::TimeDelta latency = base::TimeDelta::FromMicroseconds(latency_micros); | 311 base::TimeDelta latency = base::TimeDelta::FromMicroseconds(latency_micros); |
311 AdvanceClocks(latency); | 312 AdvanceClocks(latency); |
312 | 313 |
313 int delay_micros = base::RandInt(-50000, 50000); | 314 int delay_micros = base::RandInt(-50000, 50000); |
314 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_micros); | 315 base::TimeDelta delay = base::TimeDelta::FromMilliseconds(delay_micros); |
315 total_latency += latency; | 316 total_latency += latency; |
316 | 317 |
317 scoped_ptr<FrameEvent> playout_event(new FrameEvent()); | 318 std::unique_ptr<FrameEvent> playout_event(new FrameEvent()); |
318 playout_event->timestamp = receiver_clock_.NowTicks(); | 319 playout_event->timestamp = receiver_clock_.NowTicks(); |
319 playout_event->type = FRAME_PLAYOUT; | 320 playout_event->type = FRAME_PLAYOUT; |
320 playout_event->media_type = VIDEO_EVENT; | 321 playout_event->media_type = VIDEO_EVENT; |
321 playout_event->rtp_timestamp = rtp_timestamp; | 322 playout_event->rtp_timestamp = rtp_timestamp; |
322 playout_event->frame_id = frame_id; | 323 playout_event->frame_id = frame_id; |
323 playout_event->delay_delta = delay; | 324 playout_event->delay_delta = delay; |
324 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); | 325 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); |
325 | 326 |
326 rtp_timestamp += RtpTimeDelta::FromTicks(90); | 327 rtp_timestamp += RtpTimeDelta::FromTicks(90); |
327 frame_id++; | 328 frame_id++; |
(...skipping 22 matching lines...) Expand all Loading... |
350 base::TimeDelta total_network_latency; | 351 base::TimeDelta total_network_latency; |
351 base::TimeDelta total_queueing_latency; | 352 base::TimeDelta total_queueing_latency; |
352 base::TimeDelta total_packet_latency; | 353 base::TimeDelta total_packet_latency; |
353 int num_packets_transmitted = 0; | 354 int num_packets_transmitted = 0; |
354 int num_packets_received = 0; | 355 int num_packets_received = 0; |
355 int num_packets_retransmitted = 0; | 356 int num_packets_retransmitted = 0; |
356 int num_packets_rtx_rejected = 0; | 357 int num_packets_rtx_rejected = 0; |
357 | 358 |
358 base::TimeTicks sender_encoded_time = sender_clock_->NowTicks(); | 359 base::TimeTicks sender_encoded_time = sender_clock_->NowTicks(); |
359 base::TimeTicks receiver_encoded_time = receiver_clock_.NowTicks(); | 360 base::TimeTicks receiver_encoded_time = receiver_clock_.NowTicks(); |
360 scoped_ptr<FrameEvent> encode_event(new FrameEvent()); | 361 std::unique_ptr<FrameEvent> encode_event(new FrameEvent()); |
361 encode_event->timestamp = sender_encoded_time; | 362 encode_event->timestamp = sender_encoded_time; |
362 encode_event->type = FRAME_ENCODED; | 363 encode_event->type = FRAME_ENCODED; |
363 encode_event->media_type = VIDEO_EVENT; | 364 encode_event->media_type = VIDEO_EVENT; |
364 encode_event->rtp_timestamp = rtp_timestamp; | 365 encode_event->rtp_timestamp = rtp_timestamp; |
365 encode_event->frame_id = 0; | 366 encode_event->frame_id = 0; |
366 cast_environment_->logger()->DispatchFrameEvent(std::move(encode_event)); | 367 cast_environment_->logger()->DispatchFrameEvent(std::move(encode_event)); |
367 | 368 |
368 // Every 2nd packet will be retransmitted once. | 369 // Every 2nd packet will be retransmitted once. |
369 // Every 4th packet will be retransmitted twice. | 370 // Every 4th packet will be retransmitted twice. |
370 // Every 8th packet will be retransmitted 3 times + 1 rejected retransmission. | 371 // Every 8th packet will be retransmitted 3 times + 1 rejected retransmission. |
371 for (int i = 0; i < num_packets; i++) { | 372 for (int i = 0; i < num_packets; i++) { |
372 int size = 1000 + base::RandInt(-100, 100); | 373 int size = 1000 + base::RandInt(-100, 100); |
373 total_size += size; | 374 total_size += size; |
374 | 375 |
375 scoped_ptr<PacketEvent> send_event(new PacketEvent()); | 376 std::unique_ptr<PacketEvent> send_event(new PacketEvent()); |
376 send_event->timestamp = sender_clock_->NowTicks(); | 377 send_event->timestamp = sender_clock_->NowTicks(); |
377 send_event->type = PACKET_SENT_TO_NETWORK; | 378 send_event->type = PACKET_SENT_TO_NETWORK; |
378 send_event->media_type = VIDEO_EVENT; | 379 send_event->media_type = VIDEO_EVENT; |
379 send_event->rtp_timestamp = rtp_timestamp; | 380 send_event->rtp_timestamp = rtp_timestamp; |
380 send_event->frame_id = 0; | 381 send_event->frame_id = 0; |
381 send_event->packet_id = i; | 382 send_event->packet_id = i; |
382 send_event->max_packet_id = num_packets - 1; | 383 send_event->max_packet_id = num_packets - 1; |
383 send_event->size = size; | 384 send_event->size = size; |
384 cast_environment_->logger()->DispatchPacketEvent(std::move(send_event)); | 385 cast_environment_->logger()->DispatchPacketEvent(std::move(send_event)); |
385 | 386 |
(...skipping 10 matching lines...) Expand all Loading... |
396 num_latency_recorded_packets++; | 397 num_latency_recorded_packets++; |
397 } | 398 } |
398 | 399 |
399 AdvanceClocks(latency); | 400 AdvanceClocks(latency); |
400 | 401 |
401 base::TimeTicks received_time = receiver_clock_.NowTicks(); | 402 base::TimeTicks received_time = receiver_clock_.NowTicks(); |
402 | 403 |
403 // Retransmission 1. | 404 // Retransmission 1. |
404 AdvanceClocks(base::TimeDelta::FromMicroseconds(12345)); | 405 AdvanceClocks(base::TimeDelta::FromMicroseconds(12345)); |
405 if (i % 2 == 0) { | 406 if (i % 2 == 0) { |
406 scoped_ptr<PacketEvent> retransmit_event(new PacketEvent()); | 407 std::unique_ptr<PacketEvent> retransmit_event(new PacketEvent()); |
407 retransmit_event->timestamp = receiver_clock_.NowTicks(); | 408 retransmit_event->timestamp = receiver_clock_.NowTicks(); |
408 retransmit_event->type = PACKET_RETRANSMITTED; | 409 retransmit_event->type = PACKET_RETRANSMITTED; |
409 retransmit_event->media_type = VIDEO_EVENT; | 410 retransmit_event->media_type = VIDEO_EVENT; |
410 retransmit_event->rtp_timestamp = rtp_timestamp; | 411 retransmit_event->rtp_timestamp = rtp_timestamp; |
411 retransmit_event->frame_id = 0; | 412 retransmit_event->frame_id = 0; |
412 retransmit_event->packet_id = i; | 413 retransmit_event->packet_id = i; |
413 retransmit_event->max_packet_id = num_packets - 1; | 414 retransmit_event->max_packet_id = num_packets - 1; |
414 retransmit_event->size = size; | 415 retransmit_event->size = size; |
415 cast_environment_->logger()->DispatchPacketEvent( | 416 cast_environment_->logger()->DispatchPacketEvent( |
416 std::move(retransmit_event)); | 417 std::move(retransmit_event)); |
417 | 418 |
418 retransmit_total_size += size; | 419 retransmit_total_size += size; |
419 num_packets_transmitted++; | 420 num_packets_transmitted++; |
420 num_packets_retransmitted++; | 421 num_packets_retransmitted++; |
421 } | 422 } |
422 | 423 |
423 // Retransmission 2. | 424 // Retransmission 2. |
424 AdvanceClocks(base::TimeDelta::FromMicroseconds(13456)); | 425 AdvanceClocks(base::TimeDelta::FromMicroseconds(13456)); |
425 if (i % 4 == 0) { | 426 if (i % 4 == 0) { |
426 scoped_ptr<PacketEvent> retransmit_event(new PacketEvent()); | 427 std::unique_ptr<PacketEvent> retransmit_event(new PacketEvent()); |
427 retransmit_event->timestamp = receiver_clock_.NowTicks(); | 428 retransmit_event->timestamp = receiver_clock_.NowTicks(); |
428 retransmit_event->type = PACKET_RETRANSMITTED; | 429 retransmit_event->type = PACKET_RETRANSMITTED; |
429 retransmit_event->media_type = VIDEO_EVENT; | 430 retransmit_event->media_type = VIDEO_EVENT; |
430 retransmit_event->rtp_timestamp = rtp_timestamp; | 431 retransmit_event->rtp_timestamp = rtp_timestamp; |
431 retransmit_event->frame_id = 0; | 432 retransmit_event->frame_id = 0; |
432 retransmit_event->packet_id = i; | 433 retransmit_event->packet_id = i; |
433 retransmit_event->max_packet_id = num_packets - 1; | 434 retransmit_event->max_packet_id = num_packets - 1; |
434 retransmit_event->size = size; | 435 retransmit_event->size = size; |
435 cast_environment_->logger()->DispatchPacketEvent( | 436 cast_environment_->logger()->DispatchPacketEvent( |
436 std::move(retransmit_event)); | 437 std::move(retransmit_event)); |
437 | 438 |
438 retransmit_total_size += size; | 439 retransmit_total_size += size; |
439 num_packets_transmitted++; | 440 num_packets_transmitted++; |
440 num_packets_retransmitted++; | 441 num_packets_retransmitted++; |
441 } | 442 } |
442 | 443 |
443 // Retransmission 3. | 444 // Retransmission 3. |
444 AdvanceClocks(base::TimeDelta::FromMicroseconds(14567)); | 445 AdvanceClocks(base::TimeDelta::FromMicroseconds(14567)); |
445 if (i % 8 == 0) { | 446 if (i % 8 == 0) { |
446 scoped_ptr<PacketEvent> retransmit_event(new PacketEvent()); | 447 std::unique_ptr<PacketEvent> retransmit_event(new PacketEvent()); |
447 retransmit_event->timestamp = receiver_clock_.NowTicks(); | 448 retransmit_event->timestamp = receiver_clock_.NowTicks(); |
448 retransmit_event->type = PACKET_RETRANSMITTED; | 449 retransmit_event->type = PACKET_RETRANSMITTED; |
449 retransmit_event->media_type = VIDEO_EVENT; | 450 retransmit_event->media_type = VIDEO_EVENT; |
450 retransmit_event->rtp_timestamp = rtp_timestamp; | 451 retransmit_event->rtp_timestamp = rtp_timestamp; |
451 retransmit_event->frame_id = 0; | 452 retransmit_event->frame_id = 0; |
452 retransmit_event->packet_id = i; | 453 retransmit_event->packet_id = i; |
453 retransmit_event->max_packet_id = num_packets - 1; | 454 retransmit_event->max_packet_id = num_packets - 1; |
454 retransmit_event->size = size; | 455 retransmit_event->size = size; |
455 cast_environment_->logger()->DispatchPacketEvent( | 456 cast_environment_->logger()->DispatchPacketEvent( |
456 std::move(retransmit_event)); | 457 std::move(retransmit_event)); |
457 | 458 |
458 scoped_ptr<PacketEvent> reject_event(new PacketEvent()); | 459 std::unique_ptr<PacketEvent> reject_event(new PacketEvent()); |
459 reject_event->timestamp = receiver_clock_.NowTicks(); | 460 reject_event->timestamp = receiver_clock_.NowTicks(); |
460 reject_event->type = PACKET_RTX_REJECTED; | 461 reject_event->type = PACKET_RTX_REJECTED; |
461 reject_event->media_type = VIDEO_EVENT; | 462 reject_event->media_type = VIDEO_EVENT; |
462 reject_event->rtp_timestamp = rtp_timestamp; | 463 reject_event->rtp_timestamp = rtp_timestamp; |
463 reject_event->frame_id = 0; | 464 reject_event->frame_id = 0; |
464 reject_event->packet_id = i; | 465 reject_event->packet_id = i; |
465 reject_event->max_packet_id = num_packets - 1; | 466 reject_event->max_packet_id = num_packets - 1; |
466 reject_event->size = size; | 467 reject_event->size = size; |
467 cast_environment_->logger()->DispatchPacketEvent(std::move(reject_event)); | 468 cast_environment_->logger()->DispatchPacketEvent(std::move(reject_event)); |
468 | 469 |
469 retransmit_total_size += size; | 470 retransmit_total_size += size; |
470 num_packets_transmitted++; | 471 num_packets_transmitted++; |
471 num_packets_retransmitted++; | 472 num_packets_retransmitted++; |
472 num_packets_rtx_rejected++; | 473 num_packets_rtx_rejected++; |
473 } | 474 } |
474 | 475 |
475 scoped_ptr<PacketEvent> receive_event(new PacketEvent()); | 476 std::unique_ptr<PacketEvent> receive_event(new PacketEvent()); |
476 receive_event->timestamp = received_time; | 477 receive_event->timestamp = received_time; |
477 receive_event->type = PACKET_RECEIVED; | 478 receive_event->type = PACKET_RECEIVED; |
478 receive_event->media_type = VIDEO_EVENT; | 479 receive_event->media_type = VIDEO_EVENT; |
479 receive_event->rtp_timestamp = rtp_timestamp; | 480 receive_event->rtp_timestamp = rtp_timestamp; |
480 receive_event->frame_id = 0; | 481 receive_event->frame_id = 0; |
481 receive_event->packet_id = i; | 482 receive_event->packet_id = i; |
482 receive_event->max_packet_id = num_packets - 1; | 483 receive_event->max_packet_id = num_packets - 1; |
483 receive_event->size = size; | 484 receive_event->size = size; |
484 cast_environment_->logger()->DispatchPacketEvent(std::move(receive_event)); | 485 cast_environment_->logger()->DispatchPacketEvent(std::move(receive_event)); |
485 | 486 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 | 571 |
571 RtpTimeTicks rtp_timestamp = RtpTimeTicks().Expand(UINT32_C(123)); | 572 RtpTimeTicks rtp_timestamp = RtpTimeTicks().Expand(UINT32_C(123)); |
572 uint32_t frame_id = 0; | 573 uint32_t frame_id = 0; |
573 | 574 |
574 // 10 Frames with capture latency in the bucket of "10-14"ms. | 575 // 10 Frames with capture latency in the bucket of "10-14"ms. |
575 // 10 Frames with encode time in the bucket of "15-19"ms. | 576 // 10 Frames with encode time in the bucket of "15-19"ms. |
576 for (int i = 0; i < 10; ++i) { | 577 for (int i = 0; i < 10; ++i) { |
577 ++frame_id; | 578 ++frame_id; |
578 rtp_timestamp += RtpTimeDelta::FromTicks(1); | 579 rtp_timestamp += RtpTimeDelta::FromTicks(1); |
579 | 580 |
580 scoped_ptr<FrameEvent> capture_begin_event(new FrameEvent()); | 581 std::unique_ptr<FrameEvent> capture_begin_event(new FrameEvent()); |
581 capture_begin_event->timestamp = sender_clock_->NowTicks(); | 582 capture_begin_event->timestamp = sender_clock_->NowTicks(); |
582 capture_begin_event->type = FRAME_CAPTURE_BEGIN; | 583 capture_begin_event->type = FRAME_CAPTURE_BEGIN; |
583 capture_begin_event->media_type = VIDEO_EVENT; | 584 capture_begin_event->media_type = VIDEO_EVENT; |
584 capture_begin_event->rtp_timestamp = rtp_timestamp; | 585 capture_begin_event->rtp_timestamp = rtp_timestamp; |
585 cast_environment_->logger()->DispatchFrameEvent( | 586 cast_environment_->logger()->DispatchFrameEvent( |
586 std::move(capture_begin_event)); | 587 std::move(capture_begin_event)); |
587 | 588 |
588 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); | 589 AdvanceClocks(base::TimeDelta::FromMilliseconds(10)); |
589 scoped_ptr<FrameEvent> capture_end_event(new FrameEvent()); | 590 std::unique_ptr<FrameEvent> capture_end_event(new FrameEvent()); |
590 capture_end_event->timestamp = sender_clock_->NowTicks(); | 591 capture_end_event->timestamp = sender_clock_->NowTicks(); |
591 capture_end_event->type = FRAME_CAPTURE_END; | 592 capture_end_event->type = FRAME_CAPTURE_END; |
592 capture_end_event->media_type = VIDEO_EVENT; | 593 capture_end_event->media_type = VIDEO_EVENT; |
593 capture_end_event->rtp_timestamp = rtp_timestamp; | 594 capture_end_event->rtp_timestamp = rtp_timestamp; |
594 cast_environment_->logger()->DispatchFrameEvent( | 595 cast_environment_->logger()->DispatchFrameEvent( |
595 std::move(capture_end_event)); | 596 std::move(capture_end_event)); |
596 | 597 |
597 AdvanceClocks(base::TimeDelta::FromMilliseconds(15)); | 598 AdvanceClocks(base::TimeDelta::FromMilliseconds(15)); |
598 scoped_ptr<FrameEvent> encode_event(new FrameEvent()); | 599 std::unique_ptr<FrameEvent> encode_event(new FrameEvent()); |
599 encode_event->timestamp = sender_clock_->NowTicks(); | 600 encode_event->timestamp = sender_clock_->NowTicks(); |
600 encode_event->type = FRAME_ENCODED; | 601 encode_event->type = FRAME_ENCODED; |
601 encode_event->media_type = VIDEO_EVENT; | 602 encode_event->media_type = VIDEO_EVENT; |
602 encode_event->rtp_timestamp = rtp_timestamp; | 603 encode_event->rtp_timestamp = rtp_timestamp; |
603 encode_event->frame_id = frame_id; | 604 encode_event->frame_id = frame_id; |
604 encode_event->size = 1024; | 605 encode_event->size = 1024; |
605 encode_event->key_frame = true; | 606 encode_event->key_frame = true; |
606 encode_event->target_bitrate = 5678; | 607 encode_event->target_bitrate = 5678; |
607 encode_event->encoder_cpu_utilization = 9.10; | 608 encode_event->encoder_cpu_utilization = 9.10; |
608 encode_event->idealized_bitrate_utilization = 11.12; | 609 encode_event->idealized_bitrate_utilization = 11.12; |
609 cast_environment_->logger()->DispatchFrameEvent(std::move(encode_event)); | 610 cast_environment_->logger()->DispatchFrameEvent(std::move(encode_event)); |
610 } | 611 } |
611 | 612 |
612 // Send 3 packets for the last frame. | 613 // Send 3 packets for the last frame. |
613 // Queueing latencies are 100ms, 200ms and 300ms. | 614 // Queueing latencies are 100ms, 200ms and 300ms. |
614 for (int i = 0; i < 3; ++i) { | 615 for (int i = 0; i < 3; ++i) { |
615 AdvanceClocks(base::TimeDelta::FromMilliseconds(100)); | 616 AdvanceClocks(base::TimeDelta::FromMilliseconds(100)); |
616 scoped_ptr<PacketEvent> send_event(new PacketEvent()); | 617 std::unique_ptr<PacketEvent> send_event(new PacketEvent()); |
617 send_event->timestamp = sender_clock_->NowTicks(); | 618 send_event->timestamp = sender_clock_->NowTicks(); |
618 send_event->type = PACKET_SENT_TO_NETWORK; | 619 send_event->type = PACKET_SENT_TO_NETWORK; |
619 send_event->media_type = VIDEO_EVENT; | 620 send_event->media_type = VIDEO_EVENT; |
620 send_event->rtp_timestamp = rtp_timestamp; | 621 send_event->rtp_timestamp = rtp_timestamp; |
621 send_event->frame_id = 0; | 622 send_event->frame_id = 0; |
622 send_event->packet_id = i; | 623 send_event->packet_id = i; |
623 send_event->max_packet_id = 2; | 624 send_event->max_packet_id = 2; |
624 send_event->size = 123; | 625 send_event->size = 123; |
625 cast_environment_->logger()->DispatchPacketEvent(std::move(send_event)); | 626 cast_environment_->logger()->DispatchPacketEvent(std::move(send_event)); |
626 } | 627 } |
627 | 628 |
628 // Receive 3 packets for the last frame. | 629 // Receive 3 packets for the last frame. |
629 // Network latencies are 100ms, 200ms and 300ms. | 630 // Network latencies are 100ms, 200ms and 300ms. |
630 // Packet latencies are 400ms. | 631 // Packet latencies are 400ms. |
631 AdvanceClocks(base::TimeDelta::FromMilliseconds(100)); | 632 AdvanceClocks(base::TimeDelta::FromMilliseconds(100)); |
632 for (int i = 0; i < 3; ++i) { | 633 for (int i = 0; i < 3; ++i) { |
633 scoped_ptr<PacketEvent> receive_event(new PacketEvent()); | 634 std::unique_ptr<PacketEvent> receive_event(new PacketEvent()); |
634 receive_event->timestamp = receiver_clock_.NowTicks(); | 635 receive_event->timestamp = receiver_clock_.NowTicks(); |
635 receive_event->type = PACKET_RECEIVED; | 636 receive_event->type = PACKET_RECEIVED; |
636 receive_event->media_type = VIDEO_EVENT; | 637 receive_event->media_type = VIDEO_EVENT; |
637 receive_event->rtp_timestamp = rtp_timestamp; | 638 receive_event->rtp_timestamp = rtp_timestamp; |
638 receive_event->frame_id = 0; | 639 receive_event->frame_id = 0; |
639 receive_event->packet_id = i; | 640 receive_event->packet_id = i; |
640 receive_event->max_packet_id = 2; | 641 receive_event->max_packet_id = 2; |
641 receive_event->size = 123; | 642 receive_event->size = 123; |
642 cast_environment_->logger()->DispatchPacketEvent(std::move(receive_event)); | 643 cast_environment_->logger()->DispatchPacketEvent(std::move(receive_event)); |
643 } | 644 } |
644 | 645 |
645 scoped_ptr<FrameEvent> playout_event(new FrameEvent()); | 646 std::unique_ptr<FrameEvent> playout_event(new FrameEvent()); |
646 playout_event->timestamp = receiver_clock_.NowTicks(); | 647 playout_event->timestamp = receiver_clock_.NowTicks(); |
647 playout_event->type = FRAME_PLAYOUT; | 648 playout_event->type = FRAME_PLAYOUT; |
648 playout_event->media_type = VIDEO_EVENT; | 649 playout_event->media_type = VIDEO_EVENT; |
649 playout_event->rtp_timestamp = rtp_timestamp; | 650 playout_event->rtp_timestamp = rtp_timestamp; |
650 playout_event->frame_id = frame_id; | 651 playout_event->frame_id = frame_id; |
651 playout_event->delay_delta = base::TimeDelta::FromMilliseconds(100); | 652 playout_event->delay_delta = base::TimeDelta::FromMilliseconds(100); |
652 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); | 653 cast_environment_->logger()->DispatchFrameEvent(std::move(playout_event)); |
653 | 654 |
654 StatsEventSubscriber::SimpleHistogram* histogram; | 655 StatsEventSubscriber::SimpleHistogram* histogram; |
655 scoped_ptr<base::ListValue> values; | 656 std::unique_ptr<base::ListValue> values; |
656 | 657 |
657 histogram = subscriber_->GetHistogramForTesting( | 658 histogram = subscriber_->GetHistogramForTesting( |
658 StatsEventSubscriber::CAPTURE_LATENCY_MS_HISTO); | 659 StatsEventSubscriber::CAPTURE_LATENCY_MS_HISTO); |
659 ASSERT_TRUE(histogram); | 660 ASSERT_TRUE(histogram); |
660 values = histogram->GetHistogram(); | 661 values = histogram->GetHistogram(); |
661 EXPECT_TRUE(CheckHistogramHasValue(values.get(), "10-14", 10)); | 662 EXPECT_TRUE(CheckHistogramHasValue(values.get(), "10-14", 10)); |
662 | 663 |
663 histogram = subscriber_->GetHistogramForTesting( | 664 histogram = subscriber_->GetHistogramForTesting( |
664 StatsEventSubscriber::ENCODE_TIME_MS_HISTO); | 665 StatsEventSubscriber::ENCODE_TIME_MS_HISTO); |
665 ASSERT_TRUE(histogram); | 666 ASSERT_TRUE(histogram); |
(...skipping 24 matching lines...) Expand all Loading... |
690 | 691 |
691 histogram = subscriber_->GetHistogramForTesting( | 692 histogram = subscriber_->GetHistogramForTesting( |
692 StatsEventSubscriber::LATE_FRAME_MS_HISTO); | 693 StatsEventSubscriber::LATE_FRAME_MS_HISTO); |
693 ASSERT_TRUE(histogram); | 694 ASSERT_TRUE(histogram); |
694 values = histogram->GetHistogram(); | 695 values = histogram->GetHistogram(); |
695 EXPECT_TRUE(CheckHistogramHasValue(values.get(), "100-119", 1)); | 696 EXPECT_TRUE(CheckHistogramHasValue(values.get(), "100-119", 1)); |
696 } | 697 } |
697 | 698 |
698 } // namespace cast | 699 } // namespace cast |
699 } // namespace media | 700 } // namespace media |
OLD | NEW |