Changeset 247033 in webkit
- Timestamp:
- Jul 1, 2019 6:17:50 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r247031 r247033 1 2019-07-01 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: REGRESSION(r245498): Timelines: CPU: discontinuities are filled in by the next record 4 https://bugs.webkit.org/show_bug.cgi?id=198927 5 6 Reviewed by Matt Baker. 7 8 * inspector/unit-tests/set-utilities.html: 9 * inspector/unit-tests/set-utilities-expected.txt: 10 1 11 2019-07-01 Russell Epstein <russell_e@apple.com> 2 12 -
trunk/LayoutTests/inspector/unit-tests/set-utilities-expected.txt
r244154 r247033 1 1 2 2 == Running test suite: Set 3 -- Running test case: Set.prototype.take 4 PASS: Set can take `key`. 5 PASS: Set no longer has `key`. 6 PASS: Set can NOT take `key`. 7 PASS: Set can NOT take `DNE`, as it does NOT exist. 8 3 9 -- Running test case: Set.prototype.intersects 4 10 PASS: an empty set should not intersect another empty set. -
trunk/LayoutTests/inspector/unit-tests/set-utilities.html
r244154 r247033 7 7 { 8 8 let suite = InspectorTest.createSyncSuite("Set"); 9 10 suite.addTestCase({ 11 name: "Set.prototype.take", 12 test() { 13 const key = "key"; 14 15 let set = new Set; 16 set.add(key); 17 InspectorTest.expectTrue(set.take(key), "Set can take `key`."); 18 InspectorTest.expectFalse(set.has(key), "Set no longer has `key`."); 19 InspectorTest.expectFalse(set.take(key), "Set can NOT take `key`."); 20 InspectorTest.expectFalse(set.take("DNE"), "Set can NOT take `DNE`, as it does NOT exist."); 21 } 22 }); 9 23 10 24 suite.addTestCase({ -
trunk/Source/WebInspectorUI/ChangeLog
r246953 r247033 1 2019-07-01 Devin Rousso <drousso@apple.com> 2 3 Web Inspector: REGRESSION(r245498): Timelines: CPU: discontinuities are filled in by the next record 4 https://bugs.webkit.org/show_bug.cgi?id=198927 5 6 Reviewed by Matt Baker. 7 8 * UserInterface/Controllers/TimelineManager.js: 9 (WI.TimelineManager.prototype.capturingStarted): 10 (WI.TimelineManager.prototype.capturingStopped): 11 * UserInterface/Models/TimelineRecording.js: 12 (WI.TimelineRecording): 13 (WI.TimelineRecording.prototype.start): 14 (WI.TimelineRecording.prototype.capturingStarted): Added. 15 (WI.TimelineRecording.prototype.capturingStopped): Added. 16 (WI.TimelineRecording.prototype.reset): 17 (WI.TimelineRecording.prototype.addRecord): 18 (WI.TimelineRecording.prototype.discontinuitiesInTimeRange): 19 (WI.TimelineRecording.prototype.addDiscontinuity): Deleted. 20 Notify the `TimelineRecording` when capturing has started/stopped. 21 Adjust the first record after a discontinuity to have it's `startTime` match the `endTime` 22 of the most recent discontinuity. 23 24 * UserInterface/Models/Timeline.js: 25 (WI.Timeline.prototype.addRecord): 26 * UserInterface/Models/CPUTimeline.js: 27 (WI.CPUTimeline.prototype.addRecord): 28 * UserInterface/Models/CPUTimelineRecord.js: 29 (WI.CPUTimelineRecord.prototype.adjustStartTime): Added. 30 (WI.CPUTimelineRecord.prototype.adjustStartTimeToLastRecord): Deleted. 31 * UserInterface/Models/MemoryTimeline.js: 32 (WI.MemoryTimeline.prototype.addRecord): 33 * UserInterface/Models/MemoryTimelineRecord.js: 34 (WI.MemoryTimelineRecord.prototype.adjustStartTime): Added. 35 (WI.MemoryTimelineRecord.prototype.adjustStartTimeToLastRecord): Deleted. 36 * UserInterface/Models/NetworkTimeline.js: 37 (WI.NetworkTimeline.prototype.addRecord): 38 39 * UserInterface/Views/CPUTimelineView.js: 40 (WI.CPUTimelineView.prototype.layout): 41 * UserInterface/Views/MemoryTimelineOverviewGraph.js: 42 (WI.MemoryTimelineOverviewGraph.prototype.layout): 43 * UserInterface/Views/MemoryTimelineView.js: 44 (WI.MemoryTimelineView.prototype.layout): 45 Include discontinuities that exactly match the start/end time of the record immediately 46 before/after the discontinuity. 47 48 * UserInterface/Views/TimelineRecordingContentView.js: 49 (WI.TimelineRecordingContentView): 50 (WI.TimelineRecordingContentView.prototype._handleTimelineCapturingStateChanged): 51 (WI.TimelineRecordingContentView.prototype._recordingReset): 52 Move the logic for handling discontinuity start/end times to the `TimelineRecording`. 53 54 * UserInterface/Base/Utilities.js: 55 1 56 2019-06-29 Nikita Vasilyev <nvasilyev@apple.com> 2 57 -
trunk/Source/WebInspectorUI/UserInterface/Base/Utilities.js
r246271 r247033 147 147 }); 148 148 149 Object.defineProperty(Set.prototype, "take", 150 { 151 value(key) 152 { 153 let exists = this.has(key); 154 if (exists) 155 this.delete(key); 156 return exists; 157 } 158 }); 159 149 160 Object.defineProperty(Set.prototype, "equals", 150 161 { -
trunk/Source/WebInspectorUI/UserInterface/Controllers/TimelineManager.js
r244933 r247033 356 356 this._webTimelineScriptRecordsExpectingScriptProfilerEvents = []; 357 357 358 this._activeRecording.capturingStarted(this._capturingStartTime); 359 358 360 WI.settings.timelinesAutoStop.addEventListener(WI.Setting.Event.Changed, this._handleTimelinesAutoStopSettingChanged, this); 359 361 … … 400 402 WI.Frame.removeEventListener(WI.Frame.Event.ResourceWasAdded, this._resourceWasAdded, this); 401 403 WI.settings.timelinesAutoStop.removeEventListener(null, null, this); 404 405 this._activeRecording.capturingStopped(this._capturingEndTime); 402 406 403 407 this.relaxAutoStop(); -
trunk/Source/WebInspectorUI/UserInterface/Models/CPUTimeline.js
r245498 r247033 28 28 // Public 29 29 30 addRecord(record )30 addRecord(record, options = {}) 31 31 { 32 32 let lastRecord = this.records.lastValue; 33 if (lastRecord) 34 record.adjustStartTimeToLastRecord(lastRecord); 33 if (lastRecord) { 34 let startTime = lastRecord.endTime; 35 if (options.discontinuity) 36 startTime = options.discontinuity.endTime; 37 record.adjustStartTime(startTime); 38 } 35 39 36 super.addRecord(record );40 super.addRecord(record, options); 37 41 } 38 42 }; -
trunk/Source/WebInspectorUI/UserInterface/Models/CPUTimelineRecord.js
r245498 r247033 105 105 get workersData() { return this._workersData; } 106 106 107 adjustStartTime ToLastRecord(lastRecord)107 adjustStartTime(startTime) 108 108 { 109 console.assert(lastRecord instanceof CPUTimelineRecord); 110 console.assert(this._startTime >= lastRecord.endTime); 111 this._startTime = lastRecord.endTime; 109 console.assert(startTime < this._endTime); 110 this._startTime = startTime; 112 111 } 113 112 }; -
trunk/Source/WebInspectorUI/UserInterface/Models/MemoryTimeline.js
r245498 r247033 48 48 } 49 49 50 addRecord(record )50 addRecord(record, options = {}) 51 51 { 52 52 let lastRecord = this.records.lastValue; 53 if (lastRecord) 54 record.adjustStartTimeToLastRecord(lastRecord); 53 if (lastRecord) { 54 let startTime = lastRecord.endTime; 55 if (options.discontinuity) 56 startTime = options.discontinuity.endTime; 57 record.adjustStartTime(startTime); 58 } 55 59 56 super.addRecord(record );60 super.addRecord(record, options); 57 61 } 58 62 }; -
trunk/Source/WebInspectorUI/UserInterface/Models/MemoryTimelineRecord.js
r245498 r247033 110 110 get totalSize() { return this._totalSize; } 111 111 112 adjustStartTime ToLastRecord(lastRecord)112 adjustStartTime(startTime) 113 113 { 114 console.assert(lastRecord instanceof MemoryTimelineRecord); 115 console.assert(this._startTime >= lastRecord.endTime); 116 this._startTime = lastRecord.endTime; 114 console.assert(startTime < this._endTime); 115 this._startTime = startTime; 117 116 } 118 117 }; -
trunk/Source/WebInspectorUI/UserInterface/Models/NetworkTimeline.js
r220119 r247033 42 42 } 43 43 44 addRecord(record )44 addRecord(record, options = {}) 45 45 { 46 46 console.assert(record instanceof WI.ResourceTimelineRecord); … … 52 52 this._resourceRecordMap.set(record.resource, record); 53 53 54 super.addRecord(record );54 super.addRecord(record, options); 55 55 } 56 56 }; -
trunk/Source/WebInspectorUI/UserInterface/Models/Timeline.js
r245498 r247033 70 70 } 71 71 72 addRecord(record )72 addRecord(record, options = {}) 73 73 { 74 74 if (record.updatesDynamically) -
trunk/Source/WebInspectorUI/UserInterface/Models/TimelineRecording.js
r246292 r247033 40 40 this._startTime = NaN; 41 41 this._endTime = NaN; 42 43 this._discontinuityStartTime = NaN; 42 44 this._discontinuities = null; 45 this._firstRecordOfTypeAfterDiscontinuity = new Set; 43 46 44 47 this._exportDataRecords = null; … … 169 172 for (let instrument of this._instruments) 170 173 instrument.startInstrumentation(initiatedByBackend); 174 175 if (!isNaN(this._discontinuityStartTime)) { 176 for (let instrument of this._instruments) 177 this._firstRecordOfTypeAfterDiscontinuity.add(instrument.timelineRecordType); 178 } 171 179 } 172 180 … … 180 188 for (let instrument of this._instruments) 181 189 instrument.stopInstrumentation(initiatedByBackend); 190 } 191 192 capturingStarted(startTime) 193 { 194 // A discontinuity occurs when the recording is stopped and resumed at 195 // a future time. Capturing started signals the end of the current 196 // discontinuity, if one exists. 197 if (!isNaN(this._discontinuityStartTime)) { 198 this._discontinuities.push({ 199 startTime: this._discontinuityStartTime, 200 endTime: startTime, 201 }); 202 this._discontinuityStartTime = NaN; 203 } 204 } 205 206 capturingStopped(endTime) 207 { 208 this._discontinuityStartTime = endTime; 182 209 } 183 210 … … 215 242 this._startTime = NaN; 216 243 this._endTime = NaN; 244 245 this._discontinuityStartTime = NaN; 217 246 this._discontinuities = []; 247 this._firstRecordOfTypeAfterDiscontinuity.clear(); 218 248 219 249 this._exportDataRecords = []; … … 301 331 return; 302 332 333 let discontinuity = null; 334 if (this._firstRecordOfTypeAfterDiscontinuity.take(record.type)) 335 discontinuity = this._discontinuities.lastValue; 336 303 337 // Add the record to the global timeline by type. 304 timeline.addRecord(record );338 timeline.addRecord(record, {discontinuity}); 305 339 306 340 // Some records don't have source code timelines. … … 359 393 } 360 394 361 addDiscontinuity(startTime, endTime)362 {363 this._discontinuities.push({startTime, endTime});364 }365 366 395 discontinuitiesInTimeRange(startTime, endTime) 367 396 { 368 return this._discontinuities.filter((item) => item.startTime < endTime && item.endTime >startTime);397 return this._discontinuities.filter((item) => item.startTime <= endTime && item.endTime >= startTime); 369 398 } 370 399 -
trunk/Source/WebInspectorUI/UserInterface/Views/CPUTimelineView.js
r246179 r247033 487 487 let {usage, mainThreadUsage, workerThreadUsage, webkitThreadUsage, unknownThreadUsage} = record; 488 488 489 if (discontinuities.length && discontinuities[0].endTime < time) {489 if (discontinuities.length && discontinuities[0].endTime <= time) { 490 490 let startDiscontinuity = discontinuities.shift(); 491 491 let endDiscontinuity = startDiscontinuity; 492 while (discontinuities.length && discontinuities[0].endTime < time)492 while (discontinuities.length && discontinuities[0].endTime <= time) 493 493 endDiscontinuity = discontinuities.shift(); 494 494 -
trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineOverviewGraph.js
r245498 r247033 189 189 let previousRecord = null; 190 190 for (let record of visibleRecords) { 191 if (discontinuities.length && discontinuities[0].endTime < record.startTime) {191 if (discontinuities.length && discontinuities[0].endTime <= record.startTime) { 192 192 let startDiscontinuity = discontinuities.shift(); 193 193 let endDiscontinuity = startDiscontinuity; 194 while (discontinuities.length && discontinuities[0].endTime < record.startTime)194 while (discontinuities.length && discontinuities[0].endTime <= record.startTime) 195 195 endDiscontinuity = discontinuities.shift(); 196 196 insertDiscontinuity.call(this, previousRecord, startDiscontinuity, endDiscontinuity, record); -
trunk/Source/WebInspectorUI/UserInterface/Views/MemoryTimelineView.js
r245498 r247033 229 229 let startDiscontinuity = null; 230 230 let endDiscontinuity = null; 231 if (discontinuities.length && discontinuities[0].endTime < time) {231 if (discontinuities.length && discontinuities[0].endTime <= time) { 232 232 startDiscontinuity = discontinuities.shift(); 233 233 endDiscontinuity = startDiscontinuity; 234 while (discontinuities.length && discontinuities[0].endTime < time)234 while (discontinuities.length && discontinuities[0].endTime <= time) 235 235 endDiscontinuity = discontinuities.shift(); 236 236 } -
trunk/Source/WebInspectorUI/UserInterface/Views/TimelineRecordingContentView.js
r246558 r247033 93 93 this._updating = false; 94 94 this._currentTime = NaN; 95 this._discontinuityStartTime = NaN;96 95 this._lastUpdateTimestamp = NaN; 97 96 this._startTimeNeedsReset = true; … … 524 523 this._clearTimelineNavigationItem.enabled = !this._recording.readonly; 525 524 this._exportButtonNavigationItem.enabled = false; 526 527 // A discontinuity occurs when the recording is stopped and resumed at528 // a future time. Capturing started signals the end of the current529 // discontinuity, if one exists.530 if (!isNaN(this._discontinuityStartTime)) {531 this._recording.addDiscontinuity(this._discontinuityStartTime, startTime);532 this._discontinuityStartTime = NaN;533 }534 525 break; 535 526 … … 540 531 if (this.currentTimelineView) 541 532 this._updateTimelineViewTimes(this.currentTimelineView); 542 543 this._discontinuityStartTime = endTime || this._currentTime;544 533 545 534 this._exportButtonNavigationItem.enabled = this._recording.canExport(); … … 711 700 712 701 this._currentTime = NaN; 713 this._discontinuityStartTime = NaN;714 702 715 703 if (!this._updating) {
Note: See TracChangeset
for help on using the changeset viewer.