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 // This program benchmarks the theoretical throughput of the cast library. | 5 // This program benchmarks the theoretical throughput of the cast library. |
6 // It runs using a fake clock, simulated network and fake codecs. This allows | 6 // It runs using a fake clock, simulated network and fake codecs. This allows |
7 // tests to run much faster than real time. | 7 // tests to run much faster than real time. |
8 // To run the program, run: | 8 // To run the program, run: |
9 // $ ./out/Release/cast_benchmarks | tee benchmarkoutput.asc | 9 // $ ./out/Release/cast_benchmarks | tee benchmarkoutput.asc |
10 // This may take a while, when it is done, you can view the data with | 10 // This may take a while, when it is done, you can view the data with |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
243 audio_receiver_config_.rtp_max_delay_ms = | 243 audio_receiver_config_.rtp_max_delay_ms = |
244 audio_sender_config_.max_playout_delay.InMicroseconds(); | 244 audio_sender_config_.max_playout_delay.InMicroseconds(); |
245 audio_receiver_config_.codec = audio_codec; | 245 audio_receiver_config_.codec = audio_codec; |
246 | 246 |
247 video_sender_config_ = GetDefaultVideoSenderConfig(); | 247 video_sender_config_ = GetDefaultVideoSenderConfig(); |
248 video_sender_config_.min_playout_delay = | 248 video_sender_config_.min_playout_delay = |
249 video_sender_config_.max_playout_delay = | 249 video_sender_config_.max_playout_delay = |
250 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); | 250 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); |
251 video_sender_config_.max_bitrate = 4000000; | 251 video_sender_config_.max_bitrate = 4000000; |
252 video_sender_config_.min_bitrate = 4000000; | 252 video_sender_config_.min_bitrate = 4000000; |
253 video_sender_config_.start_bitrate = 4000000; | 253 video_sender_config_.codec_specific_params.start_bitrate = 4000000; |
254 video_sender_config_.codec = video_codec; | 254 video_sender_config_.codec = video_codec; |
255 | 255 |
256 video_receiver_config_ = GetDefaultVideoReceiverConfig(); | 256 video_receiver_config_ = GetDefaultVideoReceiverConfig(); |
257 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; | 257 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; |
258 video_receiver_config_.codec = video_codec; | 258 video_receiver_config_.codec = video_codec; |
259 | 259 |
260 frame_duration_ = base::TimeDelta::FromSeconds(1) / | 260 DCHECK_GT(video_sender_config_.max_frame_rate, 0); |
261 video_sender_config_.max_frame_rate; | 261 frame_duration_ = |
262 base::TimeDelta::FromSeconds(1) / video_sender_config_.max_frame_rate; | |
miu
2016/06/30 21:59:43
nit: base::TimeDelta::FromSecondsF(1.0 / video_sen
xjz
2016/07/01 23:52:09
Done.
| |
262 } | 263 } |
263 | 264 |
264 void SetSenderClockSkew(double skew, base::TimeDelta offset) { | 265 void SetSenderClockSkew(double skew, base::TimeDelta offset) { |
265 testing_clock_sender_->SetSkew(skew, offset); | 266 testing_clock_sender_->SetSkew(skew, offset); |
266 task_runner_sender_->SetSkew(1.0 / skew); | 267 task_runner_sender_->SetSkew(1.0 / skew); |
267 } | 268 } |
268 | 269 |
269 void SetReceiverClockSkew(double skew, base::TimeDelta offset) { | 270 void SetReceiverClockSkew(double skew, base::TimeDelta offset) { |
270 testing_clock_receiver_->SetSkew(skew, offset); | 271 testing_clock_receiver_->SetSkew(skew, offset); |
271 task_runner_receiver_->SetSkew(1.0 / skew); | 272 task_runner_receiver_->SetSkew(1.0 / skew); |
272 } | 273 } |
273 | 274 |
274 void Create(const MeasuringPoint& p); | 275 void Create(const MeasuringPoint& p); |
275 | 276 |
276 void ReceivePacket(std::unique_ptr<Packet> packet) { | 277 void ReceivePacket(std::unique_ptr<Packet> packet) { |
277 cast_receiver_->ReceivePacket(std::move(packet)); | 278 cast_receiver_->ReceivePacket(std::move(packet)); |
278 } | 279 } |
279 | 280 |
280 virtual ~RunOneBenchmark() { | 281 virtual ~RunOneBenchmark() { |
281 cast_sender_.reset(); | 282 cast_sender_.reset(); |
282 cast_receiver_.reset(); | 283 cast_receiver_.reset(); |
283 task_runner_->RunTasks(); | 284 task_runner_->RunTasks(); |
284 } | 285 } |
285 | 286 |
286 base::TimeDelta VideoTimestamp(int frame_number) { | 287 base::TimeDelta VideoTimestamp(int frame_number) { |
287 return (frame_number * base::TimeDelta::FromSeconds(1)) / | 288 return (frame_number * base::TimeDelta::FromSeconds(1)) / |
288 video_sender_config_.max_frame_rate; | 289 video_sender_config_.max_frame_rate; |
miu
2016/06/30 21:59:43
ditto: base::TimeDelta::FromSecondsF(1.0 / video_s
xjz
2016/07/01 23:52:09
Done.
| |
289 } | 290 } |
290 | 291 |
291 void SendFakeVideoFrame() { | 292 void SendFakeVideoFrame() { |
292 // NB: Blackframe with timestamp | 293 // NB: Blackframe with timestamp |
293 cast_sender_->video_frame_input()->InsertRawVideoFrame( | 294 cast_sender_->video_frame_input()->InsertRawVideoFrame( |
294 media::VideoFrame::CreateColorFrame(gfx::Size(2, 2), | 295 media::VideoFrame::CreateColorFrame(gfx::Size(2, 2), |
295 0x00, 0x80, 0x80, VideoTimestamp(frames_sent_)), | 296 0x00, 0x80, 0x80, VideoTimestamp(frames_sent_)), |
296 testing_clock_sender_->NowTicks()); | 297 testing_clock_sender_->NowTicks()); |
297 frames_sent_++; | 298 frames_sent_++; |
298 } | 299 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
402 | 403 |
403 bool SimpleGood() { | 404 bool SimpleGood() { |
404 return frames_lost() <= 1 && late_frames() <= 1 && | 405 return frames_lost() <= 1 && late_frames() <= 1 && |
405 video_bandwidth() > desired_video_bitrate() * 0.8 && | 406 video_bandwidth() > desired_video_bitrate() * 0.8 && |
406 video_bandwidth() < desired_video_bitrate() * 1.2; | 407 video_bandwidth() < desired_video_bitrate() * 1.2; |
407 } | 408 } |
408 | 409 |
409 private: | 410 private: |
410 FrameReceiverConfig audio_receiver_config_; | 411 FrameReceiverConfig audio_receiver_config_; |
411 FrameReceiverConfig video_receiver_config_; | 412 FrameReceiverConfig video_receiver_config_; |
412 AudioSenderConfig audio_sender_config_; | 413 FrameSenderConfig audio_sender_config_; |
413 VideoSenderConfig video_sender_config_; | 414 FrameSenderConfig video_sender_config_; |
414 | 415 |
415 base::TimeTicks start_time_; | 416 base::TimeTicks start_time_; |
416 | 417 |
417 // These run in "test time" | 418 // These run in "test time" |
418 base::SimpleTestTickClock testing_clock_; | 419 base::SimpleTestTickClock testing_clock_; |
419 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; | 420 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; |
420 | 421 |
421 // These run on the sender timeline. | 422 // These run on the sender timeline. |
422 test::SkewedTickClock* testing_clock_sender_; | 423 test::SkewedTickClock* testing_clock_sender_; |
423 scoped_refptr<test::SkewedSingleThreadTaskRunner> task_runner_sender_; | 424 scoped_refptr<test::SkewedSingleThreadTaskRunner> task_runner_sender_; |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
729 media::cast::CastBenchmark benchmark; | 730 media::cast::CastBenchmark benchmark; |
730 if (getenv("PROFILE_FILE")) { | 731 if (getenv("PROFILE_FILE")) { |
731 std::string profile_file(getenv("PROFILE_FILE")); | 732 std::string profile_file(getenv("PROFILE_FILE")); |
732 base::debug::StartProfiling(profile_file); | 733 base::debug::StartProfiling(profile_file); |
733 benchmark.Run(); | 734 benchmark.Run(); |
734 base::debug::StopProfiling(); | 735 base::debug::StopProfiling(); |
735 } else { | 736 } else { |
736 benchmark.Run(); | 737 benchmark.Run(); |
737 } | 738 } |
738 } | 739 } |
OLD | NEW |