stable-diffusion-webui

Форк
0
/
profilerVisualization.js 
151 строка · 4.7 Кб
1

2
function createRow(table, cellName, items) {
3
    var tr = document.createElement('tr');
4
    var res = [];
5

6
    items.forEach(function(x, i) {
7
        if (x === undefined) {
8
            res.push(null);
9
            return;
10
        }
11

12
        var td = document.createElement(cellName);
13
        td.textContent = x;
14
        tr.appendChild(td);
15
        res.push(td);
16

17
        var colspan = 1;
18
        for (var n = i + 1; n < items.length; n++) {
19
            if (items[n] !== undefined) {
20
                break;
21
            }
22

23
            colspan += 1;
24
        }
25

26
        if (colspan > 1) {
27
            td.colSpan = colspan;
28
        }
29
    });
30

31
    table.appendChild(tr);
32

33
    return res;
34
}
35

36
function showProfile(path, cutoff = 0.05) {
37
    requestGet(path, {}, function(data) {
38
        var table = document.createElement('table');
39
        table.className = 'popup-table';
40

41
        data.records['total'] = data.total;
42
        var keys = Object.keys(data.records).sort(function(a, b) {
43
            return data.records[b] - data.records[a];
44
        });
45
        var items = keys.map(function(x) {
46
            return {key: x, parts: x.split('/'), time: data.records[x]};
47
        });
48
        var maxLength = items.reduce(function(a, b) {
49
            return Math.max(a, b.parts.length);
50
        }, 0);
51

52
        var cols = createRow(table, 'th', ['record', 'seconds']);
53
        cols[0].colSpan = maxLength;
54

55
        function arraysEqual(a, b) {
56
            return !(a < b || b < a);
57
        }
58

59
        var addLevel = function(level, parent, hide) {
60
            var matching = items.filter(function(x) {
61
                return x.parts[level] && !x.parts[level + 1] && arraysEqual(x.parts.slice(0, level), parent);
62
            });
63
            var sorted = matching.sort(function(a, b) {
64
                return b.time - a.time;
65
            });
66
            var othersTime = 0;
67
            var othersList = [];
68
            var othersRows = [];
69
            var childrenRows = [];
70
            sorted.forEach(function(x) {
71
                var visible = x.time >= cutoff && !hide;
72

73
                var cells = [];
74
                for (var i = 0; i < maxLength; i++) {
75
                    cells.push(x.parts[i]);
76
                }
77
                cells.push(x.time.toFixed(3));
78
                var cols = createRow(table, 'td', cells);
79
                for (i = 0; i < level; i++) {
80
                    cols[i].className = 'muted';
81
                }
82

83
                var tr = cols[0].parentNode;
84
                if (!visible) {
85
                    tr.classList.add("hidden");
86
                }
87

88
                if (x.time >= cutoff) {
89
                    childrenRows.push(tr);
90
                } else {
91
                    othersTime += x.time;
92
                    othersList.push(x.parts[level]);
93
                    othersRows.push(tr);
94
                }
95

96
                var children = addLevel(level + 1, parent.concat([x.parts[level]]), true);
97
                if (children.length > 0) {
98
                    var cell = cols[level];
99
                    var onclick = function() {
100
                        cell.classList.remove("link");
101
                        cell.removeEventListener("click", onclick);
102
                        children.forEach(function(x) {
103
                            x.classList.remove("hidden");
104
                        });
105
                    };
106
                    cell.classList.add("link");
107
                    cell.addEventListener("click", onclick);
108
                }
109
            });
110

111
            if (othersTime > 0) {
112
                var cells = [];
113
                for (var i = 0; i < maxLength; i++) {
114
                    cells.push(parent[i]);
115
                }
116
                cells.push(othersTime.toFixed(3));
117
                cells[level] = 'others';
118
                var cols = createRow(table, 'td', cells);
119
                for (i = 0; i < level; i++) {
120
                    cols[i].className = 'muted';
121
                }
122

123
                var cell = cols[level];
124
                var tr = cell.parentNode;
125
                var onclick = function() {
126
                    tr.classList.add("hidden");
127
                    cell.classList.remove("link");
128
                    cell.removeEventListener("click", onclick);
129
                    othersRows.forEach(function(x) {
130
                        x.classList.remove("hidden");
131
                    });
132
                };
133

134
                cell.title = othersList.join(", ");
135
                cell.classList.add("link");
136
                cell.addEventListener("click", onclick);
137

138
                if (hide) {
139
                    tr.classList.add("hidden");
140
                }
141

142
                childrenRows.push(tr);
143
            }
144

145
            return childrenRows;
146
        };
147

148
        addLevel(0, []);
149

150
        popup(table);
151
    });
152
}
153

154

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.