diff options
| author | James Dong <jdong@google.com> | 2011-03-14 17:01:38 -0700 | 
|---|---|---|
| committer | James Dong <jdong@google.com> | 2011-03-14 18:48:19 -0700 | 
| commit | 8635b7b095fbf7ffc63d3ce791891a9116ace1f6 (patch) | |
| tree | 6c9bbe1d0cec53f0c83099f1028302a178928cb9 /drm/drmserver | |
| parent | 1b99cc90afffbda6013ebbb45d64f17b1d90b9f5 (diff) | |
| download | frameworks_av-8635b7b095fbf7ffc63d3ce791891a9116ace1f6.zip frameworks_av-8635b7b095fbf7ffc63d3ce791891a9116ace1f6.tar.gz frameworks_av-8635b7b095fbf7ffc63d3ce791891a9116ace1f6.tar.bz2  | |
Add memory leak tracking/debugging code to drm server
bug - 4099038
Change-Id: I6c048eaf3d7f34bc144b8daaa5fdef1ed474af66
Diffstat (limited to 'drm/drmserver')
| -rw-r--r-- | drm/drmserver/Android.mk | 1 | ||||
| -rw-r--r-- | drm/drmserver/DrmManagerService.cpp | 29 | 
2 files changed, 30 insertions, 0 deletions
diff --git a/drm/drmserver/Android.mk b/drm/drmserver/Android.mk index 5df2ff8..b5ad147 100644 --- a/drm/drmserver/Android.mk +++ b/drm/drmserver/Android.mk @@ -23,6 +23,7 @@ LOCAL_SRC_FILES:= \      StringTokenizer.cpp  LOCAL_SHARED_LIBRARIES := \ +    libmedia \      libutils \      libbinder diff --git a/drm/drmserver/DrmManagerService.cpp b/drm/drmserver/DrmManagerService.cpp index 0901a44..583669e 100644 --- a/drm/drmserver/DrmManagerService.cpp +++ b/drm/drmserver/DrmManagerService.cpp @@ -19,6 +19,7 @@  #include <utils/Log.h>  #include <private/android_filesystem_config.h> +#include <media/MemoryLeakTrackUtil.h>  #include <errno.h>  #include <utils/threads.h> @@ -256,3 +257,31 @@ ssize_t DrmManagerService::pread(int uniqueId, DecryptHandle* decryptHandle,      return mDrmManager->pread(uniqueId, decryptHandle, buffer, numBytes, offset);  } +status_t DrmManagerService::dump(int fd, const Vector<String16>& args) +{ +    const size_t SIZE = 256; +    char buffer[SIZE]; +    String8 result; +    if (checkCallingPermission(String16("android.permission.DUMP")) == false) { +        snprintf(buffer, SIZE, "Permission Denial: " +                "can't dump DrmManagerService from pid=%d, uid=%d\n", +                IPCThreadState::self()->getCallingPid(), +                IPCThreadState::self()->getCallingUid()); +        result.append(buffer); +    } else { +#if DRM_MEMORY_LEAK_TRACK +        bool dumpMem = false; +        for (size_t i = 0; i < args.size(); i++) { +            if (args[i] == String16("-m")) { +                dumpMem = true; +            } +        } +        if (dumpMem) { +            dumpMemoryAddresses(fd); +        } +#endif +    } +    write(fd, result.string(), result.size()); +    return NO_ERROR; +} +  | 
