| Index: webrtc/modules/audio_processing/aec3/echo_canceller3.cc
 | 
| diff --git a/webrtc/modules/audio_processing/aec3/echo_canceller3.cc b/webrtc/modules/audio_processing/aec3/echo_canceller3.cc
 | 
| index b409e60350e2c2b6c45b2395d8a42d6285f92410..ec7b55a215b3d7d50ceec1a4c260ceb4feda476d 100644
 | 
| --- a/webrtc/modules/audio_processing/aec3/echo_canceller3.cc
 | 
| +++ b/webrtc/modules/audio_processing/aec3/echo_canceller3.cc
 | 
| @@ -53,7 +53,7 @@ void FillSubFrameView(std::vector<std::vector<float>>* frame,
 | 
|  
 | 
|  void ProcessCaptureFrameContent(
 | 
|      AudioBuffer* capture,
 | 
| -    bool known_echo_path_change,
 | 
| +    bool level_change,
 | 
|      bool saturated_microphone_signal,
 | 
|      size_t sub_frame_index,
 | 
|      FrameBlocker* capture_blocker,
 | 
| @@ -63,13 +63,13 @@ void ProcessCaptureFrameContent(
 | 
|      std::vector<rtc::ArrayView<float>>* sub_frame_view) {
 | 
|    FillSubFrameView(capture, sub_frame_index, sub_frame_view);
 | 
|    capture_blocker->InsertSubFrameAndExtractBlock(*sub_frame_view, block);
 | 
| -  block_processor->ProcessCapture(known_echo_path_change,
 | 
| -                                  saturated_microphone_signal, block);
 | 
| +  block_processor->ProcessCapture(level_change, saturated_microphone_signal,
 | 
| +                                  block);
 | 
|    output_framer->InsertBlockAndExtractSubFrame(*block, sub_frame_view);
 | 
|  }
 | 
|  
 | 
|  void ProcessRemainingCaptureFrameContent(
 | 
| -    bool known_echo_path_change,
 | 
| +    bool level_change,
 | 
|      bool saturated_microphone_signal,
 | 
|      FrameBlocker* capture_blocker,
 | 
|      BlockFramer* output_framer,
 | 
| @@ -80,8 +80,8 @@ void ProcessRemainingCaptureFrameContent(
 | 
|    }
 | 
|  
 | 
|    capture_blocker->ExtractBlock(block);
 | 
| -  block_processor->ProcessCapture(known_echo_path_change,
 | 
| -                                  saturated_microphone_signal, block);
 | 
| +  block_processor->ProcessCapture(level_change, saturated_microphone_signal,
 | 
| +                                  block);
 | 
|    output_framer->InsertBlock(*block);
 | 
|  }
 | 
|  
 | 
| @@ -101,7 +101,7 @@ bool BufferRemainingRenderFrameContent(FrameBlocker* render_blocker,
 | 
|                                         BlockProcessor* block_processor,
 | 
|                                         std::vector<std::vector<float>>* block) {
 | 
|    if (!render_blocker->IsBlockAvailable()) {
 | 
| -    return false;
 | 
| +    return true;
 | 
|    }
 | 
|    render_blocker->ExtractBlock(block);
 | 
|    return block_processor->BufferRender(block);
 | 
| @@ -275,8 +275,7 @@ void EchoCanceller3::AnalyzeCapture(AudioBuffer* capture) {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void EchoCanceller3::ProcessCapture(AudioBuffer* capture,
 | 
| -                                    bool known_echo_path_change) {
 | 
| +void EchoCanceller3::ProcessCapture(AudioBuffer* capture, bool level_change) {
 | 
|    RTC_DCHECK_RUNS_SERIALIZED(&capture_race_checker_);
 | 
|    RTC_DCHECK(capture);
 | 
|    RTC_DCHECK_EQ(1u, capture->num_channels());
 | 
| @@ -289,27 +288,26 @@ void EchoCanceller3::ProcessCapture(AudioBuffer* capture,
 | 
|    data_dumper_->DumpWav("aec3_capture_input", capture_lower_band,
 | 
|                          LowestBandRate(sample_rate_hz_), 1);
 | 
|  
 | 
| -  const bool render_buffer_overrun = EmptyRenderQueue();
 | 
| -  RTC_DCHECK(!render_buffer_overrun);
 | 
| +  const bool successful_buffering = EmptyRenderQueue();
 | 
| +  RTC_DCHECK(successful_buffering);
 | 
|  
 | 
|    if (capture_highpass_filter_) {
 | 
|      capture_highpass_filter_->Process(capture_lower_band);
 | 
|    }
 | 
|  
 | 
| -  ProcessCaptureFrameContent(capture, known_echo_path_change,
 | 
| -                             saturated_microphone_signal_, 0, &capture_blocker_,
 | 
| -                             &output_framer_, block_processor_.get(), &block_,
 | 
| -                             &sub_frame_view_);
 | 
| +  ProcessCaptureFrameContent(
 | 
| +      capture, level_change, saturated_microphone_signal_, 0, &capture_blocker_,
 | 
| +      &output_framer_, block_processor_.get(), &block_, &sub_frame_view_);
 | 
|  
 | 
|    if (sample_rate_hz_ != 8000) {
 | 
|      ProcessCaptureFrameContent(
 | 
| -        capture, known_echo_path_change, saturated_microphone_signal_, 1,
 | 
| +        capture, level_change, saturated_microphone_signal_, 1,
 | 
|          &capture_blocker_, &output_framer_, block_processor_.get(), &block_,
 | 
|          &sub_frame_view_);
 | 
|    }
 | 
|  
 | 
|    ProcessRemainingCaptureFrameContent(
 | 
| -      known_echo_path_change, saturated_microphone_signal_, &capture_blocker_,
 | 
| +      level_change, saturated_microphone_signal_, &capture_blocker_,
 | 
|        &output_framer_, block_processor_.get(), &block_);
 | 
|  
 | 
|    data_dumper_->DumpWav("aec3_capture_output", frame_length_,
 | 
| @@ -332,27 +330,33 @@ bool EchoCanceller3::Validate(
 | 
|  
 | 
|  bool EchoCanceller3::EmptyRenderQueue() {
 | 
|    RTC_DCHECK_RUNS_SERIALIZED(&capture_race_checker_);
 | 
| -  bool render_buffer_overrun = false;
 | 
| +  bool successful_buffering = true;
 | 
|    bool frame_to_buffer =
 | 
|        render_transfer_queue_.Remove(&render_queue_output_frame_);
 | 
|    while (frame_to_buffer) {
 | 
| -    render_buffer_overrun |= BufferRenderFrameContent(
 | 
| -        &render_queue_output_frame_, 0, &render_blocker_,
 | 
| -        block_processor_.get(), &block_, &sub_frame_view_);
 | 
| +    successful_buffering =
 | 
| +        BufferRenderFrameContent(&render_queue_output_frame_, 0,
 | 
| +                                 &render_blocker_, block_processor_.get(),
 | 
| +                                 &block_, &sub_frame_view_) &&
 | 
| +        successful_buffering;
 | 
|  
 | 
|      if (sample_rate_hz_ != 8000) {
 | 
| -      render_buffer_overrun |= BufferRenderFrameContent(
 | 
| -          &render_queue_output_frame_, 1, &render_blocker_,
 | 
| -          block_processor_.get(), &block_, &sub_frame_view_);
 | 
| +      successful_buffering =
 | 
| +          BufferRenderFrameContent(&render_queue_output_frame_, 1,
 | 
| +                                   &render_blocker_, block_processor_.get(),
 | 
| +                                   &block_, &sub_frame_view_) &&
 | 
| +          successful_buffering;
 | 
|      }
 | 
|  
 | 
| -    render_buffer_overrun |= BufferRemainingRenderFrameContent(
 | 
| -        &render_blocker_, block_processor_.get(), &block_);
 | 
| +    successful_buffering =
 | 
| +        BufferRemainingRenderFrameContent(&render_blocker_,
 | 
| +                                          block_processor_.get(), &block_) &&
 | 
| +        successful_buffering;
 | 
|  
 | 
|      frame_to_buffer =
 | 
|          render_transfer_queue_.Remove(&render_queue_output_frame_);
 | 
|    }
 | 
| -  return render_buffer_overrun;
 | 
| +  return successful_buffering;
 | 
|  }
 | 
|  
 | 
|  }  // namespace webrtc
 | 
| 
 |