Title: [193459] branches/safari-601.1.46-branch/Source/_javascript_Core

Diff

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/ChangeLog	2015-12-04 20:54:23 UTC (rev 193459)
@@ -1,5 +1,44 @@
 2015-12-04  Timothy Hatcher  <timo...@apple.com>
 
+        Merge r190542. rdar://problem/23581597
+
+    2015-10-02  Matt Baker  <mattba...@apple.com>
+
+            Web Inspector: Add breakpoint option to ignore n times before stopping
+            https://bugs.webkit.org/show_bug.cgi?id=147664
+
+            Reviewed by Timothy Hatcher.
+
+            * debugger/Breakpoint.h:
+            (JSC::Breakpoint::Breakpoint):
+            Added ignoreCount and hitCount fields. Cleaned up initializers.
+
+            * debugger/Debugger.cpp:
+            (JSC::Debugger::hasBreakpoint):
+            If a breakpoint matches the current text position, increment breakpoint hit count and
+            compare with ignore count before testing the breakpoint condition.
+
+            * inspector/ScriptBreakpoint.h:
+            (Inspector::ScriptBreakpoint::ScriptBreakpoint):
+            Added ignoreCount field. Cleaned up initializers.
+
+            * inspector/ScriptDebugServer.cpp:
+            (Inspector::ScriptDebugServer::setBreakpoint):
+            Added ignoreCount field.
+
+            * inspector/agents/InspectorDebuggerAgent.cpp:
+            (Inspector::buildObjectForBreakpointCookie):
+            (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
+            (Inspector::InspectorDebuggerAgent::setBreakpoint):
+            (Inspector::InspectorDebuggerAgent::continueToLocation):
+            (Inspector::InspectorDebuggerAgent::didParseSource):
+            Plumbing for ignoreCount property.
+
+            * inspector/protocol/Debugger.json:
+            Added optional ignoreCount property to BreakpointOptions object.
+
+2015-12-04  Timothy Hatcher  <timo...@apple.com>
+
         Merge r189415. rdar://problem/23581597
 
     2015-09-04  Joseph Pecoraro  <pecor...@apple.com>

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Breakpoint.h	2015-12-04 20:54:23 UTC (rev 193459)
@@ -35,21 +35,16 @@
 
 struct Breakpoint : public DoublyLinkedListNode<Breakpoint> {
     Breakpoint()
-        : id(noBreakpointID)
-        , sourceID(noSourceID)
-        , line(0)
-        , column(0)
-        , autoContinue(false)
     {
     }
 
-    Breakpoint(SourceID sourceID, unsigned line, unsigned column, const String& condition, bool autoContinue)
-        : id(noBreakpointID)
-        , sourceID(sourceID)
+    Breakpoint(SourceID sourceID, unsigned line, unsigned column, const String& condition, bool autoContinue, unsigned ignoreCount)
+        : sourceID(sourceID)
         , line(line)
         , column(column)
         , condition(condition)
         , autoContinue(autoContinue)
+        , ignoreCount(ignoreCount)
     {
     }
 
@@ -60,15 +55,19 @@
         , column(other.column)
         , condition(other.condition)
         , autoContinue(other.autoContinue)
+        , ignoreCount(other.ignoreCount)
+        , hitCount(other.hitCount)
     {
     }
 
-    BreakpointID id;
-    SourceID sourceID;
-    unsigned line;
-    unsigned column;
+    BreakpointID id { noBreakpointID };
+    SourceID sourceID { noSourceID };
+    unsigned line { 0 };
+    unsigned column { 0 };
     String condition;
-    bool autoContinue;
+    bool autoContinue { false };
+    unsigned ignoreCount { 0 };
+    unsigned hitCount { 0 };
 
     static const unsigned unspecifiedColumn = UINT_MAX;
 

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/debugger/Debugger.cpp	2015-12-04 20:54:23 UTC (rev 193459)
@@ -480,6 +480,10 @@
     if (hitBreakpoint)
         *hitBreakpoint = *breakpoint;
 
+    breakpoint->hitCount++;
+    if (breakpoint->ignoreCount >= breakpoint->hitCount)
+        return false;
+
     if (breakpoint->condition.isEmpty())
         return true;
 

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptBreakpoint.h	2015-12-04 20:54:23 UTC (rev 193459)
@@ -62,28 +62,31 @@
     {
     }
 
-    ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, bool autoContinue)
+    ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, bool autoContinue, unsigned ignoreCount)
         : lineNumber(lineNumber)
         , columnNumber(columnNumber)
         , condition(condition)
         , autoContinue(autoContinue)
