Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion bridge/bindings/qjs/script_wrappable.cc
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ ScriptWrappable::~ScriptWrappable() {

bool ScriptWrappable::IsPrototypeProperty(const webf::AtomicString& key) const {
JSValue proto = JS_GetPrototype(ctx_, jsObject_);
JSAtom key_atom = context_->stringCache()->GetJSAtomFromString(ctx_, key.Impl());
JSAtom key_atom = context_->dartIsolateContext()->ensureStringCache(ctx_)->GetJSAtomFromString(ctx_, key.Impl());
bool is_proto_property = JS_HasProperty(ctx_, proto, key_atom);
JS_FreeValue(ctx_, proto);
return is_proto_property;
Expand Down
9 changes: 9 additions & 0 deletions bridge/core/dart_isolate_context.cc
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,15 @@ JSRuntime* DartIsolateContext::runtime() {

DartIsolateContext::~DartIsolateContext() {}

StringCache* DartIsolateContext::ensureStringCache(JSContext* ctx) const {
if (string_cache_ == nullptr) {
JSRuntime* runtime = ctx != nullptr ? JS_GetRuntime(ctx) : runtime_;
DCHECK(runtime != nullptr);
string_cache_ = std::make_unique<StringCache>(runtime);
}
return string_cache_.get();
}

void DartIsolateContext::InitializeGlobalsPerThread() {
DCHECK(runtime_ != nullptr);
if (string_cache_ == nullptr) {
Expand Down
1 change: 1 addition & 0 deletions bridge/core/dart_isolate_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class DartIsolateContext {
dispatcher_ = std::move(dispatcher);
}
FORCE_INLINE StringCache* stringCache() const { return string_cache_.get(); }
StringCache* ensureStringCache(JSContext* ctx) const;
FORCE_INLINE MetricsRegistry* metrics() { return &metrics_; }
FORCE_INLINE const MetricsRegistry* metrics() const { return &metrics_; }

Expand Down
12 changes: 6 additions & 6 deletions bridge/core/dom/events/event.cc
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ void Event::NamedPropertyEnumerator(std::vector<AtomicString>& names, webf::Exce
#endif
for (int i = 0; i < raw_event_->props_len; i++) {
std::shared_ptr<StringImpl> string =
GetExecutingContext()->dartIsolateContext()->stringCache()->GetStringFromJSAtom(ctx(),
GetExecutingContext()->dartIsolateContext()->ensureStringCache(ctx())->GetStringFromJSAtom(ctx(),
raw_event_props[i].key_atom);
AtomicString key = AtomicString(string);
names.emplace_back(key);
Expand All @@ -135,7 +135,7 @@ bool Event::NamedPropertyQuery(const AtomicString& key, ExceptionState& exceptio
auto* raw_event_props = raw_event_->props;
#endif
for (int i = 0; i < raw_event_->props_len; i++) {
JSAtom atom = GetExecutingContext()->dartIsolateContext()->stringCache()->GetJSAtomFromString(ctx(), key.Impl());
JSAtom atom = GetExecutingContext()->dartIsolateContext()->ensureStringCache(ctx())->GetJSAtomFromString(ctx(), key.Impl());
if (atom == raw_event_props[i].key_atom) {
return true;
}
Expand All @@ -155,7 +155,7 @@ ScriptValue Event::item(const AtomicString& key, ExceptionState& exception_state

if (raw_event_props != nullptr) {
for (int i = 0; i < raw_event_->props_len; i++) {
JSAtom atom = GetExecutingContext()->dartIsolateContext()->stringCache()->GetJSAtomFromString(ctx(), key.Impl());
JSAtom atom = GetExecutingContext()->dartIsolateContext()->ensureStringCache(ctx())->GetJSAtomFromString(ctx(), key.Impl());
if (atom == raw_event_props[i].key_atom) {
return ScriptValue(ctx(), raw_event_props[i].value, true);
}
Expand All @@ -173,7 +173,7 @@ void set_event_prop(JSContext* ctx,
ExceptionState& exception_state) {
event->customized_event_props_.emplace_back(value);
prop->key_atom =
ExecutingContext::From(ctx)->dartIsolateContext()->stringCache()->GetJSAtomFromString(ctx, key.Impl());
ExecutingContext::From(ctx)->dartIsolateContext()->ensureStringCache(ctx)->GetJSAtomFromString(ctx, key.Impl());
;
prop->value = value.ToNative(ctx, exception_state, true);
}
Expand Down Expand Up @@ -202,7 +202,7 @@ bool Event::SetItem(const AtomicString& key, const ScriptValue& value, webf::Exc
#else
auto* raw_event_props = raw_event_->props;
#endif
StringCache* string_cache = GetExecutingContext()->dartIsolateContext()->stringCache();
StringCache* string_cache = GetExecutingContext()->dartIsolateContext()->ensureStringCache(ctx());
for (int i = 0; i < raw_event_->props_len; i++) {
if (string_cache->GetStringFromJSAtom(ctx(), raw_event_props[i].key_atom) == key.Impl()) {
prop_index = i;
Expand Down Expand Up @@ -239,7 +239,7 @@ bool Event::DeleteItem(const webf::AtomicString& key, webf::ExceptionState& exce
#else
auto* raw_event_props = raw_event_->props;
#endif
StringCache* string_cache = GetExecutingContext()->dartIsolateContext()->stringCache();
StringCache* string_cache = GetExecutingContext()->dartIsolateContext()->ensureStringCache(ctx());
for (int i = 0; i < raw_event_->props_len; i++) {
if (string_cache->GetStringFromJSAtom(ctx(), raw_event_props[i].key_atom) == key.Impl()) {
for (int j = i + 1; j < raw_event_->props_len; j++) {
Expand Down
6 changes: 4 additions & 2 deletions bridge/foundation/string/atomic_string.cc
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ AtomicString::AtomicString(JSContext* ctx, JSValue qjs_value) {
auto* context = ExecutingContext::From(ctx);
if (context != nullptr) {
JSAtom atom = JS_ValueToAtom(ctx, qjs_value);
string_ = context->dartIsolateContext()->stringCache()->GetStringFromJSAtom(ctx, atom);
auto* string_cache = context->dartIsolateContext()->ensureStringCache(ctx);
string_ = string_cache->GetStringFromJSAtom(ctx, atom);
JS_FreeAtom(ctx, atom);
} else {
size_t len;
Expand All @@ -140,7 +141,8 @@ AtomicString::AtomicString(JSContext* ctx, JSValue qjs_value) {

AtomicString::AtomicString(JSContext* ctx, JSAtom qjs_atom) {
auto* context = ExecutingContext::From(ctx);
string_ = context->dartIsolateContext()->stringCache()->GetStringFromJSAtom(ctx, qjs_atom);
auto* string_cache = context->dartIsolateContext()->ensureStringCache(ctx);
string_ = string_cache->GetStringFromJSAtom(ctx, qjs_atom);
}

AtomicString::AtomicString(const std::unique_ptr<AutoFreeNativeString>& native_string) {
Expand Down
3 changes: 3 additions & 0 deletions debug-symbols/0.24.21/android-debug-symbols.7z
Git LFS file not shown
3 changes: 3 additions & 0 deletions debug-symbols/0.24.21/ios-debug-symbols.7z
Git LFS file not shown
3 changes: 3 additions & 0 deletions debug-symbols/0.24.21/linux-debug-symbols.7z
Git LFS file not shown
3 changes: 3 additions & 0 deletions debug-symbols/0.24.21/macos-debug-symbols.7z
Git LFS file not shown
3 changes: 3 additions & 0 deletions debug-symbols/0.24.21/windows-debug-symbols.7z
Git LFS file not shown
Loading
Loading