summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Siarhei Vishniakou <svv@google.com> 2025-02-10 18:38:51 -0800
committer Siarhei Vishniakou <svv@google.com> 2025-02-10 18:42:25 -0800
commit287f99863b4147caa933d6bed86697dc2c605b45 (patch)
treef98959c37e4b6d5be3008d2154f07f1e13e2964e
parent4dcf2fa35aa37cfa0a9de99bd56662ed149bfd0a (diff)
Add empty, dump methods to BlockingQueue
BlockingQueue can now be dumped (since the user can't access its internal state, and it's too clunky to be making a copy just so that we can destructively print it). Also, "empty" method is useful when converting code from std containers to the BlockingQueue. At the same time, mark the "size" method as const. Bug: 376713684 Test: used in another CL in frameworks/base. build only here Flag: EXEMPT refactor Change-Id: I3fda00b793b512bdba4c85dbf561dfc5e9724601
-rw-r--r--include/input/BlockingQueue.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/include/input/BlockingQueue.h b/include/input/BlockingQueue.h
index f848c82c42..6e32de6d86 100644
--- a/include/input/BlockingQueue.h
+++ b/include/input/BlockingQueue.h
@@ -16,6 +16,7 @@
#pragma once
+#include <input/PrintTools.h>
#include <condition_variable>
#include <functional>
#include <list>
@@ -126,11 +127,21 @@ public:
* Primary used for debugging.
* Does not block.
*/
- size_t size() {
+ size_t size() const {
std::scoped_lock lock(mLock);
return mQueue.size();
}
+ bool empty() const {
+ std::scoped_lock lock(mLock);
+ return mQueue.empty();
+ }
+
+ std::string dump(std::string (*toString)(const T&) = constToString) const {
+ std::scoped_lock lock(mLock);
+ return dumpContainer(mQueue, toString);
+ }
+
private:
const std::optional<size_t> mCapacity;
/**
@@ -140,7 +151,7 @@ private:
/**
* Lock for accessing and waiting on elements.
*/
- std::mutex mLock;
+ mutable std::mutex mLock;
std::list<T> mQueue GUARDED_BY(mLock);
};