uint32_t GetStackMapNativePcOffset(size_t i); void SetStackMapNativePcOffset(size_t i, uint32_t native_pc_offset);
// Encode all stack map data. // The returned vector is allocated using the allocator passed to the StackMapStream.
ScopedArenaVector<uint8_t> Encode();
private: static constexpr uint32_t kNoValue = -1;
void CreateDexRegisterMap();
// Invokes the callback with pointer of each BitTableBuilder field. template<typename Callback> void ForEachBitTable(Callback&& callback) {
size_t index = 0;
callback(index++, &stack_maps_);
callback(index++, ®ister_masks_);
callback(index++, &stack_masks_);
callback(index++, &inline_infos_);
callback(index++, &method_infos_);
callback(index++, &dex_register_masks_);
callback(index++, &dex_register_maps_);
callback(index++, &dex_register_catalog_);
CHECK_EQ(index, CodeInfo::kNumBitTables);
}
// Variables which track the current state between Begin/End calls; bool in_method_ = false; bool in_stack_map_ = false; bool in_inline_info_ = false;
BitTableBuilder<StackMap>::Entry current_stack_map_;
ScopedArenaVector<BitTableBuilder<InlineInfo>::Entry> current_inline_infos_;
ScopedArenaVector<DexRegisterLocation> current_dex_registers_;
ScopedArenaVector<DexRegisterLocation> previous_dex_registers_;
ScopedArenaVector<uint32_t> dex_register_timestamp_; // Stack map index of last change.
size_t expected_num_dex_registers_;
// Temporary variables used in CreateDexRegisterMap. // They are here so that we can reuse the reserved memory.
ArenaBitVector temp_dex_register_mask_;
ScopedArenaVector<BitTableBuilder<DexRegisterMapInfo>::Entry> temp_dex_register_map_;
// A set of lambda functions to be executed at the end to verify // the encoded data. It is generally only used in debug builds.
std::vector<std::function<void(CodeInfo&)>> dchecks_;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.