123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_
- #define SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_
- namespace audio {
- class InputStreamActivityMonitor {
- public:
- // Called when an input stream starts recording.
- virtual void OnInputStreamActive() = 0;
- // Called when an input stream stops recording.
- virtual void OnInputStreamInactive() = 0;
- };
- class OutputStreamActivityMonitor {
- public:
- // Called when an output stream starts playing audio.
- virtual void OnOutputStreamActive() = 0;
- // Called when an output stream stops playing audio.
- virtual void OnOutputStreamInactive() = 0;
- };
- // ConcurrentStreamMetricReporter monitors input and output streams and reports
- // the maximum number of concurrent active OutputStreams observed during active
- // InputStream recording. This provides an estimate of how many audio streams
- // need to be mixed for echo cancellation.
- //
- // This class is not thread safe.
- class ConcurrentStreamMetricReporter final
- : public InputStreamActivityMonitor,
- public OutputStreamActivityMonitor {
- public:
- // InputStreamActivityMonitor implementation.
- void OnInputStreamActive() override;
- void OnInputStreamInactive() override;
- // OutputStreamActivityMonitor implementation.
- void OnOutputStreamActive() override;
- void OnOutputStreamInactive() override;
- private:
- int active_input_stream_count_ = 0;
- int active_output_stream_count_ = 0;
- int max_concurrent_output_streams_metric_ = 0;
- };
- } // namespace audio
- #endif // SERVICES_AUDIO_CONCURRENT_STREAM_METRIC_REPORTER_H_
|