Bug 831864 - Refactor some logic to a renderSymbolicatedStacks method. r=froydnj.

--HG--
extra : rebase_source : ed98db39029b6754ad1a7d1abdffa4de51affaeb
This commit is contained in:
Rafael Ávila de Espíndola 2013-01-17 14:32:51 -05:00
Родитель 09e852ec65
Коммит b318c6d9d9
1 изменённых файлов: 46 добавлений и 48 удалений

Просмотреть файл

@ -285,6 +285,42 @@ let StackRenderer = {
aRenderHeader(i);
this.renderStack(div, stack)
}
},
renderSymbolicatedStacks:
function StackRenderer_renderSymbolicatedStacks(aPrefix, aRequest,
aRenderHeader) {
if (aRequest.readyState != 4)
return;
document.getElementById(aPrefix + "-fetch-symbols").classList.add("hidden");
document.getElementById(aPrefix + "-hide-symbols").classList.remove("hidden");
let div = document.getElementById(aPrefix + "-data");
clearDivData(div);
let errorMessage = bundle.GetStringFromName("errorFetchingSymbols");
if (aRequest.status != 200) {
div.appendChild(document.createTextNode(errorMessage));
return;
}
let jsonResponse = {};
try {
jsonResponse = JSON.parse(aRequest.responseText);
} catch (e) {
div.appendChild(document.createTextNode(errorMessage));
return;
}
for (let i = 0; i < jsonResponse.length; ++i) {
let stack = jsonResponse[i];
aRenderHeader(i);
for (let symbol of stack) {
div.appendChild(document.createTextNode(symbol));
div.appendChild(document.createElement("br"));
}
div.appendChild(document.createElement("br"));
}
}
};
@ -292,8 +328,6 @@ let ChromeHangs = {
symbolRequest: null,
errorMessage: bundle.GetStringFromName("errorFetchingSymbols"),
/**
* Renders raw chrome hang data
*/
@ -301,14 +335,9 @@ let ChromeHangs = {
let hangs = Telemetry.chromeHangs;
let stacks = hangs.stacks;
let memoryMap = hangs.memoryMap;
let durations = hangs.durations;
let div = document.getElementById("chrome-hangs-data");
function f(i) {
this.renderHangHeader(div, i + 1, durations[i]);
}
StackRenderer.renderStacks("chrome-hangs", stacks, memoryMap,
f.bind(this));
this.renderHangHeader);
},
/**
@ -318,16 +347,19 @@ let ChromeHangs = {
* @param aIndex The number of the hang
* @param aDuration The duration of the hang
*/
renderHangHeader: function ChromeHangs_renderHangHeader(aDiv, aIndex, aDuration) {
renderHangHeader: function ChromeHangs_renderHangHeader(aIndex) {
let div = document.getElementById("chrome-hangs-data");
let titleElement = document.createElement("span");
titleElement.className = "hang-title";
let durations = Telemetry.chromeHangs.durations;
let titleText = bundle.formatStringFromName(
"hangTitle", [aIndex, aDuration], 2);
"hangTitle", [aIndex + 1, durations[aIndex]], 2);
titleElement.appendChild(document.createTextNode(titleText));
aDiv.appendChild(titleElement);
aDiv.appendChild(document.createElement("br"));
div.appendChild(titleElement);
div.appendChild(document.createElement("br"));
},
/**
@ -359,42 +391,8 @@ let ChromeHangs = {
* about state 4 ("completed") - handling the response data.
*/
handleSymbolResponse: function ChromeHangs_handleSymbolResponse() {
if (this.symbolRequest.readyState != 4)
return;
document.getElementById("chrome-hangs-fetch-symbols").classList.add("hidden");
document.getElementById("chrome-hangs-hide-symbols").classList.remove("hidden");
let hangsDiv = document.getElementById("chrome-hangs-data");
clearDivData(hangsDiv);
if (this.symbolRequest.status != 200) {
hangsDiv.appendChild(document.createTextNode(this.errorMessage));
return;
}
let jsonResponse = {};
try {
jsonResponse = JSON.parse(this.symbolRequest.responseText);
} catch (e) {
hangsDiv.appendChild(document.createTextNode(this.errorMessage));
return;
}
let hangs = Telemetry.chromeHangs;
let stacks = hangs.stacks;
let durations = hangs.durations;
for (let i = 0; i < jsonResponse.length; ++i) {
let stack = jsonResponse[i];
let hangDuration = durations[i];
this.renderHangHeader(hangsDiv, i + 1, hangDuration);
for (let symbol of stack) {
hangsDiv.appendChild(document.createTextNode(symbol));
hangsDiv.appendChild(document.createElement("br"));
}
hangsDiv.appendChild(document.createElement("br"));
}
StackRenderer.renderSymbolicatedStacks("chrome-hangs", this.symbolRequest,
this.renderHangHeader);
}
};