summaryrefslogtreecommitdiffstats
path: root/libmeminfo/libdmabufinfo/dmabufinfo.cpp
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2019-01-30 19:11:20 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2019-01-30 19:11:20 +0000
commit627a37cad936387b323a48a3edde899ab0809961 (patch)
tree0da070855586aa1ed4d40ddaac3ef0823cd73980 /libmeminfo/libdmabufinfo/dmabufinfo.cpp
parent98910920ba5511a8185bc8c2776b4a191f0df87f (diff)
parent302a259fa9755537f3bbcb2e848fade9e711ff5c (diff)
downloadsystem_core-627a37cad936387b323a48a3edde899ab0809961.tar.gz
system_core-627a37cad936387b323a48a3edde899ab0809961.tar.bz2
system_core-627a37cad936387b323a48a3edde899ab0809961.zip
Merge "meminfo: handle multiple buffer references in dmabufinfo"
Diffstat (limited to 'libmeminfo/libdmabufinfo/dmabufinfo.cpp')
-rw-r--r--libmeminfo/libdmabufinfo/dmabufinfo.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/libmeminfo/libdmabufinfo/dmabufinfo.cpp b/libmeminfo/libdmabufinfo/dmabufinfo.cpp
index 41ecc5195..b4ad6678a 100644
--- a/libmeminfo/libdmabufinfo/dmabufinfo.cpp
+++ b/libmeminfo/libdmabufinfo/dmabufinfo.cpp
@@ -119,9 +119,23 @@ static bool ReadDmaBufFdRefs(pid_t pid, std::vector<DmaBuffer>* dmabufs) {
return false;
}
- DmaBuffer& buf =
+ uint64_t inode = sb.st_ino;
+ auto buf = std::find_if(dmabufs->begin(), dmabufs->end(),
+ [&inode](const DmaBuffer& dbuf) { return dbuf.inode() == inode; });
+ if (buf != dmabufs->end()) {
+ if (buf->name() == "" || buf->name() == "<unknown>")
+ buf->SetName(name);
+ if (buf->exporter() == "" || buf->exporter() == "<unknown>")
+ buf->SetExporter(exporter);
+ if (buf->count() == 0)
+ buf->SetCount(count);
+ buf->AddFdRef(pid);
+ return true;
+ }
+
+ DmaBuffer& db =
dmabufs->emplace_back(sb.st_ino, sb.st_blocks * 512, count, exporter, name);
- buf.AddFdRef(pid);
+ db.AddFdRef(pid);
}
return true;
@@ -225,6 +239,10 @@ bool ReadDmaBufInfo(std::vector<DmaBuffer>* dmabufs, const std::string& path) {
bool ReadDmaBufInfo(pid_t pid, std::vector<DmaBuffer>* dmabufs) {
dmabufs->clear();
+ return AppendDmaBufInfo(pid, dmabufs);
+}
+
+bool AppendDmaBufInfo(pid_t pid, std::vector<DmaBuffer>* dmabufs) {
if (!ReadDmaBufFdRefs(pid, dmabufs)) {
LOG(ERROR) << "Failed to read dmabuf fd references";
return false;