Title: [274522] trunk/Source/_javascript_Core
Revision
274522
Author
[email protected]
Date
2021-03-16 14:58:54 -0700 (Tue, 16 Mar 2021)

Log Message

Add a RootMarkReason printer and also add a few additional reasons.
https://bugs.webkit.org/show_bug.cgi?id=223263

Reviewed by Michael Saboff.

* _javascript_Core.xcodeproj/project.pbxproj:
* Sources.txt:
* heap/Heap.cpp:
(JSC::Heap::addCoreConstraints):
* heap/HeapSnapshotBuilder.cpp:
(JSC::HeapSnapshotBuilder::json):
(JSC::rootTypeToString): Deleted.
* heap/RootMarkReason.cpp: Added.
(JSC::rootMarkReasonDescription):
(WTF::printInternal):
* heap/RootMarkReason.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (274521 => 274522)


--- trunk/Source/_javascript_Core/ChangeLog	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-03-16 21:58:54 UTC (rev 274522)
@@ -1,3 +1,22 @@
+2021-03-16  Mark Lam  <[email protected]>
+
+        Add a RootMarkReason printer and also add a few additional reasons.
+        https://bugs.webkit.org/show_bug.cgi?id=223263
+
+        Reviewed by Michael Saboff.
+
+        * _javascript_Core.xcodeproj/project.pbxproj:
+        * Sources.txt:
+        * heap/Heap.cpp:
+        (JSC::Heap::addCoreConstraints):
+        * heap/HeapSnapshotBuilder.cpp:
+        (JSC::HeapSnapshotBuilder::json):
+        (JSC::rootTypeToString): Deleted.
+        * heap/RootMarkReason.cpp: Added.
+        (JSC::rootMarkReasonDescription):
+        (WTF::printInternal):
+        * heap/RootMarkReason.h:
+
 2021-03-16  Khem Raj  <[email protected]>
 
         [CMake] Build fails on RISC-V with GCC 11

Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (274521 => 274522)


--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj	2021-03-16 21:58:54 UTC (rev 274522)
@@ -5350,6 +5350,7 @@
 		FE90BB3A1B7CF64E006B3F03 /* VMInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VMInlines.h; sourceTree = "<group>"; };
 		FE912B4E2531193300FABDDF /* AbstractSlotVisitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractSlotVisitor.h; sourceTree = "<group>"; };
 		FE912B5025311AD100FABDDF /* AbstractSlotVisitorInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AbstractSlotVisitorInlines.h; sourceTree = "<group>"; };
+		FE92E1DD25FC031D0018FCF0 /* RootMarkReason.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RootMarkReason.cpp; sourceTree = "<group>"; };
 		FE98B5B61BB9AE110073E7A6 /* JITSubGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITSubGenerator.h; sourceTree = "<group>"; };
 		FE99B2471C24B6D300C82159 /* JITNegGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITNegGenerator.cpp; sourceTree = "<group>"; };
 		FE99B2481C24B6D300C82159 /* JITNegGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITNegGenerator.h; sourceTree = "<group>"; };
@@ -6450,6 +6451,7 @@
 				0FBB73B61DEF3AAC002C009E /* PreventCollectionScope.h */,
 				0FD0E5EF1E46BF230006AB08 /* RegisterState.h */,
 				0F7CF94E1DBEEE860098CC12 /* ReleaseHeapAccessScope.h */,
+				FE92E1DD25FC031D0018FCF0 /* RootMarkReason.cpp */,
 				FE3B642E25D6FB4C001ADDB4 /* RootMarkReason.h */,
 				0F2C63A91E4FA42C00C13839 /* RunningScope.h */,
 				0F4D8C761FCA3CF2001D32AC /* SimpleMarkingConstraint.cpp */,

Modified: trunk/Source/_javascript_Core/Sources.txt (274521 => 274522)


--- trunk/Source/_javascript_Core/Sources.txt	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/Sources.txt	2021-03-16 21:58:54 UTC (rev 274522)
@@ -555,6 +555,7 @@
 heap/MarkingConstraintSolver.cpp
 heap/MutatorScheduler.cpp
 heap/MutatorState.cpp
