Encode frame info using varints.
This saves 0.3% of oat file size.
Test: test-art-host-gtest-stack_map_test
Change-Id: I85003946a9579f03cb1ed2b5e9b2c62b3efe6734
diff --git a/runtime/stack_map.h b/runtime/stack_map.h
index 8bfae7c..0b1c4f9 100644
--- a/runtime/stack_map.h
+++ b/runtime/stack_map.h
@@ -416,10 +416,11 @@
void AddSizeStats(/*out*/ Stats* parent) const;
ALWAYS_INLINE static QuickMethodFrameInfo DecodeFrameInfo(const uint8_t* data) {
+ BitMemoryReader reader(data);
return QuickMethodFrameInfo(
- DecodeUnsignedLeb128(&data),
- DecodeUnsignedLeb128(&data),
- DecodeUnsignedLeb128(&data));
+ DecodeVarintBits(reader) * kStackAlignment, // Decode packed_frame_size_ and unpack.
+ DecodeVarintBits(reader), // core_spill_mask_.
+ DecodeVarintBits(reader)); // fp_spill_mask_.
}
typedef std::map<BitMemoryRegion, uint32_t, BitMemoryRegion::Less> DedupeMap;
@@ -444,7 +445,7 @@
void Decode(const uint8_t* data, DecodeFlags flags);
- uint32_t frame_size_in_bytes_;
+ uint32_t packed_frame_size_; // Frame size in kStackAlignment units.
uint32_t core_spill_mask_;
uint32_t fp_spill_mask_;
uint32_t number_of_dex_registers_;