OLD | NEW |
1 <html> | 1 <html> |
2 <!-- | 2 <!-- |
3 Copyright 2016 the V8 project authors. All rights reserved. Use of this source | 3 Copyright 2016 the V8 project authors. All rights reserved. Use of this source |
4 code is governed by a BSD-style license that can be found in the LICENSE file. | 4 code is governed by a BSD-style license that can be found in the LICENSE file. |
5 --> | 5 --> |
6 | 6 |
7 <head> | 7 <head> |
8 <meta charset="UTF-8"> | 8 <meta charset="UTF-8"> |
9 <style> | 9 <style> |
10 body { | 10 body { |
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 } | 242 } |
243 } | 243 } |
244 | 244 |
245 var versions; | 245 var versions; |
246 var pages; | 246 var pages; |
247 var selectedPage; | 247 var selectedPage; |
248 var baselineVersion; | 248 var baselineVersion; |
249 var selectedEntry; | 249 var selectedEntry; |
250 | 250 |
251 function initialize() { | 251 function initialize() { |
| 252 // Initialize the stats table and toggle lists. |
252 var original = $("column"); | 253 var original = $("column"); |
253 var view = document.createElement('div'); | 254 var view = document.createElement('div'); |
254 view.id = 'view'; | 255 view.id = 'view'; |
255 var i = 0; | 256 var i = 0; |
256 versions.forEach((version) => { | 257 versions.forEach((version) => { |
257 if (!version.enabled) return; | 258 if (!version.enabled) return; |
258 // add column | 259 // add column |
259 var column = original.cloneNode(true); | 260 var column = original.cloneNode(true); |
260 column.id = "column_" + i; | 261 column.id = "column_" + i; |
261 // Fill in all versions | 262 // Fill in all versions |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 removeAllChildren(select); | 297 removeAllChildren(select); |
297 select.appendChild(document.createElement('option')); | 298 select.appendChild(document.createElement('option')); |
298 versions.forEach((version) => { | 299 versions.forEach((version) => { |
299 var option = document.createElement("option"); | 300 var option = document.createElement("option"); |
300 option.textContent = version.name; | 301 option.textContent = version.name; |
301 option.version = version; | 302 option.version = version; |
302 select.appendChild(option); | 303 select.appendChild(option); |
303 }); | 304 }); |
304 initializeToggleList(versions.versions, $('versionSelector')); | 305 initializeToggleList(versions.versions, $('versionSelector')); |
305 initializeToggleList(pages.values(), $('pageSelector')); | 306 initializeToggleList(pages.values(), $('pageSelector')); |
| 307 initializeToggleList(Group.groups.values(), $('groupSelector')); |
306 initializeToggleContentVisibility(); | 308 initializeToggleContentVisibility(); |
307 } | 309 } |
308 | 310 |
309 function initializeToggleList(items, node) { | 311 function initializeToggleList(items, node) { |
310 var list = node.querySelector('ul'); | 312 var list = node.querySelector('ul'); |
311 removeAllChildren(list); | 313 removeAllChildren(list); |
312 items = Array.from(items); | 314 items = Array.from(items); |
313 items.sort(NameComparator); | 315 items.sort(NameComparator); |
314 items.forEach((item) => { | 316 items.forEach((item) => { |
315 var li = document.createElement('li'); | 317 var li = document.createElement('li'); |
316 var checkbox = document.createElement('input'); | 318 var checkbox = document.createElement('input'); |
317 checkbox.type = 'checkbox'; | 319 checkbox.type = 'checkbox'; |
318 checkbox.checked = item.enabled; | 320 checkbox.checked = item.enabled; |
319 checkbox.item = item; | 321 checkbox.item = item; |
320 checkbox.addEventListener('click', handleToggleVersionEnable); | 322 checkbox.addEventListener('click', handleToggleVersionOrPageEnable); |
321 li.appendChild(checkbox); | 323 li.appendChild(checkbox); |
322 li.appendChild(document.createTextNode(item.name)); | 324 li.appendChild(document.createTextNode(item.name)); |
323 list.appendChild(li); | 325 list.appendChild(li); |
324 }); | 326 }); |
325 $('results').querySelectorAll('#results > .hidden').forEach((node) => { | 327 $('results').querySelectorAll('#results > .hidden').forEach((node) => { |
326 toggleCssClass(node, 'hidden', false); | 328 toggleCssClass(node, 'hidden', false); |
327 }) | 329 }) |
328 } | 330 } |
329 | 331 |
330 function initializeToggleContentVisibility() { | 332 function initializeToggleContentVisibility() { |
(...skipping 22 matching lines...) Expand all Loading... |
353 var pageVersions = versions.getPageVersions(firstPage); | 355 var pageVersions = versions.getPageVersions(firstPage); |
354 var index = 1; | 356 var index = 1; |
355 pageVersions.forEach((page) => { | 357 pageVersions.forEach((page) => { |
356 if (page !== firstPage) { | 358 if (page !== firstPage) { |
357 showPageInColumn(page, index); | 359 showPageInColumn(page, index); |
358 index++; | 360 index++; |
359 } | 361 } |
360 }); | 362 }); |
361 if (changeSelectedEntry) { | 363 if (changeSelectedEntry) { |
362 showEntryDetail(selectedPage.getEntry(selectedEntry)); | 364 showEntryDetail(selectedPage.getEntry(selectedEntry)); |
363 } else { | |
364 showImpactList(selectedPage); | |
365 } | 365 } |
| 366 showImpactList(selectedPage); |
366 } | 367 } |
367 | 368 |
368 function showPageInColumn(page, columnIndex) { | 369 function showPageInColumn(page, columnIndex) { |
369 page.sort(); | 370 page.sort(); |
370 var showDiff = (baselineVersion === undefined && columnIndex !== 0) || | 371 var showDiff = (baselineVersion === undefined && columnIndex !== 0) || |
371 (baselineVersion !== undefined && page.version !== baselineVersion); | 372 (baselineVersion !== undefined && page.version !== baselineVersion); |
372 var diffStatus = (td, a, b) => {}; | 373 var diffStatus = (td, a, b) => {}; |
373 if (showDiff) { | 374 if (showDiff) { |
374 if (baselineVersion !== undefined) { | 375 if (baselineVersion !== undefined) { |
375 diffStatus = (td, a, b) => { | 376 diffStatus = (td, a, b) => { |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
655 | 656 |
656 function showGraphs(page) { | 657 function showGraphs(page) { |
657 var groups = page.groups.slice(); | 658 var groups = page.groups.slice(); |
658 // Sort groups by the biggest impact | 659 // Sort groups by the biggest impact |
659 groups.sort((a, b) => { | 660 groups.sort((a, b) => { |
660 return b.getTimeImpact() - a.getTimeImpact(); | 661 return b.getTimeImpact() - a.getTimeImpact(); |
661 }); | 662 }); |
662 if (selectedGroup == undefined) { | 663 if (selectedGroup == undefined) { |
663 selectedGroup = groups[0]; | 664 selectedGroup = groups[0]; |
664 } else { | 665 } else { |
665 groups = groups.filter(each => each.name != selectedGroup.name); | 666 groups = groups.filter(each => each.enabled && each.name != selectedGrou
p.name); |
666 groups.unshift(selectedGroup); | 667 groups.unshift(selectedGroup); |
667 } | 668 } |
668 showPageGraph(groups, page); | 669 showPageGraph(groups, page); |
669 showVersionGraph(groups, page); | 670 showVersionGraph(groups, page); |
670 showPageVersionGraph(groups, page); | 671 showPageVersionGraph(groups, page); |
671 } | 672 } |
672 | 673 |
673 function getGraphDataTable(groups) { | 674 function getGraphDataTable(groups) { |
674 var dataTable = new google.visualization.DataTable(); | 675 var dataTable = new google.visualization.DataTable(); |
675 dataTable.addColumn('string', 'Name'); | 676 dataTable.addColumn('string', 'Name'); |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1030 handleLoadText(this.result); | 1031 handleLoadText(this.result); |
1031 } | 1032 } |
1032 reader.readAsText(file); | 1033 reader.readAsText(file); |
1033 } | 1034 } |
1034 | 1035 |
1035 function handleLoadText(text) { | 1036 function handleLoadText(text) { |
1036 pages = new Pages(); | 1037 pages = new Pages(); |
1037 versions = Versions.fromJSON(JSON.parse(text)); | 1038 versions = Versions.fromJSON(JSON.parse(text)); |
1038 initialize() | 1039 initialize() |
1039 showPage(versions.versions[0].pages[0]); | 1040 showPage(versions.versions[0].pages[0]); |
| 1041 selectEntry(selectedPage.total); |
1040 } | 1042 } |
1041 | 1043 |
1042 function handleToggleGroup(event) { | 1044 function handleToggleGroup(event) { |
1043 var group = event.target.parentNode.parentNode.entry; | 1045 var group = event.target.parentNode.parentNode.entry; |
1044 toggleGroup(selectedPage.get(group.name)); | 1046 toggleGroup(selectedPage.get(group.name)); |
1045 } | 1047 } |
1046 | 1048 |
1047 function handleSelectPage(select, event) { | 1049 function handleSelectPage(select, event) { |
1048 var option = select.options[select.selectedIndex]; | 1050 var option = select.options[select.selectedIndex]; |
1049 if (select.id == "select_0") { | 1051 if (select.id == "select_0") { |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1110 var popover = $('popover'); | 1112 var popover = $('popover'); |
1111 popover.style.left = event.pageX + 'px'; | 1113 popover.style.left = event.pageX + 'px'; |
1112 popover.style.top = event.pageY + 'px'; | 1114 popover.style.top = event.pageY + 'px'; |
1113 popover.style.display = 'none'; | 1115 popover.style.display = 'none'; |
1114 popover.style.display = event.shiftKey ? 'block' : 'none'; | 1116 popover.style.display = event.shiftKey ? 'block' : 'none'; |
1115 var entry = findEntry(event); | 1117 var entry = findEntry(event); |
1116 if (entry === undefined) return; | 1118 if (entry === undefined) return; |
1117 showPopover(entry); | 1119 showPopover(entry); |
1118 } | 1120 } |
1119 | 1121 |
1120 function handleToggleVersionEnable(event) { | 1122 function handleToggleVersionOrPageEnable(event) { |
1121 var item = this.item ; | 1123 var item = this.item ; |
1122 if (item === undefined) return; | 1124 if (item === undefined) return; |
1123 item .enabled = this.checked; | 1125 item .enabled = this.checked; |
1124 initialize(); | 1126 initialize(); |
1125 var page = selectedPage; | 1127 var page = selectedPage; |
1126 if (page === undefined || !page.version.enabled) { | 1128 if (page === undefined || !page.version.enabled) { |
1127 page = versions.getEnabledPage(page.name); | 1129 page = versions.getEnabledPage(page.name); |
1128 } | 1130 } |
| 1131 if (!page.enabled) { |
| 1132 page = page.getNextPage(); |
| 1133 } |
1129 showPage(page); | 1134 showPage(page); |
1130 } | 1135 } |
1131 | 1136 |
1132 function handleToggleContentVisibility(event) { | 1137 function handleToggleContentVisibility(event) { |
1133 var content = event.target.contentNode; | 1138 var content = event.target.contentNode; |
1134 toggleCssClass(content, 'hidden'); | 1139 toggleCssClass(content, 'hidden'); |
1135 } | 1140 } |
1136 | 1141 |
1137 function handleCodeSearch(event) { | 1142 function handleCodeSearch(event) { |
1138 var entry = findEntry(event); | 1143 var entry = findEntry(event); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1203 } | 1208 } |
1204 add(page) { | 1209 add(page) { |
1205 this.pages.push(page); | 1210 this.pages.push(page); |
1206 } | 1211 } |
1207 indexOf(name) { | 1212 indexOf(name) { |
1208 for (var i = 0; i < this.pages.length; i++) { | 1213 for (var i = 0; i < this.pages.length; i++) { |
1209 if (this.pages[i].name == name) return i; | 1214 if (this.pages[i].name == name) return i; |
1210 } | 1215 } |
1211 return -1; | 1216 return -1; |
1212 } | 1217 } |
| 1218 getNextPage(page) { |
| 1219 if (this.length == 0) return undefined; |
| 1220 return this.pages[(this.indexOf(page.name) + 1) % this.length]; |
| 1221 } |
1213 get(name) { | 1222 get(name) { |
1214 var index = this.indexOf(name); | 1223 var index = this.indexOf(name); |
1215 if (0 <= index) return this.pages[index]; | 1224 if (0 <= index) return this.pages[index]; |
1216 return undefined | 1225 return undefined |
1217 } | 1226 } |
1218 get length() { | 1227 get length() { |
1219 return this.versions.length | 1228 return this.pages.length |
1220 } | 1229 } |
1221 getEntry(entry) { | 1230 getEntry(entry) { |
1222 if (entry === undefined) return undefined; | 1231 if (entry === undefined) return undefined; |
1223 var page = this.get(entry.page.name); | 1232 var page = this.get(entry.page.name); |
1224 if (page === undefined) return undefined; | 1233 if (page === undefined) return undefined; |
1225 return page.get(entry.name); | 1234 return page.get(entry.name); |
1226 } | 1235 } |
1227 forEachEntry(fun) { | 1236 forEachEntry(fun) { |
1228 this.forEachPage((page) => { | 1237 this.forEachPage((page) => { |
1229 page.forEach(fun); | 1238 page.forEach(fun); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 } | 1337 } |
1329 add(page) { | 1338 add(page) { |
1330 this.versions.push(page); | 1339 this.versions.push(page); |
1331 } | 1340 } |
1332 } | 1341 } |
1333 | 1342 |
1334 class PageVersion { | 1343 class PageVersion { |
1335 constructor(version, page) { | 1344 constructor(version, page) { |
1336 this.page = page; | 1345 this.page = page; |
1337 this.page.add(this); | 1346 this.page.add(this); |
1338 this.total = new GroupedEntry('Total', /.*Total.*/, '#BBB'); | 1347 this.total = Group.groups.get('total').entry(); |
1339 this.total.isTotal = true; | 1348 this.total.isTotal = true; |
1340 this.unclassified = new UnclassifiedEntry(this, "#000") | 1349 this.unclassified = new UnclassifiedEntry(this) |
1341 this.groups = [ | 1350 this.groups = [ |
1342 this.total, | 1351 this.total, |
1343 new GroupedEntry('IC', /.*IC.*/, "#3366CC"), | 1352 Group.groups.get('ic').entry(), |
1344 new GroupedEntry('Optimize', | 1353 Group.groups.get('optimize').entry(), |
1345 /StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/, "#DC3912"), | 1354 Group.groups.get('compile').entry(), |
1346 new GroupedEntry('Compile', /.*Compile.*/, "#FFAA00"), | 1355 Group.groups.get('parse').entry(), |
1347 new GroupedEntry('Parse', /.*Parse.*/, "#FF6600"), | 1356 Group.groups.get('callback').entry(), |
1348 new GroupedEntry('Callback', /.*Callback$/, "#109618"), | 1357 Group.groups.get('api').entry(), |
1349 new GroupedEntry('API', /.*API.*/, "#990099"), | 1358 Group.groups.get('gc').entry(), |
1350 new GroupedEntry('GC', /GC|AllocateInTargetSpace/, "#0099C6"), | 1359 Group.groups.get('javascript').entry(), |
1351 new GroupedEntry('JavaScript', /JS_Execution/, "#DD4477"), | 1360 Group.groups.get('runtime').entry(), |
1352 new GroupedEntry('Runtime', /.*/, "#88BB00"), | |
1353 this.unclassified | 1361 this.unclassified |
1354 ]; | 1362 ]; |
1355 this.entryDict = new Map(); | 1363 this.entryDict = new Map(); |
1356 this.groups.forEach((entry) => { | 1364 this.groups.forEach((entry) => { |
1357 entry.page = this; | 1365 entry.page = this; |
1358 this.entryDict.set(entry.name, entry); | 1366 this.entryDict.set(entry.name, entry); |
1359 }); | 1367 }); |
1360 this.version = version; | 1368 this.version = version; |
1361 } | 1369 } |
1362 add(entry) { | 1370 add(entry) { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1413 distanceFromTotalPercent() { | 1421 distanceFromTotalPercent() { |
1414 var sum = 0; | 1422 var sum = 0; |
1415 this.groups.forEach(group => { | 1423 this.groups.forEach(group => { |
1416 if (group == this.total) return; | 1424 if (group == this.total) return; |
1417 var value = group.getTimePercentImpact() - | 1425 var value = group.getTimePercentImpact() - |
1418 this.getEntry(group).timePercent; | 1426 this.getEntry(group).timePercent; |
1419 sum += value * value; | 1427 sum += value * value; |
1420 }); | 1428 }); |
1421 return sum; | 1429 return sum; |
1422 } | 1430 } |
| 1431 getNextPage() { |
| 1432 return this.version.getNextPage(this); |
| 1433 } |
1423 } | 1434 } |
1424 PageVersion.fromJSON = function(version, name, data) { | 1435 PageVersion.fromJSON = function(version, name, data) { |
1425 var page = new PageVersion(version, pages.get(name)); | 1436 var page = new PageVersion(version, pages.get(name)); |
1426 for (var i = 0; i < data.length; i++) { | 1437 for (var i = 0; i < data.length; i++) { |
1427 page.add(Entry.fromJSON(i, data[data.length - i - 1])); | 1438 page.add(Entry.fromJSON(i, data[data.length - i - 1])); |
1428 } | 1439 } |
1429 page.sort(); | 1440 page.sort(); |
1430 return page | 1441 return page |
1431 } | 1442 } |
1432 | 1443 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 return this._timeVariance | 1520 return this._timeVariance |
1510 } | 1521 } |
1511 get timeVariancePercent() { | 1522 get timeVariancePercent() { |
1512 return this._timeVariancePercent | 1523 return this._timeVariancePercent |
1513 } | 1524 } |
1514 } | 1525 } |
1515 Entry.fromJSON = function(position, data) { | 1526 Entry.fromJSON = function(position, data) { |
1516 return new Entry(position, ...data); | 1527 return new Entry(position, ...data); |
1517 } | 1528 } |
1518 | 1529 |
| 1530 class Group { |
| 1531 constructor(name, regexp, color) { |
| 1532 this.name = name; |
| 1533 this.regexp = regexp; |
| 1534 this.color = color; |
| 1535 this.enabled = true; |
| 1536 } |
| 1537 entry() { return new GroupedEntry(this) }; |
| 1538 } |
| 1539 Group.groups = new Map(); |
| 1540 Group.add = function(name, group) { |
| 1541 this.groups.set(name, group); |
| 1542 } |
| 1543 Group.add('total', new Group('Total', /.*Total.*/, '#BBB')); |
| 1544 Group.add('ic', new Group('IC', /.*IC.*/, "#3366CC")); |
| 1545 Group.add('optimize', new Group('Optimize', |
| 1546 /StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/, "#DC3912")); |
| 1547 Group.add('compile', new Group('Compile', /.*Compile.*/, "#FFAA00")); |
| 1548 Group.add('parse', new Group('Parse', /.*Parse.*/, "#FF6600")); |
| 1549 Group.add('callback', new Group('Callback', /.*Callback$/, "#109618")); |
| 1550 Group.add('api', new Group('API', /.*API.*/, "#990099")); |
| 1551 Group.add('gc', new Group('GC', /GC|AllocateInTargetSpace/, "#0099C6")); |
| 1552 Group.add('javascript', new Group('JavaScript', /JS_Execution/, "#DD4477")); |
| 1553 Group.add('runtime', new Group('Runtime', /.*/, "#88BB00")); |
| 1554 Group.add('unclassified', new Group('Unclassified', /.*/, "#000")); |
1519 | 1555 |
1520 class GroupedEntry extends Entry { | 1556 class GroupedEntry extends Entry { |
1521 constructor(name, regexp, color) { | 1557 constructor(group) { |
1522 super(0, 'Group-' + name, 0, 0, 0, 0, 0, 0); | 1558 super(0, 'Group-' + group.name, 0, 0, 0, 0, 0, 0); |
1523 this.regexp = regexp; | 1559 this.group = group; |
1524 this.color = color; | |
1525 this.entries = []; | 1560 this.entries = []; |
1526 } | 1561 } |
| 1562 get regexp() { return this.group.regexp } |
| 1563 get color() { return this.group.color } |
| 1564 get enabled() { return this.group.enabled } |
1527 add(entry) { | 1565 add(entry) { |
1528 if (!this.regexp.test(entry.name)) return false; | 1566 if (!this.regexp.test(entry.name)) return false; |
1529 this._time += entry.time; | 1567 this._time += entry.time; |
1530 this._count += entry.count; | 1568 this._count += entry.count; |
1531 // TODO: sum up variance | 1569 // TODO: sum up variance |
1532 this.entries.push(entry); | 1570 this.entries.push(entry); |
1533 entry.parent = this; | 1571 entry.parent = this; |
1534 return true; | 1572 return true; |
1535 } | 1573 } |
1536 forEach(fun) { | 1574 forEach(fun) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1580 get timeVariancePercent() { | 1618 get timeVariancePercent() { |
1581 if (this._time == 0) return 0; | 1619 if (this._time == 0) return 0; |
1582 return this.getVarianceForProperty('time') / this._time * 100 | 1620 return this.getVarianceForProperty('time') / this._time * 100 |
1583 } | 1621 } |
1584 get timeVariance() { | 1622 get timeVariance() { |
1585 return this.getVarianceForProperty('time') | 1623 return this.getVarianceForProperty('time') |
1586 } | 1624 } |
1587 } | 1625 } |
1588 | 1626 |
1589 class UnclassifiedEntry extends GroupedEntry { | 1627 class UnclassifiedEntry extends GroupedEntry { |
1590 constructor(page, color) { | 1628 constructor(page) { |
1591 super('Unclassified', undefined, color); | 1629 super(Group.groups.get('unclassified')); |
1592 this.page = page; | 1630 this.page = page; |
1593 this._time = undefined; | 1631 this._time = undefined; |
1594 this._count = undefined; | 1632 this._count = undefined; |
1595 } | 1633 } |
1596 add(entry) { | 1634 add(entry) { |
1597 this.entries.push(entry); | 1635 this.entries.push(entry); |
1598 entry.parent = this; | 1636 entry.parent = this; |
1599 return true; | 1637 return true; |
1600 } | 1638 } |
1601 forEachPageGroup(fun) { | 1639 forEachPageGroup(fun) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1643 <div class="inline hidden"> | 1681 <div class="inline hidden"> |
1644 <h2>Result</h2> | 1682 <h2>Result</h2> |
1645 <div class="compareSelector inline"> | 1683 <div class="compareSelector inline"> |
1646 Compare against: <select id="baseline" onchange="handleSelectBaseli
ne(this, event)"></select><br/> | 1684 Compare against: <select id="baseline" onchange="handleSelectBaseli
ne(this, event)"></select><br/> |
1647 <span style="color: #060">Green</span> the selected version above perfor
ms | 1685 <span style="color: #060">Green</span> the selected version above perfor
ms |
1648 better on this measurement. | 1686 better on this measurement. |
1649 </div> | 1687 </div> |
1650 </div> | 1688 </div> |
1651 | 1689 |
1652 <div id="versionSelector" class="inline toggleContentVisibility"> | 1690 <div id="versionSelector" class="inline toggleContentVisibility"> |
1653 <h2>Version Selector</h2> | 1691 <h2>Versions</h2> |
1654 <div class="content hidden"> | 1692 <div class="content hidden"> |
1655 <ul></ul> | 1693 <ul></ul> |
1656 </div> | 1694 </div> |
1657 </div> | 1695 </div> |
1658 | 1696 |
1659 <div id="pageSelector" class="inline toggleContentVisibility"> | 1697 <div id="pageSelector" class="inline toggleContentVisibility"> |
1660 <h2>Page Selector</h2> | 1698 <h2>Pages</h2> |
1661 <div class="content hidden"> | 1699 <div class="content hidden"> |
1662 <ul></ul> | 1700 <ul></ul> |
1663 </div> | 1701 </div> |
| 1702 </div> |
| 1703 |
| 1704 <div id="groupSelector" class="inline toggleContentVisibility"> |
| 1705 <h2>Groups</h2> |
| 1706 <div class="content hidden"> |
| 1707 <ul></ul> |
| 1708 </div> |
1664 </div> | 1709 </div> |
1665 | 1710 |
1666 <div id="view"> | 1711 <div id="view"> |
1667 </div> | 1712 </div> |
1668 | 1713 |
1669 <div id="detailView" class="hidden"> | 1714 <div id="detailView" class="hidden"> |
1670 <div class="versionDetail inline toggleContentVisibility"> | 1715 <div class="versionDetail inline toggleContentVisibility"> |
1671 <h3><span></span></h3> | 1716 <h3><span></span></h3> |
1672 <div class="content"> | 1717 <div class="content"> |
1673 <table class="versionDetailTable" onclick="handleSelectDetailRow(this,
event);"> | 1718 <table class="versionDetailTable" onclick="handleSelectDetailRow(this,
event);"> |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1820 </tr> | 1865 </tr> |
1821 <tr> | 1866 <tr> |
1822 <td>Overall Impact:</td> | 1867 <td>Overall Impact:</td> |
1823 <td class="timeImpact"></td><td>±</td><td class="timePercentImpact"></td
> | 1868 <td class="timeImpact"></td><td>±</td><td class="timePercentImpact"></td
> |
1824 <td class="compare timeImpact"></td><td class="compare"> ± </td><td clas
s="compare timePercentImpact"></td> | 1869 <td class="compare timeImpact"></td><td class="compare"> ± </td><td clas
s="compare timePercentImpact"></td> |
1825 </tr> | 1870 </tr> |
1826 </table> | 1871 </table> |
1827 </div> | 1872 </div> |
1828 </body> | 1873 </body> |
1829 </html> | 1874 </html> |
OLD | NEW |