Skip to content

Commit

Permalink
getCachedWrapper always does HashMap lookup when the wrapper doesn't …
Browse files Browse the repository at this point in the history
…exist

https://bugs.webkit.org/show_bug.cgi?id=271505

Reviewed by Yusuke Suzuki.

This PR eliminates the hash map lookup for an object object which inherits from
ScriptWrappable when the wrapper doesn't exist for the main world.

* Source/WebCore/bindings/js/JSDOMWrapperCache.h:
(WebCore::getCachedWrapper):
(WebCore::getInlineCachedWrapper): Deleted.

Canonical link: https://commits.webkit.org/276583@main
  • Loading branch information
rniwa committed Mar 23, 2024
1 parent 6d24e0d commit de25b66
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions Source/WebCore/bindings/js/JSDOMWrapperCache.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ template<typename WrapperClass> JSC::JSObject* getDOMPrototype(JSC::VM&, JSC::JS
JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&, JSC::ArrayBuffer*);
void* wrapperKey(JSC::ArrayBuffer*);

JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld&, void*);
JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld&, ScriptWrappable*);
JSC::JSArrayBuffer* getInlineCachedWrapper(DOMWrapperWorld&, JSC::ArrayBuffer*);
std::optional<JSDOMObject*> getInlineCachedWrapper(DOMWrapperWorld&, void*);
std::optional<JSDOMObject*> getInlineCachedWrapper(DOMWrapperWorld&, ScriptWrappable*);
std::optional<JSC::JSArrayBuffer*> getInlineCachedWrapper(DOMWrapperWorld&, JSC::ArrayBuffer*);

bool setInlineCachedWrapper(DOMWrapperWorld&, void*, JSDOMObject*, JSC::WeakHandleOwner*);
bool setInlineCachedWrapper(DOMWrapperWorld&, ScriptWrappable*, JSDOMObject* wrapper, JSC::WeakHandleOwner* wrapperOwner);
Expand Down Expand Up @@ -107,21 +107,21 @@ inline void* wrapperKey(JSC::ArrayBuffer* domObject)
return domObject;
}

inline JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld&, void*) { return nullptr; }
inline std::optional<JSDOMObject*> getInlineCachedWrapper(DOMWrapperWorld&, void*) { return std::nullopt; }
inline bool setInlineCachedWrapper(DOMWrapperWorld&, void*, JSDOMObject*, JSC::WeakHandleOwner*) { return false; }
inline bool clearInlineCachedWrapper(DOMWrapperWorld&, void*, JSDOMObject*) { return false; }

inline JSDOMObject* getInlineCachedWrapper(DOMWrapperWorld& world, ScriptWrappable* domObject)
inline std::optional<JSDOMObject*> getInlineCachedWrapper(DOMWrapperWorld& world, ScriptWrappable* domObject)
{
if (!world.isNormal())
return nullptr;
return std::nullopt;
return domObject->wrapper();
}

inline JSC::JSArrayBuffer* getInlineCachedWrapper(DOMWrapperWorld& world, JSC::ArrayBuffer* buffer)
inline std::optional<JSC::JSArrayBuffer*> getInlineCachedWrapper(DOMWrapperWorld& world, JSC::ArrayBuffer* buffer)
{
if (!world.isNormal())
return nullptr;
return std::nullopt;
return buffer->m_wrapper.get();
}

Expand Down Expand Up @@ -159,8 +159,8 @@ inline bool clearInlineCachedWrapper(DOMWrapperWorld& world, JSC::ArrayBuffer* d

template<typename DOMClass> inline JSC::JSObject* getCachedWrapper(DOMWrapperWorld& world, DOMClass& domObject)
{
if (auto* wrapper = getInlineCachedWrapper(world, &domObject))
return wrapper;
if (auto wrapper = getInlineCachedWrapper(world, &domObject))
return *wrapper;
return world.wrappers().get(wrapperKey(&domObject));
}

Expand Down

0 comments on commit de25b66

Please sign in to comment.