+        , ignoreCount(ignoreCount)
     {
     }
 
-    ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, BreakpointActions& actions, bool autoContinue)
+    ScriptBreakpoint(int lineNumber, int columnNumber, const String& condition, BreakpointActions& actions, bool autoContinue, unsigned ignoreCount)
         : lineNumber(lineNumber)
         , columnNumber(columnNumber)
         , condition(condition)
         , actions(actions)
         , autoContinue(autoContinue)
+        , ignoreCount(ignoreCount)
     {
     }
 
-    int lineNumber;
-    int columnNumber;
+    int lineNumber { 0 };
+    int columnNumber { 0 };
     String condition;
     BreakpointActions actions;
-    bool autoContinue;
+    bool autoContinue { false };
+    unsigned ignoreCount { 0 };
 };
 
 } // namespace Inspector

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/ScriptDebugServer.cpp	2015-12-04 20:54:23 UTC (rev 193459)
@@ -61,7 +61,7 @@
     if (!sourceID)
         return JSC::noBreakpointID;
 
-    JSC::Breakpoint breakpoint(sourceID, scriptBreakpoint.lineNumber, scriptBreakpoint.columnNumber, scriptBreakpoint.condition, scriptBreakpoint.autoContinue);
+    JSC::Breakpoint breakpoint(sourceID, scriptBreakpoint.lineNumber, scriptBreakpoint.columnNumber, scriptBreakpoint.condition, scriptBreakpoint.autoContinue, scriptBreakpoint.ignoreCount);
     JSC::BreakpointID id = Debugger::setBreakpoint(breakpoint, *actualLineNumber, *actualColumnNumber);
     if (id != JSC::noBreakpointID && !scriptBreakpoint.actions.isEmpty()) {
 #ifndef NDEBUG

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/agents/InspectorDebuggerAgent.cpp	2015-12-04 20:54:23 UTC (rev 193459)
@@ -189,7 +189,7 @@
         breakProgram(DebuggerFrontendDispatcher::Reason::Assert, buildAssertPauseReason(message));
 }
 
-static Ref<InspectorObject> buildObjectForBreakpointCookie(const String& url, int lineNumber, int columnNumber, const String& condition, RefPtr<InspectorArray>& actions, bool isRegex, bool autoContinue)
+static Ref<InspectorObject> buildObjectForBreakpointCookie(const String& url, int lineNumber, int columnNumber, const String& condition, RefPtr<InspectorArray>& actions, bool isRegex, bool autoContinue, unsigned ignoreCount)
 {
     Ref<InspectorObject> breakpointObject = InspectorObject::create();
     breakpointObject->setString(ASCIILiteral("url"), url);
@@ -198,6 +198,7 @@
     breakpointObject->setString(ASCIILiteral("condition"), condition);
     breakpointObject->setBoolean(ASCIILiteral("isRegex"), isRegex);
     breakpointObject->setBoolean(ASCIILiteral("autoContinue"), autoContinue);
+    breakpointObject->setInteger(ASCIILiteral("ignoreCount"), ignoreCount);
 
     if (actions)
         breakpointObject->setArray(ASCIILiteral("actions"), actions);
@@ -300,20 +301,22 @@
 
     String condition = emptyString();
     bool autoContinue = false;
+    unsigned ignoreCount = 0;
     RefPtr<InspectorArray> actions;
     if (options) {
         options->getString(ASCIILiteral("condition"), condition);
         options->getBoolean(ASCIILiteral("autoContinue"), autoContinue);
         options->getArray(ASCIILiteral("actions"), actions);
+        options->getInteger(ASCIILiteral("ignoreCount"), ignoreCount);
     }
 
     BreakpointActions breakpointActions;
     if (!breakpointActionsFromProtocol(errorString, actions, &breakpointActions))
         return;
 
-    m_javaScriptBreakpoints.set(breakpointIdentifier, buildObjectForBreakpointCookie(url, lineNumber, columnNumber, condition, actions, isRegex, autoContinue));
+    m_javaScriptBreakpoints.set(breakpointIdentifier, buildObjectForBreakpointCookie(url, lineNumber, columnNumber, condition, actions, isRegex, autoContinue, ignoreCount));
 
-    ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue);
+    ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue, ignoreCount);
     for (ScriptsMap::iterator it = m_scripts.begin(); it != m_scripts.end(); ++it) {
         String scriptURL = !it->value.sourceURL.isEmpty() ? it->value.sourceURL : it->value.url;
         if (!matches(scriptURL, url, isRegex))
@@ -351,11 +354,13 @@
 
     String condition = emptyString();
     bool autoContinue = false;
+    unsigned ignoreCount = 0;
     RefPtr<InspectorArray> actions;
     if (options) {
         options->getString(ASCIILiteral("condition"), condition);
         options->getBoolean(ASCIILiteral("autoContinue"), autoContinue);
         options->getArray(ASCIILiteral("actions"), actions);
+        options->getInteger(ASCIILiteral("ignoreCount"), ignoreCount);
     }
 
     BreakpointActions breakpointActions;
@@ -368,7 +373,7 @@
         return;
     }
 
