Skip to content

Commit

Permalink
Support filtering by function name
Browse files Browse the repository at this point in the history
  • Loading branch information
bgirard committed Feb 3, 2012
1 parent 907af13 commit 292fce6
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 11 deletions.
30 changes: 23 additions & 7 deletions parser.js
Expand Up @@ -4,6 +4,12 @@ function Sample(name, extraInfo, line) {
this.frames = [name];
this.extraInfo = extraInfo;
this.lines = [];
this.clone = function() {
var cpy = new Sample("", extraInfo, null);
cpy.frames = this.frames.clone();
cpy.lines = this.lines.clone();
return cpy;
}
}

function TreeNode(name, parent) {
Expand Down Expand Up @@ -105,6 +111,23 @@ Parser.prototype = {
return samples;
},

filterByName: function Parse_filterByName(samples, filterName) {
samples = samples.clone();
filterName = filterName.toLowerCase();
calltrace_it: for (var i = 0; i < samples.length; ++i) {
var sample = samples[i];
var callstack = sample.frames;
for (var j = 0; j < callstack.length; ++j) {
if (callstack[j].toLowerCase().indexOf(filterName) != -1) {
continue calltrace_it;
}
}
samples[i] = samples[i].clone();
samples[i].frames = ["Filtered out"];
}
return samples;
},

convertToHeavyCallTree: function Parser_convertToHeavyCallTree(samples) {
return Parser.prototype.convertToCallTree(samples, true);
},
Expand All @@ -114,13 +137,6 @@ Parser.prototype = {
for (var i = 0; i < samples.length; ++i) {
var sample = samples[i];
var callstack = sample.frames.clone();
if (callstack[i] == "(root)") {
if (isReverse == true) {
callstack[i] = "(Program start)";
} else {
callstack[i] = "(Top frame)";
}
}
if (isReverse == true) callstack = callstack.reverse();
if (!treeRoot) {
treeRoot = new TreeNode(callstack[0], null);
Expand Down
49 changes: 45 additions & 4 deletions ui.js
Expand Up @@ -560,6 +560,26 @@ function add_skip_symbol() {

}

var gFilterChangeCallback = null;
function filterOnChange() {
if (gFilterChangeCallback != null) {
clearTimeout(gFilterChangeCallback);
gFilterChangeCallback = null;
}

gFilterChangeCallback = setTimeout(filterUpdate, 200);
}
function filterUpdate() {
gFilterChangeCallback = null;

displaySample(gVisibleRange.start, gVisibleRange.end);

filterNameInput = document.getElementById("filterName");
if (filterNameInput != null) {
filterNameInput.focus();
}
}

function updateDescription() {
var infobar = document.getElementById("infobar");
var infoText = "";
Expand All @@ -573,6 +593,11 @@ function updateDescription() {
infoText += "<br>\n";
infoText += "<input type='checkbox' id='heavy' " + (gIsHeavy?" checked='true' ":" ") + " onchange='toggleHeavy()'/>Heavy callstack<br />\n";

var filterNameInputOld = document.getElementById("filterName");
infoText += "<br>\n";
infoText += "Filter:\n";
infoText += "<input type='text' id='filterName' oninput='filterOnChange()'/><br>\n";

infoText += "<br>\n";
infoText += "Share:<br>\n";
infoText += "<a id='upload_status'>No upload in progress</a><br />\n";
Expand All @@ -587,6 +612,11 @@ function updateDescription() {

infobar.innerHTML = infoText;

var filterNameInputNew = document.getElementById("filterName");
if (filterNameInputOld != null && filterNameInputNew != null) {
filterNameInputNew.parentNode.replaceChild(filterNameInputOld, filterNameInputNew);
//filterNameInputNew.value = filterNameInputOld.value;
}
document.getElementById('upload').onclick = uploadProfile;
document.getElementById('upload_select').onclick = function() {
uploadProfile(true);
Expand Down Expand Up @@ -636,10 +666,16 @@ function toggleHeavy() {
function setHighlight(sample) {
gHighlighSample = sample;

var parser = new Parser();
var data = gVisibleRange.filter(gVisibleRange.start, gVisibleRange.end);
var histogram = document.getElementById("histogram");
var histogramRenderer = new HistogramRenderer();
histogramRenderer.render(data, histogram, gHighlighSample,
var filteredData = data;
var filterNameInput = document.getElementById("filterName");
if (filterNameInput != null && filterNameInput.value != "") {
filteredData = parser.filterByName(data, document.getElementById("filterName").value);
}
histogramRenderer.render(filteredData, histogram, gHighlighSample,
document.getElementById("markers"));
updateDescription();
}
Expand All @@ -658,10 +694,15 @@ function displaySample(start, end) {

var parser = new Parser();
var treeData;
var filteredData = data;
var filterNameInput = document.getElementById("filterName");
if (filterNameInput != null && filterNameInput.value != "") {
filteredData = parser.filterByName(data, document.getElementById("filterName").value);
}
if (gIsHeavy) {
treeData = parser.convertToHeavyCallTree(data);
treeData = parser.convertToHeavyCallTree(filteredData);
} else {
treeData = parser.convertToCallTree(data);
treeData = parser.convertToCallTree(filteredData);
}
var tree = document.getElementById("tree");
var treeRenderer = new TreeRenderer();
Expand All @@ -672,7 +713,7 @@ function displaySample(start, end) {
histogram.style.width = width + "px";
histogram.style.height = height + "px";
var histogramRenderer = new HistogramRenderer();
histogramRenderer.render(data, histogram, gHighlighSample,
histogramRenderer.render(filteredData, histogram, gHighlighSample,
document.getElementById("markers"));
updateDescription();
}

0 comments on commit 292fce6

Please sign in to comment.