summaryrefslogtreecommitdiffstats
path: root/Tools/TestResultServer/static-dashboards/treemap.js
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/TestResultServer/static-dashboards/treemap.js')
-rw-r--r--Tools/TestResultServer/static-dashboards/treemap.js287
1 files changed, 0 insertions, 287 deletions
diff --git a/Tools/TestResultServer/static-dashboards/treemap.js b/Tools/TestResultServer/static-dashboards/treemap.js
deleted file mode 100644
index db99b8ab8..000000000
--- a/Tools/TestResultServer/static-dashboards/treemap.js
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright (C) 2013 Google Inc. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-var defaultDashboardSpecificStateValues = {
- builder: null,
- treemapfocus: '',
-};
-
-var DB_SPECIFIC_INVALIDATING_PARAMETERS = {
- 'testType': 'builder',
- 'group': 'builder'
-};
-
-function generatePage(historyInstance)
-{
- $('header-container').innerHTML = ui.html.testTypeSwitcher();
-
- g_isGeneratingPage = true;
-
- var rawTree = g_resultsByBuilder[historyInstance.dashboardSpecificState.builder || currentBuilderGroup().defaultBuilder()];
- g_webTree = convertToWebTreemapFormat('LayoutTests', rawTree);
- appendTreemap($('map'), g_webTree);
-
- if (historyInstance.dashboardSpecificState.treemapfocus)
- focusPath(g_webTree, historyInstance.dashboardSpecificState.treemapfocus)
-
- g_isGeneratingPage = false;
-}
-
-function handleValidHashParameter(historyInstance, key, value)
-{
- switch(key) {
- case 'builder':
- history.validateParameter(historyInstance.dashboardSpecificState, key, value,
- function() { return value in currentBuilders(); });
- return true;
-
- case 'treemapfocus':
- history.validateParameter(historyInstance.dashboardSpecificState, key, value,
- function() {
- // FIXME: There's probably a simpler regexp here. Just trying to match ascii + forward-slash.
- // e.g. LayoutTests/foo/bar.html
- return (value.match(/^(\w+\/\w*)*$/));
- });
- return true;
-
- default:
- return false;
- }
-}
-
-function handleQueryParameterChange(historyInstance, params)
-{
- for (var param in params) {
- if (param != 'treemapfocus') {
- $('map').innerHTML = 'Loading...';
- return true;
- }
- }
- return false;
-}
-
-var treemapConfig = {
- defaultStateValues: defaultDashboardSpecificStateValues,
- generatePage: generatePage,
- handleValidHashParameter: handleValidHashParameter,
- handleQueryParameterChange: handleQueryParameterChange,
- invalidatingHashParameters: DB_SPECIFIC_INVALIDATING_PARAMETERS
-};
-
-// FIXME(jparent): Eventually remove all usage of global history object.
-var g_history = new history.History(treemapConfig);
-g_history.parseCrossDashboardParameters();
-
-var TEST_URL_BASE_PATH = "http://svn.webkit.org/repository/webkit/trunk/";
-
-function humanReadableTime(milliseconds)
-{
- if (milliseconds < 1000)
- return Math.floor(milliseconds) + 'ms';
- else if (milliseconds < 60000)
- return (milliseconds / 1000).toPrecision(2) + 's';
-
- var minutes = Math.floor(milliseconds / 60000);
- var seconds = Math.floor((milliseconds - minutes * 60000) / 1000);
- return minutes + 'm' + seconds + 's';
-}
-
-// This looks like:
-// { "data": {"$area": (sum of all timings)},
-// "name": (name of this node),
-// "children": [ (child nodes, in the same format as this) ] }
-// childCount is added just to be includes in the node's name
-function convertToWebTreemapFormat(treename, tree, path)
-{
- var total = 0;
- var childCount = 0;
- var children = [];
- for (var name in tree) {
- var treeNode = tree[name];
- if (typeof treeNode == "number") {
- var time = treeNode;
- var node = {
- "data": {"$area": time},
- "name": name + " (" + humanReadableTime(time) + ")"
- };
- children.push(node);
- total += time;
- childCount++;
- } else {
- var newPath = path ? path + '/' + name : name;
- var subtree = convertToWebTreemapFormat(name, treeNode, newPath);
- children.push(subtree);
- total += subtree["data"]["$area"];
- childCount += subtree["childCount"];
- }
- }
-
- children.sort(function(a, b) {
- aTime = a.data["$area"]
- bTime = b.data["$area"]
- return bTime - aTime;
- });
-
- return {
- "data": {"$area": total},
- "name": treename + " (" + humanReadableTime(total) + " - " + childCount + " tests)",
- "children": children,
- "childCount": childCount,
- "path": path
- };
-}
-
-function listOfAllNonLeafNodes(tree, list)
-{
- if (!tree.children)
- return;
-
- if (!list)
- list = [];
- list.push(tree);
-
- tree.children.forEach(function(child) {
- listOfAllNonLeafNodes(child, list);
- });
- return list;
-}
-
-function reverseSortByAverage(list)
-{
- list.sort(function(a, b) {
- var avgA = a.data['$area'] / a.childCount;
- var avgB = b.data['$area'] / b.childCount;
- return avgB - avgA;
- });
-}
-
-function showAverages()
-{
- if (!document.getElementById('map'))
- return;
-
- var table = document.createElement('table');
- table.innerHTML = '<th>directory</th><th># tests</th><th>avg time / test</th>';
-
- var allNodes = listOfAllNonLeafNodes(g_webTree);
- reverseSortByAverage(allNodes);
- allNodes.forEach(function(node) {
- var average = node.data['$area'] / node.childCount;
- if (average > 100 && node.childCount != 1) {
- var tr = document.createElement('tr');
- tr.innerHTML = '<td></td><td>' + node.childCount + '</td><td>' + humanReadableTime(average) + '</td>';
- tr.querySelector('td').innerText = node.path;
- table.appendChild(tr);
- }
- });
-
- var map = document.getElementById('map');
- map.parentNode.replaceChild(table, map);
-}
-
-var g_isGeneratingPage = false;
-var g_webTree;
-
-function focusPath(tree, path)
-{
- var parts = decodeURIComponent(path).split('/');
- if (extractName(tree) != parts[0]) {
- console.error('Could not focus tree rooted at ' + parts[0]);
- return;
- }
-
- for (var i = 1; i < parts.length; i++) {
- var children = tree.children;
- for (var j = 0; j < children.length; j++) {
- var child = children[j];
- if (extractName(child) == parts[i]) {
- tree = child;
- focus(tree);
- break;
- }
- }
- if (j == children.length) {
- console.error('Could not find tree at ' + parts[i]);
- break;
- }
- }
-
-}
-
-function extractName(node)
-{
- return node.name.split(' ')[0];
-}
-
-function fullName(node)
-{
- var buffer = [extractName(node)];
- while (node.parent) {
- node = node.parent;
- buffer.unshift(extractName(node));
- }
- return buffer.join('/');
-}
-
-function handleFocus(tree)
-{
- var currentlyFocusedNode = $('focused-leaf');
- if (currentlyFocusedNode)
- currentlyFocusedNode.id = '';
-
- if (!tree.children)
- tree.dom.id = 'focused-leaf';
-
- var name = fullName(tree);
-
- if (!tree.children && !tree.extraDom && g_history.isLayoutTestResults()) {
- tree.extraDom = document.createElement('pre');
- tree.extraDom.className = 'extra-dom';
- tree.dom.appendChild(tree.extraDom);
-
- loader.request(TEST_URL_BASE_PATH + name,
- function(xhr) {
- tree.extraDom.onmousedown = function(e) {
- e.stopPropagation();
- };
- tree.extraDom.textContent = xhr.responseText;
- },
- function (xhr) {
- tree.extraDom.textContent = "Could not load test."
- });
- }
-
- // We don't want the focus calls during generatePage to try to modify the query state.
- if (!g_isGeneratingPage)
- g_history.setQueryParameter('treemapfocus', name);
-}
-
-window.addEventListener('load', function() {
- var resourceLoader = new loader.Loader();
- resourceLoader.load();
-}, false);