libprofile: Clear method bitmap padding bits.
Explicitly clear padding bits instead of zero-initializing
the entire buffer.
Test: atest com.android.cts.dexmetadata.InstallDexMetadataHostTest#testProfileSnapshotAfterInstall
Bug: 201627008
Change-Id: I31655e053f405a8d2903fb7b2e8e7176f5344226
diff --git a/libprofile/profile/profile_compilation_info.cc b/libprofile/profile/profile_compilation_info.cc
index 8fbd1d1..5607e35 100644
--- a/libprofile/profile/profile_compilation_info.cc
+++ b/libprofile/profile/profile_compilation_info.cc
@@ -414,7 +414,7 @@
ptr_end_(nullptr) {}
explicit SafeBuffer(size_t size)
- : storage_(new uint8_t[size]()),
+ : storage_(new uint8_t[size]),
ptr_current_(storage_.get()),
ptr_end_(ptr_current_ + size) {}
@@ -2601,6 +2601,10 @@
return true;
});
DCHECK_EQ(saved_bitmap_index * num_method_ids, saved_bitmap_bit_size);
+ // Clear the padding bits.
+ size_t padding_bit_size = saved_bitmap_byte_size * kBitsPerByte - saved_bitmap_bit_size;
+ BitMemoryRegion padding_region(buffer.GetCurrentPtr(), saved_bitmap_bit_size, padding_bit_size);
+ padding_region.StoreBits(/*bit_offset=*/ 0u, /*value=*/ 0u, /*bit_length=*/ padding_bit_size);
buffer.Advance(saved_bitmap_byte_size);
uint16_t last_method_index = 0;