Backed out changeset 886f4e8d4bc0 (bug 1151750) for browser_AddonWatcher.js failures.

This commit is contained in:
Ryan VanderMeulen 2015-04-10 14:09:43 -04:00
Родитель fcf455a317
Коммит 42ddde34c6
4 изменённых файлов: 9 добавлений и 148 удалений

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

@ -9,7 +9,6 @@
const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
const { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm", {});
const { AddonWatcher } = Cu.import("resource://gre/modules/AddonWatcher.jsm", {});
const { PerformanceStats } = Cu.import("resource://gre/modules/PerformanceStats.jsm", {});
/**
@ -85,93 +84,8 @@ let State = {
function update() {
updateLiveData();
updateSlowAddons();
}
/**
* Update the list of slow addons
*/
function updateSlowAddons() {
try {
let data = AddonWatcher.alerts;
if (data.size == 0) {
// Nothing to display.
return;
}
let alerts = 0;
for (let [addonId, details] of data) {
for (let k of Object.keys(details.alerts)) {
alerts += details.alerts[k];
}
}
if (!alerts) {
// Still nothing to display.
return;
}
let elData = document.getElementById("slowAddonsList");
elData.innerHTML = "";
let elTable = document.createElement("table");
elData.appendChild(elTable);
// Generate header
let elHeader = document.createElement("tr");
elTable.appendChild(elHeader);
for (let name of [
"Alerts",
"Jank level alerts",
"(highest jank)",
"Cross-Process alerts",
"(highest CPOW)"
]) {
let elName = document.createElement("td");
elName.textContent = name;
elHeader.appendChild(elName);
elName.classList.add("header");
}
for (let [addonId, details] of data) {
let elAddon = document.createElement("tr");
// Display the number of occurrences of each alerts
let elTotal = document.createElement("td");
let total = 0;
for (let k of Object.keys(details.alerts)) {
total += details.alerts[k];
}
elTotal.textContent = total;
elAddon.appendChild(elTotal);
for (let filter of ["longestDuration", "totalCPOWTime"]) {
for (let stat of ["alerts", "peaks"]) {
let el = document.createElement("td");
el.textContent = details[stat][filter] || 0;
elAddon.appendChild(el);
}
}
// Display the name of the add-on
let elName = document.createElement("td");
elAddon.appendChild(elName);
AddonManager.getAddonByID(addonId, a => {
elName.textContent = a ? a.name : addonId
});
elTable.appendChild(elAddon);
}
} catch (ex) {
console.error(ex);
}
}
/**
* Update the table of live data.
*/
function updateLiveData() {
try {
let dataElt = document.getElementById("liveData");
let dataElt = document.getElementById("data");
dataElt.innerHTML = "";
// Generate table headers
@ -223,7 +137,7 @@ function updateLiveData() {
let _el = el;
let _item = item;
AddonManager.getAddonByID(item.addonId, a => {
_el.textContent = a ? a.name : _item.name
_el.textContent = a?a.name:_item.name
});
} else {
el.textContent = item.name;

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

@ -74,15 +74,7 @@
</style>
</head>
<body onload="go()">
<h1>Performance monitor</h1>
<table id="liveData">
<table id="data">
</table>
<h1>Slow add-ons alerts</h1>
<div id="slowAddonsList">
(none)
</div>
</body>
</html>

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

@ -16,7 +16,7 @@ function frameScript() {
let hasURL = false;
try {
let eltData = content.document.getElementById("liveData");
let eltData = content.document.getElementById("data");
if (!eltData) {
return;
}

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

@ -23,16 +23,8 @@ XPCOMUtils.defineLazyServiceGetter(this, "Telemetry",
XPCOMUtils.defineLazyModuleGetter(this, "Services",
"resource://gre/modules/Services.jsm");
const FILTERS = ["longestDuration", "totalCPOWTime"];
let AddonWatcher = {
_previousPerformanceIndicators: {},
/**
* Stats, designed to be consumed by clients of AddonWatcher.
*
*/
_stats: new Map(),
_timer: Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer),
_callback: null,
/**
@ -169,31 +161,13 @@ let AddonWatcher = {
add(addonId, diff.totalCPOWTime / 1000);
}
// Store misbehaviors for about:performance and other clients
let stats = this._stats.get(addonId);
if (!stats) {
stats = {
peaks: {},
alerts: {},
};
this._stats.set(addonId, stats);
}
// Report misbehaviors to the user.
// Report mibehaviors to the user.
let reason = null;
for (let filter of FILTERS) {
let peak = stats.peaks[filter] || 0;
stats.peaks[filter] = Math.max(diff[filter], peak);
if (limits[filter] <= 0 || diff[filter] <= limits[filter]) {
continue;
for (let k of ["longestDuration", "totalCPOWTime"]) {
if (limits[k] > 0 && diff[k] > limits[k]) {
reason = k;
}
reason = filter;
stats.alerts[filter] = (stats.alerts[filter] || 0) + 1;
}
if (!reason) {
@ -226,24 +200,5 @@ let AddonWatcher = {
} catch (ex) {
Preferences.set("browser.addon-watch.ignore", JSON.stringify([addonid]));
}
},
/**
* The list of alerts for this session.
*
* @type {Map<String, Object>} A map associating addonId to
* objects with fields
* - {Object} peaks The highest values encountered for each filter.
* - {number} longestDuration
* - {number} totalCPOWTime
* - {Object} alerts The number of alerts for each filter.
* - {number} longestDuration
* - {number} totalCPOWTime
*/
get alerts() {
let result = new Map();
for (let [k, v] of this._stats) {
result.set(k, Cu.cloneInto(v, this));
}
return result;
},
}
};