Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 551853c3 authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Audio: Add memory leak checking for HAL am: 87edc66e

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/1979748

Change-Id: Ib177da71868d9b6d84f6181ceff6ef3513a21acc
parents b55027e7 87edc66e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ cc_defaults {
        "libhidlbase",
        "liblog",
        "libmedia_helper",
        "libmediautils_vendor",
        "libmemunreachable",
        "libutils",
        "android.hardware.audio.common-util",
    ],
+27 −2
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@
#include <algorithm>

#include <android/log.h>
#include <mediautils/MemoryLeakTrackUtil.h>
#include <memunreachable/memunreachable.h>

#include <HidlUtils.h>

@@ -501,9 +503,32 @@ Return<void> Device::debugDump(const hidl_handle& fd) {
}
#endif

Return<void> Device::debug(const hidl_handle& fd, const hidl_vec<hidl_string>& /* options */) {
Return<void> Device::debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) {
    if (fd.getNativeHandle() != nullptr && fd->numFds == 1) {
        analyzeStatus("dump", mDevice->dump(mDevice, fd->data[0]));
        const int fd0 = fd->data[0];
        bool dumpMem = false;
        bool unreachableMemory = false;
        for (const auto& option : options) {
            if (option == "-m") {
                dumpMem = true;
            } else if (option == "--unreachable") {
                unreachableMemory = true;
            }
        }

        if (dumpMem) {
            dprintf(fd0, "\nDumping memory:\n");
            std::string s = dumpMemoryAddresses(100 /* limit */);
            write(fd0, s.c_str(), s.size());
        }
        if (unreachableMemory) {
            dprintf(fd0, "\nDumping unreachable memory:\n");
            // TODO - should limit be an argument parameter?
            std::string s = GetUnreachableMemoryString(true /* contents */, 100 /* limit */);
            write(fd0, s.c_str(), s.size());
        }

        analyzeStatus("dump", mDevice->dump(mDevice, fd0));
    }
    return Void();
}