Christopher Johnson (WMDE) has uploaded a new change for review. https://gerrit.wikimedia.org/r/180774
Change subject: DataView Performance enhancements ...................................................................... DataView Performance enhancements removes duplication of calls to getTasks() which is a slow range edge query adds task setter function in TasksTableView renames BurndownDataViewController to SprintDataViewController renames BurndownDataView to SprintDataView Bug: T78679 Change-Id: I88db37fd8934fd641b9a814a3baca19ec852545a --- M src/__phutil_library_map__.php M src/controller/SprintDataViewController.php M src/query/SprintQuery.php R src/view/SprintDataView.php M src/view/SprintTableView.php M src/view/TasksTableView.php 6 files changed, 73 insertions(+), 56 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/phabricator/extensions/Sprint refs/changes/74/180774/1 diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 10c1f52..3addf12 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -13,7 +13,6 @@ 'BurndownActionMenuEventListener' => 'events/BurndownActionMenuEventListener.php', 'BurndownDataDate' => 'util/BurndownDataDate.php', 'BurndownDataDateTest' => 'tests/BurndownDataDateTest.php', - 'BurndownDataView' => 'view/BurndownDataView.php', 'BurndownException' => 'exception/BurndownException.php', 'CeleritySprintResources' => 'celerity/CeleritySprintResources.php', 'DateIterator' => 'tests/DateIterator.php', @@ -41,6 +40,7 @@ 'SprintController' => 'controller/SprintController.php', 'SprintControllerTest' => 'tests/SprintControllerTest.php', 'SprintDAO' => 'storage/SprintDAO.php', + 'SprintDataView' => 'view/SprintDataView.php', 'SprintDataViewController' => 'controller/SprintDataViewController.php', 'SprintDefaultViewCapability' => 'capability/SprintDefaultViewCapability.php', 'SprintEndDateField' => 'customfield/SprintEndDateField.php', @@ -55,6 +55,7 @@ 'SprintReportController' => 'controller/SprintReportController.php', 'SprintReportOpenTasksView' => 'view/SprintReportOpenTasksView.php', 'SprintTableView' => 'view/SprintTableView.php', + 'SprintTask' => 'storage/SprintTask.php', 'SprintTaskStoryPointsField' => 'customfield/SprintTaskStoryPointsField.php', 'SprintTestCase' => 'tests/SprintTestCase.php', 'SprintTransaction' => 'storage/SprintTransaction.php', @@ -68,7 +69,6 @@ 'xmap' => array( 'BurndownActionMenuEventListener' => 'PhabricatorEventListener', 'BurndownDataDateTest' => 'SprintTestCase', - 'BurndownDataView' => 'SprintView', 'BurndownException' => 'Exception', 'CeleritySprintResources' => 'CelerityResourcesOnDisk', 'DateIterator' => 'Iterator', @@ -90,6 +90,7 @@ 'SprintController' => 'PhabricatorController', 'SprintControllerTest' => 'SprintTestCase', 'SprintDAO' => 'PhabricatorLiskDAO', + 'SprintDataView' => 'SprintView', 'SprintDataViewController' => 'SprintController', 'SprintDefaultViewCapability' => 'PhabricatorPolicyCapability', 'SprintEndDateField' => 'SprintProjectCustomField', @@ -106,6 +107,19 @@ 'SprintReportBurndownView' => 'SprintView', 'SprintReportController' => 'SprintController', 'SprintReportOpenTasksView' => 'SprintView', + 'SprintTask' => array( + 'SprintDAO', + 'PhabricatorMarkupInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorMentionableInterface', + 'PhrequentTrackableInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorProjectInterface', + ), 'SprintTaskStoryPointsField' => array( 'ManiphestCustomField', 'PhabricatorStandardCustomFieldInterface', diff --git a/src/controller/SprintDataViewController.php b/src/controller/SprintDataViewController.php index 107e441..1a16b03 100644 --- a/src/controller/SprintDataViewController.php +++ b/src/controller/SprintDataViewController.php @@ -27,7 +27,7 @@ $burndown_view = false; try { - $burndown_view = id(new BurndownDataView()) + $burndown_view = id(new SprintDataView()) ->setProject($project) ->setViewer($viewer) ->setRequest($request); diff --git a/src/query/SprintQuery.php b/src/query/SprintQuery.php index dd44c89..48038de 100644 --- a/src/query/SprintQuery.php +++ b/src/query/SprintQuery.php @@ -73,7 +73,6 @@ public function getXactions($tasks) { $task_phids = mpull($tasks, 'getPHID'); - $xactions = id(new ManiphestTransactionQuery()) ->setViewer($this->viewer) ->withObjectPHIDs($task_phids) diff --git a/src/view/BurndownDataView.php b/src/view/SprintDataView.php similarity index 76% rename from src/view/BurndownDataView.php rename to src/view/SprintDataView.php index e9a9091..77b879a 100644 --- a/src/view/BurndownDataView.php +++ b/src/view/SprintDataView.php @@ -4,7 +4,7 @@ * @license GPL version 3 */ -final class BurndownDataView extends SprintView +final class SprintDataView extends SprintView { private $request; @@ -35,51 +35,57 @@ } public function render() { - $chart = $this->buildC3Chart(); - $tasks_table = id(new TasksTableView()) - ->setProject($this->project) - ->setViewer($this->viewer) - ->setRequest($this->request); - $tasks_table = $tasks_table->buildTasksTable(); - $pie = $this->buildC3Pie(); - $history_table = new HistoryTableView(); - $history_table = $history_table->buildHistoryTable($this->before); - $sprint_table = new SprintTableView(); - $burndown_table = $sprint_table->buildBurnDownTable($this->sprint_data, $this->before); - $event_table = id(new EventTableView()) - ->setProject($this->project) - ->setViewer($this->viewer) - ->setRequest($this->request); - $event_table = $event_table->buildEventTable($this->events, $this->xactions, - $this->tasks, $this->start, $this->end); - return array($chart, $tasks_table, $pie, $history_table, $burndown_table, $event_table); - } - - private function buildChartDataSet() { $query = id(new SprintQuery()) ->setProject($this->project) ->setViewer($this->viewer); + $tasks = $query->getTasks(); + $this->tasks = mpull($tasks, null, 'getPHID'); + + $chart = $this->buildC3Chart($query); + $tasks_table_view = id(new TasksTableView()) + ->setProject($this->project) + ->setViewer($this->viewer) + ->setRequest($this->request) + ->setTasks($this->tasks) + ->setQuery($query); + + $tasks_table = $tasks_table_view->buildTasksTable(); + $pie = $this->buildC3Pie($tasks_table_view); + $history_table_view = new HistoryTableView(); + $history_table = $history_table_view->buildHistoryTable($this->before); + $sprint_table_view = new SprintTableView(); + $sprint_table = $sprint_table_view->buildSprintTable($this->sprint_data, $this->before); + $event_table_view = id(new EventTableView()) + ->setProject($this->project) + ->setViewer($this->viewer) + ->setRequest($this->request); + $event_table = $event_table_view->buildEventTable($this->events, $this->xactions, + $this->tasks, $this->start, $this->end); + return array($chart, $tasks_table, $pie, $history_table, $sprint_table, $event_table); + } + + private function buildChartDataSet($query) { + $aux_fields = $query->getAuxFields(); $this->start = $query->getStartDate($aux_fields); $this->end = $query->getEndDate($aux_fields); $stats = id(new SprintBuildStats()); - $tasks = $query->getTasks(); - $query->checkNull($this->start, $this->end, $tasks); + + $query->checkNull($this->start, $this->end, $this->tasks); $timezone = $stats->setTimezone($this->viewer); $this->before = $stats->buildBefore($this->start, $timezone); $dates = $stats->buildDateArray($this->start, $this->end, $timezone); $this->timeseries = $stats->buildTimeSeries($this->start, $this->end); - $xactions = $query->getXactions($tasks); - $this->events = $query->getEvents($xactions, $tasks); + $xactions = $query->getXactions($this->tasks); + $this->events = $query->getEvents($xactions, $this->tasks); $this->xactions = mpull($xactions, null, 'getPHID'); - $this->tasks = mpull($tasks, null, 'getPHID'); $sprint_xaction = id(new SprintTransaction()) ->setViewer($this->viewer); - $sprint_xaction->buildStatArrays($tasks); + $sprint_xaction->buildStatArrays($this->tasks); $dates = $sprint_xaction->buildDailyData($this->events, $this->before, $this->start, $this->end, $dates, $this->xactions, $this->project); $this->sprint_data = $stats->setSprintData($dates, $this->before); @@ -104,8 +110,8 @@ return $transposed_array; } - private function buildC3Chart() { - $data = $this->buildChartDataSet(); + private function buildC3Chart($query) { + $data = $this->buildChartDataSet($query); $totalpoints = $data[0]; $remainingpoints = $data[1]; $idealpoints = $data[2]; @@ -137,11 +143,7 @@ return $chart; } - private function buildC3Pie() { - $tasks_table = id(new TasksTableView()) - ->setProject($this->project) - ->setViewer($this->viewer) - ->setRequest($this->request); + private function buildC3Pie($tasks_table) { $tasks_table->setStatusPoints(); $task_open_status_sum = $tasks_table->getOpenStatusSum(); $task_closed_status_sum = $tasks_table->getClosedStatusSum(); diff --git a/src/view/SprintTableView.php b/src/view/SprintTableView.php index edaabe0..4440d6c 100644 --- a/src/view/SprintTableView.php +++ b/src/view/SprintTableView.php @@ -8,7 +8,7 @@ * * @returns PHUIObjectBoxView */ - public function buildBurnDownTable($sprint_data, $before) + public function buildSprintTable($sprint_data, $before) { $tdata = array(); $pdata = array(); diff --git a/src/view/TasksTableView.php b/src/view/TasksTableView.php index 8b1ce1c..3b3382d 100644 --- a/src/view/TasksTableView.php +++ b/src/view/TasksTableView.php @@ -5,8 +5,10 @@ private $project; private $viewer; private $request; + private $tasks; private $task_open_status_sum; private $task_closed_status_sum; + private $query; public function setProject ($project) { $this->project = $project; @@ -20,6 +22,16 @@ public function setRequest ($request) { $this->request = $request; + return $this; + } + + public function setTasks ($tasks) { + $this->tasks = $tasks; + return $this; + } + + public function setQuery ($query) { + $this->query = $query; return $this; } @@ -103,26 +115,21 @@ * @return array */ private function buildTasksTree($order, $reverse) { - $query = id(new SprintQuery()) - ->setProject($this->project) - ->setViewer($this->viewer); - $tasks = $query->getTasks(); - $tasks = mpull($tasks, null, 'getPHID'); - $edges = $query->getEdges($tasks); - $map = $this->buildTaskMap($edges, $tasks); + $edges = $this->query->getEdges($this->tasks); + $map = $this->buildTaskMap($edges, $this->tasks); // We also collect the phids we need to fetch owner information $handle_phids = array(); - foreach ($tasks as $task) { + foreach ($this->tasks as $task) { // Get the owner (assigned to) phid $handle_phids[$task->getOwnerPHID()] = $task->getOwnerPHID(); } - $handles = $query->getViewerHandles($this->request, $handle_phids); + $handles = $this->query->getViewerHandles($this->request, $handle_phids); // Now we loop through the tasks, and add them to the output $output = array(); $rows = array(); - foreach ($tasks as $task) { + foreach ($this->tasks as $task) { if (isset($map[$task->getPHID()]['independent'])) { $blocked = false; } elseif (isset($map[$task->getPHID()]['parent'])) { @@ -302,12 +309,7 @@ } public function setStatusPoints () { - $query = id(new SprintQuery()) - ->setProject($this->project) - ->setViewer($this->viewer); - $tasks = $query->getTasks(); - $tasks = mpull($tasks, null, 'getPHID'); - foreach ($tasks as $task) { + foreach ($this->tasks as $task) { $this->sumPointsbyStatus($task); } return; -- To view, visit https://gerrit.wikimedia.org/r/180774 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I88db37fd8934fd641b9a814a3baca19ec852545a Gerrit-PatchSet: 1 Gerrit-Project: phabricator/extensions/Sprint Gerrit-Branch: master Gerrit-Owner: Christopher Johnson (WMDE) <christopher.john...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits