Title: [172203] trunk/Source/WebInspectorUI
Revision
172203
Author
[email protected]
Date
2014-08-06 23:14:54 -0700 (Wed, 06 Aug 2014)

Log Message

Web Inspector: ReplayManager should unpause and suppress breakpoints before capturing/replaying
https://bugs.webkit.org/show_bug.cgi?id=135608

Reviewed by Timothy Hatcher.

It is jarring when the debugger pauses during capturing or replaying. For now, we should suppress
all breakpoints during capturing or replaying, and restore breakpoint enabled state when
capturing finishes, when replaying finishes, or during temporary replay pauses.

In the future, the debugger will be selectively enabled during playback to seek to specific
breakpoint hits. This is tracked in https://bugs.webkit.org/show_bug.cgi?id=135663.

* UserInterface/Controllers/ReplayManager.js:
(WebInspector.ReplayManager.prototype.startCapturing.result):
(WebInspector.ReplayManager.prototype.replayToPosition.result):
(WebInspector.ReplayManager.prototype.replayToCompletion.result):
(WebInspector.ReplayManager.prototype.captureStopped):
(WebInspector.ReplayManager.prototype.playbackPaused):
(WebInspector.ReplayManager.prototype.playbackFinished):
(WebInspector.ReplayManager.prototype._changeSegmentState):
(WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (172202 => 172203)


--- trunk/Source/WebInspectorUI/ChangeLog	2014-08-07 05:12:00 UTC (rev 172202)
+++ trunk/Source/WebInspectorUI/ChangeLog	2014-08-07 06:14:54 UTC (rev 172203)
@@ -1,3 +1,27 @@
+2014-08-06  Brian J. Burg  <[email protected]>
+
+        Web Inspector: ReplayManager should unpause and suppress breakpoints before capturing/replaying
+        https://bugs.webkit.org/show_bug.cgi?id=135608
+
+        Reviewed by Timothy Hatcher.
+
+        It is jarring when the debugger pauses during capturing or replaying. For now, we should suppress
+        all breakpoints during capturing or replaying, and restore breakpoint enabled state when
+        capturing finishes, when replaying finishes, or during temporary replay pauses.
+
+        In the future, the debugger will be selectively enabled during playback to seek to specific
+        breakpoint hits. This is tracked in https://bugs.webkit.org/show_bug.cgi?id=135663.
+
+        * UserInterface/Controllers/ReplayManager.js:
+        (WebInspector.ReplayManager.prototype.startCapturing.result):
+        (WebInspector.ReplayManager.prototype.replayToPosition.result):
+        (WebInspector.ReplayManager.prototype.replayToCompletion.result):
+        (WebInspector.ReplayManager.prototype.captureStopped):
+        (WebInspector.ReplayManager.prototype.playbackPaused):
+        (WebInspector.ReplayManager.prototype.playbackFinished):
+        (WebInspector.ReplayManager.prototype._changeSegmentState):
+        (WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):
+
 2014-08-06  Brent Fulgham  <[email protected]>
 
         [Win] Build fix.

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js (172202 => 172203)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js	2014-08-07 05:12:00 UTC (rev 172202)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/ReplayManager.js	2014-08-07 06:14:54 UTC (rev 172203)
@@ -248,6 +248,8 @@
             });
         }
 
+        result = result.then(this._suppressBreakpointsAndResumeIfNeeded());
+
         result = result.then(function() {
                 console.assert(manager.sessionState === WebInspector.ReplayManager.SessionState.Inactive);
                 console.assert(manager.segmentState === WebInspector.ReplayManager.SegmentState.Unloaded);
@@ -343,6 +345,8 @@
             });
         }
 
+        result = result.then(this._suppressBreakpointsAndResumeIfNeeded());
+
         result = result.then(function() {
                 console.assert(manager.sessionState !== WebInspector.ReplayManager.SessionState.Capturing);
                 console.assert(manager.segmentState !== WebInspector.ReplayManager.SegmentState.Appending);
@@ -372,6 +376,8 @@
             });
         }
 
+        result = result.then(this._suppressBreakpointsAndResumeIfNeeded());
+
         result = result.then(function() {
                 console.assert(manager.sessionState !== WebInspector.ReplayManager.SessionState.Capturing);
                 console.assert(manager.segmentState === WebInspector.ReplayManager.SegmentState.Loaded || manager.segmentState === WebInspector.ReplayManager.SegmentState.Unloaded);
@@ -409,6 +415,11 @@
         this._changeSessionState(WebInspector.ReplayManager.SessionState.Inactive);
         this._changeSegmentState(WebInspector.ReplayManager.SegmentState.Unloaded);
 
+        if (this._breakpointsWereSuppressed) {
+            delete this._breakpointsWereSuppressed;
+            WebInspector.debuggerManager.breakpointsEnabled = true;
+        }
+
         this.dispatchEventToListeners(WebInspector.ReplayManager.Event.CaptureStopped);
     },
 
@@ -446,6 +457,11 @@
         console.assert(this.sessionState === WebInspector.ReplayManager.SessionState.Replaying);
         this._changeSegmentState(WebInspector.ReplayManager.SegmentState.Loaded);
 
+        if (this._breakpointsWereSuppressed) {
+            delete this._breakpointsWereSuppressed;
+            WebInspector.debuggerManager.breakpointsEnabled = true;
+        }
+
         this.dispatchEventToListeners(WebInspector.ReplayManager.Event.PlaybackPaused);
     },
 
@@ -457,6 +473,11 @@
         this._changeSessionState(WebInspector.ReplayManager.SessionState.Inactive);
         console.assert(this.segmentState === WebInspector.ReplayManager.SegmentState.Unloaded);
 
+        if (this._breakpointsWereSuppressed) {
+            delete this._breakpointsWereSuppressed;
+            WebInspector.debuggerManager.breakpointsEnabled = true;
+        }
+
         this.dispatchEventToListeners(WebInspector.ReplayManager.Event.PlaybackFinished);
     },
 
@@ -645,6 +666,21 @@
         console.assert(isAllowed, "Invalid segment state change: ", this._segmentState, " to ", newState);
         if (isAllowed)
             this._segmentState = newState;
+    },
+
+    _suppressBreakpointsAndResumeIfNeeded: function()
+    {
+        var manager = this;
+
+        return new Promise(function(resolve, reject) {
+            manager._breakpointsWereSuppressed = WebInspector.debuggerManager.breakpointsEnabled;
+            WebInspector.debuggerManager.breakpointsEnabled = false;
+            if (!WebInspector.debuggerManager.paused)
+                return resolve();
+
+            WebInspector.debuggerManager.resume();
+            WebInspector.debuggerManager.addSingleFireEventListener(WebInspector.DebuggerManager.Event.Resumed, resolve);
+        });
     }
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to