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

Commit 35fec5f6 authored by Andy Hung's avatar Andy Hung
Browse files

Add memory leak detection to audioserver

adb shell dumpsys media.audio_flinger --unreachable

(userdebug and eng builds)

Bug: 28049120
Change-Id: I72ac624bd5b5482aac44b9f3d8429f657f715cb4
parent 0c4a97e6
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ LOCAL_SRC_FILES:= \
LOCAL_C_INCLUDES := \
    $(TOPDIR)frameworks/av/services/audiopolicy \
    $(TOPDIR)external/sonic \
    libcore/include \
    $(call include-path-for, audio-effects) \
    $(call include-path-for, audio-utils)

@@ -54,7 +55,8 @@ LOCAL_SHARED_LIBRARIES := \
    libpowermanager \
    libserviceutility \
    libsonic \
    libmediautils
    libmediautils \
    libmemunreachable

LOCAL_STATIC_LIBRARIES := \
    libcpustats \
+16 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <utils/Log.h>
#include <utils/Trace.h>
#include <binder/Parcel.h>
#include <memunreachable/memunreachable.h>
#include <utils/String16.h>
#include <utils/threads.h>
#include <utils/Atomic.h>
@@ -462,6 +463,21 @@ status_t AudioFlinger::dump(int fd, const Vector<String16>& args)
                binder->dump(fd, args);
            }
        }

        // check for optional arguments
        bool unreachableMemory = false;
        for (const auto &arg : args) {
            if (arg == String16("--unreachable")) {
                unreachableMemory = true;
            }
        }

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