Changeset 211385 in webkit


Ignore:
Timestamp:
Jan 30, 2017 2:01:07 PM (7 years ago)
Author:
Matt Baker
Message:

Web Inspector: Need some limit on Async Call Stacks for async loops (rAF loops)
https://bugs.webkit.org/show_bug.cgi?id=165633
<rdar://problem/29738502>

Reviewed by Joseph Pecoraro.

Source/JavaScriptCore:

This patch limits the memory used by the Inspector backend to store async
stack trace data.

Asynchronous stack traces are stored as a disjoint set of parent pointer
trees. Tree nodes represent asynchronous operations, and hold a copy of
the stack trace at the time the operation was scheduled. Each tree can
be regarded as a set of stack traces, stored as singly linked lists that
share part of their structure (specifically their tails). Traces belonging
to the same tree will at least share a common root. A stack trace begins
at a leaf node and follows the chain of parent pointers to the root of
of the tree. Leaf nodes always contain pending asynchronous calls.

When an asynchronous operation is scheduled with requestAnimationFrame,
setInterval, etc, a node is created containing the current call stack and
some bookkeeping data for the operation. An unique identifier comprised
of an operation type and callback identifier is mapped to the node. If
scheduling the callback was itself the result of an asynchronous call,
the node becomes a child of the node associated with that call, otherwise
it becomes the root of a new tree.

A node is either pending, active, dispatched, or canceled. Nodes
start out as pending. After a callback for a pending node is dispatched
the node is marked as such, unless it is a repeating callback such as
setInterval, in which case it remains pending. Once a node is no longer
pending it is removed, as long as it has no children. Since nodes are
reference counted, it is a property of the stack trace tree that nodes
that are no longer pending and have no children pointing to them will be
automatically pruned from the tree.

If an async operation is canceled (e.g. cancelTimeout), the associated
node is marked as such. If the callback is not being dispatched at the
time, and has no children, it is removed.

Because async operations can be chained indefinitely, stack traces are
limited to a maximum depth. The depth of a stack trace is equal to the
sum of the depths of its nodes, with a node's depth equal to the number
of frames in its associated call stack. For any stack trace,

S = { s𝟶, s𝟷, …, s𝑘 }, with endpoints s𝟶, s𝑘
depth(S) = depth(s𝟶) + depth(s𝟷) + … + depth(s𝑘)

A stack trace is truncated when it exceeds the maximum depth. Truncation
occurs on node boundaries, not call frames, consequently the maximum depth
is more of a target than a guarantee:

d = maximum stack trace depth
for all S, depth(S) ≤ d + depth(s𝑘)

Because nodes can belong to multiple stack traces, it may be necessary
to clone the tail of a stack trace being truncated to prevent other traces
from being effected.

  • CMakeLists.txt:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • inspector/AsyncStackTrace.cpp: Added.

(Inspector::AsyncStackTrace::create):
(Inspector::AsyncStackTrace::AsyncStackTrace):
(Inspector::AsyncStackTrace::~AsyncStackTrace):
(Inspector::AsyncStackTrace::isPending):
(Inspector::AsyncStackTrace::isLocked):
(Inspector::AsyncStackTrace::willDispatchAsyncCall):
(Inspector::AsyncStackTrace::didDispatchAsyncCall):
(Inspector::AsyncStackTrace::didCancelAsyncCall):
(Inspector::AsyncStackTrace::buildInspectorObject):
(Inspector::AsyncStackTrace::truncate):
(Inspector::AsyncStackTrace::remove):

  • inspector/AsyncStackTrace.h:
  • inspector/agents/InspectorDebuggerAgent.cpp:

(Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
(Inspector::InspectorDebuggerAgent::didCancelAsyncCall):
(Inspector::InspectorDebuggerAgent::willDispatchAsyncCall):
(Inspector::InspectorDebuggerAgent::didDispatchAsyncCall):
(Inspector::InspectorDebuggerAgent::didPause):
(Inspector::InspectorDebuggerAgent::clearAsyncStackTraceData):
(Inspector::InspectorDebuggerAgent::buildAsyncStackTrace): Deleted.
(Inspector::InspectorDebuggerAgent::refAsyncCallData): Deleted.
(Inspector::InspectorDebuggerAgent::derefAsyncCallData): Deleted.

  • inspector/agents/InspectorDebuggerAgent.h:
  • inspector/protocol/Console.json:

Source/WebInspectorUI:

  • Localizations/en.lproj/localizedStrings.js:

Text for "Truncated" marker tree element.

  • UserInterface/Models/StackTrace.js:

(WebInspector.StackTrace):
(WebInspector.StackTrace.fromPayload):
(WebInspector.StackTrace.prototype.get truncated):
Plumbing for new Console.StackTrace property truncated.

  • UserInterface/Views/ThreadTreeElement.css:

(.tree-outline > .item.thread + ol > .item.truncated-call-frames):
(.tree-outline > .item.thread + ol > .item.truncated-call-frames .icon):
Styles for "Truncated" marker tree element.

  • UserInterface/Views/ThreadTreeElement.js:

(WebInspector.ThreadTreeElement.prototype.refresh):
Append "Truncated" marker tree element if necessary.

  • Versions/Inspector-iOS-10.3.json:

LayoutTests:

Add truncation test cases and cleanup call frame logging.

  • inspector/debugger/async-stack-trace-expected.txt:
  • inspector/debugger/async-stack-trace.html:
  • inspector/debugger/resources/log-active-stack-trace.js: Added.

(TestPage.registerInitializer.window.getActiveStackTrace):
(TestPage.registerInitializer.logStackTrace.logCallFrame):
(TestPage.registerInitializer.):
(TestPage.registerInitializer.window.logActiveStackTrace):
(TestPage.registerInitializer):

Location:
trunk
Files:
2 added
15 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r211381 r211385  
     12017-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
    1202017-01-30  Ryan Haddad  <ryanhaddad@apple.com>
    221
  • trunk/LayoutTests/inspector/debugger/async-stack-trace-expected.txt

    r211381 r211385  
    77CALL STACK:
    880: [F] pauseThenFinishTest
    9 -- [N] requestAnimationFrame ----
    10 1: [F] testRequestAnimationFrame
    11 2: [P] Global Code
     9ASYNC CALL STACK:
     101: --- requestAnimationFrame ---
     112: [F] testRequestAnimationFrame
     123: [P] Global Code
    1213
    1314-- Running test case: CheckAsyncStackTrace.SetTimeout
     
    1516CALL STACK:
    16170: [F] pauseThenFinishTest
    17 -- [N] setTimeout ----
    18 1: [F] testSetTimeout
    19 2: [P] Global Code
     18ASYNC CALL STACK:
     191: --- setTimeout ---
     202: [F] testSetTimeout
     213: [P] Global Code
    2022
    2123-- Running test case: CheckAsyncStackTrace.SetInterval
     
    2325CALL STACK:
    24260: [F] intervalFired
    25 -- [N] setInterval ----
    26 1: [F] testSetInterval
    27 2: [P] Global Code
     27ASYNC CALL STACK:
     281: --- setInterval ---
     292: [F] testSetInterval
     303: [P] Global Code
    2831PAUSE #2
    2932CALL STACK:
    30330: [F] intervalFired
    31 -- [N] setInterval ----
    32 1: [F] testSetInterval
    33 2: [P] Global Code
     34ASYNC CALL STACK:
     351: --- setInterval ---
     362: [F] testSetInterval
     373: [P] Global Code
    3438PAUSE #3
    3539CALL STACK:
    36400: [F] intervalFired
    37 -- [N] setInterval ----
    38 1: [F] testSetInterval
    39 2: [P] Global Code
     41ASYNC CALL STACK:
     421: --- setInterval ---
     432: [F] testSetInterval
     443: [P] Global Code
    4045
    4146-- Running test case: CheckAsyncStackTrace.ChainedRequestAnimationFrame
     
    4348CALL STACK:
    44490: [F] pauseThenFinishTest
    45 -- [N] requestAnimationFrame ----
    46 1: [F] testRequestAnimationFrame
    47 -- [N] requestAnimationFrame ----
    48 2: [F] testChainedRequestAnimationFrame
    49 3: [P] Global Code
     50ASYNC CALL STACK:
     511: --- requestAnimationFrame ---
     522: [F] testRequestAnimationFrame
     533: --- requestAnimationFrame ---
     544: [F] testChainedRequestAnimationFrame
     555: [P] Global Code
    5056
    5157-- Running test case: CheckAsyncStackTrace.ReferenceCounting
     
    5359CALL STACK:
    54600: [F] pauseThenFinishTest
    55 -- [N] setTimeout ----
    56 1: [F] intervalFired
    57 -- [N] setInterval ----
    58 2: [F] testReferenceCounting
    59 3: [P] Global Code
     61ASYNC CALL STACK:
     621: --- setTimeout ---
     632: [F] intervalFired
     643: --- setInterval ---
     654: [F] testReferenceCounting
     665: [P] Global Code
    6067-- Running test setup.
    6168Save DebuggerManager.asyncStackTraceDepth
     
    6875Save DebuggerManager.asyncStackTraceDepth
    6976
    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
     78Set Debugger.asyncStackTraceDepth equal to 4
     79PASS: Non-root StackTrace should not be truncated.
     80PASS: Non-root StackTrace should not be truncated.
     81PASS: StackTrace root should be truncated.
     82PASS: StackTrace should be truncated to the nearest call stack.
     83CALL STACK:
     840: [F] pauseThenFinishTest
     851: [F] repeat
     86ASYNC CALL STACK:
     872: --- requestAnimationFrame ---
     883: [F] repeat
     894: --- requestAnimationFrame ---
     905: [F] repeat
     91(remaining call frames truncated)
     92-- Running test teardown.
     93Restore DebuggerManager.asyncStackTraceDepth
     94-- Running test setup.
     95Save DebuggerManager.asyncStackTraceDepth
     96
     97-- Running test case: AsyncStackTrace.ForceTruncationWithinCallStack
     98Set Debugger.asyncStackTraceDepth equal to 5
     99PASS: Non-root StackTrace should not be truncated.
     100PASS: Non-root StackTrace should not be truncated.
     101PASS: Non-root StackTrace should not be truncated.
     102PASS: StackTrace root should be truncated.
     103PASS: StackTrace should be truncated to the nearest call stack.
     104CALL STACK:
     1050: [F] pauseThenFinishTest
     1061: [F] repeat
     107ASYNC CALL STACK:
     1082: --- requestAnimationFrame ---
     1093: [F] repeat
     1104: --- requestAnimationFrame ---
     1115: [F] repeat
     1126: --- requestAnimationFrame ---
     1137: [F] repeat
     114(remaining call frames truncated)
    72115-- Running test teardown.
    73116Restore DebuggerManager.asyncStackTraceDepth
  • trunk/LayoutTests/inspector/debugger/async-stack-trace.html

    r211381 r211385  
    33<head>
    44<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
     5<script src="resources/log-active-stack-trace.js"></script>
    56<script>
    67const timerDelay = 20;
     
    4950}
    5051
     52function 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
    5164function test()
    5265{
    5366    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     }
    9967
    10068    function addSimpleTestCase(name, expression) {
     
    10573                function handlePaused() {
    10674                    InspectorTest.log(`PAUSE #${++pauseCount}`);
    107                     InspectorTest.log("CALL STACK:");
    108                     logCallStack();
     75                    logActiveStackTrace();
    10976                    WebInspector.debuggerManager.resume();
    11077                }
     
    147114            WebInspector.debuggerManager.awaitEvent(WebInspector.DebuggerManager.Event.Paused)
    148115            .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.");
    151119                WebInspector.debuggerManager.resume().then(resolve, reject);
    152120            });
     
    157125    });
    158126
    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);
    170143
    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();
    174150
    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);
    181176
    182177    suite.runTestCasesAndFinish();
  • trunk/Source/JavaScriptCore/CMakeLists.txt

    r211381 r211385  
    515515    heap/WriteBarrierSupport.cpp
    516516
     517    inspector/AsyncStackTrace.cpp
    517518    inspector/ConsoleMessage.cpp
    518519    inspector/ContentSearchUtilities.cpp
  • trunk/Source/JavaScriptCore/ChangeLog

    r211381 r211385  
     12017-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
    1892017-01-30  Ryan Haddad  <ryanhaddad@apple.com>
    290
  • trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r211381 r211385  
    13771377                65FB5117184EEE7000C12B70 /* ProtoCallFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65FB5116184EE9BC00C12B70 /* ProtoCallFrame.cpp */; };
    13781378                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 */; };
    13791381                6AD2CB4D19B9140100065719 /* DebuggerEvalEnabler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */; settings = {ATTRIBUTES = (Private, ); }; };
    13801382                70113D4B1A8DB093003848C4 /* IteratorOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 70113D491A8DB093003848C4 /* IteratorOperations.cpp */; };
     
    38403842                65FB5115184EE8F800C12B70 /* ProtoCallFrame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProtoCallFrame.h; sourceTree = "<group>"; };
    38413843                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>"; };
    38423846                6AD2CB4C19B9140100065719 /* DebuggerEvalEnabler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DebuggerEvalEnabler.h; sourceTree = "<group>"; };
    38433847                6BA93C9590484C5BAD9316EA /* JSScriptFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSScriptFetcher.h; sourceTree = "<group>"; };
     
    50305034                                0F9327591C20BCBA00CF6564 /* dynbench */,
    50315035                                0FF922CF14F46B130041A24E /* JSCLLIntOffsetsExtractor */,
     5036                                141211200A48793C00480255 /* minidom */,
    50325037                                0F6183431C45F62A0072450B /* testair */,
     5038                                14BD59BF0A3E8F9000BAF59C /* testapi */,
     5039                                0FEC85AD1BDB5CF10080FF74 /* testb3 */,
    50335040                                6511230514046A4C002B101D /* testRegExp */,
    50345041                                932F5BD90822A1C700736975 /* JavaScriptCore.framework */,
    50355042                                932F5BE10822A1C700736975 /* jsc */,
    5036                                 141211200A48793C00480255 /* minidom */,
    5037                                 14BD59BF0A3E8F9000BAF59C /* testapi */,
    5038                                 0FEC85AD1BDB5CF10080FF74 /* testb3 */,
    50395043                        );
    50405044                        name = Products;
     
    52575261                                0FEC84C11BDACDAC0080FF74 /* B3Commutativity.cpp */,
    52585262                                0FEC84C21BDACDAC0080FF74 /* B3Commutativity.h */,
    5259                                 7919B77F1E03559C005BEED8 /* B3Compile.h */,
    5260                                 795F099C1E03600500BBE37F /* B3Compile.cpp */,
    52615263                                0F338DFF1BF0276C0013C88F /* B3Compilation.cpp */,
    52625264                                0F338E001BF0276C0013C88F /* B3Compilation.h */,
     5265                                795F099C1E03600500BBE37F /* B3Compile.cpp */,
     5266                                7919B77F1E03559C005BEED8 /* B3Compile.h */,
    52635267                                0F86AE1F1C5311C5006BE8EC /* B3ComputeDivisionMagic.h */,
    52645268                                0FEC84C31BDACDAC0080FF74 /* B3Const32Value.cpp */,
     
    63666370                                E35E035D1B7AB43E0073AD2A /* InspectorInstrumentationObject.cpp */,
    63676371                                E35E035E1B7AB43E0073AD2A /* InspectorInstrumentationObject.h */,
    6368                                 A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,
    63696372                                A7A8AF2C17ADB5F3005AB174 /* Int16Array.h */,
    63706373                                A7A8AF2D17ADB5F3005AB174 /* Int32Array.h */,
     6374                                A7A8AF2B17ADB5F3005AB174 /* Int8Array.h */,
    63716375                                BC9BB95B0E19680600DF8855 /* InternalFunction.cpp */,
    63726376                                BC11667A0E199C05008066DD /* InternalFunction.h */,
     
    64636467                                BC756FC70E2031B200DE7D12 /* JSGlobalObjectFunctions.h */,
    64646468                                79B819921DD25CF500DDC714 /* JSGlobalObjectInlines.h */,
    6465                                 0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,
    64666469                                0F2B66CA17B6B5AB00A7AE3F /* JSInt16Array.h */,
    64676470                                0F2B66CB17B6B5AB00A7AE3F /* JSInt32Array.h */,
     6471                                0F2B66C917B6B5AB00A7AE3F /* JSInt8Array.h */,
    64686472                                E33F507E1B8429A400413856 /* JSInternalPromise.cpp */,
    64696473                                E33F507F1B8429A400413856 /* JSInternalPromise.h */,
     
    65536557                                53917E7C1B791106000EBD33 /* JSTypedArrayViewPrototype.h */,
    65546558                                6507D2970E871E4A00D7D896 /* JSTypeInfo.h */,
     6559                                0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */,
     6560                                0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */,
    65556561                                0F2B66D217B6B5AB00A7AE3F /* JSUint8Array.h */,
    65566562                                0F2B66D317B6B5AB00A7AE3F /* JSUint8ClampedArray.h */,
    6557                                 0F2B66D417B6B5AB00A7AE3F /* JSUint16Array.h */,
    6558                                 0F2B66D517B6B5AB00A7AE3F /* JSUint32Array.h */,
    65596563                                A7CA3AE117DA41AE006538AF /* JSWeakMap.cpp */,
    65606564                                A7CA3AE217DA41AE006538AF /* JSWeakMap.h */,
     
    67636767                                0F2D4DE319832D91007D4B19 /* TypeSet.cpp */,
    67646768                                0F2D4DE419832D91007D4B19 /* TypeSet.h */,
    6765                                 A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */,
    6766                                 A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */,
    67676769                                A7A8AF3217ADB5F3005AB174 /* Uint16Array.h */,
    67686770                                866739D113BFDE710023D87C /* Uint16WithFraction.h */,
    67696771                                A7A8AF3317ADB5F3005AB174 /* Uint32Array.h */,
     6772                                A7A8AF3017ADB5F3005AB174 /* Uint8Array.h */,
     6773                                A7A8AF3117ADB5F3005AB174 /* Uint8ClampedArray.h */,
    67706774                                0FE050231AA9095600D33B33 /* VarOffset.cpp */,
    67716775                                0FE050241AA9095600D33B33 /* VarOffset.h */,
     
    75547558                                A5BA15E01823409D00A82E69 /* remote */,
    75557559                                A532438E185696CE002ED692 /* scripts */,
     7560                                6A38CFA71E32B58B0060206F /* AsyncStackTrace.cpp */,
     7561                                6A38CFA81E32B58B0060206F /* AsyncStackTrace.h */,
    75567562                                A5FD0077189B051000633231 /* ConsoleMessage.cpp */,
    75577563                                A5FD0078189B051000633231 /* ConsoleMessage.h */,
     
    79097915                                5B70CFE21DB69E6600EC23F9 /* AsyncFunctionConstructor.h in Headers */,
    79107916                                5B70CFE01DB69E6600EC23F9 /* AsyncFunctionPrototype.h in Headers */,
     7917                                6A38CFAA1E32B5AB0060206F /* AsyncStackTrace.h in Headers */,
    79117918                                0F7CF9571DC125900098CC12 /* AtomicsObject.h in Headers */,
    79127919                                A5EA70E719F5B1010098F5EC /* AugmentableInspectorController.h in Headers */,
     
    79317938                                0FEC850C1BDACDAC0080FF74 /* B3Commutativity.h in Headers */,
    79327939                                0F338E0C1BF0276C0013C88F /* B3Compilation.h in Headers */,
     7940                                7919B7801E03559C005BEED8 /* B3Compile.h in Headers */,
    79337941                                0F86AE201C5311C5006BE8EC /* B3ComputeDivisionMagic.h in Headers */,
    79347942                                0FEC850E1BDACDAC0080FF74 /* B3Const32Value.h in Headers */,
     
    80308038                                C2FCAE1117A9C24E0034C735 /* BytecodeBasicBlock.h in Headers */,
    80318039                                0F21C27F14BEAA8200ADC64B /* BytecodeConventions.h in Headers */,
    8032                                 0F1FB3931E177A7200A9BE50 /* VisitingTimeout.h in Headers */,
    80338040                                969A07230ED1CE3300F1F681 /* BytecodeGenerator.h in Headers */,
    80348041                                E328DAE81D38D005001A2529 /* BytecodeGeneratorification.h in Headers */,
     
    80568063                                0F24E54217EA9F5900ABB217 /* CCallHelpers.h in Headers */,
    80578064                                0F070A471D543A8B006E7232 /* CellContainer.h in Headers */,
    8058                                 ADE8029A1E08F1DE0058DE78 /* WebAssemblyLinkErrorConstructor.h in Headers */,
    80598065                                0F070A481D543A90006E7232 /* CellContainerInlines.h in Headers */,
    80608066                                0F1C3DDA1BBCE09E00E523E4 /* CellState.h in Headers */,
     
    80948100                                A5FD0074189B038C00633231 /* ConsoleTypes.h in Headers */,
    80958101                                0FFC99D1184EC8AD009C10AB /* ConstantMode.h in Headers */,
     8102                                0F7DF1341E2970D70095951B /* ConstraintVolatility.h in Headers */,
    80968103                                E354622B1B6065D100545386 /* ConstructAbility.h in Headers */,
    80978104                                BC18C3F60E16F5CD00B34460 /* ConstructData.h in Headers */,
     
    81158122                                BC18C3FA0E16F5CD00B34460 /* Debugger.h in Headers */,
    81168123                                BC18C3FB0E16F5CD00B34460 /* DebuggerCallFrame.h in Headers */,
    8117                                 0F7DF1351E2970DC0095951B /* MarkedSpaceInlines.h in Headers */,
    81188124                                6AD2CB4D19B9140100065719 /* DebuggerEvalEnabler.h in Headers */,
    81198125                                A5FC84B21D1DDAD6006B5C46 /* DebuggerLocation.h in Headers */,
     
    81408146                                0F485322187750560083B687 /* DFGArithMode.h in Headers */,
    81418147                                0F05C3B41683CF9200BAF45B /* DFGArrayifySlowPathGenerator.h in Headers */,
    8142                                 0F4F82881E2FFDE00075184C /* JSSegmentedVariableObjectSubspace.h in Headers */,
    81438148                                0F63948515E4811B006A597C /* DFGArrayMode.h in Headers */,
    81448149                                A7D9A29517A0BC7400EE2618 /* DFGAtTailAbstractState.h in Headers */,
     
    81658170                                0F9D36951AE9CC33000D4DFB /* DFGCleanUpPhase.h in Headers */,
    81668171                                A77A424017A0BBFD00A8DB81 /* DFGClobberize.h in Headers */,
    8167                                 AD7438C01E0457A400FD0C2A /* WasmSignature.h in Headers */,
    81688172                                A77A424217A0BBFD00A8DB81 /* DFGClobberSet.h in Headers */,
    81698173                                0F3C1F1B1B868E7900ABB08B /* DFGClobbersExitState.h in Headers */,
     
    82058209                                A7D89CF817A0B8CC00773AD8 /* DFGFlushFormat.h in Headers */,
    82068210                                0F2DD8151AB3D8BE00BBB8E8 /* DFGForAllKills.h in Headers */,
    8207                                 0F4F828C1E31B9760075184C /* StochasticSpaceTimeMutatorScheduler.h in Headers */,
    82088211                                0F69CC89193AC60A0045759E /* DFGFrozenValue.h in Headers */,
    82098212                                86EC9DC61328DF82002B2AD7 /* DFGGenerationInfo.h in Headers */,
     
    82598262                                0F7025AA1714B0FC00382C0E /* DFGOSRExitCompilerCommon.h in Headers */,
    82608263                                0F392C8A1B46188400844728 /* DFGOSRExitFuzz.h in Headers */,
    8261                                 0F7DF13F1E2AFC4D0095951B /* JSStringSubspace.h in Headers */,
    82628264                                0FEFC9AB1681A3B600567F53 /* DFGOSRExitJumpPlaceholder.h in Headers */,
    82638265                                0F235BEE17178E7300690C7F /* DFGOSRExitPreparation.h in Headers */,
     
    82668268                                0F2B9CEB19D0BA7D00B1D1B5 /* DFGPhiChildren.h in Headers */,
    82678269                                A78A977B179738B8009DF744 /* DFGPlan.h in Headers */,
     8270                                0F1FB3961E1AF7E100A9BE50 /* DFGPlanInlines.h in Headers */,
    82688271                                DC00039319D8BE6F00023EB0 /* DFGPreciseLocalClobberize.h in Headers */,
    82698272                                0FBE0F7516C1DB0B0082C5E8 /* DFGPredictionInjectionPhase.h in Headers */,
     
    82968299                                0FC097A2146B28CC00CF2442 /* DFGThunks.h in Headers */,
    82978300                                0FD8A32817D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.h in Headers */,
     8301                                ADFF2F701E319DE3001EA54E /* DFGTierUpEntryTrigger.h in Headers */,
    82988302                                0FD8A32A17D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.h in Headers */,
    82998303                                0FD8A32C17D51F5700CA2C40 /* DFGToFTLForOSREntryDeferredCompilationCallback.h in Headers */,
     
    83138317                                0FC97F4218202119002C9B26 /* DFGWatchpointCollectionPhase.h in Headers */,
    83148318                                0FDB2CE8174830A2007B3C1B /* DFGWorklist.h in Headers */,
     8319                                0F1FB3971E1AF7E300A9BE50 /* DFGWorklistInlines.h in Headers */,
    83158320                                0FE050181AA9091100D33B33 /* DirectArguments.h in Headers */,
    83168321                                0FE050161AA9091100D33B33 /* DirectArgumentsOffset.h in Headers */,
     
    84198424                                FE4BFF2C1AD476E700088F87 /* FunctionOverrides.h in Headers */,
    84208425                                BC18C4050E16F5CD00B34460 /* FunctionPrototype.h in Headers */,
    8421                                 7919B7801E03559C005BEED8 /* B3Compile.h in Headers */,
    84228426                                62D2D3901ADF103F000206C1 /* FunctionRareData.h in Headers */,
    84238427                                FEA0C4031CDD7D1D00481991 /* FunctionWhitelist.h in Headers */,
     
    84358439                                A54E8EB118BFFBBE00556D28 /* GCSegmentedArrayInlines.h in Headers */,
    84368440                                0F86A26F1D6F7B3300CB0C92 /* GCTypeMap.h in Headers */,
    8437                                 0F7DF1381E2970E40095951B /* SubspaceInlines.h in Headers */,
    84388441                                9959E9311BD18272001AA413 /* generate-combined-inspector-json.py in Headers */,
    84398442                                C4703CC0192844960013FBEA /* generate-inspector-protocol-bindings.py in Headers */,
    8440                                 0F7DF1461E2BEF6A0095951B /* MarkedAllocatorInlines.h in Headers */,
    84418443                                99DA00AF1BD5994E00F4575C /* generate-js-builtins.py in Headers */,
    84428444                                A5EA70EC19F5B3EA0098F5EC /* generate_cpp_alternate_backend_dispatcher_header.py in Headers */,
     
    84738475                                7964656A1B952FF0003059EE /* GetPutInfo.h in Headers */,
    84748476                                14AD910E1DCA92940014F9FE /* GlobalCodeBlock.h in Headers */,
    8475                                 79DAE27A1E03C82200B526AA /* WasmExceptionType.h in Headers */,
    84768477                                0F24E54417EA9F5900ABB217 /* GPRInfo.h in Headers */,
    84778478                                142E3134134FF0A600AFADB5 /* Handle.h in Headers */,
     
    85408541                                E35E03601B7AB43E0073AD2A /* InspectorInstrumentationObject.h in Headers */,
    85418542                                E33B3E261B7ABD750048DB2E /* InspectorInstrumentationObject.lut.h in Headers */,
    8542                                 ADE802991E08F1DE0058DE78 /* JSWebAssemblyLinkError.h in Headers */,
    85438543                                A532438C18568335002ED692 /* InspectorProtocolObjects.h in Headers */,
    85448544                                A55D93AC18514F7900400DED /* InspectorProtocolTypes.h in Headers */,
     
    85708570                                A125846F1B45A36000CC7F6C /* IntlNumberFormatPrototype.lut.h in Headers */,
    85718571                                A12BBFF21B044A8B00664B69 /* IntlObject.h in Headers */,
    8572                                 0F1FB3971E1AF7E300A9BE50 /* DFGWorklistInlines.h in Headers */,
    85738572                                708EBE241CE8F35800453146 /* IntlObjectInlines.h in Headers */,
    85748573                                860BD801148EA6F200112B2F /* Intrinsic.h in Headers */,
     
    86018600                                FE99B2491C24C3D300C82159 /* JITNegGenerator.h in Headers */,
    86028601                                0F24E54D17EE274900ABB217 /* JITOperations.h in Headers */,
    8603                                 0F7DF1371E2970E10095951B /* Subspace.h in Headers */,
    86048602                                FE3A06C01C11041A00390FDD /* JITRightShiftGenerator.h in Headers */,
    86058603                                0F766D3115AA8112008F363E /* JITStubRoutine.h in Headers */,
     
    86478645                                978801411471AD920041B016 /* JSDateMath.h in Headers */,
    86488646                                C2A7F688160432D400F76B98 /* JSDestructibleObject.h in Headers */,
     8647                                0F7DF13C1E2971130095951B /* JSDestructibleObjectSubspace.h in Headers */,
    86498648                                FE384EE61ADDB7AD0055DE2C /* JSDollarVM.h in Headers */,
    86508649                                FE384EE81ADDB7AD0055DE2C /* JSDollarVMPrototype.h in Headers */,
     
    86568655                                0F2B66F017B6B5AB00A7AE3F /* JSFloat64Array.h in Headers */,
    86578656                                BC18C41F0E16F5CD00B34460 /* JSFunction.h in Headers */,
    8658                                 0F660E3A1E0517C10031462C /* MarkingConstraintSet.h in Headers */,
    86598657                                A72028BA1797603D0098028C /* JSFunctionInlines.h in Headers */,
    8660                                 0F660E381E0517BB0031462C /* MarkingConstraint.h in Headers */,
    86618658                                70B7919C1C024A49002481E2 /* JSGeneratorFunction.h in Headers */,
    86628659                                0F2B66F117B6B5AB00A7AE3F /* JSGenericTypedArrayView.h in Headers */,
     
    87198716                                996B731F1BDA08EF00331B84 /* JSPromisePrototype.lut.h in Headers */,
    87208717                                2A05ABD61961DF2400341750 /* JSPropertyNameEnumerator.h in Headers */,
    8721                                 0F7DF13C1E2971130095951B /* JSDestructibleObjectSubspace.h in Headers */,
    87228718                                E3EF88751B66DF23003F26CB /* JSPropertyNameIterator.h in Headers */,
    87238719                                862553D216136E1A009F17D0 /* JSProxy.h in Headers */,
     
    87268722                                BC18C4260E16F5CD00B34460 /* JSRetainPtr.h in Headers */,
    87278723                                14874AE615EBDE4A002E3587 /* JSScope.h in Headers */,
     8724                                9064337DD4B0402BAF34A592 /* JSScriptFetcher.h in Headers */,
    87288725                                A7C0C4AC168103020017011D /* JSScriptRefPrivate.h in Headers */,
    87298726                                0F919D11157F332C004A4E7D /* JSSegmentedVariableObject.h in Headers */,
     8727                                0F4F82881E2FFDE00075184C /* JSSegmentedVariableObjectSubspace.h in Headers */,
    87308728                                A7299D9E17D12837005F5FF9 /* JSSet.h in Headers */,
    8731                                 0F7DF1341E2970D70095951B /* ConstraintVolatility.h in Headers */,
    87328729                                A790DD70182F499700588807 /* JSSetIterator.h in Headers */,
     8730                                BDFCB2BBE90F41349E1B0BED /* JSSourceCode.h in Headers */,
    87338731                                BC18C4270E16F5CD00B34460 /* JSString.h in Headers */,
    87348732                                86E85539111B9968001AF51E /* JSStringBuilder.h in Headers */,
     
    87398737                                BC18C4290E16F5CD00B34460 /* JSStringRefCF.h in Headers */,
    87408738                                1A28D4A8177B71C80007FA3C /* JSStringRefPrivate.h in Headers */,
     8739                                0F7DF13F1E2AFC4D0095951B /* JSStringSubspace.h in Headers */,
    87418740                                0F919D0D157EE0A2004A4E7D /* JSSymbolTableObject.h in Headers */,
    87428741                                70ECA6061AFDBEA200449739 /* JSTemplateRegistryKey.h in Headers */,
     
    87678766                                796FB43A1DFF8C3F0039C95D /* JSWebAssemblyHelpers.h in Headers */,
    87688767                                AD2FCBE51DB58DAD00B3E736 /* JSWebAssemblyInstance.h in Headers */,
     8768                                ADE802991E08F1DE0058DE78 /* JSWebAssemblyLinkError.h in Headers */,
    87698769                                AD2FCBE71DB58DAD00B3E736 /* JSWebAssemblyMemory.h in Headers */,
    87708770                                AD2FCC051DB58DAD00B3E736 /* JSWebAssemblyModule.h in Headers */,
     
    87738773                                1442566215EDE98D0066A49B /* JSWithScope.h in Headers */,
    87748774                                86E3C619167BABEE006D760A /* JSWrapperMap.h in Headers */,
    8775                                 0F1FB38F1E173A6700A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h in Headers */,
    87768775                                BC18C42E0E16F5CD00B34460 /* JSWrapperObject.h in Headers */,
    87778776                                BCFD8C930EEB2EE700283848 /* JumpTable.h in Headers */,
     
    88198818                                E32AB2441DCD75F400D7533A /* MacroAssemblerHelpers.h in Headers */,
    88208819                                86C568E111A213EE0007F7F0 /* MacroAssemblerMIPS.h in Headers */,
    8821                                 0F1FB3961E1AF7E100A9BE50 /* DFGPlanInlines.h in Headers */,
    88228820                                FE68C6371B90DE040042BCB3 /* MacroAssemblerPrinter.h in Headers */,
    88238821                                860161E40F3A83C100F84710 /* MacroAssemblerX86.h in Headers */,
     
    88298827                                A700873E17CBE8D300C3E643 /* MapPrototype.h in Headers */,
    88308828                                C2B916C214DA014E00CBAC86 /* MarkedAllocator.h in Headers */,
     8829                                0F7DF1461E2BEF6A0095951B /* MarkedAllocatorInlines.h in Headers */,
    88318830                                142D6F0913539A2800B02E86 /* MarkedBlock.h in Headers */,
    88328831                                0F7C5FB81D888A0C0044F5E2 /* MarkedBlockInlines.h in Headers */,
    88338832                                141448CB13A176EC00F5BA1A /* MarkedBlockSet.h in Headers */,
    88348833                                14D2F3DB139F4BE200491031 /* MarkedSpace.h in Headers */,
     8834                                0F7DF1351E2970DC0095951B /* MarkedSpaceInlines.h in Headers */,
     8835                                0F660E381E0517BB0031462C /* MarkingConstraint.h in Headers */,
     8836                                0F660E3A1E0517C10031462C /* MarkingConstraintSet.h in Headers */,
    88358837                                142D6F1213539A4100B02E86 /* MarkStack.h in Headers */,
    88368838                                8612E4CD152389EC00C836BE /* MatchResult.h in Headers */,
     
    88408842                                90213E3E123A40C200D422F3 /* MemoryStatistics.h in Headers */,
    88418843                                0FB5467B14F5C7E1002C2989 /* MethodOfGettingAValueProfile.h in Headers */,
    8842                                 ADE8029C1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.h in Headers */,
    88438844                                7C008CE7187631B600955C24 /* Microtask.h in Headers */,
    88448845                                86C568E211A213EE0007F7F0 /* MIPSAssembler.h in Headers */,
     
    88508851                                147341D61DC02EB900AA29BA /* ModuleProgramExecutable.h in Headers */,
    88518852                                A79D3ED9C5064DD0A8466A3A /* ModuleScopeData.h in Headers */,
     8853                                0F1FB3991E1F65FB00A9BE50 /* MutatorScheduler.h in Headers */,
    88528854                                0FA762071DB9243300B7A2FD /* MutatorState.h in Headers */,
    88538855                                BC02E9110E1839DB000F9297 /* NativeErrorConstructor.h in Headers */,
     
    89798981                                A503FA26188EFFFD00110F14 /* ScriptDebugServer.h in Headers */,
    89808982                                147341CE1DC02D7900AA29BA /* ScriptExecutable.h in Headers */,
     8983                                CEAE7D7B889B477BA93ABA6C /* ScriptFetcher.h in Headers */,
    89818984                                A55D93A6185012A800400DED /* ScriptFunctionCall.h in Headers */,
    89828985                                A54CF2FA184EAEDA00237F19 /* ScriptObject.h in Headers */,
     
    89989001                                14201D591DECF26A00904BD3 /* SourceCode.h in Headers */,
    89999002                                70B791911C024A13002481E2 /* SourceCodeKey.h in Headers */,
     9003                                2D342F36F7244096804ADB24 /* SourceOrigin.h in Headers */,
    90009004                                BC18C4630E16F5CD00B34460 /* SourceProvider.h in Headers */,
    90019005                                E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */,
     
    90129016                                14DF04DA16B3996D0016A513 /* StaticPropertyAnalysis.h in Headers */,
    90139017                                14CA958B16AB50DE00938A06 /* StaticPropertyAnalyzer.h in Headers */,
     9018                                0F4F828C1E31B9760075184C /* StochasticSpaceTimeMutatorScheduler.h in Headers */,
    90149019                                0F7CF9521DC027D90098CC12 /* StopIfNecessaryTimer.h in Headers */,
    90159020                                A730B6121250068F009D25B1 /* StrictEvalActivation.h in Headers */,
     
    90339038                                BCCF0D080EF0AAB900413C8F /* StructureStubInfo.h in Headers */,
    90349039                                BC9041480EB9250900FE26FA /* StructureTransitionTable.h in Headers */,
     9040                                0F7DF1371E2970E10095951B /* Subspace.h in Headers */,
     9041                                0F7DF1381E2970E40095951B /* SubspaceInlines.h in Headers */,
    90359042                                0F4A38FA1C8E13DF00190318 /* SuperSampler.h in Headers */,
    9036                                 0F1FB3991E1F65FB00A9BE50 /* MutatorScheduler.h in Headers */,
    90379043                                705B41AC1A6E501E00716757 /* Symbol.h in Headers */,
    90389044                                705B41AE1A6E501E00716757 /* SymbolConstructor.h in Headers */,
     
    90429048                                996B73281BDA08EF00331B84 /* SymbolPrototype.lut.h in Headers */,
    90439049                                BC18C46B0E16F5CD00B34460 /* SymbolTable.h in Headers */,
     9050                                0F1FB38F1E173A6700A9BE50 /* SynchronousStopTheWorldMutatorScheduler.h in Headers */,
    90449051                                A784A26411D16622005776AC /* SyntaxChecker.h in Headers */,
    90459052                                DC7997831CDE9FA0004D4A09 /* TagRegistersMode.h in Headers */,
     
    90979104                                0FE0502D1AA9095600D33B33 /* VarOffset.h in Headers */,
    90989105                                0F426A491460CBB700131F8F /* VirtualRegister.h in Headers */,
     9106                                0F1FB3931E177A7200A9BE50 /* VisitingTimeout.h in Headers */,
    90999107                                0F952AA11DF7860900E06FBD /* VisitRaceKey.h in Headers */,
    91009108                                BC18C4200E16F5CD00B34460 /* VM.h in Headers */,
     
    91059113                                AD4B1DFA1DF244E20071AE32 /* WasmBinding.h in Headers */,
    91069114                                53FD04D41D7AB291003287D3 /* WasmCallingConvention.h in Headers */,
     9115                                79DAE27A1E03C82200B526AA /* WasmExceptionType.h in Headers */,
    91079116                                7BC547D31B6959A100959B58 /* WasmFormat.h in Headers */,
    91089117                                53F40E8B1D5901BB0099A1B6 /* WasmFunctionParser.h in Headers */,
     
    91159124                                531374BD1D5CE67600AF7A0B /* WasmPlan.h in Headers */,
    91169125                                53F40E851D58F9770099A1B6 /* WasmSections.h in Headers */,
     9126                                AD7438C01E0457A400FD0C2A /* WasmSignature.h in Headers */,
    91179127                                53FF7F991DBFCD9000A26CCC /* WasmValidate.h in Headers */,
    91189128                                FED94F2F171E3E2300BE77A4 /* Watchdog.h in Headers */,
     
    91429152                                AD2FCBF31DB58DAD00B3E736 /* WebAssemblyInstancePrototype.h in Headers */,
    91439153                                AD2FCC191DB59CB200B3E736 /* WebAssemblyInstancePrototype.lut.h in Headers */,
     9154                                ADE8029A1E08F1DE0058DE78 /* WebAssemblyLinkErrorConstructor.h in Headers */,
     9155                                ADE8029C1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.h in Headers */,
    91449156                                AD2FCBF51DB58DAD00B3E736 /* WebAssemblyMemoryConstructor.h in Headers */,
    91459157                                AD2FCC1A1DB59CB200B3E736 /* WebAssemblyMemoryConstructor.lut.h in Headers */,
     
    91739185                                86704B8A12DBA33700A9FE7B /* YarrPattern.h in Headers */,
    91749186                                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 */,
    91799187                        );
    91809188                        runOnlyForDeploymentPostprocessing = 0;
     
    97289736                                5B70CFE31DB69E6600EC23F9 /* AsyncFunctionConstructor.cpp in Sources */,
    97299737                                5B70CFE11DB69E6600EC23F9 /* AsyncFunctionPrototype.cpp in Sources */,
     9738                                6A38CFA91E32B5AB0060206F /* AsyncStackTrace.cpp in Sources */,
    97309739                                0F7CF9561DC1258D0098CC12 /* AtomicsObject.cpp in Sources */,
    97319740                                0FEC84FE1BDACDAC0080FF74 /* B3ArgumentRegValue.cpp in Sources */,
     
    97409749                                0FEC850B1BDACDAC0080FF74 /* B3Commutativity.cpp in Sources */,
    97419750                                0F338E0B1BF0276C0013C88F /* B3Compilation.cpp in Sources */,
     9751                                795F099D1E03600500BBE37F /* B3Compile.cpp in Sources */,
    97429752                                0FEC850D1BDACDAC0080FF74 /* B3Const32Value.cpp in Sources */,
    97439753                                0FEC850F1BDACDAC0080FF74 /* B3Const64Value.cpp in Sources */,
     
    98019811                                14280863107EC11A0013E7B2 /* BooleanConstructor.cpp in Sources */,
    98029812                                14280864107EC11A0013E7B2 /* BooleanObject.cpp in Sources */,
    9803                                 0F4F82871E2FFDDD0075184C /* JSSegmentedVariableObjectSubspace.cpp in Sources */,
    9804                                 ADB6F67D1E15D7600082F384 /* WasmPageCount.cpp in Sources */,
    98059813                                14280865107EC11A0013E7B2 /* BooleanPrototype.cpp in Sources */,
    98069814                                DE26E9071CB5DEFB00D2BE82 /* BuiltinExecutableCreator.cpp in Sources */,
     
    98479855                                147F39C2107EC37600427A48 /* Completion.cpp in Sources */,
    98489856                                0F6FC750196110A800E1D02D /* ComplexGetStatus.cpp in Sources */,
    9849                                 0F1FB38E1E173A6500A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp in Sources */,
    98509857                                146B16D812EB5B59001BEC1B /* ConservativeRoots.cpp in Sources */,
    98519858                                A5B6A74D18C6DBA600F11E91 /* ConsoleClient.cpp in Sources */,
     
    98639870                                147F39C5107EC37600427A48 /* DateInstance.cpp in Sources */,
    98649871                                147F39C6107EC37600427A48 /* DatePrototype.cpp in Sources */,
    9865                                 0F660E391E0517BF0031462C /* MarkingConstraintSet.cpp in Sources */,
    98669872                                14280823107EC02C0013E7B2 /* Debugger.cpp in Sources */,
    98679873                                149559EE0DDCDDF700648087 /* DebuggerCallFrame.cpp in Sources */,
     
    99459951                                0FF0F19916B729F6005DF95B /* DFGLongLivedState.cpp in Sources */,
    99469952                                A767B5B517A0B9650063D940 /* DFGLoopPreHeaderCreationPhase.cpp in Sources */,
    9947                                 ADE8029E1E08F2280058DE78 /* WebAssemblyLinkErrorConstructor.cpp in Sources */,
    99489953                                79F8FC1E1B9FED0F00CA66AB /* DFGMaximalFlushInsertionPhase.cpp in Sources */,
    99499954                                0F5874ED194FEB1200AAB2C1 /* DFGMayExit.cpp in Sources */,
     
    99849989                                0F3A1BF91A9ECB7D000DE01A /* DFGPutStackSinkingPhase.cpp in Sources */,
    99859990                                0F2FCCFB18A60070001A27F8 /* DFGSafepoint.cpp in Sources */,
    9986                                 795F099D1E03600500BBE37F /* B3Compile.cpp in Sources */,
    99879991                                86EC9DD21328DF82002B2AD7 /* DFGSpeculativeJIT.cpp in Sources */,
    99889992                                86880F1F14328BB900B08D42 /* DFGSpeculativeJIT32_64.cpp in Sources */,
     
    999610000                                0F9E32631B05AB0400801ED5 /* DFGStoreBarrierInsertionPhase.cpp in Sources */,
    999710001                                0FC20CB51852E2C600C9E954 /* DFGStrengthReductionPhase.cpp in Sources */,
    9998                                 0F7DF13B1E2971110095951B /* JSDestructibleObjectSubspace.cpp in Sources */,
    999910002                                0F893BDB1936E23C001211F4 /* DFGStructureAbstractValue.cpp in Sources */,
    1000010003                                0F2FCCFE18A60070001A27F8 /* DFGThreadData.cpp in Sources */,
    1000110004                                0FC097A1146B28CA00CF2442 /* DFGThunks.cpp in Sources */,
    1000210005                                0FD8A32717D51F5700CA2C40 /* DFGTierUpCheckInjectionPhase.cpp in Sources */,
    10003                                 0F4F828B1E31B9740075184C /* StochasticSpaceTimeMutatorScheduler.cpp in Sources */,
    1000410006                                0FD8A32917D51F5700CA2C40 /* DFGToFTLDeferredCompilationCallback.cpp in Sources */,
    1000510007                                0FD8A32B17D51F5700CA2C40 /* DFGToFTLForOSREntryDeferredCompilationCallback.cpp in Sources */,
     
    1020810210                                1421359B0A677F4F00A8195E /* JSBase.cpp in Sources */,
    1020910211                                86FA9E91142BBB2E001773B7 /* JSBoundFunction.cpp in Sources */,
    10210                                 0F7DF1401E2AFC500095951B /* JSStringSubspace.cpp in Sources */,
    1021110212                                1440F8AF0A508D200005F061 /* JSCallbackConstructor.cpp in Sources */,
    1021210213                                1440F8920A508B100005F061 /* JSCallbackFunction.cpp in Sources */,
     
    1022410225                                0F2B66ED17B6B5AB00A7AE3F /* JSDataViewPrototype.cpp in Sources */,
    1022510226                                978801401471AD920041B016 /* JSDateMath.cpp in Sources */,
     10227                                0F7DF13B1E2971110095951B /* JSDestructibleObjectSubspace.cpp in Sources */,
    1022610228                                FE384EE51ADDB7AD0055DE2C /* JSDollarVM.cpp in Sources */,
    1022710229                                FE384EE71ADDB7AD0055DE2C /* JSDollarVMPrototype.cpp in Sources */,
     
    1023610238                                A59455921824744700CC3843 /* JSGlobalObjectDebuggable.cpp in Sources */,
    1023710239                                A57D23E91891B0770031C7FA /* JSGlobalObjectDebuggerAgent.cpp in Sources */,
    10238                                 0F7DF1361E2970DF0095951B /* Subspace.cpp in Sources */,
    10239                                 ADE8029B1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.cpp in Sources */,
    1024010240                                14E9D17B107EC469004DDA21 /* JSGlobalObjectFunctions.cpp in Sources */,
    1024110241                                A51007C0187CC3C600B38879 /* JSGlobalObjectInspectorController.cpp in Sources */,
     
    1027410274                                9928FF3B18AC4AEC00B8CF12 /* JSReplayInputs.cpp in Sources */,
    1027510275                                14874AE515EBDE4A002E3587 /* JSScope.cpp in Sources */,
     10276                                14815F5F991C46BEB98D0016 /* JSScriptFetcher.cpp in Sources */,
    1027610277                                A7C0C4AD1681067E0017011D /* JSScriptRef.cpp in Sources */,
    1027710278                                0F919D10157F3329004A4E7D /* JSSegmentedVariableObject.cpp in Sources */,
     10279                                0F4F82871E2FFDDD0075184C /* JSSegmentedVariableObjectSubspace.cpp in Sources */,
    1027810280                                A7299D9D17D12837005F5FF9 /* JSSet.cpp in Sources */,
    1027910281                                A790DD6F182F499700588807 /* JSSetIterator.cpp in Sources */,
     10282                                FA3AB211C8494524AB390267 /* JSSourceCode.cpp in Sources */,
    1028010283                                147F39D5107EC37600427A48 /* JSString.cpp in Sources */,
    1028110284                                70EC0EC21AA0D7DA00B6AAFA /* JSStringIterator.cpp in Sources */,
     
    1028310286                                1482B74E0A43032800517CFC /* JSStringRef.cpp in Sources */,
    1028410287                                146AAB380B66A94400E55F16 /* JSStringRefCF.cpp in Sources */,
     10288                                0F7DF1401E2AFC500095951B /* JSStringSubspace.cpp in Sources */,
    1028510289                                0F919D0C157EE09F004A4E7D /* JSSymbolTableObject.cpp in Sources */,
    1028610290                                70ECA6051AFDBEA200449739 /* JSTemplateRegistryKey.cpp in Sources */,
     
    1034110345                                142D6F0813539A2800B02E86 /* MarkedBlock.cpp in Sources */,
    1034210346                                14D2F3DA139F4BE200491031 /* MarkedSpace.cpp in Sources */,
     10347                                0F660E371E0517B90031462C /* MarkingConstraint.cpp in Sources */,
     10348                                0F660E391E0517BF0031462C /* MarkingConstraintSet.cpp in Sources */,
    1034310349                                142D6F1113539A4100B02E86 /* MarkStack.cpp in Sources */,
    1034410350                                DC69AA661CF7A1F200C6272F /* MatchResult.cpp in Sources */,
     
    1035110357                                14AD91181DCA97FD0014F9FE /* ModuleProgramCodeBlock.cpp in Sources */,
    1035210358                                147341E41DC2CE9600AA29BA /* ModuleProgramExecutable.cpp in Sources */,
     10359                                0F1FB3901E173A6B00A9BE50 /* MutatorScheduler.cpp in Sources */,
    1035310360                                0FA762061DB9243100B7A2FD /* MutatorState.cpp in Sources */,
    1035410361                                14469DE0107EC7E700650446 /* NativeErrorConstructor.cpp in Sources */,
     
    1046210469                                0F6DB7EA1D6124B800CDBF8E /* StackFrame.cpp in Sources */,
    1046310470                                A7C1EAF117987AB600299DB2 /* StackVisitor.cpp in Sources */,
     10471                                0F4F828B1E31B9740075184C /* StochasticSpaceTimeMutatorScheduler.cpp in Sources */,
    1046410472                                0F7CF9531DC027DB0098CC12 /* StopIfNecessaryTimer.cpp in Sources */,
    1046510473                                A730B6131250068F009D25B1 /* StrictEvalActivation.cpp in Sources */,
    1046610474                                14469DEB107EC7E700650446 /* StringConstructor.cpp in Sources */,
    1046710475                                70EC0EC61AA0D7DA00B6AAFA /* StringIteratorPrototype.cpp in Sources */,
    10468                                 0F1FB3901E173A6B00A9BE50 /* MutatorScheduler.cpp in Sources */,
    1046910476                                14469DEC107EC7E700650446 /* StringObject.cpp in Sources */,
    1047010477                                14469DED107EC7E700650446 /* StringPrototype.cpp in Sources */,
     
    1047710484                                0F766D3815AE4A1C008F363E /* StructureStubClearingWatchpoint.cpp in Sources */,
    1047810485                                BCCF0D0C0EF0B8A500413C8F /* StructureStubInfo.cpp in Sources */,
     10486                                0F7DF1361E2970DF0095951B /* Subspace.cpp in Sources */,
    1047910487                                0F4A38F91C8E13DF00190318 /* SuperSampler.cpp in Sources */,
    1048010488                                705B41AB1A6E501E00716757 /* Symbol.cpp in Sources */,
     
    1048310491                                705B41B11A6E501E00716757 /* SymbolPrototype.cpp in Sources */,
    1048410492                                0F919D2815856773004A4E7D /* SymbolTable.cpp in Sources */,
     10493                                0F1FB38E1E173A6500A9BE50 /* SynchronousStopTheWorldMutatorScheduler.cpp in Sources */,
    1048510494                                DC7997841CDE9FA2004D4A09 /* TagRegistersMode.cpp in Sources */,
    1048610495                                70ECA6071AFDBEA200449739 /* TemplateRegistry.cpp in Sources */,
     
    1051810527                                79EE0BFF1B4AFB85000385C9 /* VariableEnvironment.cpp in Sources */,
    1051910528                                0F6C73501AC9F99F00BE1682 /* VariableWriteFireDetail.cpp in Sources */,
    10520                                 0F660E371E0517B90031462C /* MarkingConstraint.cpp in Sources */,
    1052110529                                0FE0502C1AA9095600D33B33 /* VarOffset.cpp in Sources */,
    1052210530                                0F20C2591A8013AB00DA3229 /* VirtualRegister.cpp in Sources */,
     
    1053110539                                79B759741DFA4C600052174C /* WasmMemoryInformation.cpp in Sources */,
    1053210540                                53F40E971D5A7BEC0099A1B6 /* WasmModuleParser.cpp in Sources */,
     10541                                ADB6F67D1E15D7600082F384 /* WasmPageCount.cpp in Sources */,
    1053310542                                531374BF1D5CE95000AF7A0B /* WasmPlan.cpp in Sources */,
     10543                                AD7438C11E0457AA00FD0C2A /* WasmSignature.cpp in Sources */,
    1053410544                                53FF7F9B1DBFD2B900A26CCC /* WasmValidate.cpp in Sources */,
    1053510545                                FED94F2E171E3E2300BE77A4 /* Watchdog.cpp in Sources */,
    1053610546                                0F919D2515853CE0004A4E7D /* Watchpoint.cpp in Sources */,
    1053710547                                1ACF7377171CA6FB00C9BB1E /* Weak.cpp in Sources */,
    10538                                 AD7438C11E0457AA00FD0C2A /* WasmSignature.cpp in Sources */,
    1053910548                                14E84F9E14EE1ACC00D6D5D4 /* WeakBlock.cpp in Sources */,
    1054010549                                14F7256514EE265E00B1652B /* WeakHandleOwner.cpp in Sources */,
     
    1055010559                                AD2FCBF01DB58DAD00B3E736 /* WebAssemblyInstanceConstructor.cpp in Sources */,
    1055110560                                AD2FCBF21DB58DAD00B3E736 /* WebAssemblyInstancePrototype.cpp in Sources */,
     10561                                ADE8029E1E08F2280058DE78 /* WebAssemblyLinkErrorConstructor.cpp in Sources */,
     10562                                ADE8029B1E08F1DE0058DE78 /* WebAssemblyLinkErrorPrototype.cpp in Sources */,
    1055210563                                AD2FCBF41DB58DAD00B3E736 /* WebAssemblyMemoryConstructor.cpp in Sources */,
    1055310564                                AD2FCBF61DB58DAD00B3E736 /* WebAssemblyMemoryPrototype.cpp in Sources */,
     
    1056910580                                86704B8912DBA33700A9FE7B /* YarrPattern.cpp in Sources */,
    1057010581                                86704B4212DB8A8100A9FE7B /* YarrSyntaxChecker.cpp in Sources */,
    10571                                 FA3AB211C8494524AB390267 /* JSSourceCode.cpp in Sources */,
    10572                                 14815F5F991C46BEB98D0016 /* JSScriptFetcher.cpp in Sources */,
    1057310582                        );
    1057410583                        runOnlyForDeploymentPostprocessing = 0;
  • trunk/Source/JavaScriptCore/inspector/AsyncStackTrace.h

    r211382 r211385  
    11/*
    2  * Copyright (C) 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 .tree-outline > .item.thread .icon {
    27     content: url(../Images/Thread.svg);
    28     width: 15px;
    29     height: 15px;
    30 }
     26#pragma once
    3127
    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>
    4031
    41 .tree-outline > .item.thread .status-button.resume:active {
    42     fill: hsla(0, 0%, 0%, 0.7);
    43 }
     32namespace Inspector {
    4433
    45 .tree-outline:matches(:focus, .force-focus) > .item.thread.selected .status-button.resume {
    46     fill: var(--selected-foreground-color);
    47 }
     34class ScriptCallStack;
    4835
    49 .tree-outline > .item.thread.selected .status-button.resume,
    50 .tree-outline > .item.thread:hover .status-button.resume {
    51     display: inline-block;
    52 }
     36class JS_EXPORT_PRIVATE AsyncStackTrace : public RefCounted<AsyncStackTrace> {
     37public:
     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
     58private:
     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  
    3131#include "InspectorDebuggerAgent.h"
    3232
     33#include "AsyncStackTrace.h"
    3334#include "ContentSearchUtilities.h"
    3435#include "InjectedScript.h"
     
    213214}
    214215
    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 
    249216void InspectorDebuggerAgent::handleConsoleAssert(const String& message)
    250217{
     
    269236        return;
    270237
    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));
    275249}
    276250
     
    280254        return;
    281255
    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);
    284268}
    285269
     
    294278    // A call can be scheduled before the Inspector is opened, or while async stack
    295279    // 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;
    302289}
    303290
     
    310297        return;
    311298
    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
    313306    m_currentAsyncCallIdentifier = std::nullopt;
     307
     308    if (!asyncStackTrace->isPending())
     309        m_pendingAsyncCalls.remove(identifier);
    314310}
    315311
     
    1002998
    1003999    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    }
    10061005
    10071006    m_frontendDispatcher->paused(currentCallFrames(injectedScript), m_breakReason, m_breakAuxData, asyncStackTrace);
     
    11391138void InspectorDebuggerAgent::clearAsyncStackTraceData()
    11401139{
    1141     m_asyncCallIdentifierToData.clear();
     1140    m_pendingAsyncCalls.clear();
    11421141    m_currentAsyncCallIdentifier = std::nullopt;
    11431142}
    11441143
    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 
    11701144} // namespace Inspector
  • trunk/Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h

    r211381 r211385  
    4545namespace Inspector {
    4646
     47class AsyncStackTrace;
    4748class InjectedScript;
    4849class InjectedScriptManager;
     
    5051class InspectorObject;
    5152class ScriptDebugServer;
    52 struct AsyncCallData;
    5353typedef String ErrorString;
    5454
     
    165165    typedef std::pair<int, int> AsyncCallIdentifier;
    166166
    167     RefPtr<Inspector::Protocol::Console::StackTrace> buildAsyncStackTrace(const AsyncCallIdentifier&);
    168     void refAsyncCallData(const AsyncCallIdentifier&);
    169     void derefAsyncCallData(const AsyncCallIdentifier&);
    170 
    171167    typedef HashMap<JSC::SourceID, Script> ScriptsMap;
    172168    typedef HashMap<String, Vector<JSC::BreakpointID>> BreakpointIdentifierToDebugServerBreakpointIDsMap;
    173169    typedef HashMap<String, RefPtr<InspectorObject>> BreakpointIdentifierToBreakpointMap;
    174170    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     };
    190171
    191172    InjectedScriptManager& m_injectedScriptManager;
     
    205186    ShouldDispatchResumed m_conditionToDispatchResumed { ShouldDispatchResumed::No };
    206187    bool m_enablePauseWhenIdle { false };
    207     HashMap<AsyncCallIdentifier, AsyncCallData> m_asyncCallIdentifierToData;
     188    HashMap<AsyncCallIdentifier, RefPtr<AsyncStackTrace>> m_pendingAsyncCalls;
    208189    std::optional<AsyncCallIdentifier> m_currentAsyncCallIdentifier { std::nullopt };
    209190    bool m_enabled { false };
  • trunk/Source/JavaScriptCore/inspector/protocol/Console.json

    r211381 r211385  
    4141                { "name": "callFrames", "type": "array", "items": { "$ref": "CallFrame" } },
    4242                { "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." },
    4344                { "name": "parentStackTrace", "$ref": "StackTrace", "optional": true, "description": "Parent StackTrace." }
    4445            ]
  • trunk/Source/WebInspectorUI/ChangeLog

    r211381 r211385  
     12017-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
    1292017-01-30  Ryan Haddad  <ryanhaddad@apple.com>
    230
  • trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js

    r211381 r211385  
    126126localizedStrings["CSP Hash"] = "CSP Hash";
    127127localizedStrings["Cached"] = "Cached";
     128localizedStrings["Call Frames Truncated"] = "Call Frames Truncated";
    128129localizedStrings["Call Stack"] = "Call Stack";
    129130localizedStrings["Call Trees"] = "Call Trees";
  • trunk/Source/WebInspectorUI/UserInterface/Models/StackTrace.js

    r211381 r211385  
    2626WebInspector.StackTrace = class StackTrace extends WebInspector.Object
    2727{
    28     constructor(callFrames, topCallFrameIsBoundary)
     28    constructor(callFrames, topCallFrameIsBoundary, truncated, parentStackTrace)
    2929    {
    3030        super();
     
    3434        this._callFrames = callFrames;
    3535        this._topCallFrameIsBoundary = topCallFrameIsBoundary || false;
    36         this._parentStackTrace = null;
     36        this._truncated = truncated || false;
     37        this._parentStackTrace = parentStackTrace || null;
    3738    }
    3839
     
    4647        while (payload) {
    4748            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);
    4950            if (!result)
    5051                result = stackTrace;
     
    170171
    171172    get topCallFrameIsBoundary() { return this._topCallFrameIsBoundary; }
     173    get truncated() { return this._truncated; }
    172174    get parentStackTrace() { return this._parentStackTrace; }
    173175};
  • trunk/Source/WebInspectorUI/UserInterface/Views/ThreadTreeElement.css

    r211381 r211385  
    5151    display: inline-block;
    5252}
     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  
    9393                this.appendChild(new WebInspector.CallFrameTreeElement(currentStackTrace.callFrames[i]));
    9494
     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
    95101            currentStackTrace = currentStackTrace.parentStackTrace;
    96102        }
  • trunk/Source/WebInspectorUI/Versions/Inspector-iOS-10.3.json

    r211381 r211385  
    588588                { "name": "callFrames", "type": "array", "items": { "$ref": "CallFrame" } },
    589589                { "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." },
    590591                { "name": "parentStackTrace", "$ref": "StackTrace", "optional": true, "description": "Parent StackTrace." }
    591592            ]
Note: See TracChangeset for help on using the changeset viewer.