diff options
author | 2019-01-28 18:59:23 +0000 | |
---|---|---|
committer | 2019-02-11 13:23:53 +0000 | |
commit | 68efa7b1128486e08ae60cd27181645b27bbd2e4 (patch) | |
tree | bb3f56ecefe08b66f7a330a02caef0b089a0c2af /runtime/stack_map.h | |
parent | 794350fd0e21aa9e259b6c45394494871e7fdb13 (diff) |
Add code size to CodeInfo
This temporarily adds 0.25% to oat file size.
The space will be reclaimed back in follow-up CL.
Bug: 123510633
Test: DCHECK compare the two stored code sizes.
Change-Id: I15340824ca637fd075a4cef87771b06cb96bb9f4
Diffstat (limited to 'runtime/stack_map.h')
-rw-r--r-- | runtime/stack_map.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/runtime/stack_map.h b/runtime/stack_map.h index 87133cf59c..59da923661 100644 --- a/runtime/stack_map.h +++ b/runtime/stack_map.h @@ -438,8 +438,15 @@ class CodeInfo { // Accumulate code info size statistics into the given Stats tree. static void CollectSizeStats(const uint8_t* code_info, /*out*/ Stats* parent); + ALWAYS_INLINE static size_t DecodeCodeSize(const uint8_t* data, + InstructionSet isa = kRuntimeISA) { + uint32_t packed_code_size = BitMemoryReader(data).ReadVarint(); + return StackMap::UnpackNativePc(packed_code_size, isa); + } + ALWAYS_INLINE static QuickMethodFrameInfo DecodeFrameInfo(const uint8_t* data) { BitMemoryReader reader(data); + reader.ReadVarint(); // Skip code size. return QuickMethodFrameInfo( reader.ReadVarint() * kStackAlignment, // Decode packed_frame_size_ and unpack. reader.ReadVarint(), // core_spill_mask_. @@ -461,6 +468,7 @@ class CodeInfo { // Invokes the callback with member pointer of each header field. template<typename Callback> ALWAYS_INLINE static void ForEachHeaderField(Callback callback) { + callback(&CodeInfo::packed_code_size_); callback(&CodeInfo::packed_frame_size_); callback(&CodeInfo::core_spill_mask_); callback(&CodeInfo::fp_spill_mask_); @@ -486,6 +494,7 @@ class CodeInfo { callback(&CodeInfo::dex_register_catalog_); } + uint32_t packed_code_size_ = 0; // The size of native PC range. uint32_t packed_frame_size_ = 0; // Frame size in kStackAlignment units. uint32_t core_spill_mask_ = 0; uint32_t fp_spill_mask_ = 0; |