Flutter Engine
The Flutter Engine
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
dart::MegamorphicCache Class Reference

#include <object.h>

Inheritance diagram for dart::MegamorphicCache:
dart::CallSiteData dart::Object

Public Types

enum  EntryType { kClassIdIndex , kTargetFunctionIndex , kEntryLength }
 
- Public Types inherited from dart::Object
enum  NameVisibility { kInternalName = 0 , kScrubbedName , kUserVisibleName }
 
enum class  NameDisambiguation { kYes , kNo }
 
using UntaggedObjectType = UntaggedObject
 
using ObjectPtrType = ObjectPtr
 

Public Member Functions

ArrayPtr buckets () const
 
void set_buckets (const Array &buckets) const
 
intptr_t mask () const
 
void set_mask (intptr_t mask) const
 
intptr_t filled_entry_count () const
 
void set_filled_entry_count (intptr_t num) const
 
void EnsureContains (const Smi &class_id, const Object &target) const
 
ObjectPtr Lookup (const Smi &class_id) const
 
- Public Member Functions inherited from dart::CallSiteData
StringPtr target_name () const
 
ArrayPtr arguments_descriptor () const
 
intptr_t TypeArgsLen () const
 
intptr_t CountWithTypeArgs () const
 
intptr_t CountWithoutTypeArgs () const
 
intptr_t SizeWithoutTypeArgs () const
 
intptr_t SizeWithTypeArgs () const
 
- Public Member Functions inherited from dart::Object
virtual ~Object ()
 
ObjectPtr ptr () const
 
void operator= (ObjectPtr value)
 
bool IsCanonical () const
 
void SetCanonical () const
 
void ClearCanonical () const
 
bool IsImmutable () const
 
void SetImmutable () const
 
void ClearImmutable () const
 
intptr_t GetClassId () const
 
ClassPtr clazz () const
 
 CLASS_LIST_FOR_HANDLES (DEFINE_CLASS_TESTER)
 
bool IsNull () const
 
virtual const char * ToCString () const
 
void PrintJSON (JSONStream *stream, bool ref=true) const
 
virtual void PrintJSONImpl (JSONStream *stream, bool ref) const
 
void PrintImplementationFields (JSONStream *stream) const
 
virtual void PrintImplementationFieldsImpl (const JSONArray &jsarr_fields) const
 
virtual const char * JSONType () const
 
virtual StringPtr DictionaryName () const
 
bool IsNew () const
 
bool IsOld () const
 
bool InVMIsolateHeap () const
 
void Print () const
 

Static Public Member Functions

static intptr_t buckets_offset ()
 
static intptr_t mask_offset ()
 
static intptr_t arguments_descriptor_offset ()
 
static MegamorphicCachePtr New (const String &target_name, const Array &arguments_descriptor)
 
static intptr_t InstanceSize ()
 
- Static Public Member Functions inherited from dart::CallSiteData
static intptr_t target_name_offset ()
 
static intptr_t arguments_descriptor_offset ()
 
- Static Public Member Functions inherited from dart::Object
static ObjectPtr RawCast (ObjectPtr obj)
 
static constexpr bool ContainsCompressedPointers ()
 
static intptr_t tags_offset ()
 
static ObjectHandle ()
 
static ObjectHandle (Zone *zone)
 
static ObjectHandle (ObjectPtr ptr)
 
static ObjectHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectZoneHandle ()
 
static ObjectZoneHandle (Zone *zone)
 
static ObjectZoneHandle (ObjectPtr ptr)
 
static ObjectZoneHandle (Zone *zone, ObjectPtr ptr)
 
static ObjectReadOnlyHandle ()
 
static ObjectPtr null ()
 
static void set_vm_isolate_snapshot_object_table (const Array &table)
 
static ClassPtr class_class ()
 
static ClassPtr dynamic_class ()
 
static ClassPtr void_class ()
 
static ClassPtr type_parameters_class ()
 
static ClassPtr type_arguments_class ()
 
static ClassPtr patch_class_class ()
 
static ClassPtr function_class ()
 
static ClassPtr closure_data_class ()
 
static ClassPtr ffi_trampoline_data_class ()
 
static ClassPtr field_class ()
 
static ClassPtr script_class ()
 
static ClassPtr library_class ()
 
static ClassPtr namespace_class ()
 
