[tools] Improve callstats.html

- Select Total group by default, this way graphs show up immediately
- Groups can now be toggled much like pages and versions

BUG=
NOTRY=true

Review-Url: https://codereview.chromium.org/2368393005
Cr-Commit-Position: refs/heads/master@{#39806}
This commit is contained in:
cbruni 2016-09-28 00:49:45 -07:00 committed by Commit bot
parent 50f18b8332
commit c5c117a70d

View File

@ -249,6 +249,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
var selectedEntry;
function initialize() {
// Initialize the stats table and toggle lists.
var original = $("column");
var view = document.createElement('div');
view.id = 'view';
@ -303,6 +304,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
});
initializeToggleList(versions.versions, $('versionSelector'));
initializeToggleList(pages.values(), $('pageSelector'));
initializeToggleList(Group.groups.values(), $('groupSelector'));
initializeToggleContentVisibility();
}
@ -317,7 +319,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
checkbox.type = 'checkbox';
checkbox.checked = item.enabled;
checkbox.item = item;
checkbox.addEventListener('click', handleToggleVersionEnable);
checkbox.addEventListener('click', handleToggleVersionOrPageEnable);
li.appendChild(checkbox);
li.appendChild(document.createTextNode(item.name));
list.appendChild(li);
@ -360,9 +362,8 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
});
if (changeSelectedEntry) {
showEntryDetail(selectedPage.getEntry(selectedEntry));
} else {
showImpactList(selectedPage);
}
showImpactList(selectedPage);
}
function showPageInColumn(page, columnIndex) {
@ -662,7 +663,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
if (selectedGroup == undefined) {
selectedGroup = groups[0];
} else {
groups = groups.filter(each => each.name != selectedGroup.name);
groups = groups.filter(each => each.enabled && each.name != selectedGroup.name);
groups.unshift(selectedGroup);
}
showPageGraph(groups, page);
@ -1037,6 +1038,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
versions = Versions.fromJSON(JSON.parse(text));
initialize()
showPage(versions.versions[0].pages[0]);
selectEntry(selectedPage.total);
}
function handleToggleGroup(event) {
@ -1117,7 +1119,7 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
showPopover(entry);
}
function handleToggleVersionEnable(event) {
function handleToggleVersionOrPageEnable(event) {
var item = this.item ;
if (item === undefined) return;
item .enabled = this.checked;
@ -1126,6 +1128,9 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
if (page === undefined || !page.version.enabled) {
page = versions.getEnabledPage(page.name);
}
if (!page.enabled) {
page = page.getNextPage();
}
showPage(page);
}
@ -1210,13 +1215,17 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
}
return -1;
}
getNextPage(page) {
if (this.length == 0) return undefined;
return this.pages[(this.indexOf(page.name) + 1) % this.length];
}
get(name) {
var index = this.indexOf(name);
if (0 <= index) return this.pages[index];
return undefined
}
get length() {
return this.versions.length
return this.pages.length
}
getEntry(entry) {
if (entry === undefined) return undefined;
@ -1335,21 +1344,20 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
constructor(version, page) {
this.page = page;
this.page.add(this);
this.total = new GroupedEntry('Total', /.*Total.*/, '#BBB');
this.total = Group.groups.get('total').entry();
this.total.isTotal = true;
this.unclassified = new UnclassifiedEntry(this, "#000")
this.unclassified = new UnclassifiedEntry(this)
this.groups = [
this.total,
new GroupedEntry('IC', /.*IC.*/, "#3366CC"),
new GroupedEntry('Optimize',
/StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/, "#DC3912"),
new GroupedEntry('Compile', /.*Compile.*/, "#FFAA00"),
new GroupedEntry('Parse', /.*Parse.*/, "#FF6600"),
new GroupedEntry('Callback', /.*Callback$/, "#109618"),
new GroupedEntry('API', /.*API.*/, "#990099"),
new GroupedEntry('GC', /GC|AllocateInTargetSpace/, "#0099C6"),
new GroupedEntry('JavaScript', /JS_Execution/, "#DD4477"),
new GroupedEntry('Runtime', /.*/, "#88BB00"),
Group.groups.get('ic').entry(),
Group.groups.get('optimize').entry(),
Group.groups.get('compile').entry(),
Group.groups.get('parse').entry(),
Group.groups.get('callback').entry(),
Group.groups.get('api').entry(),
Group.groups.get('gc').entry(),
Group.groups.get('javascript').entry(),
Group.groups.get('runtime').entry(),
this.unclassified
];
this.entryDict = new Map();
@ -1420,6 +1428,9 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
});
return sum;
}
getNextPage() {
return this.version.getNextPage(this);
}
}
PageVersion.fromJSON = function(version, name, data) {
var page = new PageVersion(version, pages.get(name));
@ -1516,14 +1527,41 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
return new Entry(position, ...data);
}
class GroupedEntry extends Entry {
class Group {
constructor(name, regexp, color) {
super(0, 'Group-' + name, 0, 0, 0, 0, 0, 0);
this.name = name;
this.regexp = regexp;
this.color = color;
this.enabled = true;
}
entry() { return new GroupedEntry(this) };
}
Group.groups = new Map();
Group.add = function(name, group) {
this.groups.set(name, group);
}
Group.add('total', new Group('Total', /.*Total.*/, '#BBB'));
Group.add('ic', new Group('IC', /.*IC.*/, "#3366CC"));
Group.add('optimize', new Group('Optimize',
/StackGuard|.*Optimize.*|.*Deoptimize.*|Recompile.*/, "#DC3912"));
Group.add('compile', new Group('Compile', /.*Compile.*/, "#FFAA00"));
Group.add('parse', new Group('Parse', /.*Parse.*/, "#FF6600"));
Group.add('callback', new Group('Callback', /.*Callback$/, "#109618"));
Group.add('api', new Group('API', /.*API.*/, "#990099"));
Group.add('gc', new Group('GC', /GC|AllocateInTargetSpace/, "#0099C6"));
Group.add('javascript', new Group('JavaScript', /JS_Execution/, "#DD4477"));
Group.add('runtime', new Group('Runtime', /.*/, "#88BB00"));
Group.add('unclassified', new Group('Unclassified', /.*/, "#000"));
class GroupedEntry extends Entry {
constructor(group) {
super(0, 'Group-' + group.name, 0, 0, 0, 0, 0, 0);
this.group = group;
this.entries = [];
}
get regexp() { return this.group.regexp }
get color() { return this.group.color }
get enabled() { return this.group.enabled }
add(entry) {
if (!this.regexp.test(entry.name)) return false;
this._time += entry.time;
@ -1587,8 +1625,8 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
}
class UnclassifiedEntry extends GroupedEntry {
constructor(page, color) {
super('Unclassified', undefined, color);
constructor(page) {
super(Group.groups.get('unclassified'));
this.page = page;
this._time = undefined;
this._count = undefined;
@ -1650,14 +1688,21 @@ code is governed by a BSD-style license that can be found in the LICENSE file.
</div>
<div id="versionSelector" class="inline toggleContentVisibility">
<h2>Version Selector</h2>
<h2>Versions</h2>
<div class="content hidden">
<ul></ul>
</div>
</div>
<div id="pageSelector" class="inline toggleContentVisibility">
<h2>Page Selector</h2>
<h2>Pages</h2>
<div class="content hidden">
<ul></ul>
</div>
</div>
<div id="groupSelector" class="inline toggleContentVisibility">
<h2>Groups</h2>
<div class="content hidden">
<ul></ul>
</div>