// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_PUSH_PULL_FIFO_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_PUSH_PULL_FIFO_H_ #include "base/synchronization/lock.h" #include "third_party/blink/renderer/platform/audio/audio_bus.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/threading.h" namespace blink { // A configuration data container for PushPullFIFO unit test. struct PushPullFIFOStateForTest { … }; // PushPullFIFO class is an intermediate audio sample storage between // Blink-WebAudio and the renderer. The renderer's hardware callback buffer size // varies on the platform, but the WebAudio always renders 128 frames (render // quantum, RQ) thus FIFO is needed to handle the general case. // // Note that this object is concurrently accessed by two threads; WebAudio // rendering thread (WebThread) in Blink and the audio device thread // (AudioDeviceThread) from the media renderer. The push/pull operations touch // most of variables in the class (index_write_, index_read_, frames_available_, // and fifo_Bus_) so the thread safety must be handled with care. // // TODO(hongchan): add a unit test for multi-thread access. class PLATFORM_EXPORT PushPullFIFO { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_AUDIO_PUSH_PULL_FIFO_H_