diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2019-01-30 19:11:20 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2019-01-30 19:11:20 +0000 |
commit | 627a37cad936387b323a48a3edde899ab0809961 (patch) | |
tree | 0da070855586aa1ed4d40ddaac3ef0823cd73980 /libmeminfo/libdmabufinfo/dmabufinfo.cpp | |
parent | 98910920ba5511a8185bc8c2776b4a191f0df87f (diff) | |
parent | 302a259fa9755537f3bbcb2e848fade9e711ff5c (diff) | |
download | system_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.cpp | 22 |
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; |