static ClassPtr kernel_program_info_class ()
 
static ClassPtr code_class ()
 
static ClassPtr instructions_class ()
 
static ClassPtr instructions_section_class ()
 
static ClassPtr instructions_table_class ()
 
static ClassPtr object_pool_class ()
 
static ClassPtr pc_descriptors_class ()
 
static ClassPtr code_source_map_class ()
 
static ClassPtr compressed_stackmaps_class ()
 
static ClassPtr var_descriptors_class ()
 
static ClassPtr exception_handlers_class ()
 
static ClassPtr context_class ()
 
static ClassPtr context_scope_class ()
 
static ClassPtr sentinel_class ()
 
static ClassPtr api_error_class ()
 
static ClassPtr language_error_class ()
 
static ClassPtr unhandled_exception_class ()
 
static ClassPtr unwind_error_class ()
 
static ClassPtr singletargetcache_class ()
 
static ClassPtr unlinkedcall_class ()
 
static ClassPtr monomorphicsmiablecall_class ()
 
static ClassPtr icdata_class ()
 
static ClassPtr megamorphic_cache_class ()
 
static ClassPtr subtypetestcache_class ()
 
static ClassPtr loadingunit_class ()
 
static ClassPtr weak_serialization_reference_class ()
 
static ClassPtr weak_array_class ()
 
static void InitNullAndBool (IsolateGroup *isolate_group)
 
static void Init (IsolateGroup *isolate_group)
 
static void InitVtables ()
 
static void FinishInit (IsolateGroup *isolate_group)
 
static void FinalizeVMIsolate (IsolateGroup *isolate_group)
 
static void FinalizeReadOnlyObject (ObjectPtr object)
 
static void Cleanup ()
 
static ErrorPtr Init (IsolateGroup *isolate_group, const uint8_t *kernel_buffer, intptr_t kernel_buffer_size)
 
static void MakeUnusedSpaceTraversable (const Object &obj, intptr_t original_size, intptr_t used_size)
 
static intptr_t InstanceSize ()
 
template<class FakeObject >
static void VerifyBuiltinVtable (intptr_t cid)
 
static void VerifyBuiltinVtables ()
 
static bool ShouldHaveImmutabilityBitSet (classid_t class_id)
 

Static Public Attributes

static constexpr intptr_t kInitialCapacity = 16
 
static constexpr intptr_t kSpreadFactor = 7
 
static constexpr double kLoadFactor = 0.50
 
- Static Public Attributes inherited from dart::Object
static constexpr intptr_t kHashBits = 30
 
static const ClassId kClassId = kObjectCid
 

Friends

class Class
 
class MegamorphicCacheTable
 
class ProgramVisitor
 

Additional Inherited Members

- Protected Member Functions inherited from dart::Object
 Object ()
 
uword raw_value () const
 
void setPtr (ObjectPtr value, intptr_t default_cid)
 
void CheckHandle () const
 
cpp_vtable vtable () const
 
void set_vtable (cpp_vtable value)
 
bool Contains (uword addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
type LoadPointer (type const *addr) const
 
template<typename type , std::memory_order order = std::memory_order_relaxed>
void StorePointer (type const *addr, type value) const
 
template<typename type , typename compressed_type , std::memory_order order = std::memory_order_relaxed>
void StoreCompressedPointer (compressed_type const *addr, type value) const
 
template<typename type >
void StorePointerUnaligned (type const *addr, type value, Thread *thread) const
 
void StoreSmi (SmiPtr const *addr, SmiPtr value) const
 
template<typename FieldType >
void StoreSimd128 (const FieldType *addr, simd128_value_t value) const
 
template<typename FieldType >
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , std::memory_order order>
FieldType LoadNonPointer (const FieldType *addr) const
 
template<typename FieldType , typename ValueType >
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType , typename ValueType , std::memory_order order>
void StoreNonPointer (const FieldType *addr, ValueType value) const
 
template<typename FieldType >
FieldType * UnsafeMutableNonPointer (const FieldType *addr) const
 
 CLASS_LIST (STORE_NON_POINTER_ILLEGAL_TYPE)
 
void UnimplementedMethod () const
 
void AddCommonObjectProperties (JSONObject *jsobj, const char *protocol_type, bool ref) const
 
- Static Protected Member Functions inherited from dart::Object
static DART_NOINLINE ObjectHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectZoneHandleImpl (Zone *zone, ObjectPtr ptr, intptr_t default_cid)
 
static DART_NOINLINE ObjectReadOnlyHandleImpl (intptr_t cid)
 
static ObjectPtr Allocate (intptr_t cls_id, intptr_t size, Heap::Space space, bool compressed, uword ptr_field_start_offset, uword ptr_field_end_offset)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType Allocate (Heap::Space space, intptr_t elements)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space)
 
