refactored performance caching to seperate service
parent
944f5bf686
commit
fd7ac46a12
@ -0,0 +1,53 @@
|
|||||||
|
// Service for retrieving and caching performance data
|
||||||
|
panelApp.factory('appPerf', function (chromeExtension) {
|
||||||
|
|
||||||
|
var _histogramCache = [],
|
||||||
|
_watchNameToPerf = {},
|
||||||
|
_totalCache = 0;
|
||||||
|
|
||||||
|
var getHistogramData = function (callback) {
|
||||||
|
chromeExtension.eval(function (window) {
|
||||||
|
if (!window.__ngDebug) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
return window.__ngDebug.getWatchPerf();
|
||||||
|
},
|
||||||
|
function (data) {
|
||||||
|
if (data && data.length) {
|
||||||
|
updateHistogram(data);
|
||||||
|
}
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var updateHistogram = function (data) {
|
||||||
|
data.forEach(function (info) {
|
||||||
|
_totalCache += info.time;
|
||||||
|
|
||||||
|
if (_watchNameToPerf[info.name]) {
|
||||||
|
_watchNameToPerf[info.name].time += info.time;
|
||||||
|
} else {
|
||||||
|
_watchNameToPerf[info.name] = info;
|
||||||
|
_histogramCache.push(info);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// recalculate all percentages
|
||||||
|
_histogramCache.forEach(function (item) {
|
||||||
|
item.percent = (100 * item.time / _totalCache).toPrecision(3);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Public API
|
||||||
|
// ==========
|
||||||
|
return {
|
||||||
|
get: function (callback) {
|
||||||
|
getHistogramData(function () {
|
||||||
|
callback(_histogramCache);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
clear: function () {
|
||||||
|
_histogramCache = [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
Reference in New Issue