stable-diffusion-webui
151 строка · 4.7 Кб
1
2function createRow(table, cellName, items) {3var tr = document.createElement('tr');4var res = [];5
6items.forEach(function(x, i) {7if (x === undefined) {8res.push(null);9return;10}11
12var td = document.createElement(cellName);13td.textContent = x;14tr.appendChild(td);15res.push(td);16
17var colspan = 1;18for (var n = i + 1; n < items.length; n++) {19if (items[n] !== undefined) {20break;21}22
23colspan += 1;24}25
26if (colspan > 1) {27td.colSpan = colspan;28}29});30
31table.appendChild(tr);32
33return res;34}
35
36function showProfile(path, cutoff = 0.05) {37requestGet(path, {}, function(data) {38var table = document.createElement('table');39table.className = 'popup-table';40
41data.records['total'] = data.total;42var keys = Object.keys(data.records).sort(function(a, b) {43return data.records[b] - data.records[a];44});45var items = keys.map(function(x) {46return {key: x, parts: x.split('/'), time: data.records[x]};47});48var maxLength = items.reduce(function(a, b) {49return Math.max(a, b.parts.length);50}, 0);51
52var cols = createRow(table, 'th', ['record', 'seconds']);53cols[0].colSpan = maxLength;54
55function arraysEqual(a, b) {56return !(a < b || b < a);57}58
59var addLevel = function(level, parent, hide) {60var matching = items.filter(function(x) {61return x.parts[level] && !x.parts[level + 1] && arraysEqual(x.parts.slice(0, level), parent);62});63var sorted = matching.sort(function(a, b) {64return b.time - a.time;65});66var othersTime = 0;67var othersList = [];68var othersRows = [];69var childrenRows = [];70sorted.forEach(function(x) {71var visible = x.time >= cutoff && !hide;72
73var cells = [];74for (var i = 0; i < maxLength; i++) {75cells.push(x.parts[i]);76}77cells.push(x.time.toFixed(3));78var cols = createRow(table, 'td', cells);79for (i = 0; i < level; i++) {80cols[i].className = 'muted';81}82
83var tr = cols[0].parentNode;84if (!visible) {85tr.classList.add("hidden");86}87
88if (x.time >= cutoff) {89childrenRows.push(tr);90} else {91othersTime += x.time;92othersList.push(x.parts[level]);93othersRows.push(tr);94}95
96var children = addLevel(level + 1, parent.concat([x.parts[level]]), true);97if (children.length > 0) {98var cell = cols[level];99var onclick = function() {100cell.classList.remove("link");101cell.removeEventListener("click", onclick);102children.forEach(function(x) {103x.classList.remove("hidden");104});105};106cell.classList.add("link");107cell.addEventListener("click", onclick);108}109});110
111if (othersTime > 0) {112var cells = [];113for (var i = 0; i < maxLength; i++) {114cells.push(parent[i]);115}116cells.push(othersTime.toFixed(3));117cells[level] = 'others';118var cols = createRow(table, 'td', cells);119for (i = 0; i < level; i++) {120cols[i].className = 'muted';121}122
123var cell = cols[level];124var tr = cell.parentNode;125var onclick = function() {126tr.classList.add("hidden");127cell.classList.remove("link");128cell.removeEventListener("click", onclick);129othersRows.forEach(function(x) {130x.classList.remove("hidden");131});132};133
134cell.title = othersList.join(", ");135cell.classList.add("link");136cell.addEventListener("click", onclick);137
138if (hide) {139tr.classList.add("hidden");140}141
142childrenRows.push(tr);143}144
145return childrenRows;146};147
148addLevel(0, []);149
150popup(table);151});152}
153
154