Evict buffers from idle bufferpool
Evict cached buffers from idle bufferpool in order to reduce memory
consumption.
Bug: 146679370
Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small
Change-Id: Ic23bd36c88e4bed2a3a8f8aa277ae4c8ca89a41c
diff --git a/media/bufferpool/2.0/AccessorImpl.h b/media/bufferpool/2.0/AccessorImpl.h
index 9888be5..cd1b4d0 100644
--- a/media/bufferpool/2.0/AccessorImpl.h
+++ b/media/bufferpool/2.0/AccessorImpl.h
@@ -20,6 +20,7 @@
#include <map>
#include <set>
#include <condition_variable>
+#include <utils/Timers.h>
#include "Accessor.h"
namespace android {
@@ -71,6 +72,8 @@
static void createInvalidator();
+ static void createEvictor();
+
private:
// ConnectionId = pid : (timestamp_created + seqId)
// in order to guarantee uniqueness for each connection
@@ -78,6 +81,8 @@
const std::shared_ptr<BufferPoolAllocator> mAllocator;
+ nsecs_t mScheduleEvictTs;
+
/**
* Buffer pool implementation.
*
@@ -389,6 +394,25 @@
std::mutex &mutex,
std::condition_variable &cv,
bool &ready);
+
+ struct AccessorEvictor {
+ std::map<const std::weak_ptr<Accessor::Impl>, nsecs_t, std::owner_less<>> mAccessors;
+ std::mutex mMutex;
+ std::condition_variable mCv;
+
+ AccessorEvictor();
+ void addAccessor(const std::weak_ptr<Accessor::Impl> &impl, nsecs_t ts);
+ };
+
+ static std::unique_ptr<AccessorEvictor> sEvictor;
+
+ static void evictorThread(
+ std::map<const std::weak_ptr<Accessor::Impl>, nsecs_t, std::owner_less<>> &accessors,
+ std::mutex &mutex,
+ std::condition_variable &cv);
+
+ void scheduleEvictIfNeeded();
+
};
} // namespace implementation