Remove locks from BufferQueue (not needed).
Also remove test code that can cause leaks into production.
Add sequence checkers.
Bug: webrtc:11988
Change-Id: I67b4cec6ee77d73ccffbbc88c9081ebb3c3cc423
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/185503
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32228}
diff --git a/rtc_base/buffer_queue.h b/rtc_base/buffer_queue.h
index 29d1a5b..24a9b04 100644
--- a/rtc_base/buffer_queue.h
+++ b/rtc_base/buffer_queue.h
@@ -18,16 +18,16 @@
#include "rtc_base/buffer.h"
#include "rtc_base/constructor_magic.h"
-#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/synchronization/sequence_checker.h"
#include "rtc_base/thread_annotations.h"
namespace rtc {
-class BufferQueue {
+class BufferQueue final {
public:
// Creates a buffer queue with a given capacity and default buffer size.
BufferQueue(size_t capacity, size_t default_size);
- virtual ~BufferQueue();
+ ~BufferQueue();
// Return number of queued buffers.
size_t size() const;
@@ -44,17 +44,22 @@
// Returns true unless no data could be written.
bool WriteBack(const void* data, size_t bytes, size_t* bytes_written);
- protected:
- // These methods are called when the state of the queue changes.
- virtual void NotifyReadableForTest() {}
- virtual void NotifyWritableForTest() {}
+ bool is_writable() const {
+ RTC_DCHECK_RUN_ON(&sequence_checker_);
+ return queue_.size() < capacity_;
+ }
+
+ bool is_readable() const {
+ RTC_DCHECK_RUN_ON(&sequence_checker_);
+ return !queue_.empty();
+ }
private:
- size_t capacity_;
- size_t default_size_;
- mutable webrtc::Mutex mutex_;
- std::deque<Buffer*> queue_ RTC_GUARDED_BY(mutex_);
- std::vector<Buffer*> free_list_ RTC_GUARDED_BY(mutex_);
+ webrtc::SequenceChecker sequence_checker_;
+ const size_t capacity_;
+ const size_t default_size_;
+ std::deque<Buffer*> queue_ RTC_GUARDED_BY(sequence_checker_);
+ std::vector<Buffer*> free_list_ RTC_GUARDED_BY(sequence_checker_);
RTC_DISALLOW_COPY_AND_ASSIGN(BufferQueue);
};