template<typename T >
static DART_FORCE_INLINE T::ObjectPtrType AllocateVariant (intptr_t class_id, Heap::Space space, intptr_t elements)
 
static constexpr intptr_t RoundedAllocationSize (intptr_t size)
 
static ObjectPtr Clone (const Object &orig, Heap::Space space, bool load_with_relaxed_atomics=false)
 
template<typename T >
static DART_FORCE_INLINE uword from_offset ()
 
template<typename T >
static DART_FORCE_INLINE uword to_offset (intptr_t length=0)
 
- Protected Attributes inherited from dart::Object
ObjectPtr ptr_
 

Detailed Description

Definition at line 7597 of file object.h.

Member Enumeration Documentation

◆ EntryType

Enumerator
kClassIdIndex 
kTargetFunctionIndex 
kEntryLength 

Definition at line 7603 of file object.h.

Member Function Documentation

◆ arguments_descriptor_offset()

static intptr_t dart::MegamorphicCache::arguments_descriptor_offset ( )
inlinestatic

Definition at line 7624 of file object.h.

7624 {
7625 return OFFSET_OF(UntaggedMegamorphicCache, args_descriptor_);
7626 }
#define OFFSET_OF(type, field)
Definition: globals.h:138

◆ buckets()

ArrayPtr dart::MegamorphicCache::buckets ( ) const

Definition at line 18748 of file object.cc.

