Improve memunreachable ABI before making it vendor_available
vendor_available: true means that some prebuilts will end up with references to classes defined in memunreachable.h. Add version numbers and reserved fields to the classes and default initialize everything to zero. Bug: 132302484 Test: memunreachable_unit_test Change-Id: Ic183fcc766acd2c4c7dc62efafcc2c75a636e407
This commit is contained in:
parent
6efb8e7754
commit
025ed8aacd
|
@ -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();
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -264,4 +264,12 @@ TEST_F(MemunreachableTest, leak_lots) {
|
|||
ASSERT_TRUE(LogUnreachableMemory(true, 100));
|
||||
}
|
||||
|
||||
TEST_F(MemunreachableTest, version) {
|
||||
UnreachableMemoryInfo info;
|
||||
info.version = 1;
|
||||
|
||||
ASSERT_FALSE(GetUnreachableMemory(info));
|
||||
ASSERT_EQ(0U, info.leaks.size());
|
||||
}
|
||||
|
||||
} // namespace android
|
||||
|
|
Loading…
Reference in New Issue