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