Add LockedRingBuffer

This is a refactor for DnsQueryLog. No functional behavior change.

Bug: 79727473
Test: resolv_unit_test passed
Test: adb shell dumpsys dnsresolver querylog
Change-Id: Id9fc9b7868dab5861feda5ab2cb04759e7a34846
diff --git a/DnsQueryLog.h b/DnsQueryLog.h
index c19f8db..3e6478e 100644
--- a/DnsQueryLog.h
+++ b/DnsQueryLog.h
@@ -17,16 +17,16 @@
 
 #pragma once
 
-#include <deque>
 #include <string>
 #include <vector>
 
-#include <android-base/thread_annotations.h>
 #include <netdutils/DumpWriter.h>
 
+#include "LockedQueue.h"
+
 namespace android::net {
 
-// A circular buffer based class used for query logging. It's thread-safe for concurrent access.
+// This class stores query records in a locked ring buffer. It's thread-safe for concurrent access.
 class DnsQueryLog {
   public:
     static constexpr std::string_view DUMP_KEYWORD = "querylog";
@@ -52,15 +52,13 @@
     // Allow the tests to set the capacity and the validaty time in milliseconds.
     DnsQueryLog(size_t size = kDefaultLogSize,
                 std::chrono::milliseconds time = kDefaultValidityMinutes)
-        : mCapacity(size), mValidityTimeMs(time) {}
+        : mQueue(size), mValidityTimeMs(time) {}
 
-    void push(Record&& record) EXCLUDES(mLock);
-    void dump(netdutils::DumpWriter& dw) const EXCLUDES(mLock);
+    void push(Record&& record);
+    void dump(netdutils::DumpWriter& dw) const;
 
   private:
-    mutable std::mutex mLock;
-    std::deque<Record> mQueue GUARDED_BY(mLock);
-    const size_t mCapacity;
+    LockedRingBuffer<Record> mQueue;
     const std::chrono::milliseconds mValidityTimeMs;
 
     // The capacity of the circular buffer.