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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); | 251 base::TimeDelta::FromMilliseconds(kTargetPlayoutDelayMs); |
252 video_sender_config_.max_bitrate = 4000000; | 252 video_sender_config_.max_bitrate = 4000000; |
253 video_sender_config_.min_bitrate = 4000000; | 253 video_sender_config_.min_bitrate = 4000000; |
254 video_sender_config_.start_bitrate = 4000000; | 254 video_sender_config_.start_bitrate = 4000000; |
255 video_sender_config_.codec = video_codec; | 255 video_sender_config_.codec = video_codec; |
256 | 256 |
257 video_receiver_config_ = GetDefaultVideoReceiverConfig(); | 257 video_receiver_config_ = GetDefaultVideoReceiverConfig(); |
258 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; | 258 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; |
259 video_receiver_config_.codec = video_codec; | 259 video_receiver_config_.codec = video_codec; |
260 | 260 |
261 frame_duration_ = base::TimeDelta::FromSeconds(1) / | 261 DCHECK_GT(video_sender_config_.max_frame_rate, 0); |
262 video_sender_config_.max_frame_rate; | 262 frame_duration_ = base::TimeDelta::FromSecondsD( |
| 263 1.0 / video_sender_config_.max_frame_rate); |
263 } | 264 } |
264 | 265 |
265 void SetSenderClockSkew(double skew, base::TimeDelta offset) { | 266 void SetSenderClockSkew(double skew, base::TimeDelta offset) { |
266 testing_clock_sender_->SetSkew(skew, offset); | 267 testing_clock_sender_->SetSkew(skew, offset); |
267 task_runner_sender_->SetSkew(1.0 / skew); | 268 task_runner_sender_->SetSkew(1.0 / skew); |
268 } | 269 } |
269 | 270 |
270 void SetReceiverClockSkew(double skew, base::TimeDelta offset) { | 271 void SetReceiverClockSkew(double skew, base::TimeDelta offset) { |
271 testing_clock_receiver_->SetSkew(skew, offset); | 272 testing_clock_receiver_->SetSkew(skew, offset); |
272 task_runner_receiver_->SetSkew(1.0 / skew); | 273 task_runner_receiver_->SetSkew(1.0 / skew); |
273 } | 274 } |
274 | 275 |
275 void Create(const MeasuringPoint& p); | 276 void Create(const MeasuringPoint& p); |
276 | 277 |
277 void ReceivePacket(std::unique_ptr<Packet> packet) { | 278 void ReceivePacket(std::unique_ptr<Packet> packet) { |
278 cast_receiver_->ReceivePacket(std::move(packet)); | 279 cast_receiver_->ReceivePacket(std::move(packet)); |
279 } | 280 } |
280 | 281 |
281 virtual ~RunOneBenchmark() { | 282 virtual ~RunOneBenchmark() { |
282 cast_sender_.reset(); | 283 cast_sender_.reset(); |
283 cast_receiver_.reset(); | 284 cast_receiver_.reset(); |
284 task_runner_->RunTasks(); | 285 task_runner_->RunTasks(); |
285 } | 286 } |
286 | 287 |
287 base::TimeDelta VideoTimestamp(int frame_number) { | 288 base::TimeDelta VideoTimestamp(int frame_number) { |
288 return (frame_number * base::TimeDelta::FromSeconds(1)) / | 289 return frame_number * base::TimeDelta::FromSecondsD( |
289 video_sender_config_.max_frame_rate; | 290 1.0 / video_sender_config_.max_frame_rate); |
290 } | 291 } |
291 | 292 |
292 void SendFakeVideoFrame() { | 293 void SendFakeVideoFrame() { |
293 // NB: Blackframe with timestamp | 294 // NB: Blackframe with timestamp |
294 cast_sender_->video_frame_input()->InsertRawVideoFrame( | 295 cast_sender_->video_frame_input()->InsertRawVideoFrame( |
295 media::VideoFrame::CreateColorFrame(gfx::Size(2, 2), | 296 media::VideoFrame::CreateColorFrame(gfx::Size(2, 2), |
296 0x00, 0x80, 0x80, VideoTimestamp(frames_sent_)), | 297 0x00, 0x80, 0x80, VideoTimestamp(frames_sent_)), |
297 testing_clock_sender_->NowTicks()); | 298 testing_clock_sender_->NowTicks()); |
298 frames_sent_++; | 299 frames_sent_++; |
299 } | 300 } |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 404 |
404 bool SimpleGood() { | 405 bool SimpleGood() { |
405 return frames_lost() <= 1 && late_frames() <= 1 && | 406 return frames_lost() <= 1 && late_frames() <= 1 && |
406 video_bandwidth() > desired_video_bitrate() * 0.8 && | 407 video_bandwidth() > desired_video_bitrate() * 0.8 && |
407 video_bandwidth() < desired_video_bitrate() * 1.2; | 408 video_bandwidth() < desired_video_bitrate() * 1.2; |
408 } | 409 } |
409 | 410 |
410 private: | 411 private: |
411 FrameReceiverConfig audio_receiver_config_; | 412 FrameReceiverConfig audio_receiver_config_; |
412 FrameReceiverConfig video_receiver_config_; | 413 FrameReceiverConfig video_receiver_config_; |
413 AudioSenderConfig audio_sender_config_; | 414 FrameSenderConfig audio_sender_config_; |
414 VideoSenderConfig video_sender_config_; | 415 FrameSenderConfig video_sender_config_; |
415 | 416 |
416 base::TimeTicks start_time_; | 417 base::TimeTicks start_time_; |
417 | 418 |
418 // These run in "test time" | 419 // These run in "test time" |
419 base::SimpleTestTickClock testing_clock_; | 420 base::SimpleTestTickClock testing_clock_; |
420 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; | 421 scoped_refptr<FakeSingleThreadTaskRunner> task_runner_; |
421 | 422 |
422 // These run on the sender timeline. | 423 // These run on the sender timeline. |
423 test::SkewedTickClock* testing_clock_sender_; | 424 test::SkewedTickClock* testing_clock_sender_; |
424 scoped_refptr<test::SkewedSingleThreadTaskRunner> task_runner_sender_; | 425 scoped_refptr<test::SkewedSingleThreadTaskRunner> task_runner_sender_; |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
727 media::cast::CastBenchmark benchmark; | 728 media::cast::CastBenchmark benchmark; |
728 if (getenv("PROFILE_FILE")) { | 729 if (getenv("PROFILE_FILE")) { |
729 std::string profile_file(getenv("PROFILE_FILE")); | 730 std::string profile_file(getenv("PROFILE_FILE")); |
730 base::debug::StartProfiling(profile_file); | 731 base::debug::StartProfiling(profile_file); |
731 benchmark.Run(); | 732 benchmark.Run(); |
732 base::debug::StopProfiling(); | 733 base::debug::StopProfiling(); |
733 } else { | 734 } else { |
734 benchmark.Run(); | 735 benchmark.Run(); |
735 } | 736 } |
736 } | 737 } |
OLD | NEW |