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

Commit 61589a43 authored by Andy Hung's avatar Andy Hung
Browse files

AudioFlinger: Add memory leak checking for HAL

$ adb shell setprop libc.debug.malloc.program android.hardware.audio.service
$ adb shell setprop libc.debug.malloc.options backtrace=8
$ adb shell setenforce 0
$ adb shell pkill audioserver
$ adb shell dumpsys media.audio_flinger

Test: Check the audio flinger dumpsys as above.
Bug: 186054996
Bug: 187462632
Change-Id: I610e4b72af9dc1704864adc148e6d6bd23319a8b
parent 7b6cfc70
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -104,6 +104,15 @@ ConversionHelperHidl::ConversionHelperHidl(const char* className)
        : mClassName(className) {
}

// static
void ConversionHelperHidl::argsFromHal(
        const Vector<String16>& args, hidl_vec<hidl_string> *hidlArgs) {
    hidlArgs->resize(args.size());
    for (size_t i = 0; i < args.size(); ++i) {
        (*hidlArgs)[i] = String8(args[i]).c_str();
    }
}

// static
status_t ConversionHelperHidl::analyzeResult(const Result& result) {
    switch (result) {
+3 −0
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@
#include <hidl/HidlSupport.h>
#include <system/audio.h>
#include <utils/String8.h>
#include <utils/String16.h>
#include <utils/Vector.h>

using ::android::hardware::audio::CPP_VERSION::ParameterValue;
using CoreResult = ::android::hardware::audio::CPP_VERSION::Result;
@@ -37,6 +39,7 @@ class ConversionHelperHidl {
    static status_t keysFromHal(const String8& keys, hidl_vec<hidl_string> *hidlKeys);
    static status_t parametersFromHal(const String8& kvPairs, hidl_vec<ParameterValue> *hidlParams);
    static void parametersToHal(const hidl_vec<ParameterValue>& parameters, String8 *values);
    static void argsFromHal(const Vector<String16>& args, hidl_vec<hidl_string> *hidlArgs);

    ConversionHelperHidl(const char* className);

+4 −2
Original line number Diff line number Diff line
@@ -457,11 +457,13 @@ status_t DeviceHalHidl::removeDeviceEffect(
}
#endif

status_t DeviceHalHidl::dump(int fd) {
status_t DeviceHalHidl::dump(int fd, const Vector<String16>& args) {
    if (mDevice == 0) return NO_INIT;
    native_handle_t* hidlHandle = native_handle_create(1, 0);
    hidlHandle->data[0] = fd;
    Return<void> ret = mDevice->debug(hidlHandle, {} /* options */);
    hidl_vec<hidl_string> hidlArgs;
    argsFromHal(args, &hidlArgs);
    Return<void> ret = mDevice->debug(hidlHandle, hidlArgs);
    native_handle_delete(hidlHandle);
    return processReturn("dump", ret);
}
+1 −1
Original line number Diff line number Diff line
@@ -119,7 +119,7 @@ class DeviceHalHidl : public DeviceHalInterface, public ConversionHelperHidl
    status_t addDeviceEffect(audio_port_handle_t device, sp<EffectHalInterface> effect) override;
    status_t removeDeviceEffect(audio_port_handle_t device, sp<EffectHalInterface> effect) override;

    virtual status_t dump(int fd);
    status_t dump(int fd, const Vector<String16>& args) override;

  private:
    friend class DevicesFactoryHalHidl;
+1 −1
Original line number Diff line number Diff line
@@ -233,7 +233,7 @@ status_t DeviceHalLocal::removeDeviceEffect(
    return INVALID_OPERATION;
}

status_t DeviceHalLocal::dump(int fd) {
status_t DeviceHalLocal::dump(int fd, const Vector<String16>& /* args */) {
    return mDev->dump(mDev, fd);
}

Loading