Changeset 211385 in webkit
- Timestamp:
- Jan 30, 2017 2:01:07 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 15 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r211381 r211385 1 2017-01-30 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops) 4 https://bugs.webkit.org/show_bug.cgi?id=165633 5 <rdar://problem/29738502> 6 7 Reviewed by Joseph Pecoraro. 8 9 Add truncation test cases and cleanup call frame logging. 10 11 * inspector/debugger/async-stack-trace-expected.txt: 12 * inspector/debugger/async-stack-trace.html: 13 * inspector/debugger/resources/log-active-stack-trace.js: Added. 14 (TestPage.registerInitializer.window.getActiveStackTrace): 15 (TestPage.registerInitializer.logStackTrace.logCallFrame): 16 (TestPage.registerInitializer.): 17 (TestPage.registerInitializer.window.logActiveStackTrace): 18 (TestPage.registerInitializer): 19 1 20 2017-01-30 Ryan Haddad <ryanhaddad@apple.com> 2 21 -
trunk/LayoutTests/inspector/debugger/async-stack-trace-expected.txt
r211381 r211385 7 7 CALL STACK: 8 8 0: [F] pauseThenFinishTest 9 -- [N] requestAnimationFrame ---- 10 1: [F] testRequestAnimationFrame 11 2: [P] Global Code 9 ASYNC CALL STACK: 10 1: --- requestAnimationFrame --- 11 2: [F] testRequestAnimationFrame 12 3: [P] Global Code 12 13 13 14 -- Running test case: CheckAsyncStackTrace.SetTimeout … … 15 16 CALL STACK: 16 17 0: [F] pauseThenFinishTest 17 -- [N] setTimeout ---- 18 1: [F] testSetTimeout 19 2: [P] Global Code 18 ASYNC CALL STACK: 19 1: --- setTimeout --- 20 2: [F] testSetTimeout 21 3: [P] Global Code 20 22 21 23 -- Running test case: CheckAsyncStackTrace.SetInterval … … 23 25 CALL STACK: 24 26 0: [F] intervalFired 25 -- [N] setInterval ---- 26 1: [F] testSetInterval 27 2: [P] Global Code 27 ASYNC CALL STACK: 28 1: --- setInterval --- 29 2: [F] testSetInterval 30 3: [P] Global Code 28 31 PAUSE #2 29 32 CALL STACK: 30 33 0: [F] intervalFired 31 -- [N] setInterval ---- 32 1: [F] testSetInterval 33 2: [P] Global Code 34 ASYNC CALL STACK: 35 1: --- setInterval --- 36 2: [F] testSetInterval 37 3: [P] Global Code 34 38 PAUSE #3 35 39 CALL STACK: 36 40 0: [F] intervalFired 37 -- [N] setInterval ---- 38 1: [F] testSetInterval 39 2: [P] Global Code 41 ASYNC CALL STACK: 42 1: --- setInterval --- 43 2: [F] testSetInterval 44 3: [P] Global Code 40 45 41 46 -- Running test case: CheckAsyncStackTrace.ChainedRequestAnimationFrame … … 43 48 CALL STACK: 44 49 0: [F] pauseThenFinishTest 45 -- [N] requestAnimationFrame ---- 46 1: [F] testRequestAnimationFrame 47 -- [N] requestAnimationFrame ---- 48 2: [F] testChainedRequestAnimationFrame 49 3: [P] Global Code 50 ASYNC CALL STACK: 51 1: --- requestAnimationFrame --- 52 2: [F] testRequestAnimationFrame 53 3: --- requestAnimationFrame --- 54 4: [F] testChainedRequestAnimationFrame 55 5: [P] Global Code 50 56 51 57 -- Running test case: CheckAsyncStackTrace.ReferenceCounting … … 53 59 CALL STACK: 54 60 0: [F] pauseThenFinishTest 55 -- [N] setTimeout ---- 56 1: [F] intervalFired 57 -- [N] setInterval ---- 58 2: [F] testReferenceCounting 59 3: [P] Global Code 61 ASYNC CALL STACK: 62 1: --- setTimeout --- 63 2: [F] intervalFired 64 3: --- setInterval --- 65 4: [F] testReferenceCounting 66 5: [P] Global Code 60 67 -- Running test setup. 61 68 Save DebuggerManager.asyncStackTraceDepth … … 68 75 Save DebuggerManager.asyncStackTraceDepth 69 76 70 -- Running test case: AsyncStackTrace.SetStackTraceDepth 71 PASS: Number of call frames should be equal to the depth setting. 77 -- Running test case: AsyncStackTrace.ForceTruncationOnCallStackBoundary 78 Set Debugger.asyncStackTraceDepth equal to 4 79 PASS: Non-root StackTrace should not be truncated. 80 PASS: Non-root StackTrace should not be truncated. 81 PASS: StackTrace root should be truncated. 82 PASS: StackTrace should be truncated to the nearest call stack. 83 CALL STACK: 84 0: [F] pauseThenFinishTest 85 1: [F] repeat 86 ASYNC CALL STACK: 87 2: --- requestAnimationFrame --- 88 3: [F] repeat 89 4: --- requestAnimationFrame --- 90 5: [F] repeat 91 (remaining call frames truncated) 92 -- Running test teardown. 93 Restore DebuggerManager.asyncStackTraceDepth 94 -- Running test setup. 95 Save DebuggerManager.asyncStackTraceDepth 96 97 -- Running test case: AsyncStackTrace.ForceTruncationWithinCallStack 98 Set Debugger.asyncStackTraceDepth equal to 5 99 PASS: Non-root StackTrace should not be truncated. 100 PASS: Non-root StackTrace should not be truncated. 101 PASS: Non-root StackTrace should not be truncated. 102 PASS: StackTrace root should be truncated. 103 PASS: StackTrace should be truncated to the nearest call stack. 104 CALL STACK: 105 0: [F] pauseThenFinishTest 106 1: [F] repeat 107 ASYNC CALL STACK: 108 2: --- requestAnimationFrame --- 109 3: [F] repeat 110 4: --- requestAnimationFrame --- 111 5: [F] repeat 112 6: --- requestAnimationFrame --- 113 7: [F] repeat 114 (remaining call frames truncated) 72 115 -- Running test teardown. 73 116 Restore DebuggerManager.asyncStackTraceDepth -
trunk/LayoutTests/inspector/debugger/async-stack-trace.html
r211381 r211385 3 3 <head> 4 4 <script src="../../http/tests/inspector/resources/inspector-test.js"></script> 5 <script src="resources/log-active-stack-trace.js"></script> 5 6 <script> 6 7 const timerDelay = 20; … … 49 50 } 50 51 52 function repeatingRequestAnimationFrame(repeatCount) { 53 let count = 0; 54 function repeat() { 55 if (count++ === repeatCount) { 56 pauseThenFinishTest(); 57 return; 58 } 59 requestAnimationFrame(repeat); 60 } 61 requestAnimationFrame(repeat); 62 } 63 51 64 function test() 52 65 { 53 66 let suite = InspectorTest.createAsyncSuite("AsyncStackTrace"); 54 55 function activeTargetData() {56 InspectorTest.assert(WebInspector.debuggerManager.activeCallFrame, "Active call frame should exist.");57 if (!WebInspector.debuggerManager.activeCallFrame)58 return null;59 60 let targetData = WebInspector.debuggerManager.dataForTarget(WebInspector.debuggerManager.activeCallFrame.target);61 InspectorTest.assert(targetData, "Data for active call frame target should exist.");62 return targetData;63 }64 65 function logCallStack() {66 function callFrameString(callFrame) {67 let code = callFrame.nativeCode ? "N" : (callFrame.programCode ? "P" : "F");68 return `[${code}] ${callFrame.functionName}`;69 }70 71 function logCallFrames(callFrames) {72 for (let callFrame of callFrames) {73 InspectorTest.log(`${callFrameIndex++}: ${callFrameString(callFrame)}`);74 // Skip remaining call frames after the test harness entry point.75 if (callFrame.programCode)76 break;77 }78 }79 80 let {callFrames, asyncStackTrace} = activeTargetData();81 InspectorTest.assert(callFrames);82 InspectorTest.assert(asyncStackTrace);83 84 let callFrameIndex = 0;85 logCallFrames(callFrames);86 87 while (asyncStackTrace) {88 let callFrames = asyncStackTrace.callFrames;89 let topCallFrameIsBoundary = asyncStackTrace.topCallFrameIsBoundary;90 asyncStackTrace = asyncStackTrace.parentStackTrace;91 if (!callFrames || !callFrames.length)92 continue;93 94 let boundaryLabel = topCallFrameIsBoundary ? callFrameString(callFrames.shift()) : "(async)";95 InspectorTest.log(`-- ${boundaryLabel} ----`);96 logCallFrames(callFrames);97 }98 }99 67 100 68 function addSimpleTestCase(name, expression) { … … 105 73 function handlePaused() { 106 74 InspectorTest.log(`PAUSE #${++pauseCount}`); 107 InspectorTest.log("CALL STACK:"); 108 logCallStack(); 75 logActiveStackTrace(); 109 76 WebInspector.debuggerManager.resume(); 110 77 } … … 147 114 WebInspector.debuggerManager.awaitEvent(WebInspector.DebuggerManager.Event.Paused) 148 115 .then((event) => { 149 let stackTrace = activeTargetData().asyncStackTrace; 150 InspectorTest.expectNull(stackTrace, "Async stack trace should be null."); 116 let stackTrace = getActiveStackTrace(); 117 let asyncStackTrace = stackTrace.parentStackTrace; 118 InspectorTest.expectNull(asyncStackTrace, "Async stack trace should be null."); 151 119 WebInspector.debuggerManager.resume().then(resolve, reject); 152 120 }); … … 157 125 }); 158 126 159 suite.addTestCase({ 160 name: "AsyncStackTrace.SetStackTraceDepth", 161 setup, 162 teardown, 163 test(resolve, reject) { 164 WebInspector.debuggerManager.awaitEvent(WebInspector.DebuggerManager.Event.Paused) 165 .then((event) => { 166 let stackTrace = activeTargetData().asyncStackTrace; 167 InspectorTest.assert(stackTrace && stackTrace.callFrames); 168 if (!stackTrace || !stackTrace.callFrames) 169 reject(); 127 function addTruncateTestCase(name, asyncStackTraceDepth) { 128 suite.addTestCase({ 129 name: `AsyncStackTrace.${name}`, 130 setup, 131 teardown, 132 test(resolve, reject) { 133 // When repeatingRequestAnimationFrame calls rAF, the backend will store a call stack with length 2: 134 // one frame for the caller and one for the asynchronous boundary. As a result, the parity of 135 // Debugger.asyncStackTraceDepth determines whether the trace is truncated on a call stack boundary 136 // (even) or call frame boundary (odd). Since truncation doesn't remove individual call frames, 137 // the depth of the resulting stack trace may exceed the depth setting: 138 // S = { s𝟶, s𝟷, …, s𝑘 } 139 // T = truncate(S) 140 // depth(T) ≤ d + depth(t𝑘) 141 const framesPerCallStack = 2; 142 const expectedStackTraceDepth = asyncStackTraceDepth + (asyncStackTraceDepth % framesPerCallStack); 170 143 171 InspectorTest.expectEqual(stackTrace.callFrames.length, maxStackDepth, "Number of call frames should be equal to the depth setting."); 172 WebInspector.debuggerManager.resume().then(resolve, reject); 173 }); 144 WebInspector.debuggerManager.awaitEvent(WebInspector.DebuggerManager.Event.Paused) 145 .then((event) => { 146 let stackTrace = getActiveStackTrace(); 147 InspectorTest.assert(stackTrace && stackTrace.callFrames); 148 if (!stackTrace || !stackTrace.callFrames) 149 reject(); 174 150 175 const maxStackDepth = 2; 176 const functionCallCount = maxStackDepth * 2; 177 WebInspector.debuggerManager.asyncStackTraceDepth = maxStackDepth; 178 InspectorTest.evaluateInPage(`recursiveCallThenTest(testRequestAnimationFrame, ${functionCallCount})`); 179 } 180 }); 151 let stackTraceDepth = 0; 152 while (stackTrace.parentStackTrace) { 153 InspectorTest.expectFalse(stackTrace.truncated, "Non-root StackTrace should not be truncated."); 154 stackTrace = stackTrace.parentStackTrace; 155 stackTraceDepth += stackTrace.callFrames.length; 156 } 157 158 InspectorTest.expectThat(stackTrace.truncated, "StackTrace root should be truncated."); 159 InspectorTest.expectEqual(stackTraceDepth, expectedStackTraceDepth, "StackTrace should be truncated to the nearest call stack."); 160 161 logActiveStackTrace(); 162 WebInspector.debuggerManager.resume().then(resolve, reject); 163 }); 164 165 InspectorTest.log(`Set Debugger.asyncStackTraceDepth equal to ${asyncStackTraceDepth}`); 166 WebInspector.debuggerManager.asyncStackTraceDepth = asyncStackTraceDepth; 167 168 let repeatCount = Math.floor(asyncStackTraceDepth / framesPerCallStack) + 1; 169 InspectorTest.evaluateInPage(`repeatingRequestAnimationFrame(${repeatCount})`); 170 } 171 }); 172 } 173 174 addTruncateTestCase("ForceTruncationOnCallStackBoundary", 4); 175 addTruncateTestCase("ForceTruncationWithinCallStack", 5); 181 176 182 177 suite.runTestCasesAndFinish(); -
trunk/Source/JavaScriptCore/CMakeLists.txt
r211381 r211385 515 515 heap/WriteBarrierSupport.cpp 516 516 517 inspector/AsyncStackTrace.cpp 517 518 inspector/ConsoleMessage.cpp 518 519 inspector/ContentSearchUtilities.cpp -
trunk/Source/JavaScriptCore/ChangeLog
r211381 r211385 1 2017-01-30 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops) 4 https://bugs.webkit.org/show_bug.cgi?id=165633 5 <rdar://problem/29738502> 6 7 Reviewed by Joseph Pecoraro. 8 9 This patch limits the memory used by the Inspector backend to store async 10 stack trace data. 11 12 Asynchronous stack traces are stored as a disjoint set of parent pointer 13 trees. Tree nodes represent asynchronous operations, and hold a copy of 14 the stack trace at the time the operation was scheduled. Each tree can 15 be regarded as a set of stack traces, stored as singly linked lists that 16 share part of their structure (specifically their tails). Traces belonging 17 to the same tree will at least share a common root. A stack trace begins 18 at a leaf node and follows the chain of parent pointers to the root of 19 of the tree. Leaf nodes always contain pending asynchronous calls. 20 21 When an asynchronous operation is scheduled with requestAnimationFrame, 22 setInterval, etc, a node is created containing the current call stack and 23 some bookkeeping data for the operation. An unique identifier comprised 24 of an operation type and callback identifier is mapped to the node. If 25 scheduling the callback was itself the result of an asynchronous call, 26 the node becomes a child of the node associated with that call, otherwise 27 it becomes the root of a new tree. 28 29 A node is either `pending`, `active`, `dispatched`, or `canceled`. Nodes 30 start out as pending. After a callback for a pending node is dispatched 31 the node is marked as such, unless it is a repeating callback such as 32 setInterval, in which case it remains pending. Once a node is no longer 33 pending it is removed, as long as it has no children. Since nodes are 34 reference counted, it is a property of the stack trace tree that nodes 35 that are no longer pending and have no children pointing to them will be 36 automatically pruned from the tree. 37 38 If an async operation is canceled (e.g. cancelTimeout), the associated 39 node is marked as such. If the callback is not being dispatched at the 40 time, and has no children, it is removed. 41 42 Because async operations can be chained indefinitely, stack traces are 43 limited to a maximum depth. The depth of a stack trace is equal to the 44 sum of the depths of its nodes, with a node's depth equal to the number 45 of frames in its associated call stack. For any stack trace, 46 47 S = { s𝟶, s𝟷, …, s𝑘 }, with endpoints s𝟶, s𝑘 48 depth(S) = depth(s𝟶) + depth(s𝟷) + … + depth(s𝑘) 49 50 A stack trace is truncated when it exceeds the maximum depth. Truncation 51 occurs on node boundaries, not call frames, consequently the maximum depth 52 is more of a target than a guarantee: 53 54 d = maximum stack trace depth 55 for all S, depth(S) ≤ d + depth(s𝑘) 56 57 Because nodes can belong to multiple stack traces, it may be necessary 58 to clone the tail of a stack trace being truncated to prevent other traces 59 from being effected. 60 61 * CMakeLists.txt: 62 * JavaScriptCore.xcodeproj/project.pbxproj: 63 * inspector/AsyncStackTrace.cpp: Added. 64 (Inspector::AsyncStackTrace::create): 65 (Inspector::AsyncStackTrace::AsyncStackTrace): 66 (Inspector::AsyncStackTrace::~AsyncStackTrace): 67 (Inspector::AsyncStackTrace::isPending): 68 (Inspector::AsyncStackTrace::isLocked): 69 (Inspector::AsyncStackTrace::willDispatchAsyncCall): 70 (Inspector::AsyncStackTrace::didDispatchAsyncCall): 71 (Inspector::AsyncStackTrace::didCancelAsyncCall): 72 (Inspector::AsyncStackTrace::buildInspectorObject): 73 (Inspector::AsyncStackTrace::truncate): 74 (Inspector::AsyncStackTrace::remove): 75 * inspector/AsyncStackTrace.h: 76 * inspector/agents/InspectorDebuggerAgent.cpp: 77 (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall): 78 (Inspector::InspectorDebuggerAgent::didCancelAsyncCall): 79 (Inspector::InspectorDebuggerAgent::willDispatchAsyncCall): 80 (Inspector::InspectorDebuggerAgent::didDispatchAsyncCall): 81 (Inspector::InspectorDebuggerAgent::didPause): 82 (Inspector::InspectorDebuggerAgent::clearAsyncStackTraceData): 83 (Inspector::InspectorDebuggerAgent::buildAsyncStackTrace): Deleted. 84 (Inspector::InspectorDebuggerAgent::refAsyncCallData): Deleted. 85 (Inspector::InspectorDebuggerAgent::derefAsyncCallData): Deleted. 86 * inspector/agents/InspectorDebuggerAgent.h: 87 * inspector/protocol/Console.json: 88 1 89 2017-01-30 Ryan Haddad <ryanhaddad@apple.com> 2 90 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r211381 r211385 1377 1377 65FB5117184EEE7000C12B70 /* ProtoCallFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65FB5116184EE9BC00C12B70 /* ProtoCallFrame.cpp */; }; 1378 1378 65FB63A41C8EA09C0020719B /* YarrCanonicalizeUnicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65A946141C8E9F6F00A7209A /* YarrCanonicalizeUnicode.cpp */; }; 1379 6A38CFA91E32B5AB0060206F /* AsyncStackTrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A38CFA71E32B58B0060206F /* AsyncStackTrace.cpp */; }; 1380 6A38CFAA1E32B5AB0060206F /* AsyncStackTrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A38CFA81E32B58B0060206F /* AsyncStackTrace.h */; }; 1379 1381 6AD2CB4D19B9140100065719 /* DebuggerEvalEnabler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1380 1382 70113D4B1A8DB093003848C4 /* IteratorOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70113D491A8DB093003848C4 /* IteratorOperations.cpp */; }; … … 3840 3842 65FB5115184EE8F800C12B70 /* ProtoCallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProtoCallFrame.h; sourceTree = "<group>"; }; 3841 3843 65FB5116184EE9BC00C12B70 /* ProtoCallFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProtoCallFrame.cpp; sourceTree = "<group>"; }; 3844 6A38CFA71E32B58B0060206F /* AsyncStackTrace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AsyncStackTrace.cpp; sourceTree = "<group>"; }; 3845 6A38CFA81E32B58B0060206F /* AsyncStackTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncStackTrace.h; sourceTree = "<group>"; }; 3842 3846 6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerEvalEnabler.h; sourceTree = "<group>"; }; 3843 3847 6BA93C9590484C5BAD9316EA /* JSScriptFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptFetcher.h; sourceTree = "<group>"; }; … … 5030 5034 0F9327591C20BCBA00CF6564 /* dynbench */, 5031 5035 0FF922CF14F46B130041A24E /* JSCLLIntOffsetsExtractor */, 5036 141211200A48793C00480255 /* minidom */, 5032 5037 0F6183431C45F62A0072450B /* testair */, 5038 14BD59BF0A3E8F9000BAF59C /* testapi */, 5039 0FEC85AD1BDB5CF10080FF74 /* testb3 */, 5033 5040 6511230514046A4C002B101D /* testRegExp */, 5034 5041 932F5BD90822A1C700736975 /* JavaScriptCore.framework */, 5035 5042 932F5BE10822A1C700736975 /* jsc */, 5036 141211200A48793C00480255 /* minidom */,5037 14BD59BF0A3E8F9000BAF59C /* testapi */,5038 0FEC85AD1BDB5CF10080FF74 /* testb3 */,5039 5043 ); 5040 5044 name = Products; … … 5257 5261 0FEC84C11BDACDAC0080FF74 /* B3Commutativity.cpp */, 5258 5262 0FEC84C21BDACDAC0080FF74 /* B3Commutativity.h */, 5259 7919B77F1E03559C005BEED8 /* B3Compile.h */,5260 795F099C1E03600500BBE37F /* B3Compile.cpp */,5261 5263 0F338DFF1BF0276C0013C88F /* B3Compilation.cpp */, 5262 5264 0F338E001BF0276C0013C88F /* B3Compilation.h */, 5265 795F099C1E03600500BBE37F /* B3Compile.cpp */, 5266 7919B77F1E03559C005BEED8 /* B3Compile.h */, 5263 5267 0F86AE1F1C5311C5006BE8EC /* B3ComputeDivisionMagic.h */, 5264 5268 0FEC84C31BDACDAC0080FF74 /* B3Const32Value.cpp */, … … 6366 6370 E35E035D1B7AB43E0073AD2A /* InspectorInstrumentationObject.cpp */, 6367 6371 E35E035E1B7AB43E0073AD2A /* InspectorInstrumentationObject.h */, 6368 A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,6369 6372 A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */, 6370 6373 A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */, 6374 A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */, 6371 6375 BC9BB95B0E19680600DF8855 /* InternalFunction.cpp */, 6372 6376 BC11667A0E199C05008066DD /* InternalFunction.h */, … … 6463 6467 BC756FC70E2031B200DE7D12 /* JSGlobalObjectFunctions.h */, 6464 6468 79B819921DD25CF500DDC714 /* JSGlobalObjectInlines.h */, 6465 0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,6466 6469 0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */, 6467 6470 0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */, 6471 0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */, 6468 6472 E33F507E1B8429A400413856 /* JSInternalPromise.cpp */, 6469 6473 E33F507F1B8429A400413856 /* JSInternalPromise.h */, … … 6553 6557 53917E7C1B791106000EBD33 /* JSTypedArrayViewPrototype.h */, 6554 6558 6507D2970E871E4A00D7D896 /* JSTypeInfo.h */, 6559 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */, 6560 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */, 6555 6561 0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */, 6556 6562 0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */, 6557 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */,6558 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */,6559 6563 A7CA3AE117DA41AE006538AF /* JSWeakMap.cpp */, 6560 6564 A7CA3AE217DA41AE006538AF /* JSWeakMap.h */, … … 6763 6767 0F2D4DE319832D91007D4B19 /* TypeSet.cpp */, 6764 6768 0F2D4DE419832D91007D4B19 /* TypeSet.h */, 6765 A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */,6766 A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */,6767 6769 A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */, 6768 6770 866739D113BFDE710023D87C /* Uint16WithFraction.h */, 6769 6771 A7A8AF3317ADB5F3005AB174 /* Uint32Array.h */, 6772 A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */, 6773 A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */, 6770 6774 0FE050231AA9095600D33B33 /* VarOffset.cpp */, 6771 6775 0FE050241AA9095600D33B33 /* VarOffset.h */, … … 7554 7558 A5BA15E01823409D00A82E69 /* remote */, 7555 7559 A532438E185696CE002ED692 /* scripts */, 7560 6A38CFA71E32B58B0060206F /* AsyncStackTrace.cpp */, 7561 6A38CFA81E32B58B0060206F /* AsyncStackTrace.h */, 7556 7562 A5FD0077189B051000633231 /* ConsoleMessage.cpp */, 7557 7563 A5FD0078189B051000633231 /* ConsoleMessage.h */, … … 7909 7915 5B70CFE21DB69E6600EC23F9 /* AsyncFunctionConstructor.h in Headers */, 7910 7916 5B70CFE01DB69E6600EC23F9 /* AsyncFunctionPrototype.h in Headers */, 7917 6A38CFAA1E32B5AB0060206F /* AsyncStackTrace.h in Headers */, 7911 7918 0F7CF9571DC125900098CC12 /* AtomicsObject.h in Headers */, 7912 7919 A5EA70E719F5B1010098F5EC /* AugmentableInspectorController.h in Headers */, … … 7931 7938 0FEC850C1BDACDAC0080FF74 /* B3Commutativity.h in Headers */, 7932 7939 0F338E0C1BF0276C0013C88F /* B3Compilation.h in Headers */, 7940 7919B7801E03559C005BEED8 /* B3Compile.h in Headers */, 7933 7941 0F86AE201C5311C5006BE8EC /* B3ComputeDivisionMagic.h in Headers */, 7934 7942 0FEC850E1BDACDAC0080FF74 /* B3Const32Value.h in Headers */, … … 8030 8038 C2FCAE1117A9C24E0034C735 /* BytecodeBasicBlock.h in Headers */, 8031 8039 0F21C27F14BEAA8200ADC64B /* BytecodeConventions.h in Headers */, 8032 0F1FB3931E177A7200A9BE50 /* VisitingTimeout.h in Headers */,8033 8040 969A07230ED1CE3300F1F681 /* BytecodeGenerator.h in Headers */, 8034 8041 E328DAE81D38D005001A2529 /* BytecodeGeneratorification.h in Headers */, … … 8056 8063 0F24E54217EA9F5900ABB217 /* CCallHelpers.h in Headers */, 8057 8064 0F070A471D543A8B006E7232 /* CellContainer.h in Headers */, 8058 ADE8029A1E08F1DE0058DE78 /* WebAssemblyLinkErrorConstructor.h in Headers */,8059 8065 0F070A481D543A90006E7232 /* CellContainerInlines.h in Headers */, 8060 8066 0F1C3DDA1BBCE09E00E523E4 /* CellState.h in Headers */, … … 8094 8100 A5FD0074189B038C00633231 /* ConsoleTypes.h in Headers */, 8095 8101 0FFC99D1184EC8AD009C10AB /* ConstantMode.h in Headers */, 8102 0F7DF1341E2970D70095951B /* ConstraintVolatility.h in Headers */, 8096 8103 E354622B1B6065D100545386 /* ConstructAbility.h in Headers */, 8097 8104 BC18C3F60E16F5CD00B34460 /* ConstructData.h in Headers */, … … 8115 8122 BC18C3FA0E16F5CD00B34460 /* Debugger.h in Headers */, 8116 8123 BC18C3FB0E16F5CD00B34460 /* DebuggerCallFrame.h in Headers */, 8117 0F7DF1351E2970DC0095951B /* MarkedSpaceInlines.h in Headers */,8118 8124 6AD2CB4D19B9140100065719 /* DebuggerEvalEnabler.h in Headers */, 8119 8125 A5FC84B21D1DDAD6006B5C46 /* DebuggerLocation.h in Headers */, … … 8140 8146 0F485322187750560083B687 /* DFGArithMode.h in Headers */, 8141 8147 0F05C3B41683CF9200BAF45B /* DFGArrayifySlowPathGenerator.h in Headers */, 8142 0F4F82881E2FFDE00075184C /* JSSegmentedVariableObjectSubspace.h in Headers */,8143 8148 0F63948515E4811B006A597C /* DFGArrayMode.h in Headers */, 8144 8149 A7D9A29517A0BC7400EE2618 /* DFGAtTailAbstractState.h in Headers */, … … 8165 8170 0F9D36951AE9CC33000D4DFB /* DFGCleanUpPhase.h in Headers */, 8166 8171 A77A424017A0BBFD00A8DB81 /* DFGClobberize.h in Headers */, 8167 AD7438C01E0457A400FD0C2A /* WasmSignature.h in Headers */,8168 8172 A77A424217A0BBFD00A8DB81 /* DFGClobberSet.h in Headers */, 8169 8173 0F3C1F1B1B868E7900ABB08B /* DFGClobbersExitState.h in Headers */, … … 8205 8209 A7D89CF817A0B8CC00773AD8 /* DFGFlushFormat.h in Headers */, 8206 8210 0F2DD8151AB3D8BE00BBB8E8 /* DFGForAllKills.h in Headers */, 8207 0F4F828C1E31B9760075184C /* StochasticSpaceTimeMutatorScheduler.h in Headers */,8208 8211 0F69CC89193AC60A0045759E /* DFGFrozenValue.h in Headers */, 8209 8212 86EC9DC61328DF82002B2AD7 /* DFGGenerationInfo.h in Headers */, … … 8259 8262 0F7025AA1714B0FC00382C0E /* DFGOSRExitCompilerCommon.h in Headers */, 8260 8263 0F392C8A1B46188400844728 /* DFGOSRExitFuzz.h in Headers */, 8261 0F7DF13F1E2AFC4D0095951B /* JSStringSubspace.h in Headers */,8262 8264 0FEFC9AB1681A3B600567F53 /* DFGOSRExitJumpPlaceholder.h in Headers */, 8263 8265 0F235BEE17178E7300690C7F /* DFGOSRExitPreparation.h in Headers */, … … 8266 8268 0F2B9CEB19D0BA7D00B1D1B5 /* DFGPhiChildren.h in Headers */, 8267 8269 A78A977B179738B8009DF744 /* DFGPlan.h in Headers */, 8270 0F1FB3961E1AF7E100A9BE50 /* DFGPlanInlines.h in Headers */, 8268 8271 DC00039319D8BE6F00023EB0 /* DFGPreciseLocalClobberize.h in Headers */, 8269 8272 0FBE0F7516C1DB0B0082C5E8 /* DFGPredictionInjectionPhase.h in Headers */, … … 8296 8299 0FC097A2146B28CC00CF2442 /* DFGThunks.h in Headers */, 8297 8300 0FD8A32817D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.h in Headers */, 8301 ADFF2F701E319DE3001EA54E /* DFGTierUpEntryTrigger.h in Headers */, 8298 8302 0FD8A32A17D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.h in Headers */, 8299 8303 0FD8A32C17D51F5700CA2C40 /* DFGToFTLForOSREntryDeferredCompilationCallback.h in Headers */, … … 8313 8317 0FC97F4218202119002C9B26 /* DFGWatchpointCollectionPhase.h in Headers */, 8314 8318 0FDB2CE8174830A2007B3C1B /* DFGWorklist.h in Headers */, 8319 0F1FB3971E1AF7E300A9BE50 /* DFGWorklistInlines.h in Headers */, 8315 8320 0FE050181AA9091100D33B33 /* DirectArguments.h in Headers */, 8316 8321 0FE050161AA9091100D33B33 /* DirectArgumentsOffset.h in Headers */, … … 8419 8424 FE4BFF2C1AD476E700088F87 /* FunctionOverrides.h in Headers */, 8420 8425 BC18C4050E16F5CD00B34460 /* FunctionPrototype.h in Headers */, 8421 7919B7801E03559C005BEED8 /* B3Compile.h in Headers */,8422 8426 62D2D3901ADF103F000206C1 /* FunctionRareData.h in Headers */, 8423 8427 FEA0C4031CDD7D1D00481991 /* FunctionWhitelist.h in Headers */, … … 8435 8439 A54E8EB118BFFBBE00556D28 /* GCSegmentedArrayInlines.h in Headers */, 8436 8440 0F86A26F1D6F7B3300CB0C92 /* GCTypeMap.h in Headers */, 8437 0F7DF1381E2970E40095951B /* SubspaceInlines.h in Headers */,8438 8441 9959E9311BD18272001AA413 /* generate-combined-inspector-json.py in Headers */, 8439 8442 C4703CC0192844960013FBEA /* generate-inspector-protocol-bindings.py in Headers */, 8440 0F7DF1461E2BEF6A0095951B /* MarkedAllocatorInlines.h in Headers */,8441 8443 99DA00AF1BD5994E00F4575C /* generate-js-builtins.py in Headers */, 8442 8444 A5EA70EC19F5B3EA0098F5EC /* generate_cpp_alternate_backend_dispatcher_header.py in Headers */, … … 8473 8475 7964656A1B952FF0003059EE /* GetPutInfo.h in Headers */, 8474 8476 14AD910E1DCA92940014F9FE /* GlobalCodeBlock.h in Headers */, 8475 79DAE27A1E03C82200B526AA /* WasmExceptionType.h in Headers */,8476 8477 0F24E54417EA9F5900ABB217 /* GPRInfo.h in Headers */, 8477 8478 142E3134134FF0A600AFADB5 /* Handle.h in Headers */, … … 8540 8541 E35E03601B7AB43E0073AD2A /* InspectorInstrumentationObject.h in Headers */, 8541 8542 E33B3E261B7ABD750048DB2E /* InspectorInstrumentationObject.lut.h in Headers */, 8542 ADE802991E08F1DE0058DE78 /* JSWebAssemblyLinkError.h in Headers */,8543 8543 A532438C18568335002ED692 /* InspectorProtocolObjects.h in Headers */, 8544 8544 A55D93AC18514F7900400DED /* InspectorProtocolTypes.h in Headers */, … … 8570 8570 A125846F1B45A36000CC7F6C /* IntlNumberFormatPrototype.lut.h in Headers */, 8571 8571 A12BBFF21B044A8B00664B69 /* IntlObject.h in Headers */, 8572 0F1FB3971E1AF7E300A9BE50 /* DFGWorklistInlines.h in Headers */,8573 8572 708EBE241CE8F35800453146 /* IntlObjectInlines.h in Headers */, 8574 8573 860BD801148EA6F200112B2F /* Intrinsic.h in Headers */, … … 8601 8600 FE99B2491C24C3D300C82159 /* JITNegGenerator.h in Headers */, 8602 8601 0F24E54D17EE274900ABB217 /* JITOperations.h in Headers */, 8603 0F7DF1371E2970E10095951B /* Subspace.h in Headers */,8604 8602 FE3A06C01C11041A00390FDD /* JITRightShiftGenerator.h in Headers */, 8605 8603 0F766D3115AA8112008F363E /* JITStubRoutine.h in Headers */, … … 8647 8645 978801411471AD920041B016 /* JSDateMath.h in Headers */, 8648 8646 C2A7F688160432D400F76B98 /* JSDestructibleObject.h in Headers */, 8647 0F7DF13C1E2971130095951B /* JSDestructibleObjectSubspace.h in Headers */, 8649 8648 FE384EE61ADDB7AD0055DE2C /* JSDollarVM.h in Headers */, 8650 8649 FE384EE81ADDB7AD0055DE2C /* JSDollarVMPrototype.h in Headers */, … … 8656 8655 0F2B66F017B6B5AB00A7AE3F /* JSFloat64Array.h in Headers */, 8657 8656 BC18C41F0E16F5CD00B34460 /* JSFunction.h in Headers */, 8658 0F660E3A1E0517C10031462C /* MarkingConstraintSet.h in Headers */,8659 8657 A72028BA1797603D0098028C /* JSFunctionInlines.h in Headers */, 8660 0F660E381E0517BB0031462C /* MarkingConstraint.h in Headers */,8661 8658 70B7919C1C024A49002481E2 /* JSGeneratorFunction.h in Headers */, 8662 8659 0F2B66F117B6B5AB00A7AE3F /* JSGenericTypedArrayView.h in Headers */, … … 8719 8716 996B731F1BDA08EF00331B84 /* JSPromisePrototype.lut.h in Headers */, 8720 8717 2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */, 8721 0F7DF13C1E2971130095951B /* JSDestructibleObjectSubspace.h in Headers */,8722 8718 E3EF88751B66DF23003F26CB /* JSPropertyNameIterator.h in Headers */, 8723 8719 862553D216136E1A009F17D0 /* JSProxy.h in Headers */, … … 8726 8722 BC18C4260E16F5CD00B34460 /* JSRetainPtr.h in Headers */, 8727 8723 14874AE615EBDE4A002E3587 /* JSScope.h in Headers */, 8724 9064337DD4B0402BAF34A592 /* JSScriptFetcher.h in Headers */, 8728 8725 A7C0C4AC168103020017011D /* JSScriptRefPrivate.h in Headers */, 8729 8726 0F919D11157F332C004A4E7D /* JSSegmentedVariableObject.h in Headers */, 8727 0F4F82881E2FFDE00075184C /* JSSegmentedVariableObjectSubspace.h in Headers */, 8730 8728 A7299D9E17D12837005F5FF9 /* JSSet.h in Headers */, 8731 0F7DF1341E2970D70095951B /* ConstraintVolatility.h in Headers */,8732 8729 A790DD70182F499700588807 /* JSSetIterator.h in Headers */, 8730 BDFCB2BBE90F41349E1B0BED /* JSSourceCode.h in Headers */, 8733 8731 BC18C4270E16F5CD00B34460 /* JSString.h in Headers */, 8734 8732 86E85539111B9968001AF51E /* JSStringBuilder.h in Headers */, … … 8739 8737 BC18C4290E16F5CD00B34460 /* JSStringRefCF.h in Headers */, 8740 8738 1A28D4A8177B71C80007FA3C /* JSStringRefPrivate.h in Headers */, 8739 0F7DF13F1E2AFC4D0095951B /* JSStringSubspace.h in Headers */, 8741 8740 0F919D0D157EE0A2004A4E7D /* JSSymbolTableObject.h in Headers */, 8742 8741 70ECA6061AFDBEA200449739 /* JSTemplateRegistryKey.h in Headers */, … … 8767 8766 796FB43A1DFF8C3F0039C95D /* JSWebAssemblyHelpers.h in Headers */, 8768 8767 AD2FCBE51DB58DAD00B3E736 /* JSWebAssemblyInstance.h in Headers */, 8768 ADE802991E08F1DE0058DE78 /* JSWebAssemblyLinkError.h in Headers */, 8769 8769 AD2FCBE71DB58DAD00B3E736 /* JSWebAssemblyMemory.h in Headers */, 8770 8770 AD2FCC051DB58DAD00B3E736 /* JSWebAssemblyModule.h in Headers */, … … 8773 8773 1442566215EDE98D0066A49B /* JSWithScope.h in Headers */, 8774 8774 86E3C619167BABEE006D760A /* JSWrapperMap.h in Headers */, 8775 0F1FB38F1E173A6700A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h in Headers */,8776 8775 BC18C42E0E16F5CD00B34460 /* JSWrapperObject.h in Headers */, 8777 8776 BCFD8C930EEB2EE700283848 /* JumpTable.h in Headers */, … … 8819 8818 E32AB2441DCD75F400D7533A /* MacroAssemblerHelpers.h in Headers */, 8820 8819 86C568E111A213EE0007F7F0 /* MacroAssemblerMIPS.h in Headers */, 8821 0F1FB3961E1AF7E100A9BE50 /* DFGPlanInlines.h in Headers */,8822 8820 FE68C6371B90DE040042BCB3 /* MacroAssemblerPrinter.h in Headers */, 8823 8821 860161E40F3A83C100F84710 /* MacroAssemblerX86.h in Headers */, … … 8829 8827 A700873E17CBE8D300C3E643 /* MapPrototype.h in Headers */, 8830 8828 C2B916C214DA014E00CBAC86 /* MarkedAllocator.h in Headers */, 8829 0F7DF1461E2BEF6A0095951B /* MarkedAllocatorInlines.h in Headers */, 8831 8830 142D6F0913539A2800B02E86 /* MarkedBlock.h in Headers */, 8832 8831 0F7C5FB81D888A0C0044F5E2 /* MarkedBlockInlines.h in Headers */, 8833 8832 141448CB13A176EC00F5BA1A /* MarkedBlockSet.h in Headers */, 8834 8833 14D2F3DB139F4BE200491031 /* MarkedSpace.h in Headers */, 8834 0F7DF1351E2970DC0095951B /* MarkedSpaceInlines.h in Headers */, 8835 0F660E381E0517BB0031462C /* MarkingConstraint.h in Headers */, 8836 0F660E3A1E0517C10031462C /* MarkingConstraintSet.h in Headers */, 8835 8837 142D6F1213539A4100B02E86 /* MarkStack.h in Headers */, 8836 8838 8612E4CD152389EC00C836BE /* MatchResult.h in Headers */, … … 8840 8842 90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */, 8841 8843 0FB5467B14F5C7E1002C2989 /* MethodOfGettingAValueProfile.h in Headers */, 8842 ADE8029C1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.h in Headers */,8843 8844 7C008CE7187631B600955C24 /* Microtask.h in Headers */, 8844 8845 86C568E211A213EE0007F7F0 /* MIPSAssembler.h in Headers */, … … 8850 8851 147341D61DC02EB900AA29BA /* ModuleProgramExecutable.h in Headers */, 8851 8852 A79D3ED9C5064DD0A8466A3A /* ModuleScopeData.h in Headers */, 8853 0F1FB3991E1F65FB00A9BE50 /* MutatorScheduler.h in Headers */, 8852 8854 0FA762071DB9243300B7A2FD /* MutatorState.h in Headers */, 8853 8855 BC02E9110E1839DB000F9297 /* NativeErrorConstructor.h in Headers */, … … 8979 8981 A503FA26188EFFFD00110F14 /* ScriptDebugServer.h in Headers */, 8980 8982 147341CE1DC02D7900AA29BA /* ScriptExecutable.h in Headers */, 8983 CEAE7D7B889B477BA93ABA6C /* ScriptFetcher.h in Headers */, 8981 8984 A55D93A6185012A800400DED /* ScriptFunctionCall.h in Headers */, 8982 8985 A54CF2FA184EAEDA00237F19 /* ScriptObject.h in Headers */, … … 8998 9001 14201D591DECF26A00904BD3 /* SourceCode.h in Headers */, 8999 9002 70B791911C024A13002481E2 /* SourceCodeKey.h in Headers */, 9003 2D342F36F7244096804ADB24 /* SourceOrigin.h in Headers */, 9000 9004 BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */, 9001 9005 E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */, … … 9012 9016 14DF04DA16B3996D0016A513 /* StaticPropertyAnalysis.h in Headers */, 9013 9017 14CA958B16AB50DE00938A06 /* StaticPropertyAnalyzer.h in Headers */, 9018 0F4F828C1E31B9760075184C /* StochasticSpaceTimeMutatorScheduler.h in Headers */, 9014 9019 0F7CF9521DC027D90098CC12 /* StopIfNecessaryTimer.h in Headers */, 9015 9020 A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */, … … 9033 9038 BCCF0D080EF0AAB900413C8F /* StructureStubInfo.h in Headers */, 9034 9039 BC9041480EB9250900FE26FA /* StructureTransitionTable.h in Headers */, 9040 0F7DF1371E2970E10095951B /* Subspace.h in Headers */, 9041 0F7DF1381E2970E40095951B /* SubspaceInlines.h in Headers */, 9035 9042 0F4A38FA1C8E13DF00190318 /* SuperSampler.h in Headers */, 9036 0F1FB3991E1F65FB00A9BE50 /* MutatorScheduler.h in Headers */,9037 9043 705B41AC1A6E501E00716757 /* Symbol.h in Headers */, 9038 9044 705B41AE1A6E501E00716757 /* SymbolConstructor.h in Headers */, … … 9042 9048 996B73281BDA08EF00331B84 /* SymbolPrototype.lut.h in Headers */, 9043 9049 BC18C46B0E16F5CD00B34460 /* SymbolTable.h in Headers */, 9050 0F1FB38F1E173A6700A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h in Headers */, 9044 9051 A784A26411D16622005776AC /* SyntaxChecker.h in Headers */, 9045 9052 DC7997831CDE9FA0004D4A09 /* TagRegistersMode.h in Headers */, … … 9097 9104 0FE0502D1AA9095600D33B33 /* VarOffset.h in Headers */, 9098 9105 0F426A491460CBB700131F8F /* VirtualRegister.h in Headers */, 9106 0F1FB3931E177A7200A9BE50 /* VisitingTimeout.h in Headers */, 9099 9107 0F952AA11DF7860900E06FBD /* VisitRaceKey.h in Headers */, 9100 9108 BC18C4200E16F5CD00B34460 /* VM.h in Headers */, … … 9105 9113 AD4B1DFA1DF244E20071AE32 /* WasmBinding.h in Headers */, 9106 9114 53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */, 9115 79DAE27A1E03C82200B526AA /* WasmExceptionType.h in Headers */, 9107 9116 7BC547D31B6959A100959B58 /* WasmFormat.h in Headers */, 9108 9117 53F40E8B1D5901BB0099A1B6 /* WasmFunctionParser.h in Headers */, … … 9115 9124 531374BD1D5CE67600AF7A0B /* WasmPlan.h in Headers */, 9116 9125 53F40E851D58F9770099A1B6 /* WasmSections.h in Headers */, 9126 AD7438C01E0457A400FD0C2A /* WasmSignature.h in Headers */, 9117 9127 53FF7F991DBFCD9000A26CCC /* WasmValidate.h in Headers */, 9118 9128 FED94F2F171E3E2300BE77A4 /* Watchdog.h in Headers */, … … 9142 9152 AD2FCBF31DB58DAD00B3E736 /* WebAssemblyInstancePrototype.h in Headers */, 9143 9153 AD2FCC191DB59CB200B3E736 /* WebAssemblyInstancePrototype.lut.h in Headers */, 9154 ADE8029A1E08F1DE0058DE78 /* WebAssemblyLinkErrorConstructor.h in Headers */, 9155 ADE8029C1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.h in Headers */, 9144 9156 AD2FCBF51DB58DAD00B3E736 /* WebAssemblyMemoryConstructor.h in Headers */, 9145 9157 AD2FCC1A1DB59CB200B3E736 /* WebAssemblyMemoryConstructor.lut.h in Headers */, … … 9173 9185 86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */, 9174 9186 86704B4312DB8A8100A9FE7B /* YarrSyntaxChecker.h in Headers */, 9175 2D342F36F7244096804ADB24 /* SourceOrigin.h in Headers */,9176 BDFCB2BBE90F41349E1B0BED /* JSSourceCode.h in Headers */,9177 9064337DD4B0402BAF34A592 /* JSScriptFetcher.h in Headers */,9178 CEAE7D7B889B477BA93ABA6C /* ScriptFetcher.h in Headers */,9179 9187 ); 9180 9188 runOnlyForDeploymentPostprocessing = 0; … … 9728 9736 5B70CFE31DB69E6600EC23F9 /* AsyncFunctionConstructor.cpp in Sources */, 9729 9737 5B70CFE11DB69E6600EC23F9 /* AsyncFunctionPrototype.cpp in Sources */, 9738 6A38CFA91E32B5AB0060206F /* AsyncStackTrace.cpp in Sources */, 9730 9739 0F7CF9561DC1258D0098CC12 /* AtomicsObject.cpp in Sources */, 9731 9740 0FEC84FE1BDACDAC0080FF74 /* B3ArgumentRegValue.cpp in Sources */, … … 9740 9749 0FEC850B1BDACDAC0080FF74 /* B3Commutativity.cpp in Sources */, 9741 9750 0F338E0B1BF0276C0013C88F /* B3Compilation.cpp in Sources */, 9751 795F099D1E03600500BBE37F /* B3Compile.cpp in Sources */, 9742 9752 0FEC850D1BDACDAC0080FF74 /* B3Const32Value.cpp in Sources */, 9743 9753 0FEC850F1BDACDAC0080FF74 /* B3Const64Value.cpp in Sources */, … … 9801 9811 14280863107EC11A0013E7B2 /* BooleanConstructor.cpp in Sources */, 9802 9812 14280864107EC11A0013E7B2 /* BooleanObject.cpp in Sources */, 9803 0F4F82871E2FFDDD0075184C /* JSSegmentedVariableObjectSubspace.cpp in Sources */,9804 ADB6F67D1E15D7600082F384 /* WasmPageCount.cpp in Sources */,9805 9813 14280865107EC11A0013E7B2 /* BooleanPrototype.cpp in Sources */, 9806 9814 DE26E9071CB5DEFB00D2BE82 /* BuiltinExecutableCreator.cpp in Sources */, … … 9847 9855 147F39C2107EC37600427A48 /* Completion.cpp in Sources */, 9848 9856 0F6FC750196110A800E1D02D /* ComplexGetStatus.cpp in Sources */, 9849 0F1FB38E1E173A6500A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp in Sources */,9850 9857 146B16D812EB5B59001BEC1B /* ConservativeRoots.cpp in Sources */, 9851 9858 A5B6A74D18C6DBA600F11E91 /* ConsoleClient.cpp in Sources */, … … 9863 9870 147F39C5107EC37600427A48 /* DateInstance.cpp in Sources */, 9864 9871 147F39C6107EC37600427A48 /* DatePrototype.cpp in Sources */, 9865 0F660E391E0517BF0031462C /* MarkingConstraintSet.cpp in Sources */,9866 9872 14280823107EC02C0013E7B2 /* Debugger.cpp in Sources */, 9867 9873 149559EE0DDCDDF700648087 /* DebuggerCallFrame.cpp in Sources */, … … 9945 9951 0FF0F19916B729F6005DF95B /* DFGLongLivedState.cpp in Sources */, 9946 9952 A767B5B517A0B9650063D940 /* DFGLoopPreHeaderCreationPhase.cpp in Sources */, 9947 ADE8029E1E08F2280058DE78 /* WebAssemblyLinkErrorConstructor.cpp in Sources */,9948 9953 79F8FC1E1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.cpp in Sources */, 9949 9954 0F5874ED194FEB1200AAB2C1 /* DFGMayExit.cpp in Sources */, … … 9984 9989 0F3A1BF91A9ECB7D000DE01A /* DFGPutStackSinkingPhase.cpp in Sources */, 9985 9990 0F2FCCFB18A60070001A27F8 /* DFGSafepoint.cpp in Sources */, 9986 795F099D1E03600500BBE37F /* B3Compile.cpp in Sources */,9987 9991 86EC9DD21328DF82002B2AD7 /* DFGSpeculativeJIT.cpp in Sources */, 9988 9992 86880F1F14328BB900B08D42 /* DFGSpeculativeJIT32_64.cpp in Sources */, … … 9996 10000 0F9E32631B05AB0400801ED5 /* DFGStoreBarrierInsertionPhase.cpp in Sources */, 9997 10001 0FC20CB51852E2C600C9E954 /* DFGStrengthReductionPhase.cpp in Sources */, 9998 0F7DF13B1E2971110095951B /* JSDestructibleObjectSubspace.cpp in Sources */,9999 10002 0F893BDB1936E23C001211F4 /* DFGStructureAbstractValue.cpp in Sources */, 10000 10003 0F2FCCFE18A60070001A27F8 /* DFGThreadData.cpp in Sources */, 10001 10004 0FC097A1146B28CA00CF2442 /* DFGThunks.cpp in Sources */, 10002 10005 0FD8A32717D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.cpp in Sources */, 10003 0F4F828B1E31B9740075184C /* StochasticSpaceTimeMutatorScheduler.cpp in Sources */,10004 10006 0FD8A32917D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.cpp in Sources */, 10005 10007 0FD8A32B17D51F5700CA2C40 /* DFGToFTLForOSREntryDeferredCompilationCallback.cpp in Sources */, … … 10208 10210 1421359B0A677F4F00A8195E /* JSBase.cpp in Sources */, 10209 10211 86FA9E91142BBB2E001773B7 /* JSBoundFunction.cpp in Sources */, 10210 0F7DF1401E2AFC500095951B /* JSStringSubspace.cpp in Sources */,10211 10212 1440F8AF0A508D200005F061 /* JSCallbackConstructor.cpp in Sources */, 10212 10213 1440F8920A508B100005F061 /* JSCallbackFunction.cpp in Sources */, … … 10224 10225 0F2B66ED17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp in Sources */, 10225 10226 978801401471AD920041B016 /* JSDateMath.cpp in Sources */, 10227 0F7DF13B1E2971110095951B /* JSDestructibleObjectSubspace.cpp in Sources */, 10226 10228 FE384EE51ADDB7AD0055DE2C /* JSDollarVM.cpp in Sources */, 10227 10229 FE384EE71ADDB7AD0055DE2C /* JSDollarVMPrototype.cpp in Sources */, … … 10236 10238 A59455921824744700CC3843 /* JSGlobalObjectDebuggable.cpp in Sources */, 10237 10239 A57D23E91891B0770031C7FA /* JSGlobalObjectDebuggerAgent.cpp in Sources */, 10238 0F7DF1361E2970DF0095951B /* Subspace.cpp in Sources */,10239 ADE8029B1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.cpp in Sources */,10240 10240 14E9D17B107EC469004DDA21 /* JSGlobalObjectFunctions.cpp in Sources */, 10241 10241 A51007C0187CC3C600B38879 /* JSGlobalObjectInspectorController.cpp in Sources */, … … 10274 10274 9928FF3B18AC4AEC00B8CF12 /* JSReplayInputs.cpp in Sources */, 10275 10275 14874AE515EBDE4A002E3587 /* JSScope.cpp in Sources */, 10276 14815F5F991C46BEB98D0016 /* JSScriptFetcher.cpp in Sources */, 10276 10277 A7C0C4AD1681067E0017011D /* JSScriptRef.cpp in Sources */, 10277 10278 0F919D10157F3329004A4E7D /* JSSegmentedVariableObject.cpp in Sources */, 10279 0F4F82871E2FFDDD0075184C /* JSSegmentedVariableObjectSubspace.cpp in Sources */, 10278 10280 A7299D9D17D12837005F5FF9 /* JSSet.cpp in Sources */, 10279 10281 A790DD6F182F499700588807 /* JSSetIterator.cpp in Sources */, 10282 FA3AB211C8494524AB390267 /* JSSourceCode.cpp in Sources */, 10280 10283 147F39D5107EC37600427A48 /* JSString.cpp in Sources */, 10281 10284 70EC0EC21AA0D7DA00B6AAFA /* JSStringIterator.cpp in Sources */, … … 10283 10286 1482B74E0A43032800517CFC /* JSStringRef.cpp in Sources */, 10284 10287 146AAB380B66A94400E55F16 /* JSStringRefCF.cpp in Sources */, 10288 0F7DF1401E2AFC500095951B /* JSStringSubspace.cpp in Sources */, 10285 10289 0F919D0C157EE09F004A4E7D /* JSSymbolTableObject.cpp in Sources */, 10286 10290 70ECA6051AFDBEA200449739 /* JSTemplateRegistryKey.cpp in Sources */, … … 10341 10345 142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */, 10342 10346 14D2F3DA139F4BE200491031 /* MarkedSpace.cpp in Sources */, 10347 0F660E371E0517B90031462C /* MarkingConstraint.cpp in Sources */, 10348 0F660E391E0517BF0031462C /* MarkingConstraintSet.cpp in Sources */, 10343 10349 142D6F1113539A4100B02E86 /* MarkStack.cpp in Sources */, 10344 10350 DC69AA661CF7A1F200C6272F /* MatchResult.cpp in Sources */, … … 10351 10357 14AD91181DCA97FD0014F9FE /* ModuleProgramCodeBlock.cpp in Sources */, 10352 10358 147341E41DC2CE9600AA29BA /* ModuleProgramExecutable.cpp in Sources */, 10359 0F1FB3901E173A6B00A9BE50 /* MutatorScheduler.cpp in Sources */, 10353 10360 0FA762061DB9243100B7A2FD /* MutatorState.cpp in Sources */, 10354 10361 14469DE0107EC7E700650446 /* NativeErrorConstructor.cpp in Sources */, … … 10462 10469 0F6DB7EA1D6124B800CDBF8E /* StackFrame.cpp in Sources */, 10463 10470 A7C1EAF117987AB600299DB2 /* StackVisitor.cpp in Sources */, 10471 0F4F828B1E31B9740075184C /* StochasticSpaceTimeMutatorScheduler.cpp in Sources */, 10464 10472 0F7CF9531DC027DB0098CC12 /* StopIfNecessaryTimer.cpp in Sources */, 10465 10473 A730B6131250068F009D25B1 /* StrictEvalActivation.cpp in Sources */, 10466 10474 14469DEB107EC7E700650446 /* StringConstructor.cpp in Sources */, 10467 10475 70EC0EC61AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp in Sources */, 10468 0F1FB3901E173A6B00A9BE50 /* MutatorScheduler.cpp in Sources */,10469 10476 14469DEC107EC7E700650446 /* StringObject.cpp in Sources */, 10470 10477 14469DED107EC7E700650446 /* StringPrototype.cpp in Sources */, … … 10477 10484 0F766D3815AE4A1C008F363E /* StructureStubClearingWatchpoint.cpp in Sources */, 10478 10485 BCCF0D0C0EF0B8A500413C8F /* StructureStubInfo.cpp in Sources */, 10486 0F7DF1361E2970DF0095951B /* Subspace.cpp in Sources */, 10479 10487 0F4A38F91C8E13DF00190318 /* SuperSampler.cpp in Sources */, 10480 10488 705B41AB1A6E501E00716757 /* Symbol.cpp in Sources */, … … 10483 10491 705B41B11A6E501E00716757 /* SymbolPrototype.cpp in Sources */, 10484 10492 0F919D2815856773004A4E7D /* SymbolTable.cpp in Sources */, 10493 0F1FB38E1E173A6500A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp in Sources */, 10485 10494 DC7997841CDE9FA2004D4A09 /* TagRegistersMode.cpp in Sources */, 10486 10495 70ECA6071AFDBEA200449739 /* TemplateRegistry.cpp in Sources */, … … 10518 10527 79EE0BFF1B4AFB85000385C9 /* VariableEnvironment.cpp in Sources */, 10519 10528 0F6C73501AC9F99F00BE1682 /* VariableWriteFireDetail.cpp in Sources */, 10520 0F660E371E0517B90031462C /* MarkingConstraint.cpp in Sources */,10521 10529 0FE0502C1AA9095600D33B33 /* VarOffset.cpp in Sources */, 10522 10530 0F20C2591A8013AB00DA3229 /* VirtualRegister.cpp in Sources */, … … 10531 10539 79B759741DFA4C600052174C /* WasmMemoryInformation.cpp in Sources */, 10532 10540 53F40E971D5A7BEC0099A1B6 /* WasmModuleParser.cpp in Sources */, 10541 ADB6F67D1E15D7600082F384 /* WasmPageCount.cpp in Sources */, 10533 10542 531374BF1D5CE95000AF7A0B /* WasmPlan.cpp in Sources */, 10543 AD7438C11E0457AA00FD0C2A /* WasmSignature.cpp in Sources */, 10534 10544 53FF7F9B1DBFD2B900A26CCC /* WasmValidate.cpp in Sources */, 10535 10545 FED94F2E171E3E2300BE77A4 /* Watchdog.cpp in Sources */, 10536 10546 0F919D2515853CE0004A4E7D /* Watchpoint.cpp in Sources */, 10537 10547 1ACF7377171CA6FB00C9BB1E /* Weak.cpp in Sources */, 10538 AD7438C11E0457AA00FD0C2A /* WasmSignature.cpp in Sources */,10539 10548 14E84F9E14EE1ACC00D6D5D4 /* WeakBlock.cpp in Sources */, 10540 10549 14F7256514EE265E00B1652B /* WeakHandleOwner.cpp in Sources */, … … 10550 10559 AD2FCBF01DB58DAD00B3E736 /* WebAssemblyInstanceConstructor.cpp in Sources */, 10551 10560 AD2FCBF21DB58DAD00B3E736 /* WebAssemblyInstancePrototype.cpp in Sources */, 10561 ADE8029E1E08F2280058DE78 /* WebAssemblyLinkErrorConstructor.cpp in Sources */, 10562 ADE8029B1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.cpp in Sources */, 10552 10563 AD2FCBF41DB58DAD00B3E736 /* WebAssemblyMemoryConstructor.cpp in Sources */, 10553 10564 AD2FCBF61DB58DAD00B3E736 /* WebAssemblyMemoryPrototype.cpp in Sources */, … … 10569 10580 86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */, 10570 10581 86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */, 10571 FA3AB211C8494524AB390267 /* JSSourceCode.cpp in Sources */,10572 14815F5F991C46BEB98D0016 /* JSScriptFetcher.cpp in Sources */,10573 10582 ); 10574 10583 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/JavaScriptCore/inspector/AsyncStackTrace.h
r211382 r211385 1 1 /* 2 * Copyright (C) 201 6Apple Inc. All rights reserved.2 * Copyright (C) 2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 .tree-outline > .item.thread .icon { 27 content: url(../Images/Thread.svg); 28 width: 15px; 29 height: 15px; 30 } 26 #pragma once 31 27 32 .tree-outline > .item.thread .status-button.resume { 33 width: 11px; 34 height: 11px; 35 vertical-align: middle; 36 fill: hsla(0, 0%, 0%, 0.5); 37 stroke: none; 38 display: none; 39 } 28 #include "InspectorProtocolObjects.h" 29 #include <wtf/Forward.h> 30 #include <wtf/RefCounted.h> 40 31 41 .tree-outline > .item.thread .status-button.resume:active { 42 fill: hsla(0, 0%, 0%, 0.7); 43 } 32 namespace Inspector { 44 33 45 .tree-outline:matches(:focus, .force-focus) > .item.thread.selected .status-button.resume { 46 fill: var(--selected-foreground-color); 47 } 34 class ScriptCallStack; 48 35 49 .tree-outline > .item.thread.selected .status-button.resume, 50 .tree-outline > .item.thread:hover .status-button.resume { 51 display: inline-block; 52 } 36 class JS_EXPORT_PRIVATE AsyncStackTrace : public RefCounted<AsyncStackTrace> { 37 public: 38 enum class State { 39 Pending, 40 Active, 41 Dispatched, 42 Canceled, 43 }; 44 45 static RefPtr<AsyncStackTrace> create(RefPtr<ScriptCallStack>, bool singleShot, RefPtr<AsyncStackTrace> parent); 46 47 bool isPending() const; 48 bool isLocked() const; 49 50 void willDispatchAsyncCall(size_t maxDepth); 51 void didDispatchAsyncCall(); 52 void didCancelAsyncCall(); 53 54 RefPtr<Inspector::Protocol::Console::StackTrace> buildInspectorObject() const; 55 56 ~AsyncStackTrace(); 57 58 private: 59 AsyncStackTrace(RefPtr<ScriptCallStack>, bool, RefPtr<AsyncStackTrace>); 60 61 void truncate(size_t maxDepth); 62 void remove(); 63 64 RefPtr<ScriptCallStack> m_callStack; 65 RefPtr<AsyncStackTrace> m_parent; 66 unsigned m_childCount { 0 }; 67 State m_state { State::Pending }; 68 bool m_truncated { false }; 69 bool m_singleShot { true }; 70 }; 71 72 } // namespace Inspector -
trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp
r211381 r211385 31 31 #include "InspectorDebuggerAgent.h" 32 32 33 #include "AsyncStackTrace.h" 33 34 #include "ContentSearchUtilities.h" 34 35 #include "InjectedScript.h" … … 213 214 } 214 215 215 RefPtr<Inspector::Protocol::Console::StackTrace> InspectorDebuggerAgent::buildAsyncStackTrace(const AsyncCallIdentifier& identifier)216 {217 RefPtr<Inspector::Protocol::Console::StackTrace> topStackTrace;218 RefPtr<Inspector::Protocol::Console::StackTrace> previousStackTrace;219 220 auto iterator = m_asyncCallIdentifierToData.find(identifier);221 auto end = m_asyncCallIdentifierToData.end();222 while (iterator != end) {223 const auto& callData = iterator->value;224 ASSERT(callData.callStack && callData.callStack->size());225 if (!callData.callStack || !callData.callStack->size())226 break;227 228 RefPtr<Inspector::Protocol::Console::StackTrace> stackTrace = Inspector::Protocol::Console::StackTrace::create()229 .setCallFrames(callData.callStack->buildInspectorArray())230 .release();231 232 if (callData.callStack->at(0).isNative())233 stackTrace->setTopCallFrameIsBoundary(true);234 if (!topStackTrace)235 topStackTrace = stackTrace;236 if (previousStackTrace)237 previousStackTrace->setParentStackTrace(stackTrace);238 239 if (!callData.parentAsyncCallIdentifier)240 break;241 242 previousStackTrace = stackTrace;243 iterator = m_asyncCallIdentifierToData.find(callData.parentAsyncCallIdentifier.value());244 }245 246 return topStackTrace;247 }248 249 216 void InspectorDebuggerAgent::handleConsoleAssert(const String& message) 250 217 { … … 269 236 return; 270 237 271 if (m_currentAsyncCallIdentifier) 272 refAsyncCallData(m_currentAsyncCallIdentifier.value()); 273 274 m_asyncCallIdentifierToData.set(std::make_pair(asyncCallType, callbackIdentifier), AsyncCallData(callStack, m_currentAsyncCallIdentifier, singleShot)); 238 RefPtr<AsyncStackTrace> parentStackTrace; 239 if (m_currentAsyncCallIdentifier) { 240 auto it = m_pendingAsyncCalls.find(m_currentAsyncCallIdentifier.value()); 241 ASSERT(it != m_pendingAsyncCalls.end()); 242 parentStackTrace = it->value; 243 } 244 245 auto identifier = std::make_pair(asyncCallType, callbackIdentifier); 246 auto asyncStackTrace = AsyncStackTrace::create(WTFMove(callStack), singleShot, WTFMove(parentStackTrace)); 247 248 m_pendingAsyncCalls.set(identifier, WTFMove(asyncStackTrace)); 275 249 } 276 250 … … 280 254 return; 281 255 282 const auto asyncCallIdentifier = std::make_pair(asyncCallType, callbackIdentifier); 283 derefAsyncCallData(asyncCallIdentifier); 256 auto identifier = std::make_pair(asyncCallType, callbackIdentifier); 257 auto it = m_pendingAsyncCalls.find(identifier); 258 if (it == m_pendingAsyncCalls.end()) 259 return; 260 261 auto& asyncStackTrace = it->value; 262 asyncStackTrace->didCancelAsyncCall(); 263 264 if (m_currentAsyncCallIdentifier && m_currentAsyncCallIdentifier.value() == identifier) 265 return; 266 267 m_pendingAsyncCalls.remove(identifier); 284 268 } 285 269 … … 294 278 // A call can be scheduled before the Inspector is opened, or while async stack 295 279 // traces are disabled. If no call data exists, do nothing. 296 auto asyncCallIdentifier = std::make_pair(asyncCallType, callbackIdentifier); 297 if (!m_asyncCallIdentifierToData.contains(asyncCallIdentifier)) 298 return; 299 300 m_currentAsyncCallIdentifier = WTFMove(asyncCallIdentifier); 301 refAsyncCallData(asyncCallIdentifier); 280 auto identifier = std::make_pair(asyncCallType, callbackIdentifier); 281 auto it = m_pendingAsyncCalls.find(identifier); 282 if (it == m_pendingAsyncCalls.end()) 283 return; 284 285 auto& asyncStackTrace = it->value; 286 asyncStackTrace->willDispatchAsyncCall(m_asyncStackTraceDepth); 287 288 m_currentAsyncCallIdentifier = identifier; 302 289 } 303 290 … … 310 297 return; 311 298 312 derefAsyncCallData(m_currentAsyncCallIdentifier.value()); 299 auto identifier = m_currentAsyncCallIdentifier.value(); 300 auto it = m_pendingAsyncCalls.find(identifier); 301 ASSERT(it != m_pendingAsyncCalls.end()); 302 303 auto& asyncStackTrace = it->value; 304 asyncStackTrace->didDispatchAsyncCall(); 305 313 306 m_currentAsyncCallIdentifier = std::nullopt; 307 308 if (!asyncStackTrace->isPending()) 309 m_pendingAsyncCalls.remove(identifier); 314 310 } 315 311 … … 1002 998 1003 999 RefPtr<Inspector::Protocol::Console::StackTrace> asyncStackTrace; 1004 if (m_currentAsyncCallIdentifier) 1005 asyncStackTrace = buildAsyncStackTrace(m_currentAsyncCallIdentifier.value()); 1000 if (m_currentAsyncCallIdentifier) { 1001 auto it = m_pendingAsyncCalls.find(m_currentAsyncCallIdentifier.value()); 1002 if (it != m_pendingAsyncCalls.end()) 1003 asyncStackTrace = it->value->buildInspectorObject(); 1004 } 1006 1005 1007 1006 m_frontendDispatcher->paused(currentCallFrames(injectedScript), m_breakReason, m_breakAuxData, asyncStackTrace); … … 1139 1138 void InspectorDebuggerAgent::clearAsyncStackTraceData() 1140 1139 { 1141 m_ asyncCallIdentifierToData.clear();1140 m_pendingAsyncCalls.clear(); 1142 1141 m_currentAsyncCallIdentifier = std::nullopt; 1143 1142 } 1144 1143 1145 void InspectorDebuggerAgent::refAsyncCallData(const AsyncCallIdentifier& identifier)1146 {1147 auto iterator = m_asyncCallIdentifierToData.find(identifier);1148 if (iterator == m_asyncCallIdentifierToData.end())1149 return;1150 1151 iterator->value.referenceCount++;1152 }1153 1154 void InspectorDebuggerAgent::derefAsyncCallData(const AsyncCallIdentifier& identifier)1155 {1156 auto iterator = m_asyncCallIdentifierToData.find(identifier);1157 if (iterator == m_asyncCallIdentifierToData.end())1158 return;1159 1160 auto& asyncCallData = iterator->value;1161 asyncCallData.referenceCount--;1162 if (asyncCallData.referenceCount)1163 return;1164 1165 if (asyncCallData.parentAsyncCallIdentifier)1166 derefAsyncCallData(asyncCallData.parentAsyncCallIdentifier.value());1167 m_asyncCallIdentifierToData.remove(identifier);1168 }1169 1170 1144 } // namespace Inspector -
trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h
r211381 r211385 45 45 namespace Inspector { 46 46 47 class AsyncStackTrace; 47 48 class InjectedScript; 48 49 class InjectedScriptManager; … … 50 51 class InspectorObject; 51 52 class ScriptDebugServer; 52 struct AsyncCallData;53 53 typedef String ErrorString; 54 54 … … 165 165 typedef std::pair<int, int> AsyncCallIdentifier; 166 166 167 RefPtr<Inspector::Protocol::Console::StackTrace> buildAsyncStackTrace(const AsyncCallIdentifier&);168 void refAsyncCallData(const AsyncCallIdentifier&);169 void derefAsyncCallData(const AsyncCallIdentifier&);170 171 167 typedef HashMap<JSC::SourceID, Script> ScriptsMap; 172 168 typedef HashMap<String, Vector<JSC::BreakpointID>> BreakpointIdentifierToDebugServerBreakpointIDsMap; 173 169 typedef HashMap<String, RefPtr<InspectorObject>> BreakpointIdentifierToBreakpointMap; 174 170 typedef HashMap<JSC::BreakpointID, String> DebugServerBreakpointIDToBreakpointIdentifier; 175 176 struct AsyncCallData {177 AsyncCallData(RefPtr<ScriptCallStack> callStack, std::optional<AsyncCallIdentifier> parentAsyncCallIdentifier, bool singleShot)178 : callStack(callStack)179 , parentAsyncCallIdentifier(parentAsyncCallIdentifier)180 , referenceCount(singleShot ? 0 : 1)181 {182 }183 184 AsyncCallData() = default;185 186 RefPtr<ScriptCallStack> callStack;187 std::optional<AsyncCallIdentifier> parentAsyncCallIdentifier { std::nullopt };188 unsigned referenceCount { 0 };189 };190 171 191 172 InjectedScriptManager& m_injectedScriptManager; … … 205 186 ShouldDispatchResumed m_conditionToDispatchResumed { ShouldDispatchResumed::No }; 206 187 bool m_enablePauseWhenIdle { false }; 207 HashMap<AsyncCallIdentifier, AsyncCallData> m_asyncCallIdentifierToData;188 HashMap<AsyncCallIdentifier, RefPtr<AsyncStackTrace>> m_pendingAsyncCalls; 208 189 std::optional<AsyncCallIdentifier> m_currentAsyncCallIdentifier { std::nullopt }; 209 190 bool m_enabled { false }; -
trunk/Source/JavaScriptCore/inspector/protocol/Console.json
r211381 r211385 41 41 { "name": "callFrames", "type": "array", "items": { "$ref": "CallFrame" } }, 42 42 { "name": "topCallFrameIsBoundary", "type": "boolean", "optional": true, "description": "Whether the first item in <code>callFrames</code> is the native function that scheduled the asynchronous operation (e.g. setTimeout)." }, 43 { "name": "truncated", "type": "boolean", "optional": true, "description": "Whether one or more frames have been truncated from the bottom of the stack." }, 43 44 { "name": "parentStackTrace", "$ref": "StackTrace", "optional": true, "description": "Parent StackTrace." } 44 45 ] -
trunk/Source/WebInspectorUI/ChangeLog
r211381 r211385 1 2017-01-30 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops) 4 https://bugs.webkit.org/show_bug.cgi?id=165633 5 <rdar://problem/29738502> 6 7 Reviewed by Joseph Pecoraro. 8 9 * Localizations/en.lproj/localizedStrings.js: 10 Text for "Truncated" marker tree element. 11 12 * UserInterface/Models/StackTrace.js: 13 (WebInspector.StackTrace): 14 (WebInspector.StackTrace.fromPayload): 15 (WebInspector.StackTrace.prototype.get truncated): 16 Plumbing for new Console.StackTrace property `truncated`. 17 18 * UserInterface/Views/ThreadTreeElement.css: 19 (.tree-outline > .item.thread + ol > .item.truncated-call-frames): 20 (.tree-outline > .item.thread + ol > .item.truncated-call-frames .icon): 21 Styles for "Truncated" marker tree element. 22 23 * UserInterface/Views/ThreadTreeElement.js: 24 (WebInspector.ThreadTreeElement.prototype.refresh): 25 Append "Truncated" marker tree element if necessary. 26 27 * Versions/Inspector-iOS-10.3.json: 28 1 29 2017-01-30 Ryan Haddad <ryanhaddad@apple.com> 2 30 -
trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js
r211381 r211385 126 126 localizedStrings["CSP Hash"] = "CSP Hash"; 127 127 localizedStrings["Cached"] = "Cached"; 128 localizedStrings["Call Frames Truncated"] = "Call Frames Truncated"; 128 129 localizedStrings["Call Stack"] = "Call Stack"; 129 130 localizedStrings["Call Trees"] = "Call Trees"; -
trunk/Source/WebInspectorUI/UserInterface/Models/StackTrace.js
r211381 r211385 26 26 WebInspector.StackTrace = class StackTrace extends WebInspector.Object 27 27 { 28 constructor(callFrames, topCallFrameIsBoundary )28 constructor(callFrames, topCallFrameIsBoundary, truncated, parentStackTrace) 29 29 { 30 30 super(); … … 34 34 this._callFrames = callFrames; 35 35 this._topCallFrameIsBoundary = topCallFrameIsBoundary || false; 36 this._parentStackTrace = null; 36 this._truncated = truncated || false; 37 this._parentStackTrace = parentStackTrace || null; 37 38 } 38 39 … … 46 47 while (payload) { 47 48 let callFrames = payload.callFrames.map((x) => WebInspector.CallFrame.fromPayload(target, x)); 48 let stackTrace = new WebInspector.StackTrace(callFrames, payload.topCallFrameIsBoundary );49 let stackTrace = new WebInspector.StackTrace(callFrames, payload.topCallFrameIsBoundary, payload.truncated); 49 50 if (!result) 50 51 result = stackTrace; … … 170 171 171 172 get topCallFrameIsBoundary() { return this._topCallFrameIsBoundary; } 173 get truncated() { return this._truncated; } 172 174 get parentStackTrace() { return this._parentStackTrace; } 173 175 }; -
trunk/Source/WebInspectorUI/UserInterface/Views/ThreadTreeElement.css
r211381 r211385 51 51 display: inline-block; 52 52 } 53 54 .tree-outline > .item.thread + ol > .item.truncated-call-frames { 55 color: var(--text-color-gray-medium); 56 border-top: dashed 0.5px var(--border-color); 57 margin-left: 31px; 58 margin-right: 6px; 59 padding-left: 0; 60 cursor: default; 61 } 62 63 .tree-outline > .item.thread + ol > .item.truncated-call-frames .icon { 64 margin-left: 0; 65 content: url(../Images/Function.svg); 66 opacity: 0.6; 67 } -
trunk/Source/WebInspectorUI/UserInterface/Views/ThreadTreeElement.js
r211381 r211385 93 93 this.appendChild(new WebInspector.CallFrameTreeElement(currentStackTrace.callFrames[i])); 94 94 95 if (currentStackTrace.truncated) { 96 let truncatedTreeElement = new WebInspector.GeneralTreeElement("truncated-call-frames", WebInspector.UIString("Call Frames Truncated")); 97 truncatedTreeElement.selectable = false; 98 this.appendChild(truncatedTreeElement); 99 } 100 95 101 currentStackTrace = currentStackTrace.parentStackTrace; 96 102 } -
trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json
r211381 r211385 588 588 { "name": "callFrames", "type": "array", "items": { "$ref": "CallFrame" } }, 589 589 { "name": "topCallFrameIsBoundary", "type": "boolean", "optional": true, "description": "Whether the first item in <code>callFrames</code> is the native function that scheduled the asynchronous operation (e.g. setTimeout)." }, 590 { "name": "truncated", "type": "boolean", "optional": true, "description": "Whether one or more frames have been truncated from the bottom of the stack." }, 590 591 { "name": "parentStackTrace", "$ref": "StackTrace", "optional": true, "description": "Parent StackTrace." } 591 592 ]
Note: See TracChangeset
for help on using the changeset viewer.