You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
angularjs-batarang/js/controllers/PerfCtrl.js

134 lines
3.3 KiB
JavaScript

panelApp.controller('PerfCtrl', function PerfCtrl($scope, appContext, filesystem) {
$scope.histogram = [];
$scope.timeline = [];
$scope.min = 0;
$scope.max = 100;
$scope.clearHistogram = function () {
appContext.clearHistogram();
};
$scope.exportData = function () {
filesystem.exportJSON('file.json', $scope.histogram);
};
appContext.getDebug(function (result) {
$scope.enable = result;
$scope.$watch('enable', function (newVal, oldVal) {
// prevent refresh on initial pageload
if (first) {
first = false;
} else {
appContext.setDebug(newVal);
}
if (newVal) {
//updateTimeline();
updateHistogram();
}
});
});
var first = true;
$scope.$watch('log', function (newVal, oldVal) {
appContext.setLog(newVal);
appContext.watchRefresh(function () {
appContext.setLog(newVal);
});
});
$scope.inspect = function () {
appContext.inspect(this.val.id);
};
var updateTimeline = function () {
var timeline = appContext.getTimeline();
if (timeline && timeline.length > $scope.timeline.length) {
$scope = $scope.concat(timeline.splice($scope.length - 1));
}
};
var updateHistogram = function () {
var info = appContext.getHistogram();
if (!info) {
return;
}
var total = 0;
info.forEach(function (elt) {
total += elt.time;
});
var i, elt, his;
for (i = 0; (i < $scope.histogram.length && i < info.length); i++) {
elt = info[i];
his = $scope.histogram[i];
his.time = elt.time.toPrecision(3);
his.percent = (100 * elt.time / total).toPrecision(3);
}
for ( ; i < info.length; i++) {
elt = info[i];
elt.time = elt.time.toPrecision(3);
elt.percent = (100 * elt.time / total).toPrecision(3);
$scope.histogram.push(elt);
}
$scope.histogram.length = info.length;
};
var updateTree = function () {
var rts = appContext.getListOfRoots();
if (!rts) {
return;
}
var roots = [];
rts.forEach(function (item) {
roots.push({
label: item,
value: item
});
});
$scope.roots = roots;
var trees = appContext.getModelTrees();
if (!$scope.trees || $scope.trees.length !== trees.length) {
$scope.trees = trees;
} else {
var syncBranch = function (oldTree, newTree) {
if (!oldTree || !newTree) {
return;
}
oldTree.locals = newTree.locals;
if (oldTree.children.length !== newTree.children.length) {
oldTree.children = newTree.children;
} else {
oldTree.children.forEach(function (oldBranch, i) {
var newBranch = newTree.children[i];
syncBranch(newBranch, oldBranch);
});
}
};
var treeId, oldTree, newTree;
for (treeId in $scope.trees) {
if ($scope.trees.hasOwnProperty(treeId)) {
oldTree = $scope.trees[treeId];
newTree = trees[treeId];
syncBranch(oldTree, newTree);
}
}
}
if (roots.length === 0) {
$scope.selectedRoot = null;
} else if (!$scope.selectedRoot) {
$scope.selectedRoot = roots[0].value;
}
$scope.$apply();
};
appContext.watchPoll(updateTree);
appContext.watchPoll(updateHistogram);
});