+heap/RootMarkReason.cpp
 heap/SimpleMarkingConstraint.cpp
 heap/SlotVisitor.cpp
 heap/SpaceTimeMutatorScheduler.cpp

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (274521 => 274522)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2021-03-16 21:58:54 UTC (rev 274522)
@@ -2783,8 +2783,10 @@
     m_constraintSet->add(
         "Msr", "Misc Small Roots",
         MAKE_MARKING_CONSTRAINT_EXECUTOR_PAIR(([this] (auto& visitor) {
-            if constexpr (objcAPIEnabled)
+            if constexpr (objcAPIEnabled) {
+                SetRootMarkReasonScope rootScope(visitor, RootMarkReason::ExternalRememberedSet);
                 scanExternalRememberedSet(m_vm, visitor);
+            }
 
             if (m_vm.smallStrings.needsToBeVisited(*m_collectionScope)) {
                 SetRootMarkReasonScope rootScope(visitor, RootMarkReason::StrongReferences);
@@ -2802,9 +2804,12 @@
                 MarkedArgumentBuffer::markLists(visitor, *m_markListSet);
             }
 
-            m_markedJSValueRefArrays.forEach([&] (MarkedJSValueRefArray* array) {
-                array->visitAggregate(visitor);
-            });
+            {
+                SetRootMarkReasonScope rootScope(visitor, RootMarkReason::MarkedJSValueRefArray);
+                m_markedJSValueRefArrays.forEach([&] (MarkedJSValueRefArray* array) {
+                    array->visitAggregate(visitor);
+                });
+            }
 
             {
                 SetRootMarkReasonScope rootScope(visitor, RootMarkReason::VMExceptions);
@@ -2866,10 +2871,15 @@
                 RefPtr<SharedTask<void(Visitor&)>> task = set.template forEachMarkedCellInParallel<Visitor>(callOutputConstraint);
                 visitor.addParallelConstraintTask(task);
             };
-            
-            add(vm.executableToCodeBlockEdgesWithConstraints);
-            if (vm.m_weakMapSpace)
+
+            {
+                SetRootMarkReasonScope rootScope(visitor, RootMarkReason::ExecutableToCodeBlockEdges);
+                add(vm.executableToCodeBlockEdgesWithConstraints);
+            }
+            if (vm.m_weakMapSpace) {
+                SetRootMarkReasonScope rootScope(visitor, RootMarkReason::WeakMapSpace);
                 add(*vm.m_weakMapSpace);
+            }
         })),
         ConstraintVolatility::GreyedByMarking,
         ConstraintParallelism::Parallel);

Modified: trunk/Source/_javascript_Core/heap/HeapSnapshotBuilder.cpp (274521 => 274522)


--- trunk/Source/_javascript_Core/heap/HeapSnapshotBuilder.cpp	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/heap/HeapSnapshotBuilder.cpp	2021-03-16 21:58:54 UTC (rev 274522)
@@ -39,8 +39,6 @@
 
 namespace JSC {
 
-static const char* rootTypeToString(RootMarkReason);
-
 NodeIdentifier HeapSnapshotBuilder::nextAvailableObjectIdentifier = 1;
 NodeIdentifier HeapSnapshotBuilder::getNextObjectIdentifier() { return nextAvailableObjectIdentifier++; }
 void HeapSnapshotBuilder::resetNextAvailableObjectIdentifier() { HeapSnapshotBuilder::nextAvailableObjectIdentifier = 1; }
@@ -305,42 +303,6 @@
     return "Inspector";
 }
 