-    ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue);
+    ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition, breakpointActions, autoContinue, ignoreCount);
     actualLocation = resolveBreakpoint(breakpointIdentifier, sourceID, breakpoint);
     if (!actualLocation) {
         errorString = ASCIILiteral("Could not resolve breakpoint");
@@ -406,7 +411,7 @@
     if (!parseLocation(errorString, location, sourceID, lineNumber, columnNumber))
         return;
 
-    ScriptBreakpoint breakpoint(lineNumber, columnNumber, "", false);
+    ScriptBreakpoint breakpoint(lineNumber, columnNumber, "", false, 0);
     m_continueToLocationBreakpointID = scriptDebugServer().setBreakpoint(sourceID, breakpoint, &lineNumber, &columnNumber);
     resume(errorString);
 }
@@ -641,6 +646,7 @@
         breakpointObject->getInteger(ASCIILiteral("columnNumber"), breakpoint.columnNumber);
         breakpointObject->getString(ASCIILiteral("condition"), breakpoint.condition);
         breakpointObject->getBoolean(ASCIILiteral("autoContinue"), breakpoint.autoContinue);
+        breakpointObject->getInteger(ASCIILiteral("ignoreCount"), breakpoint.ignoreCount);
         ErrorString errorString;
         RefPtr<InspectorArray> actions;
         breakpointObject->getArray(ASCIILiteral("actions"), actions);

Modified: branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json (193458 => 193459)


--- branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json	2015-12-04 20:54:16 UTC (rev 193458)
+++ branches/safari-601.1.46-branch/Source/_javascript_Core/inspector/protocol/Debugger.json	2015-12-04 20:54:23 UTC (rev 193459)
@@ -48,7 +48,8 @@
             "properties": [
                 { "name": "condition", "type": "string", "optional": true, "description": "_expression_ to use as a breakpoint condition. When specified, debugger will only stop on the breakpoint if this _expression_ evaluates to true." },
                 { "name": "actions", "type": "array", "optional": true, "items": { "$ref": "BreakpointAction" }, "description": "Actions to perform automatically when the breakpoint is triggered." },
-                { "name": "autoContinue", "type": "boolean", "optional": true, "description": "Automatically continue after hitting this breakpoint and running actions." }
+                { "name": "autoContinue", "type": "boolean", "optional": true, "description": "Automatically continue after hitting this breakpoint and running actions." },
+                { "name": "ignoreCount", "type": "integer", "optional": true, "description": "Number of times to ignore this breakpoint, before stopping on the breakpoint and running actions." }
             ],
             "description": "Extra options that modify breakpoint behavior."
         },
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to