18748 {
18749 return untag()->buckets();
18750}
raw_obj untag() -> num_entries()) VARIABLE_COMPRESSED_VISITOR(Array, Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(TypedData, TypedData::ElementSizeInBytes(raw_obj->GetClassId()) *Smi::Value(raw_obj->untag() ->length())) VARIABLE_COMPRESSED_VISITOR(Record, RecordShape(raw_obj->untag() ->shape()).num_fields()) VARIABLE_NULL_VISITOR(CompressedStackMaps, CompressedStackMaps::PayloadSizeOf(raw_obj)) VARIABLE_NULL_VISITOR(OneByteString, Smi::Value(raw_obj->untag() ->length())) VARIABLE_NULL_VISITOR(TwoByteString, Smi::Value(raw_obj->untag() ->length())) intptr_t UntaggedField::VisitFieldPointers(FieldPtr raw_obj, ObjectPointerVisitor *visitor)
Definition: raw_object.cc:558

◆ buckets_offset()

static intptr_t dart::MegamorphicCache::buckets_offset ( )
inlinestatic

Definition at line 7618 of file object.h.

7618 {
7619 return OFFSET_OF(UntaggedMegamorphicCache, buckets_);
7620 }

◆ EnsureContains()

void dart::MegamorphicCache::EnsureContains ( const Smi class_id,
const Object target 
) const

Definition at line 18799 of file object.cc.

18800 {
18801 SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
18802
18803 if (LookupLocked(class_id) == Object::null()) {
18804 InsertLocked(class_id, target);
18805 }
18806
18807#if defined(DEBUG)
18808 ASSERT(LookupLocked(class_id) == target.ptr());
18809#endif // define(DEBUG)
18810}
static IsolateGroup * Current()
Definition: isolate.h:539
static ObjectPtr null()
Definition: object.h:433
#define ASSERT(E)
uint32_t * target

◆ filled_entry_count()

intptr_t dart::MegamorphicCache::filled_entry_count ( ) const

Definition at line 18767 of file object.cc.

18767 {
18768 return untag()->filled_entry_count_;
18769}

◆ InstanceSize()

static intptr_t dart::MegamorphicCache::InstanceSize ( )
inlinestatic

Definition at line 7634 of file object.h.

7634 {
7635 return RoundedAllocationSize(sizeof(UntaggedMegamorphicCache));
7636 }
static constexpr intptr_t RoundedAllocationSize(intptr_t size)
Definition: object.h:758

◆ Lookup()

ObjectPtr dart::MegamorphicCache::Lookup ( const Smi class_id) const

Definition at line 18812 of file object.cc.

18812 {
18813 SafepointMutexLocker ml(IsolateGroup::Current()->type_feedback_mutex());
18814 return LookupLocked(class_id);
18815}

◆ mask()

intptr_t dart::MegamorphicCache::mask ( ) const

Definition at line 18759 of file object.cc.

18759 {
18760 return Smi::Value(untag()->mask());
18761}
intptr_t mask() const
Definition: object.cc:18759
intptr_t Value() const
Definition: object.h:9990

◆ mask_offset()

static intptr_t dart::MegamorphicCache::mask_offset ( )
inlinestatic

Definition at line 7621 of file object.h.

7621 {
7622 return OFFSET_OF(UntaggedMegamorphicCache, mask_);
7623 }

◆ New()

MegamorphicCachePtr dart::MegamorphicCache::New ( const String target_name,
const Array arguments_descriptor 
)
static

Definition at line 18779 of file object.cc.

18780 {
18781 auto* const zone = Thread::Current()->zone();
18782 const auto& result = MegamorphicCache::Handle(
18783 zone, Object::Allocate<MegamorphicCache>(Heap::kOld));
18784 const intptr_t capacity = kInitialCapacity;
18785 const Array& buckets =
18786 Array::Handle(zone, Array::New(kEntryLength * capacity, Heap::kOld));
18787 const Object& handler = Object::Handle(zone);
18788 for (intptr_t i = 0; i < capacity; ++i) {
18789 SetEntry(buckets, i, smi_illegal_cid(), handler);
18790 }
18791 result.set_buckets(buckets);
18792 result.set_mask(capacity - 1);
18793 result.set_target_name(target_name);
18794 result.set_arguments_descriptor(arguments_descriptor);
18795 result.set_filled_entry_count(0);
18796 return result.ptr();
18797}
static ArrayPtr New(intptr_t len, Heap::Space space=Heap::kNew)
Definition: object.h:10959
StringPtr target_name() const
Definition: object.h:2372
ArrayPtr arguments_descriptor() const
Definition: object.h:2373
@ kOld
Definition: heap.h:39
ArrayPtr buckets() const
Definition: object.cc:18748
static constexpr intptr_t kInitialCapacity
Definition: object.h:7599
static Object & Handle()
Definition: object.h:407
Zone * zone() const
Definition: thread_state.h:37
static Thread * Current()
Definition: thread.h:362
GAsyncResult * result

◆ set_buckets()

void dart::MegamorphicCache::set_buckets ( const Array buckets) const

Definition at line 18752 of file object.cc.

18752 {
18753 untag()->set_buckets(buckets.ptr());
18754}

◆ set_filled_entry_count()

void dart::MegamorphicCache::set_filled_entry_count ( intptr_t  num) const

Definition at line 18771 of file object.cc.

18771 {
18772 StoreNonPointer(&untag()->filled_entry_count_, count);
18773}
int count
Definition: FontMgrTest.cpp:50
void StoreNonPointer(const FieldType *addr, ValueType value) const
Definition: object.h:819

◆ set_mask()

void dart::MegamorphicCache::set_mask ( intptr_t  mask) const

Definition at line 18763 of file object.cc.

18763 {
18764 untag()->set_mask(Smi::New(mask));
18765}
static SmiPtr New(intptr_t value)
Definition: object.h:10006

Friends And Related Function Documentation

◆ Class

friend class Class
friend

Definition at line 7639 of file object.h.

◆ MegamorphicCacheTable

friend class MegamorphicCacheTable
friend

Definition at line 7640 of file object.h.

◆ ProgramVisitor

friend class ProgramVisitor
friend

Definition at line 7641 of file object.h.

Member Data Documentation

◆ kInitialCapacity

constexpr intptr_t dart::MegamorphicCache::kInitialCapacity = 16
staticconstexpr

Definition at line 7599 of file object.h.

◆ kLoadFactor

constexpr double dart::MegamorphicCache::kLoadFactor = 0.50
staticconstexpr

Definition at line 7601 of file object.h.

◆ kSpreadFactor

constexpr intptr_t dart::MegamorphicCache::kSpreadFactor = 7
staticconstexpr

Definition at line 7600 of file object.h.


The documentation for this class was generated from the following files: