| Index: tools/callstats.html
|
| diff --git a/tools/callstats.html b/tools/callstats.html
|
| index 55323a5e2e0197bcacebb4c6461ea6e80abca54c..d47425b435ed7e1a2c46398caacf0856edd09d9a 100644
|
| --- a/tools/callstats.html
|
| +++ b/tools/callstats.html
|
| @@ -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>
|
|
|