Loading TEST_MAPPING +7 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,13 @@ { "name": "memunreachable_test" }, { "name": "memunreachable_unit_test" }, { "name": "memunreachable_unit_test", "host": true }, { "name": "memunreachable_binder_test" }, Loading libmemunreachable/Android.bp +16 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ cc_defaults { cc_library { name: "libmemunreachable", vendor_available: true, defaults: ["libmemunreachable_defaults"], srcs: [ "Allocator.cpp", Loading @@ -48,11 +49,24 @@ cc_library { }, export_include_dirs: ["include"], local_include_dirs: ["include"], version_script: "libmemunreachable.map", } // Integration test that runs against the public API of libmemunreachable cc_test { name: "memunreachable_test", defaults: ["libmemunreachable_defaults"], srcs: [ "tests/MemUnreachable_test.cpp", ], shared_libs: ["libmemunreachable"], test_suites: ["device-tests"], } cc_test { name: "memunreachable_unit_test", defaults: ["libmemunreachable_defaults"], host_supported: true, srcs: [ "tests/Allocator_test.cpp", Loading @@ -67,8 +81,9 @@ cc_test { "tests/MemUnreachable_test.cpp", "tests/ThreadCapture_test.cpp", ], shared_libs: [ static_libs: [ "libmemunreachable", "libc_malloc_debug_backtrace", ], }, host: { Loading libmemunreachable/MemUnreachable.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,12 @@ static inline const char* plural(T val) { } bool GetUnreachableMemory(UnreachableMemoryInfo& info, size_t limit) { if (info.version > 0) { MEM_ALOGE("unsupported UnreachableMemoryInfo.version %zu in GetUnreachableMemory", info.version); return false; } int parent_pid = getpid(); int parent_tid = gettid(); Loading libmemunreachable/include/memunreachable/memunreachable.h +23 −16 Original line number Diff line number Diff line Loading @@ -28,38 +28,45 @@ namespace android { struct Leak { uintptr_t begin; size_t size; uintptr_t begin = 0; size_t size = 0; size_t referenced_count; size_t referenced_size; size_t referenced_count = 0; size_t referenced_size = 0; size_t similar_count; size_t similar_size; size_t similar_referenced_count; size_t similar_referenced_size; size_t similar_count = 0; size_t similar_size = 0; size_t similar_referenced_count = 0; size_t similar_referenced_size = 0; size_t total_size; size_t total_size = 0; static const size_t contents_length = 32; char contents[contents_length]; char contents[contents_length] = {}; struct Backtrace { size_t num_frames; size_t num_frames = 0; static const size_t max_frames = 16; uintptr_t frames[max_frames]; uintptr_t frames[max_frames] = {}; size_t reserved[8] = {}; } backtrace; size_t reserved[8] = {}; std::string ToString(bool log_contents) const; }; struct UnreachableMemoryInfo { std::vector<Leak> leaks; size_t num_leaks; size_t leak_bytes; size_t num_allocations; size_t allocation_bytes; size_t num_leaks = 0; size_t leak_bytes = 0; size_t num_allocations = 0; size_t allocation_bytes = 0; size_t version = 0; // Must be 0 size_t reserved[8] = {}; UnreachableMemoryInfo() {} ~UnreachableMemoryInfo(); Loading libmemunreachable/libmemunreachable.map 0 → 100644 +13 −0 Original line number Diff line number Diff line LIBMEMUNREACHABLE { global: LogUnreachableMemory; NoLeaks; extern "C++" { android::GetUnreachableMemory*; android::GetUnreachableMemoryString*; android::Leak::*; android::UnreachableMemoryInfo::*; }; local: *; }; Loading
TEST_MAPPING +7 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,13 @@ { "name": "memunreachable_test" }, { "name": "memunreachable_unit_test" }, { "name": "memunreachable_unit_test", "host": true }, { "name": "memunreachable_binder_test" }, Loading
libmemunreachable/Android.bp +16 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ cc_defaults { cc_library { name: "libmemunreachable", vendor_available: true, defaults: ["libmemunreachable_defaults"], srcs: [ "Allocator.cpp", Loading @@ -48,11 +49,24 @@ cc_library { }, export_include_dirs: ["include"], local_include_dirs: ["include"], version_script: "libmemunreachable.map", } // Integration test that runs against the public API of libmemunreachable cc_test { name: "memunreachable_test", defaults: ["libmemunreachable_defaults"], srcs: [ "tests/MemUnreachable_test.cpp", ], shared_libs: ["libmemunreachable"], test_suites: ["device-tests"], } cc_test { name: "memunreachable_unit_test", defaults: ["libmemunreachable_defaults"], host_supported: true, srcs: [ "tests/Allocator_test.cpp", Loading @@ -67,8 +81,9 @@ cc_test { "tests/MemUnreachable_test.cpp", "tests/ThreadCapture_test.cpp", ], shared_libs: [ static_libs: [ "libmemunreachable", "libc_malloc_debug_backtrace", ], }, host: { Loading
libmemunreachable/MemUnreachable.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,12 @@ static inline const char* plural(T val) { } bool GetUnreachableMemory(UnreachableMemoryInfo& info, size_t limit) { if (info.version > 0) { MEM_ALOGE("unsupported UnreachableMemoryInfo.version %zu in GetUnreachableMemory", info.version); return false; } int parent_pid = getpid(); int parent_tid = gettid(); Loading
libmemunreachable/include/memunreachable/memunreachable.h +23 −16 Original line number Diff line number Diff line Loading @@ -28,38 +28,45 @@ namespace android { struct Leak { uintptr_t begin; size_t size; uintptr_t begin = 0; size_t size = 0; size_t referenced_count; size_t referenced_size; size_t referenced_count = 0; size_t referenced_size = 0; size_t similar_count; size_t similar_size; size_t similar_referenced_count; size_t similar_referenced_size; size_t similar_count = 0; size_t similar_size = 0; size_t similar_referenced_count = 0; size_t similar_referenced_size = 0; size_t total_size; size_t total_size = 0; static const size_t contents_length = 32; char contents[contents_length]; char contents[contents_length] = {}; struct Backtrace { size_t num_frames; size_t num_frames = 0; static const size_t max_frames = 16; uintptr_t frames[max_frames]; uintptr_t frames[max_frames] = {}; size_t reserved[8] = {}; } backtrace; size_t reserved[8] = {}; std::string ToString(bool log_contents) const; }; struct UnreachableMemoryInfo { std::vector<Leak> leaks; size_t num_leaks; size_t leak_bytes; size_t num_allocations; size_t allocation_bytes; size_t num_leaks = 0; size_t leak_bytes = 0; size_t num_allocations = 0; size_t allocation_bytes = 0; size_t version = 0; // Must be 0 size_t reserved[8] = {}; UnreachableMemoryInfo() {} ~UnreachableMemoryInfo(); Loading
libmemunreachable/libmemunreachable.map 0 → 100644 +13 −0 Original line number Diff line number Diff line LIBMEMUNREACHABLE { global: LogUnreachableMemory; NoLeaks; extern "C++" { android::GetUnreachableMemory*; android::GetUnreachableMemoryString*; android::Leak::*; android::UnreachableMemoryInfo::*; }; local: *; };