tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

block_processor_metrics.cc (3002B)


      1 /*
      2 *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/audio_processing/aec3/block_processor_metrics.h"
     12 
     13 #include "modules/audio_processing/aec3/aec3_common.h"
     14 #include "system_wrappers/include/metrics.h"
     15 
     16 namespace webrtc {
     17 
     18 namespace {
     19 
     20 enum class RenderUnderrunCategory {
     21  kNone,
     22  kFew,
     23  kSeveral,
     24  kMany,
     25  kConstant,
     26  kNumCategories
     27 };
     28 
     29 enum class RenderOverrunCategory {
     30  kNone,
     31  kFew,
     32  kSeveral,
     33  kMany,
     34  kConstant,
     35  kNumCategories
     36 };
     37 
     38 }  // namespace
     39 
     40 void BlockProcessorMetrics::UpdateCapture(bool underrun) {
     41  ++capture_block_counter_;
     42  if (underrun) {
     43    ++render_buffer_underruns_;
     44  }
     45 
     46  if (capture_block_counter_ == kMetricsReportingIntervalBlocks) {
     47    metrics_reported_ = true;
     48 
     49    RenderUnderrunCategory underrun_category;
     50    if (render_buffer_underruns_ == 0) {
     51      underrun_category = RenderUnderrunCategory::kNone;
     52    } else if (render_buffer_underruns_ > (capture_block_counter_ >> 1)) {
     53      underrun_category = RenderUnderrunCategory::kConstant;
     54    } else if (render_buffer_underruns_ > 100) {
     55      underrun_category = RenderUnderrunCategory::kMany;
     56    } else if (render_buffer_underruns_ > 10) {
     57      underrun_category = RenderUnderrunCategory::kSeveral;
     58    } else {
     59      underrun_category = RenderUnderrunCategory::kFew;
     60    }
     61    RTC_HISTOGRAM_ENUMERATION(
     62        "WebRTC.Audio.EchoCanceller.RenderUnderruns",
     63        static_cast<int>(underrun_category),
     64        static_cast<int>(RenderUnderrunCategory::kNumCategories));
     65 
     66    RenderOverrunCategory overrun_category;
     67    if (render_buffer_overruns_ == 0) {
     68      overrun_category = RenderOverrunCategory::kNone;
     69    } else if (render_buffer_overruns_ > (buffer_render_calls_ >> 1)) {
     70      overrun_category = RenderOverrunCategory::kConstant;
     71    } else if (render_buffer_overruns_ > 100) {
     72      overrun_category = RenderOverrunCategory::kMany;
     73    } else if (render_buffer_overruns_ > 10) {
     74      overrun_category = RenderOverrunCategory::kSeveral;
     75    } else {
     76      overrun_category = RenderOverrunCategory::kFew;
     77    }
     78    RTC_HISTOGRAM_ENUMERATION(
     79        "WebRTC.Audio.EchoCanceller.RenderOverruns",
     80        static_cast<int>(overrun_category),
     81        static_cast<int>(RenderOverrunCategory::kNumCategories));
     82 
     83    ResetMetrics();
     84    capture_block_counter_ = 0;
     85  } else {
     86    metrics_reported_ = false;
     87  }
     88 }
     89 
     90 void BlockProcessorMetrics::UpdateRender(bool overrun) {
     91  ++buffer_render_calls_;
     92  if (overrun) {
     93    ++render_buffer_overruns_;
     94  }
     95 }
     96 
     97 void BlockProcessorMetrics::ResetMetrics() {
     98  render_buffer_underruns_ = 0;
     99  render_buffer_overruns_ = 0;
    100  buffer_render_calls_ = 0;
    101 }
    102 
    103 }  // namespace webrtc