| OLD | NEW | 
|---|
| 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 Coverage.CoverageView = class extends UI.VBox { | 5 Coverage.CoverageView = class extends UI.VBox { | 
| 6   constructor() { | 6   constructor() { | 
| 7     super(true); | 7     super(true); | 
| 8 | 8 | 
| 9     /** @type {?Coverage.CoverageModel} */ | 9     /** @type {?Coverage.CoverageModel} */ | 
| 10     this._model = null; | 10     this._model = null; | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 67   async _stopRecording() { | 67   async _stopRecording() { | 
| 68     this._toggleRecordAction.setToggled(false); | 68     this._toggleRecordAction.setToggled(false); | 
| 69     this._progressElement.textContent = Common.UIString('Fetching results...'); | 69     this._progressElement.textContent = Common.UIString('Fetching results...'); | 
| 70 | 70 | 
| 71     var coverageInfo = await this._model.stop(); | 71     var coverageInfo = await this._model.stop(); | 
| 72     this._model = null; | 72     this._model = null; | 
| 73     this._updateViews(coverageInfo); | 73     this._updateViews(coverageInfo); | 
| 74   } | 74   } | 
| 75 | 75 | 
| 76   /** | 76   /** | 
| 77    * @param {!Array<!Coverage.CoverageInfo>} coverageInfo | 77    * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo | 
| 78    */ | 78    */ | 
| 79   async _updateViews(coverageInfo) { | 79   async _updateViews(coverageInfo) { | 
| 80     this._updateStats(coverageInfo); | 80     this._updateStats(coverageInfo); | 
| 81     this._coverageResultsElement.removeChildren(); | 81     this._coverageResultsElement.removeChildren(); | 
| 82     this._listView.update(coverageInfo); | 82     this._listView.update(coverageInfo); | 
| 83     this._listView.show(this._coverageResultsElement); | 83     this._listView.show(this._coverageResultsElement); | 
| 84     await Promise.all(coverageInfo.map(entry => Coverage.CoverageView._updateGut
     ter(entry))); | 84     await Promise.all(coverageInfo.map(entry => Coverage.CoverageView._updateGut
     ter(entry))); | 
| 85   } | 85   } | 
| 86 | 86 | 
| 87   /** | 87   /** | 
| 88    * @param {!Array<!Coverage.CoverageInfo>} coverageInfo | 88    * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo | 
| 89    */ | 89    */ | 
| 90   _updateStats(coverageInfo) { | 90   _updateStats(coverageInfo) { | 
| 91     var total = 0; | 91     var total = 0; | 
| 92     var unused = 0; | 92     var unused = 0; | 
| 93     for (var info of coverageInfo) { | 93     for (var info of coverageInfo) { | 
| 94       total += info.size || 0; | 94       total += info.size(); | 
| 95       unused += info.unusedSize || 0; | 95       unused += info.unusedSize(); | 
| 96     } | 96     } | 
| 97 | 97 | 
| 98     var percentUnused = total ? Math.round(100 * unused / total) : 0; | 98     var percentUnused = total ? Math.round(100 * unused / total) : 0; | 
| 99     this._statusMessageElement.textContent = Common.UIString( | 99     this._statusMessageElement.textContent = Common.UIString( | 
| 100         '%s of %s bytes are not used. (%d%%)', Number.bytesToString(unused), Num
     ber.bytesToString(total), | 100         '%s of %s bytes are not used. (%d%%)', Number.bytesToString(unused), Num
     ber.bytesToString(total), | 
| 101         percentUnused); | 101         percentUnused); | 
| 102   } | 102   } | 
| 103 | 103 | 
| 104   /** | 104   /** | 
| 105    * @param {!Coverage.CoverageInfo} coverageInfo | 105    * @param {!Coverage.URLCoverageInfo} coverageInfo | 
| 106    */ | 106    */ | 
| 107   static async _updateGutter(coverageInfo) { | 107   static async _updateGutter(coverageInfo) { | 
| 108     var uiSourceCode = Workspace.workspace.uiSourceCodeForURL(coverageInfo.conte
     ntProvider.contentURL()); | 108     var uiSourceCode = Workspace.workspace.uiSourceCodeForURL(coverageInfo.url()
     ); | 
| 109     if (!uiSourceCode) | 109     if (!uiSourceCode) | 
| 110       return; | 110       return; | 
| 111     // FIXME: gutter should be set in terms of offsets and therefore should not 
     require contents. | 111     // FIXME: gutter should be set in terms of offsets and therefore should not 
     require contents. | 
| 112     var contents = await coverageInfo.contentProvider.requestContent(); | 112     var ranges = await coverageInfo.buildTextRanges(); | 
| 113     if (!contents) | 113     for (var r of ranges) | 
| 114       return; | 114       uiSourceCode.addDecoration(r.range, Coverage.CoverageView.LineDecorator.ty
     pe, r.count); | 
| 115     var text = new Common.Text(contents); |  | 
| 116     var lastOffset = 0; |  | 
| 117     var rangesByDepth = []; |  | 
| 118     for (var segment of coverageInfo.segments) { |  | 
| 119       if (typeof segment.count !== 'number') { |  | 
| 120         lastOffset = segment.end; |  | 
| 121         continue; |  | 
| 122       } |  | 
| 123       var startPosition = text.positionFromOffset(lastOffset); |  | 
| 124       var endPosition = text.positionFromOffset(segment.end); |  | 
| 125       if (!startPosition.lineNumber) |  | 
| 126         startPosition.columnNumber += coverageInfo.columnOffset; |  | 
| 127       startPosition.lineNumber += coverageInfo.lineOffset; |  | 
| 128       if (!endPosition.lineNumber) |  | 
| 129         endPosition.columnNumber += coverageInfo.columnOffset; |  | 
| 130       endPosition.lineNumber += coverageInfo.lineOffset; |  | 
| 131 |  | 
| 132       var ranges = rangesByDepth[segment.depth - 1];  // depth === 0 => count ==
     = undefined |  | 
| 133       if (!ranges) { |  | 
| 134         ranges = []; |  | 
| 135         rangesByDepth[segment.depth - 1] = ranges; |  | 
| 136       } |  | 
| 137       ranges.push({ |  | 
| 138         count: segment.count, |  | 
| 139         range: new Common.TextRange( |  | 
| 140             startPosition.lineNumber, startPosition.columnNumber, endPosition.li
     neNumber, endPosition.columnNumber) |  | 
| 141       }); |  | 
| 142       lastOffset = segment.end; |  | 
| 143     } |  | 
| 144     for (var ranges of rangesByDepth) { |  | 
| 145       for (var r of ranges) |  | 
| 146         uiSourceCode.addDecoration(r.range, Coverage.CoverageView.LineDecorator.
     type, r.count); |  | 
| 147     } |  | 
| 148   } | 115   } | 
| 149 }; | 116 }; | 
| 150 | 117 | 
| 151 /** | 118 /** | 
| 152  * @implements {SourceFrame.UISourceCodeFrame.LineDecorator} | 119  * @implements {SourceFrame.UISourceCodeFrame.LineDecorator} | 
| 153  */ | 120  */ | 
| 154 Coverage.CoverageView.LineDecorator = class { | 121 Coverage.CoverageView.LineDecorator = class { | 
| 155   /** | 122   /** | 
| 156    * @override | 123    * @override | 
| 157    * @param {!Workspace.UISourceCode} uiSourceCode | 124    * @param {!Workspace.UISourceCode} uiSourceCode | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 195    */ | 162    */ | 
| 196   handleAction(context, actionId) { | 163   handleAction(context, actionId) { | 
| 197     var coverageViewId = 'coverage'; | 164     var coverageViewId = 'coverage'; | 
| 198     UI.viewManager.showView(coverageViewId) | 165     UI.viewManager.showView(coverageViewId) | 
| 199         .then(() => UI.viewManager.view(coverageViewId).widget()) | 166         .then(() => UI.viewManager.view(coverageViewId).widget()) | 
| 200         .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRec
     ording()); | 167         .then(widget => /** @type !Coverage.CoverageView} */ (widget)._toggleRec
     ording()); | 
| 201 | 168 | 
| 202     return true; | 169     return true; | 
| 203   } | 170   } | 
| 204 }; | 171 }; | 
| OLD | NEW | 
|---|