Fix busy loop in FakeAudioDeviceModule.
The implementation now has a mechanism that effectively turns off callbacks if used.
BUG=webrtc:7237, 695438
TBR=solenberg@webrtc.org
Review-Url: https://codereview.webrtc.org/2710023010
Cr-Original-Commit-Position: refs/heads/master@{#16837}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 4af9f962c3a79b97c4b2d85be4c30c9b77ef7a21
diff --git a/modules/audio_device/include/fake_audio_device.h b/modules/audio_device/include/fake_audio_device.h
index a28ad86..1797dd5 100644
--- a/modules/audio_device/include/fake_audio_device.h
+++ b/modules/audio_device/include/fake_audio_device.h
@@ -41,8 +41,20 @@
virtual int32_t SetStereoRecording(bool enable) { return 0; }
virtual int32_t SetAGC(bool enable) { return 0; }
virtual int32_t StopRecording() { return 0; }
- virtual int64_t TimeUntilNextProcess() { return 0; }
- virtual void Process() {}
+
+ // If the subclass doesn't override the ProcessThread implementation,
+ // we'll fall back on an implementation that doesn't eat too much CPU.
+ virtual int64_t TimeUntilNextProcess() {
+ if (turn_off_module_callbacks_)
+ return 7 * 24 * 60 * 60 * 1000; // call me next week.
+ uses_default_module_implementation_ = true;
+ return 10;
+ }
+
+ virtual void Process() {
+ turn_off_module_callbacks_ = uses_default_module_implementation_;
+ }
+
virtual int32_t Terminate() { return 0; }
virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const { return 0; }
@@ -167,6 +179,10 @@
return -1;
}
#endif // WEBRTC_IOS
+
+ private:
+ bool uses_default_module_implementation_ = false;
+ bool turn_off_module_callbacks_ = false;
};
} // namespace webrtc