RESOLVED FIXED 226000
AbstractSlotVisitor::containsOpaqueRoot() should only declare didFindOpaqueRoot if the root is actually found.
https://bugs.webkit.org/show_bug.cgi?id=226000
Summary AbstractSlotVisitor::containsOpaqueRoot() should only declare didFindOpaqueRo...
Mark Lam
Reported 2021-05-19 19:24:31 PDT
It was erroneously calling didFindOpaqueRoot() all the time even when the root is not found. rdar://78208014
Attachments
proposed patch. (1.64 KB, patch)
2021-05-19 19:29 PDT, Mark Lam
no flags
Mark Lam
Comment 1 2021-05-19 19:29:55 PDT
Created attachment 429126 [details] proposed patch.
Robin Morisset
Comment 2 2021-05-19 19:35:25 PDT
Comment on attachment 429126 [details] proposed patch. View in context: https://bugs.webkit.org/attachment.cgi?id=429126&action=review > Source/JavaScriptCore/heap/AbstractSlotVisitorInlines.h:136 > + if (UNLIKELY(found && m_needsExtraOpaqueRootHandling)) { Is there a reason to check found first and m_needsExtraOpaqueRootHandling second? If anything, I would expect the entire check of m_opaqueRoots.contains(ptr) to be only done after checking m_needsExtraOpaqueRootHandling, especially if it is UNLIKELY.
Mark Lam
Comment 3 2021-05-19 19:37:52 PDT
(In reply to Robin Morisset from comment #2) > Comment on attachment 429126 [details] > proposed patch. > > View in context: > https://bugs.webkit.org/attachment.cgi?id=429126&action=review > > > Source/JavaScriptCore/heap/AbstractSlotVisitorInlines.h:136 > > + if (UNLIKELY(found && m_needsExtraOpaqueRootHandling)) { > > Is there a reason to check found first and m_needsExtraOpaqueRootHandling > second? > > If anything, I would expect the entire check of m_opaqueRoots.contains(ptr) > to be only done after checking m_needsExtraOpaqueRootHandling, especially if > it is UNLIKELY. I check found first because found is already in memory. If not found, we save on triggering a load of m_needsExtraOpaqueRootHandling.
Robin Morisset
Comment 4 2021-05-19 19:43:14 PDT
Comment on attachment 429126 [details] proposed patch. View in context: https://bugs.webkit.org/attachment.cgi?id=429126&action=review r=me >>> Source/JavaScriptCore/heap/AbstractSlotVisitorInlines.h:136 >>> + if (UNLIKELY(found && m_needsExtraOpaqueRootHandling)) { >> >> Is there a reason to check found first and m_needsExtraOpaqueRootHandling second? >> >> If anything, I would expect the entire check of m_opaqueRoots.contains(ptr) to be only done after checking m_needsExtraOpaqueRootHandling, especially if it is UNLIKELY. > > I check found first because found is already in memory. If not found, we save on triggering a load of m_needsExtraOpaqueRootHandling. I had missed that we eventually return found and so we need to compute it even if !m_needsExtraOpaqueRootHandling.
Mark Lam
Comment 5 2021-05-19 19:45:22 PDT
Comment on attachment 429126 [details] proposed patch. Thanks for the review. Landing now.
EWS
Comment 6 2021-05-19 20:34:36 PDT
Committed r277773 (237934@main): <https://commits.webkit.org/237934@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 429126 [details].
Note You need to log in before you can comment on or make changes to this bug.