Optimize the filter analyzer.

Bug: None
Change-Id: I03e4e66295029df0f54dee83acbb5b5266d36645
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/247184
Reviewed-by: Per Ã…hgren <peah@webrtc.org>
Commit-Queue: Christian Schuldt <cschuldt@google.com>
Cr-Commit-Position: refs/heads/main@{#35717}
diff --git a/modules/audio_processing/aec3/filter_analyzer.cc b/modules/audio_processing/aec3/filter_analyzer.cc
index be954d3..c07e5c8 100644
--- a/modules/audio_processing/aec3/filter_analyzer.cc
+++ b/modules/audio_processing/aec3/filter_analyzer.cc
@@ -170,11 +170,16 @@
 
     std::fill(h_highpass_[ch].begin() + region_.start_sample_,
               h_highpass_[ch].begin() + region_.end_sample_ + 1, 0.f);
+    float* h_highpass_ch = h_highpass_[ch].data();
+    const float* filters_time_domain_ch = filters_time_domain[ch].data();
+    const size_t region_end = region_.end_sample_;
     for (size_t k = std::max(h.size() - 1, region_.start_sample_);
-         k <= region_.end_sample_; ++k) {
+         k <= region_end; ++k) {
+      float tmp = h_highpass_ch[k];
       for (size_t j = 0; j < h.size(); ++j) {
-        h_highpass_[ch][k] += filters_time_domain[ch][k - j] * h[j];
+        tmp += filters_time_domain_ch[k - j] * h[j];
       }
+      h_highpass_ch[k] = tmp;
     }
   }
 }
@@ -230,19 +235,23 @@
         peak_index > filter_to_analyze.size() - 129 ? 0 : peak_index + 128;
   }
 
+  float filter_floor_accum = filter_floor_accum_;
+  float filter_secondary_peak = filter_secondary_peak_;
   for (size_t k = region.start_sample_;
        k < std::min(region.end_sample_ + 1, filter_floor_low_limit_); ++k) {
     float abs_h = fabsf(filter_to_analyze[k]);
-    filter_floor_accum_ += abs_h;
-    filter_secondary_peak_ = std::max(filter_secondary_peak_, abs_h);
+    filter_floor_accum += abs_h;
+    filter_secondary_peak = std::max(filter_secondary_peak, abs_h);
   }
 
   for (size_t k = std::max(filter_floor_high_limit_, region.start_sample_);
        k <= region.end_sample_; ++k) {
     float abs_h = fabsf(filter_to_analyze[k]);
-    filter_floor_accum_ += abs_h;
-    filter_secondary_peak_ = std::max(filter_secondary_peak_, abs_h);
+    filter_floor_accum += abs_h;
+    filter_secondary_peak = std::max(filter_secondary_peak, abs_h);
   }
+  filter_floor_accum_ = filter_floor_accum;
+  filter_secondary_peak_ = filter_secondary_peak;
 
   if (region.end_sample_ == filter_to_analyze.size() - 1) {
     float filter_floor = filter_floor_accum_ /