Skip to content

Commit

Permalink
Bug 1261176 - Simplify client-side getSeriesList API
Browse files Browse the repository at this point in the history
Let's have it get the option collection map, if necessary, instead of
forcing the consumer to grab it every time.
  • Loading branch information
wlach committed Mar 31, 2016
1 parent af2c863 commit c27a21e
Show file tree
Hide file tree
Showing 4 changed files with 323 additions and 358 deletions.
218 changes: 99 additions & 119 deletions ui/js/controllers/perf/compare.js
Expand Up @@ -153,12 +153,12 @@ perf.controller('CompareChooserCtrl', [

perf.controller('CompareResultsCtrl', [
'$state', '$stateParams', '$scope', '$rootScope', '$location',
'thServiceDomain', 'ThOptionCollectionModel', 'ThRepositoryModel',
'thServiceDomain', 'ThRepositoryModel',
'ThResultSetModel', '$http', '$q', '$timeout', 'PhFramework', 'PhSeries',
'math', 'phTimeRanges', 'PhCompare',
function CompareResultsCtrl($state, $stateParams, $scope,
$rootScope, $location,
thServiceDomain, ThOptionCollectionModel,
thServiceDomain,
ThRepositoryModel, ThResultSetModel, $http,
$q, $timeout, PhFramework, PhSeries, math,
phTimeRanges,
Expand All @@ -177,8 +177,7 @@ perf.controller('CompareResultsCtrl', [

PhSeries.getSeriesList(
$scope.originalProject.name,
{ interval: timeRange, subtests: 0 },
optionCollectionMap).then(
{ interval: timeRange, subtests: 0 }).then(
function(originalSeriesList) {
$scope.platformList = _.uniq(
_.map(originalSeriesList, 'platform'));
Expand All @@ -200,8 +199,7 @@ perf.controller('CompareResultsCtrl', [

PhSeries.getSeriesList(
$scope.newProject.name,
{ interval: timeRange, subtests: 0 },
optionCollectionMap).then(
{ interval: timeRange, subtests: 0 }).then(
function(newSeriesList) {
$scope.platformList = _.union(
$scope.platformList,
Expand Down Expand Up @@ -304,17 +302,12 @@ perf.controller('CompareResultsCtrl', [
$scope.dataLoading = true;
$scope.getCompareClasses = PhCompare.getCompareClasses;

var optionCollectionMap = {};
var loadRepositories = ThRepositoryModel.load();
var loadOptions = ThOptionCollectionModel.getMap().then(
function(_optionCollectionMap) {
optionCollectionMap = _optionCollectionMap;
});
var loadFrameworks = PhFramework.getFrameworkList().then(
function(frameworks) {
$scope.frameworks = frameworks.data;
});
$q.all([loadRepositories, loadOptions, loadFrameworks]).then(function() {
$q.all([loadRepositories, loadFrameworks]).then(function() {
$scope.errors = PhCompare.validateInput($stateParams.originalProject,
$stateParams.newProject,
$stateParams.originalRevision,
Expand Down Expand Up @@ -374,12 +367,11 @@ perf.controller('CompareResultsCtrl', [

perf.controller('CompareSubtestResultsCtrl', [
'$state', '$stateParams', '$scope', '$rootScope', '$location',
'thServiceDomain', 'ThOptionCollectionModel', 'ThRepositoryModel',
'thServiceDomain', 'ThRepositoryModel',
'ThResultSetModel', '$http', '$q', '$timeout', 'PhSeries', 'math',
'PhCompare',
function CompareSubtestResultsCtrl($state, $stateParams, $scope, $rootScope,
$location, thServiceDomain,
ThOptionCollectionModel,
ThRepositoryModel, ThResultSetModel,
$http, $q, $timeout, PhSeries, math,
PhCompare) {
Expand Down Expand Up @@ -485,122 +477,110 @@ perf.controller('CompareSubtestResultsCtrl', [
$scope.dataLoading = true;
$scope.getCompareClasses = PhCompare.getCompareClasses;

var optionCollectionMap = {};
var loadRepositories = ThRepositoryModel.load();
var loadOptions = ThOptionCollectionModel.getMap().then(
function(_optionCollectionMap) {
optionCollectionMap = _optionCollectionMap;
});
$q.all([loadRepositories, loadOptions]).then(
function() {
$scope.errors = PhCompare.validateInput($stateParams.originalProject,
$stateParams.newProject,
$stateParams.originalRevision,
$stateParams.newRevision,
$stateParams.originalSignature,
$stateParams.newSignature);

if ($scope.errors.length > 0) {
$scope.dataLoading = false;
return;
}
ThRepositoryModel.load().then(function() {
$scope.errors = PhCompare.validateInput($stateParams.originalProject,
$stateParams.newProject,
$stateParams.originalRevision,
$stateParams.newRevision,
$stateParams.originalSignature,
$stateParams.newSignature);

$scope.originalProject = ThRepositoryModel.getRepo(
$stateParams.originalProject);
$scope.newProject = ThRepositoryModel.getRepo(
$stateParams.newProject);
$scope.newRevision = $stateParams.newRevision;
$scope.originalRevision = $stateParams.originalRevision;
$scope.originalSignature = $stateParams.originalSignature;
$scope.newSignature = $stateParams.newSignature;
if ($scope.errors.length > 0) {
$scope.dataLoading = false;
return;
}

verifyRevision($scope.originalProject, $scope.originalRevision, "original").then(function () {
verifyRevision($scope.newProject, $scope.newRevision, "new").then(function () {
$scope.pageList = [];
$scope.originalProject = ThRepositoryModel.getRepo(
$stateParams.originalProject);
$scope.newProject = ThRepositoryModel.getRepo(
$stateParams.newProject);
$scope.newRevision = $stateParams.newRevision;
$scope.originalRevision = $stateParams.originalRevision;
$scope.originalSignature = $stateParams.originalSignature;
$scope.newSignature = $stateParams.newSignature;

if ($scope.errors.length > 0) {
$scope.dataLoading = false;
return;
}
verifyRevision($scope.originalProject, $scope.originalRevision, "original").then(function () {
verifyRevision($scope.newProject, $scope.newRevision, "new").then(function () {
$scope.pageList = [];

var timeRange = PhCompare.getInterval($scope.originalResultSet.push_timestamp, $scope.newResultSet.push_timestamp);
var resultSetIds = [$scope.originalResultSet.id];
if ($scope.errors.length > 0) {
$scope.dataLoading = false;
return;
}

// Optimization - if old/new branches are the same collect data in one pass
if ($scope.originalProject == $scope.newProject) {
resultSetIds = [$scope.originalResultSet.id, $scope.newResultSet.id];
}
var timeRange = PhCompare.getInterval($scope.originalResultSet.push_timestamp, $scope.newResultSet.push_timestamp);
var resultSetIds = [$scope.originalResultSet.id];

// Optimization - if old/new branches are the same collect data in one pass
if ($scope.originalProject == $scope.newProject) {
resultSetIds = [$scope.originalResultSet.id, $scope.newResultSet.id];
}

$q.all([PhSeries.getSeriesList(
$scope.originalProject.name,
{ signature: $scope.originalSignature }).then(function(originalSeries) {
$scope.testList = [originalSeries[0].name];
return undefined;
}),
PhSeries.getSeriesList(
$scope.originalProject.name,
{ parent_signature: $scope.originalSignature }).then(function(originalSubtestList) {
$scope.pageList = _.map(originalSubtestList, 'name');
$scope.platformList = _.uniq(_.map(originalSubtestList, 'platform'));
return PhCompare.getResultsMap($scope.originalProject.name,
originalSubtestList,
resultSetIds);
})
]).then(function(results) {
var originalSeriesMap = results[1][$scope.originalResultSet.id];
var newSeriesMap = results[1][$scope.newResultSet.id];
[originalSeriesMap, newSeriesMap].forEach(function(seriesMap) {
// If there is no data for a given signature, handle it gracefully
if (seriesMap) {
Object.keys(seriesMap).forEach(function(series) {
if (!_.contains($scope.pageList, seriesMap[series].name)) {
$scope.pageList.push(seriesMap[series].name);
}
});
}
});

$q.all([PhSeries.getSeriesList(
$scope.originalProject.name,
{ signature: $scope.originalSignature },
optionCollectionMap).then(function(originalSeries) {
console.log(originalSeries);
$scope.testList = [originalSeries[0].name];
return undefined;
}),
PhSeries.getSeriesList(
$scope.originalProject.name,
{ parent_signature: $scope.originalSignature },
optionCollectionMap).then(function(originalSubtestList) {
$scope.pageList = _.map(originalSubtestList, 'name');
$scope.platformList = _.uniq(_.map(originalSubtestList, 'platform'));
return PhCompare.getResultsMap($scope.originalProject.name,
originalSubtestList,
resultSetIds);
})
]).then(function(results) {
var originalSeriesMap = results[1][$scope.originalResultSet.id];
var newSeriesMap = results[1][$scope.newResultSet.id];
[originalSeriesMap, newSeriesMap].forEach(function(seriesMap) {
// If there is no data for a given signature, handle it gracefully
if (seriesMap) {
Object.keys(seriesMap).forEach(function(series) {
if (!_.contains($scope.pageList, seriesMap[series].name)) {
$scope.pageList.push(seriesMap[series].name);
// Optimization- collect all data in a single pass
if (newSeriesMap) {
$scope.dataLoading = false;
displayResults(originalSeriesMap, newSeriesMap);
return;
}

PhSeries.getSeriesList(
$scope.newProject.name, { parent_signature: $scope.newSignature }).then(function(newSeriesList) {
$scope.platformList = _.uniq(_.union(
$scope.platformList,
_.map(newSeriesList, 'platform')));
$scope.testList = _.uniq(_.union(
$scope.testList,
_.map(newSeriesList, 'name')));

return PhCompare.getResultsMap($scope.newProject.name,
newSeriesList,
[$scope.newResultSet.id]);
}).then(function(newSeriesMaps) {
var newSeriesMap = newSeriesMaps[$scope.newResultSet.id];
// There is a chance that we haven't received data for the given signature/resultSet yet
if (newSeriesMap) {
Object.keys(newSeriesMap).forEach(function(series) {
if (!_.contains($scope.pageList, newSeriesMap[series].name)) {
$scope.pageList.push(newSeriesMap[series].name);
}
});
} else {
newSeriesMap = {};
}
});

// Optimization- collect all data in a single pass
if (newSeriesMap) {
$scope.dataLoading = false;
displayResults(originalSeriesMap, newSeriesMap);
return;
}

PhSeries.getSeriesList(
$scope.newProject.name,
{ parent_signature: $scope.newSignature },
optionCollectionMap).then(function(newSeriesList) {
$scope.platformList = _.uniq(_.union(
$scope.platformList,
_.map(newSeriesList, 'platform')));
$scope.testList = _.uniq(_.union(
$scope.testList,
_.map(newSeriesList, 'name')));

return PhCompare.getResultsMap($scope.newProject.name,
newSeriesList,
[$scope.newResultSet.id]);
}).then(function(newSeriesMaps) {
var newSeriesMap = newSeriesMaps[$scope.newResultSet.id];
// There is a chance that we haven't received data for the given signature/resultSet yet
if (newSeriesMap) {
Object.keys(newSeriesMap).forEach(function(series) {
if (!_.contains($scope.pageList, newSeriesMap[series].name)) {
$scope.pageList.push(newSeriesMap[series].name);
}
});
} else {
newSeriesMap = {};
}
$scope.dataLoading = false;
displayResults(originalSeriesMap, newSeriesMap);
});
});
});
});
});
});
});
});
}]);

0 comments on commit c27a21e

Please sign in to comment.