-static const char* rootTypeToString(RootMarkReason type)
-{
-    switch (type) {
-    case RootMarkReason::None:
-        return "None";
-    case RootMarkReason::ConservativeScan:
-        return "Conservative scan";
-    case RootMarkReason::StrongReferences:
-        return "Strong references";
-    case RootMarkReason::ProtectedValues:
-        return "Protected values";
-    case RootMarkReason::MarkListSet:
-        return "Mark list set";
-    case RootMarkReason::VMExceptions:
-        return "VM exceptions";
-    case RootMarkReason::StrongHandles:
-        return "Strong handles";
-    case RootMarkReason::Debugger:
-        return "Debugger";
-    case RootMarkReason::JITStubRoutines:
-        return "JIT stub routines";
-    case RootMarkReason::WeakSets:
-        return "Weak sets";
-    case RootMarkReason::Output:
-        return "Output";
-    case RootMarkReason::DFGWorkLists:
-        return "DFG work lists";
-    case RootMarkReason::CodeBlocks:
-        return "Code blocks";
-    case RootMarkReason::DOMGCOutput:
-        return "DOM GC output";
-    }
-    ASSERT_NOT_REACHED();
-    return "None";
-}
-
 String HeapSnapshotBuilder::json()
 {
     return json([] (const HeapSnapshotNode&) { return true; });
@@ -656,7 +618,7 @@
             json.appendNumber(snapshotNode.value().identifier);
 
             // Maybe we should just always encode the root names.
-            const char* rootName = rootTypeToString(it.value.markReason);
+            const char* rootName = rootMarkReasonDescription(it.value.markReason);
             auto result = labelIndexes.add(rootName, nextLabelIndex);
             if (result.isNewEntry)
                 nextLabelIndex++;

Copied: trunk/Source/_javascript_Core/heap/RootMarkReason.cpp (from rev 274521, trunk/Source/_javascript_Core/heap/RootMarkReason.h) (0 => 274522)


--- trunk/Source/_javascript_Core/heap/RootMarkReason.cpp	                        (rev 0)
+++ trunk/Source/_javascript_Core/heap/RootMarkReason.cpp	2021-03-16 21:58:54 UTC (rev 274522)
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2021 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RootMarkReason.h"
+
+#include <wtf/PrintStream.h>
+
+namespace JSC {
+
+const char* rootMarkReasonDescription(RootMarkReason reason)
+{
+#define CASE_ROOT_MARK_REASON(reason) \
+    case JSC::RootMarkReason::reason: \
+        return #reason; \
+
+    switch (reason) {
+        FOR_EACH_ROOT_MARK_REASON(CASE_ROOT_MARK_REASON)
+    }
+#undef CASE_ROOT_MARK_REASON
+
+    ASSERT_NOT_REACHED();
+    return "None";
+}
+
+} // namespace JSC
+
+namespace WTF {
+
+void printInternal(PrintStream& out, JSC::RootMarkReason reason)
+{
+    out.print(JSC::rootMarkReasonDescription(reason));
+}
+
+} // namespace WTF

Modified: trunk/Source/_javascript_Core/heap/RootMarkReason.h (274521 => 274522)


--- trunk/Source/_javascript_Core/heap/RootMarkReason.h	2021-03-16 21:57:18 UTC (rev 274521)
+++ trunk/Source/_javascript_Core/heap/RootMarkReason.h	2021-03-16 21:58:54 UTC (rev 274522)
@@ -25,19 +25,44 @@
 
 #pragma once
 
+namespace JSC {
+
+#define FOR_EACH_ROOT_MARK_REASON(v) \
+    v(None) \
+    v(ConservativeScan) \
+    v(ExecutableToCodeBlockEdges) \
+    v(ExternalRememberedSet) \
+    v(StrongReferences) \
+    v(ProtectedValues) \
+    v(MarkedJSValueRefArray) \
+    v(MarkListSet) \
+    v(VMExceptions) \
+    v(StrongHandles) \
+    v(Debugger) \
+    v(JITStubRoutines) \
+    v(WeakMapSpace) \
+    v(WeakSets) \
+    v(Output) \
+    v(DFGWorkLists) \
+    v(CodeBlocks) \
+    v(DOMGCOutput)
+
+#define DECLARE_ROOT_MARK_REASON(reason) reason,
+
 enum class RootMarkReason : uint8_t {
-    None,
-    ConservativeScan,
-    StrongReferences,
-    ProtectedValues,
-    MarkListSet,
-    VMExceptions,
-    StrongHandles,
-    Debugger,
-    JITStubRoutines,
-    WeakSets,
-    Output,
-    DFGWorkLists,
-    CodeBlocks,
-    DOMGCOutput,
+    FOR_EACH_ROOT_MARK_REASON(DECLARE_ROOT_MARK_REASON)
 };
+
+#undef DECLARE_ROOT_MARK_REASON
+
+const char* rootMarkReasonDescription(RootMarkReason);
+
+} // namespace JSC
+
+namespace WTF {
+
+class PrintStream;
+
+void printInternal(PrintStream&, JSC::RootMarkReason);
+
+} // namespace WTF
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to