aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Stratiienko <roman.o.stratiienko@globallogic.com>2021-12-17 18:10:57 +0200
committerRoman Stratiienko <roman.o.stratiienko@globallogic.com>2022-05-17 11:20:44 +0300
commit74d2c4a0bf7f89050a99d070dc0ec29e6994aa18 (patch)
tree9511454d7da2892afce96915ce60f3bc4c9be2f0
parent4b2cc484f9af46a82bd8e4f3ce81092c4eefa53a (diff)
downloaddrm_hwcomposer-74d2c4a0bf7f89050a99d070dc0ec29e6994aa18.tar.gz
drm_hwcomposer: Add unique handle ID getter into buffergetter class
dmabuf stats inode field can be used as unique buffer id. Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
-rw-r--r--bufferinfo/BufferInfoGetter.cpp19
-rw-r--r--bufferinfo/BufferInfoGetter.h4
2 files changed, 23 insertions, 0 deletions
diff --git a/bufferinfo/BufferInfoGetter.cpp b/bufferinfo/BufferInfoGetter.cpp
index fcd0532..95c1a23 100644
--- a/bufferinfo/BufferInfoGetter.cpp
+++ b/bufferinfo/BufferInfoGetter.cpp
@@ -22,9 +22,14 @@
#include "BufferInfoMapperMetadata.h"
#endif
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
#include <xf86drm.h>
#include <xf86drmMode.h>
+#include <mutex>
+
#include "utils/log.h"
#include "utils/properties.h"
@@ -48,6 +53,20 @@ BufferInfoGetter *BufferInfoGetter::GetInstance() {
return inst.get();
}
+std::optional<BufferUniqueId> BufferInfoGetter::GetUniqueId(
+ buffer_handle_t handle) {
+ struct stat sb {};
+ if (fstat(handle->data[0], &sb) != 0) {
+ return {};
+ }
+
+ if (sb.st_size == 0) {
+ return {};
+ }
+
+ return static_cast<BufferUniqueId>(sb.st_ino);
+}
+
int LegacyBufferInfoGetter::Init() {
int ret = hw_get_module(
GRALLOC_HARDWARE_MODULE_ID,
diff --git a/bufferinfo/BufferInfoGetter.h b/bufferinfo/BufferInfoGetter.h
index 667b5c1..5591296 100644
--- a/bufferinfo/BufferInfoGetter.h
+++ b/bufferinfo/BufferInfoGetter.h
@@ -31,6 +31,8 @@
namespace android {
+using BufferUniqueId = uint64_t;
+
class BufferInfoGetter {
public:
virtual ~BufferInfoGetter() = default;
@@ -38,6 +40,8 @@ class BufferInfoGetter {
virtual auto GetBoInfo(buffer_handle_t handle)
-> std::optional<BufferInfo> = 0;
+ virtual std::optional<BufferUniqueId> GetUniqueId(buffer_handle_t handle);
+
static BufferInfoGetter *GetInstance();
static bool IsDrmFormatRgb(uint32_t drm_format);