Lines Matching refs:broker

17 #include "src/compiler/js-heap-broker.h"
31 #define TRACE(broker, x) TRACE_BROKER(broker, x)
32 #define TRACE_MISSING(broker, x) TRACE_BROKER_MISSING(broker, x)
83 ObjectData(JSHeapBroker* broker, ObjectData** storage, Handle<Object> object,
89 broker_(broker)
96 TRACE(broker, "Creating data " << this << " for handle " << object.address()
106 Isolate* isolate = broker->isolate();
107 CHECK_IMPLIES(broker->mode() == JSHeapBroker::kDisabled ||
108 broker->mode() == JSHeapBroker::kSerializing,
110 CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized,
139 JSHeapBroker* broker() const { return broker_; }
152 HeapObjectData(JSHeapBroker* broker, ObjectData** storage,
155 base::Optional<bool> TryGetBooleanValue(JSHeapBroker* broker) const;
160 base::Optional<bool> TryGetBooleanValueImpl(JSHeapBroker* broker) const;
167 PropertyCellData(JSHeapBroker* broker, ObjectData** storage,
170 bool Cache(JSHeapBroker* broker);
217 PropertyCellData::PropertyCellData(JSHeapBroker* broker, ObjectData** storage,
220 : HeapObjectData(broker, storage, object, kind) {}
222 bool PropertyCellData::Cache(JSHeapBroker* broker) {
225 TraceScope tracer(broker, this, "PropertyCellData::Serialize");
240 broker->CanonicalPersistentHandle(cell->value(kAcquireLoad));
241 if (broker->ObjectMayBeUninitialized(value)) {
242 DCHECK(!broker->IsMainThread());
250 DCHECK(!broker->IsMainThread());
256 DCHECK(!broker->IsMainThread());
260 ObjectData* value_data = broker->TryGetOrCreateData(value);
262 DCHECK(!broker->IsMainThread());
277 JSReceiverData(JSHeapBroker* broker, ObjectData** storage,
279 : HeapObjectData(broker, storage, object, kind) {}
284 JSObjectData(JSHeapBroker* broker, ObjectData** storage,
286 : JSReceiverData(broker, storage, object, kind) {}
292 JSHeapBroker* broker, JSObjectRef holder, Representation representation,
297 PtrComprCageBase cage_base = broker->cage_base();
306 TRACE_BROKER_MISSING(broker, "Map changed for " << holder);
315 broker, "Constant field in " << holder << " is unsafe to read");
322 if (broker->ObjectMayBeUninitialized(raw_properties_or_hash)) {
327 broker,
337 broker, "Backing store for " << holder << " not long enough.");
343 if (broker->ObjectMayBeUninitialized(constant.value())) return {};
352 TRACE_BROKER_MISSING(broker, "Mismatched representation for "
361 Handle<Object> value = broker->CanonicalPersistentHandle(constant.value());
363 broker->local_isolate_or_isolate(), value, representation);
364 return TryMakeRef(broker, *possibly_wrapped);
370 JSHeapBroker* broker, Handle<JSObject> receiver, InternalIndex dict_index) {
377 receiver, dict_index, broker->isolate()->heap());
378 DCHECK_IMPLIES(broker->IsMainThread(), maybe_constant);
380 constant = broker->CanonicalPersistentHandle(maybe_constant.value());
382 return TryMakeRef(broker, constant);
389 JSTypedArrayData(JSHeapBroker* broker, ObjectData** storage,
391 : JSObjectData(broker, storage, object, kind) {}
396 JSDataViewData(JSHeapBroker* broker, ObjectData** storage,
398 : JSObjectData(broker, storage, object, kind) {}
403 JSBoundFunctionData(JSHeapBroker* broker, ObjectData** storage,
405 : JSObjectData(broker, storage, object, kind) {}
410 JSFunctionData(JSHeapBroker* broker, ObjectData** storage,
412 : JSObjectData(broker, storage, object, kind) {
413 Cache(broker);
416 bool IsConsistentWithHeapState(JSHeapBroker* broker) const;
478 void Cache(JSHeapBroker* broker);
504 BigIntData(JSHeapBroker* broker, ObjectData** storage, Handle<BigInt> object,
506 : HeapObjectData(broker, storage, object, kind),
522 MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object,
552 int InstanceSizeWithMinSlack(JSHeapBroker* broker, MapRef map) {
557 ZoneVector<Handle<Map>> maps(broker->zone());
564 DCHECK(map.object()->GetBackPointer().IsUndefined(broker->isolate()));
567 TransitionsAccessor(broker->isolate(), *map.object(), kConcurrentAccess)
569 maps.push_back(broker->CanonicalPersistentHandle(m));
574 JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope(broker);
587 void JSFunctionData::Cache(JSHeapBroker* broker) {
590 TraceScope tracer(broker, this, "JSFunctionData::Cache");
601 MakeRefAssumeMemoryFence(broker, function->context(kRelaxedLoad));
605 MakeRefAssumeMemoryFence(broker, function->shared(kRelaxedLoad));
609 prototype_or_initial_map_ = broker->GetOrCreateData(
616 MapRef initial_map_ref = TryMakeRef<Map>(broker, initial_map_).value();
619 InstanceSizeWithMinSlack(broker, initial_map_ref);
631 broker, Handle<Map>::cast(initial_map_->object())->prototype())
644 broker, function->raw_feedback_cell(kAcquireLoad));
653 bool JSFunctionData::IsConsistentWithHeapState(JSHeapBroker* broker) const {
665 TRACE_BROKER_MISSING(broker, "JSFunction::prototype_or_initial_map");
670 TRACE_BROKER_MISSING(broker, "JSFunction::has_initial_map");
675 TRACE_BROKER_MISSING(broker, "JSFunction::has_instance_prototype");
686 TRACE_BROKER_MISSING(broker, "JSFunction::initial_map");
692 TRACE_BROKER_MISSING(broker,
703 TRACE_BROKER_MISSING(broker, "JSFunction::instance_prototype");
712 TRACE_BROKER_MISSING(broker, "JSFunction::PrototypeRequiresRuntimeLookup");
718 TRACE_BROKER_MISSING(broker, "JSFunction::raw_feedback_cell");
726 DCHECK(broker()->IsMainThread());
727 return data()->AsJSFunction()->IsConsistentWithHeapState(broker());
730 HeapObjectData::HeapObjectData(JSHeapBroker* broker, ObjectData** storage,
732 : ObjectData(broker, storage, object, kind),
733 map_(broker->GetOrCreateData(
734 object->map(broker->cage_base(), kAcquireLoad), kAssumeMemoryFence)) {
735 CHECK_IMPLIES(broker->mode() == JSHeapBroker::kSerialized,
740 JSHeapBroker* broker) const {
742 auto result = TryGetBooleanValueImpl(broker);
743 DCHECK_IMPLIES(broker->IsMainThread() && result.has_value(),
744 result.value() == object()->BooleanValue(broker->isolate()));
749 JSHeapBroker* broker) const {
752 Isolate* isolate = broker->isolate();
760 } else if (MapRef{broker, map()}.is_undetectable()) {
798 bool SupportsFastArrayIteration(JSHeapBroker* broker, Handle<Map> map) {
802 broker->IsArrayOrObjectPrototype(broker->CanonicalPersistentHandle(
806 bool SupportsFastArrayResize(JSHeapBroker* broker, Handle<Map> map) {
807 return SupportsFastArrayIteration(broker, map) && map->is_extensible() &&
809 !IsReadOnlyLengthDescriptor(broker->isolate(), map);
814 MapData::MapData(JSHeapBroker* broker, ObjectData** storage, Handle<Map> object,
816 : HeapObjectData(broker, storage, object, kind) {
821 JSHeapBroker::MapUpdaterGuardIfNeeded mumd_scope(broker);
848 FixedArrayBaseData(JSHeapBroker* broker, ObjectData** storage,
850 : HeapObjectData(broker, storage, object, kind),
861 FixedArrayData(JSHeapBroker* broker, ObjectData** storage,
863 : FixedArrayBaseData(broker, storage, object, kind) {}
869 ScriptContextTableData(JSHeapBroker* broker, ObjectData** storage,
871 : FixedArrayData(broker, storage, object, kind) {}
876 JSArrayData(JSHeapBroker* broker, ObjectData** storage,
878 : JSObjectData(broker, storage, object, kind) {}
883 JSGlobalObjectData(JSHeapBroker* broker, ObjectData** storage,
885 : JSObjectData(broker, storage, object, kind) {}
890 JSGlobalProxyData(JSHeapBroker* broker, ObjectData** storage,
892 : JSObjectData(broker, storage, object, kind) {}
921 Isolate* ObjectRef::isolate() const { return broker()->isolate(); }
933 return MakeRefAssumeMemoryFence(broker(), current);
940 return TryMakeRef(broker(), object()->get(index));
1038 return Name##Ref(broker(), data()); \
1076 broker()->isolate(), object(), kind, ConcurrencyMode::kConcurrent);
1081 NativeContextRef native_context = broker()->target_native_context();
1083 CHECK_EQ(Map::TryAsElementsKind(broker()->isolate(), object(), kind,
1091 TRACE_BROKER_MISSING(broker(), "MapRef::AsElementsKind " << *this);
1094 return MakeRefAssumeMemoryFence(broker(), maybe_result.value());
1113 return SupportsFastArrayIteration(broker(), object());
1117 return SupportsFastArrayResize(broker(), object());
1123 const JSHeapBroker* broker, const JSFunctionRef& ref, JSFunctionData* data,
1127 broker->dependencies()->DependOnConsistentJSFunctionView(ref);
1142 return object()->ComputeInstanceSizeWithMinSlack(broker()->isolate());
1145 broker(), *this, data()->AsJSFunction(),
1154 Factory* f = broker()->isolate()->factory();
1155 if (equals(MakeRef(broker(), f->undefined_map()))) {
1158 if (equals(MakeRef(broker(), f->null_map()))) {
1161 if (equals(MakeRef(broker(), f->boolean_map()))) {
1164 if (equals(MakeRef(broker(), f->the_hole_map()))) {
1167 if (equals(MakeRef(broker(), f->uninitialized_map()))) {
1170 DCHECK(equals(MakeRef(broker(), f->termination_exception_map())) ||
1171 equals(MakeRef(broker(), f->arguments_marker_map())) ||
1172 equals(MakeRef(broker(), f->optimized_out_map())) ||
1173 equals(MakeRef(broker(), f->stale_register_map())));
1178 return MakeRefAssumeMemoryFence(broker(),
1183 return TryMakeRef(broker(), object()->raw_properties_or_hash());
1192 PtrComprCageBase cage_base = broker()->cage_base();
1198 TRACE_BROKER_MISSING(broker(), "Map change detected in " << *this);
1205 TRACE_BROKER_MISSING(broker(),
1209 value = broker()->CanonicalPersistentHandle(maybe_value.value());
1211 return TryMakeRef(broker(), value);
1242 ReadOnlyRoots(broker()->isolate()).fixed_cow_array_map_handle();
1243 return equals(MakeRef(broker(), fixed_cow_array_map));
1256 broker(),
1257 object()->FindFieldOwner(broker()->isolate(), descriptor_index));
1264 &maybe_char, broker()->isolate(), broker()->local_isolate(), *object(),
1268 TRACE_BROKER_MISSING(broker(), "StringRef::GetCharAsStringOrUndefined on "
1274 return TryMakeRef(broker(), maybe_char);
1284 broker(),
1295 broker(),
1308 broker(),
1313 if (!broker()->IsMainThread()) {
1314 return object()->Get(index, broker()->local_isolate());
1325 broker(),
1330 return TryStringToDouble(broker()->local_isolate(), object());
1342 value = broker()->CanonicalPersistentHandle(object()->get(i, kAcquireLoad));
1349 return TryMakeRef(broker(), value);
1360 return broker()->CanonicalPersistentHandle(object()->SourcePositionTable());
1379 return MakeRef(broker(), result::cast(object()->name())); \
1387 return result##Ref(broker(), ObjectRef::data()->As##holder()->name()); \
1413 return MakeRefAssumeMemoryFence(broker(), object()->nested_site());
1444 return MakeRefAssumeMemoryFence(broker(), object()->bound_target_function());
1449 return MakeRefAssumeMemoryFence(broker(), object()->bound_this());
1454 return MakeRefAssumeMemoryFence(broker(), object()->bound_arguments());
1490 return MakeRefAssumeMemoryFence(broker(), object()->data());
1495 return MakeRefAssumeMemoryFence(broker(), object()->source());
1503 return TryMakeRef(broker(), CallHandlerInfo::cast(call_code));
1507 return object()->signature().IsUndefined(broker()->isolate());
1527 expected_receiver_type = broker()->CanonicalPersistentHandle(
1545 return MakeRefAssumeMemoryFence(broker(), object()->data());
1553 return MakeRefAssumeMemoryFence(broker(), object()->OuterScopeInfo());
1561 if (!broker()->IsMainThread()) {
1562 bytecode_array = object()->GetBytecodeArray(broker()->local_isolate());
1564 bytecode_array = object()->GetBytecodeArray(broker()->isolate());
1566 return MakeRefAssumeMemoryFence(broker(), bytecode_array);
1576 return broker()->IsMainThread()
1577 ? object()->GetInlineability(broker()->isolate())
1578 : object()->GetInlineability(broker()->local_isolate());
1583 return MakeRefAssumeMemoryFence(broker(), object()->value(kAcquireLoad));
1594 broker(),
1595 object()->instance_descriptors(broker()->isolate(), kAcquireLoad));
1599 return MakeRefAssumeMemoryFence(broker(),
1605 return MakeRefAssumeMemoryFence(broker(),
1606 object()->FindRootMap(broker()->isolate()));
1611 return MakeRefAssumeMemoryFence(broker(), object()->GetConstructor());
1616 return MakeRefAssumeMemoryFence(broker(),
1634 return MakeRef<HeapObject>(broker(), object()->buffer());
1683 broker()->zone());
1688 broker()->zone());
1695 return MakeRefAssumeMemoryFence(broker(), object()->scope_info());
1703 broker(), Map::cast(object()->get(index, kAcquireLoad)));
1728 broker(), ResultType::cast(object()->Name(kAcquireLoad))); \
1769 return object()->BooleanValue(broker()->isolate());
1772 return data()->AsHeapObject()->TryGetBooleanValue(broker());
1781 broker(), broker()->isolate()->factory()->true_value());
1808 TryMakeRef(broker(), maybe_element.value());
1822 // this method may be called after the broker has retired.
1833 .length(broker()->isolate(), kRelaxedLoad)
1843 &maybe_element, broker()->isolate(), broker()->local_isolate(), *holder,
1847 TRACE_BROKER_MISSING(broker(), "JSObject::GetOwnConstantElement on "
1862 broker(), *this, field_representation, index);
1874 GetOwnDictionaryPropertyFromHeap(broker(), object(), index);
1890 return TryMakeRef(broker(),
1891 object()->length(broker()->isolate(), kRelaxedLoad));
1924 broker()->isolate(), *elements_ref.AsFixedArray().object(), elements_kind,
1928 return TryMakeRef(broker(), result.value());
1932 return TryMakeRef(broker(), object()->GetCell(cell_index));
1936 return TryMakeRef(broker(), object()->import_meta(kAcquireLoad));
1940 PtrComprCageBase cage_base = broker()->cage_base();
1941 return TryMakeRef(broker(), object()->map(cage_base, kAcquireLoad),
1977 Map map = Handle<HeapObject>::cast(object())->map(broker()->cage_base());
1982 GetOddballType(broker()->isolate(), map));
1993 return TryMakeRef(broker(), object()->boilerplate(kAcquireLoad));
1998 return TryMakeRef(broker(), object()->elements(tag));
2013 NameRef result = MakeRef(broker(), object()->GetKey(descriptor_index));
2029 return TryMakeRef(broker(), heap_object);
2047 return MakeRefAssumeMemoryFence(broker(), object()->shared_function_info());
2074 JSHeapBroker* ObjectRef::broker() const { return broker_; }
2077 switch (broker()->mode()) {
2091 typename TinyRef<T>::RefType TinyRef<T>::AsRef(JSHeapBroker* broker) const {
2093 broker->mode() != JSHeapBroker::kDisabled) {
2095 return MakeRefAssumeMemoryFence<T>(broker,
2098 return TryMakeRef<T>(broker, data_).value();
2118 broker(), *this, data()->AsJSFunction(), UsedField); \
2119 return Result##Ref(broker(), data()->AsJSFunction()->Name()); \
2126 broker(), *this, data()->AsJSFunction(), UsedField); \
2142 broker(), *this, data()->AsJSFunction(), UsedField); \
2173 return MakeRefAssumeMemoryFence(broker(), FromCodeT(code, kRelaxedLoad));
2177 return MakeRefAssumeMemoryFence(broker(),
2184 return TryMakeRef(broker(), FunctionTemplateInfo::cast(
2197 return MakeRefAssumeMemoryFence(broker(), object()->scope_info(kAcquireLoad));
2205 Handle<Object> maybe_proto_info = broker()->CanonicalPersistentHandle(
2214 return MapRef(broker(),
2215 broker()->GetOrCreateData(
2222 CHECK(broker()->mode() == JSHeapBroker::kSerializing ||
2223 broker()->mode() == JSHeapBroker::kSerialized);
2224 return data()->AsPropertyCell()->Cache(broker());
2236 broker()->isolate(), broker()->local_isolate_or_isolate(),
2237 broker()->target_native_context().global_object().object(),
2240 return TryMakeRef(broker(), *maybe_cell);