| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/remoting/remote_renderer_impl.h" | 5 #include "media/remoting/remote_renderer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 OnFatalError(remoting::RPC_INVALID); | 583 OnFatalError(remoting::RPC_INVALID); |
| 584 return; | 584 return; |
| 585 } | 585 } |
| 586 VLOG(2) << __func__ << ": Received RPC_RC_ONBUFFERINGSTATECHANGE with state=" | 586 VLOG(2) << __func__ << ": Received RPC_RC_ONBUFFERINGSTATECHANGE with state=" |
| 587 << message->rendererclient_onbufferingstatechange_rpc().state(); | 587 << message->rendererclient_onbufferingstatechange_rpc().state(); |
| 588 base::Optional<::media::BufferingState> state = | 588 base::Optional<::media::BufferingState> state = |
| 589 remoting::ToMediaBufferingState( | 589 remoting::ToMediaBufferingState( |
| 590 message->rendererclient_onbufferingstatechange_rpc().state()); | 590 message->rendererclient_onbufferingstatechange_rpc().state()); |
| 591 if (!state.has_value()) | 591 if (!state.has_value()) |
| 592 return; | 592 return; |
| 593 if (state == BufferingState::BUFFERING_HAVE_NOTHING) { | |
| 594 is_waiting_for_buffering_ = true; | |
| 595 } else if (is_waiting_for_buffering_) { | |
| 596 is_waiting_for_buffering_ = false; | |
| 597 ResetMeasurements(); | |
| 598 } | |
| 599 | |
| 600 client_->OnBufferingStateChange(state.value()); | 593 client_->OnBufferingStateChange(state.value()); |
| 601 } | 594 } |
| 602 | 595 |
| 603 void RemoteRendererImpl::OnVideoNaturalSizeChange( | 596 void RemoteRendererImpl::OnVideoNaturalSizeChange( |
| 604 std::unique_ptr<remoting::pb::RpcMessage> message) { | 597 std::unique_ptr<remoting::pb::RpcMessage> message) { |
| 605 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 598 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 606 DCHECK(message); | 599 DCHECK(message); |
| 607 // Shutdown remoting session if receiving malformed RPC message. | 600 // Shutdown remoting session if receiving malformed RPC message. |
| 608 if (!message->has_rendererclient_onvideonatualsizechange_rpc()) { | 601 if (!message->has_rendererclient_onvideonatualsizechange_rpc()) { |
| 609 VLOG(1) << __func__ << " missing required RPC message"; | 602 VLOG(1) << __func__ << " missing required RPC message"; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 interstitial_background_ = background_image.value(); | 720 interstitial_background_ = background_image.value(); |
| 728 canvas_size_ = canvas_size; | 721 canvas_size_ = canvas_size; |
| 729 PaintRemotingInterstitial(interstitial_background_, canvas_size_, | 722 PaintRemotingInterstitial(interstitial_background_, canvas_size_, |
| 730 interstitial_type, video_renderer_sink_); | 723 interstitial_type, video_renderer_sink_); |
| 731 } | 724 } |
| 732 | 725 |
| 733 void RemoteRendererImpl::OnMediaTimeUpdated() { | 726 void RemoteRendererImpl::OnMediaTimeUpdated() { |
| 734 DCHECK(media_task_runner_->BelongsToCurrentThread()); | 727 DCHECK(media_task_runner_->BelongsToCurrentThread()); |
| 735 if (!flush_cb_.is_null()) | 728 if (!flush_cb_.is_null()) |
| 736 return; // Don't manage and check the queue when Flush() is on-going. | 729 return; // Don't manage and check the queue when Flush() is on-going. |
| 737 if (is_waiting_for_buffering_) | |
| 738 return; // Don't manage and check the queue when buffering is on-going. | |
| 739 | 730 |
| 740 base::TimeTicks current_time = base::TimeTicks::Now(); | 731 base::TimeTicks current_time = base::TimeTicks::Now(); |
| 741 if (current_time < ignore_updates_until_time_) | 732 if (current_time < ignore_updates_until_time_) |
| 742 return; // Not stable yet. | 733 return; // Not stable yet. |
| 743 | 734 |
| 744 media_time_queue_.push_back( | 735 media_time_queue_.push_back( |
| 745 std::make_pair(current_time, current_media_time_)); | 736 std::make_pair(current_time, current_media_time_)); |
| 746 base::TimeDelta window_duration = | 737 base::TimeDelta window_duration = |
| 747 current_time - media_time_queue_.front().first; | 738 current_time - media_time_queue_.front().first; |
| 748 if (window_duration < kTrackingWindow) | 739 if (window_duration < kTrackingWindow) |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 kDataFlowPollPeriod.InSecondsF()) / | 857 kDataFlowPollPeriod.InSecondsF()) / |
| 867 kBytesPerKilobit; | 858 kBytesPerKilobit; |
| 868 DCHECK_GE(kilobits_per_second, 0); | 859 DCHECK_GE(kilobits_per_second, 0); |
| 869 const base::CheckedNumeric<int> checked_kbps = kilobits_per_second; | 860 const base::CheckedNumeric<int> checked_kbps = kilobits_per_second; |
| 870 metrics_recorder_.OnVideoRateEstimate( | 861 metrics_recorder_.OnVideoRateEstimate( |
| 871 checked_kbps.ValueOrDefault(std::numeric_limits<int>::max())); | 862 checked_kbps.ValueOrDefault(std::numeric_limits<int>::max())); |
| 872 } | 863 } |
| 873 } | 864 } |
| 874 | 865 |
| 875 } // namespace media | 866 } // namespace media |
| OLD | NEW |