Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/coverage/CoverageModel.js

Issue 2763183002: DevTools: remove nesting depth tracking from coverage (Closed)
Patch Set: DevTools: remove nesting depth tracking from coverage Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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 /** @typedef {{startOffset: number, endOffset: number, count: number}} */ 5 /** @typedef {{startOffset: number, endOffset: number, count: number}} */
6 Coverage.RangeUseCount; 6 Coverage.RangeUseCount;
7 7
8 /** @typedef {{end: number, count: (number|undefined), depth: number}} */ 8 /** @typedef {{end: number, count: (number|undefined)}} */
9 Coverage.CoverageSegment; 9 Coverage.CoverageSegment;
10 10
11 /** 11 /**
12 * @enum {number} 12 * @enum {number}
13 */ 13 */
14 Coverage.CoverageType = { 14 Coverage.CoverageType = {
15 CSS: (1 << 0), 15 CSS: (1 << 0),
16 JavaScript: (1 << 1), 16 JavaScript: (1 << 1),
17 }; 17 };
18 18
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 * @param {!Array<!Coverage.RangeUseCount>} ranges 81 * @param {!Array<!Coverage.RangeUseCount>} ranges
82 * @return {!Array<!Coverage.CoverageSegment>} 82 * @return {!Array<!Coverage.CoverageSegment>}
83 */ 83 */
84 static _convertToDisjointSegments(ranges) { 84 static _convertToDisjointSegments(ranges) {
85 var result = []; 85 var result = [];
86 86
87 var stack = []; 87 var stack = [];
88 for (var entry of ranges) { 88 for (var entry of ranges) {
89 var top = stack.peekLast(); 89 var top = stack.peekLast();
90 while (top && top.endOffset <= entry.startOffset) { 90 while (top && top.endOffset <= entry.startOffset) {
91 append(top.endOffset, top.count, stack.length); 91 append(top.endOffset, top.count);
92 stack.pop(); 92 stack.pop();
93 top = stack.peekLast(); 93 top = stack.peekLast();
94 } 94 }
95 append(entry.startOffset, top ? top.count : undefined, stack.length); 95 append(entry.startOffset, top ? top.count : undefined);
96 stack.push(entry); 96 stack.push(entry);
97 } 97 }
98 98
99 while (stack.length) { 99 while (stack.length) {
100 var depth = stack.length;
101 var top = stack.pop(); 100 var top = stack.pop();
102 append(top.endOffset, top.count, depth); 101 append(top.endOffset, top.count);
103 } 102 }
104 103
105 /** 104 /**
106 * @param {number} end 105 * @param {number} end
107 * @param {number} count 106 * @param {number} count
108 * @param {number} depth
109 */ 107 */
110 function append(end, count, depth) { 108 function append(end, count) {
111 var last = result.peekLast(); 109 var last = result.peekLast();
112 if (last) { 110 if (last) {
113 if (last.end === end) 111 if (last.end === end)
114 return; 112 return;
115 if (last.count === count && last.depth === depth) { 113 if (last.count === count) {
116 last.end = end; 114 last.end = end;
117 return; 115 return;
118 } 116 }
119 } 117 }
120 result.push({end: end, count: count, depth: depth}); 118 result.push({end: end, count: count});
121 } 119 }
122 120
123 return result; 121 return result;
124 } 122 }
125 123
126 async _stopCSSCoverage() { 124 async _stopCSSCoverage() {
127 if (!this._cssModel) 125 if (!this._cssModel)
128 return []; 126 return [];
129 127
130 var rawCoverageData = await this._cssModel.ruleListPromise(); 128 var rawCoverageData = await this._cssModel.ruleListPromise();
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 static _mergeCoverage(segmentsA, segmentsB) { 309 static _mergeCoverage(segmentsA, segmentsB) {
312 var result = []; 310 var result = [];
313 311
314 var indexA = 0; 312 var indexA = 0;
315 var indexB = 0; 313 var indexB = 0;
316 while (indexA < segmentsA.length && indexB < segmentsB.length) { 314 while (indexA < segmentsA.length && indexB < segmentsB.length) {
317 var a = segmentsA[indexA]; 315 var a = segmentsA[indexA];
318 var b = segmentsB[indexB]; 316 var b = segmentsB[indexB];
319 var count = 317 var count =
320 typeof a.count === 'number' || typeof b.count === 'number' ? (a.count || 0) + (b.count || 0) : undefined; 318 typeof a.count === 'number' || typeof b.count === 'number' ? (a.count || 0) + (b.count || 0) : undefined;
321 var depth = Math.max(a.depth, b.depth);
322 var end = Math.min(a.end, b.end); 319 var end = Math.min(a.end, b.end);
323 var last = result.peekLast(); 320 var last = result.peekLast();
324 if (!last || last.count !== count || last.depth !== depth) 321 if (!last || last.count !== count)
325 result.push({end: end, count: count, depth: depth}); 322 result.push({end: end, count: count});
326 else 323 else
327 last.end = end; 324 last.end = end;
328 if (a.end <= b.end) 325 if (a.end <= b.end)
329 indexA++; 326 indexA++;
330 if (a.end >= b.end) 327 if (a.end >= b.end)
331 indexB++; 328 indexB++;
332 } 329 }
333 330
334 for (; indexA < segmentsA.length; indexA++) 331 for (; indexA < segmentsA.length; indexA++)
335 result.push(segmentsA[indexA]); 332 result.push(segmentsA[indexA]);
336 for (; indexB < segmentsB.length; indexB++) 333 for (; indexB < segmentsB.length; indexB++)
337 result.push(segmentsB[indexB]); 334 result.push(segmentsB[indexB]);
338 return result; 335 return result;
339 } 336 }
340 337
341 /** 338 /**
342 * @return {!Promise<!Array<!{range: !Common.TextRange, count: number}>>} 339 * @return {!Promise<!Array<!{range: !Common.TextRange, count: number}>>}
343 */ 340 */
344 async buildTextRanges() { 341 async buildTextRanges() {
345 var contents = await this._contentProvider.requestContent(); 342 var contents = await this._contentProvider.requestContent();
346 if (!contents) 343 if (!contents)
347 return []; 344 return [];
348 var text = new Common.Text(contents); 345 var text = new Common.Text(contents);
349 var lastOffset = 0; 346 var lastOffset = 0;
350 var rangesByDepth = []; 347 var result = [];
351 for (var segment of this._segments) { 348 for (var segment of this._segments) {
352 if (typeof segment.count !== 'number') { 349 if (!segment.end)
353 lastOffset = segment.end;
354 continue; 350 continue;
355 }
356 var startPosition = text.positionFromOffset(lastOffset); 351 var startPosition = text.positionFromOffset(lastOffset);
357 var endPosition = text.positionFromOffset(segment.end); 352 var endPosition = text.positionFromOffset(segment.end);
358 if (!startPosition.lineNumber) 353 if (!startPosition.lineNumber)
359 startPosition.columnNumber += this._columnOffset; 354 startPosition.columnNumber += this._columnOffset;
360 startPosition.lineNumber += this._lineOffset; 355 startPosition.lineNumber += this._lineOffset;
361 if (!endPosition.lineNumber) 356 if (!endPosition.lineNumber)
362 endPosition.columnNumber += this._columnOffset; 357 endPosition.columnNumber += this._columnOffset;
363 endPosition.lineNumber += this._lineOffset; 358 endPosition.lineNumber += this._lineOffset;
364 359 var range = new Common.TextRange(
365 var ranges = rangesByDepth[segment.depth - 1]; // depth === 0 => count == = undefined 360 startPosition.lineNumber, startPosition.columnNumber, endPosition.line Number, endPosition.columnNumber);
366 if (!ranges) { 361 result.push({count: segment.count || 0, range: range});
367 ranges = [];
368 rangesByDepth[segment.depth - 1] = ranges;
369 }
370 ranges.push({
371 count: segment.count,
372 range: new Common.TextRange(
373 startPosition.lineNumber, startPosition.columnNumber, endPosition.li neNumber, endPosition.columnNumber)
374 });
375 lastOffset = segment.end; 362 lastOffset = segment.end;
376 } 363 }
377 var result = [];
378 for (var ranges of rangesByDepth) {
379 for (var r of ranges)
380 result.push({count: r.count, range: r.range});
381 }
382 return result; 364 return result;
383 } 365 }
384 366
385 _updateStats() { 367 _updateStats() {
386 this._usedSize = 0; 368 this._usedSize = 0;
387 this._unusedSize = 0; 369 this._unusedSize = 0;
388 370
389 var last = 0; 371 var last = 0;
390 for (var segment of this._segments) { 372 for (var segment of this._segments) {
391 if (typeof segment.count === 'number') { 373 if (typeof segment.count === 'number') {
392 if (segment.count) 374 if (segment.count)
393 this._usedSize += segment.end - last; 375 this._usedSize += segment.end - last;
394 else 376 else
395 this._unusedSize += segment.end - last; 377 this._unusedSize += segment.end - last;
396 } 378 }
397 last = segment.end; 379 last = segment.end;
398 } 380 }
399 } 381 }
400 }; 382 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698