amd-debug-tools 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of amd-debug-tools might be problematic. Click here for more details.
- amd_debug/__init__.py +45 -0
- amd_debug/acpi.py +107 -0
- amd_debug/bash/amd-s2idle +89 -0
- amd_debug/battery.py +87 -0
- amd_debug/bios.py +138 -0
- amd_debug/common.py +324 -0
- amd_debug/database.py +331 -0
- amd_debug/failures.py +588 -0
- amd_debug/installer.py +404 -0
- amd_debug/kernel.py +389 -0
- amd_debug/prerequisites.py +1215 -0
- amd_debug/pstate.py +314 -0
- amd_debug/s2idle-hook +72 -0
- amd_debug/s2idle.py +406 -0
- amd_debug/sleep_report.py +453 -0
- amd_debug/templates/html +427 -0
- amd_debug/templates/md +39 -0
- amd_debug/templates/stdout +13 -0
- amd_debug/templates/txt +23 -0
- amd_debug/validator.py +863 -0
- amd_debug/wake.py +111 -0
- amd_debug_tools-0.2.0.dist-info/METADATA +180 -0
- amd_debug_tools-0.2.0.dist-info/RECORD +27 -0
- amd_debug_tools-0.2.0.dist-info/WHEEL +5 -0
- amd_debug_tools-0.2.0.dist-info/entry_points.txt +4 -0
- amd_debug_tools-0.2.0.dist-info/licenses/LICENSE +19 -0
- amd_debug_tools-0.2.0.dist-info/top_level.txt +1 -0
amd_debug/templates/html
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<title>Linux s2idle Power Report</title>
|
|
7
|
+
<style>
|
|
8
|
+
h1 {
|
|
9
|
+
color: #00b0f0;
|
|
10
|
+
font-family: sans-serif;
|
|
11
|
+
font-size: 42pt;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
h2 {
|
|
15
|
+
font-size: 15pt;
|
|
16
|
+
font-family: sans-serif;
|
|
17
|
+
color: #00b0f0;
|
|
18
|
+
margin-top: 2em;
|
|
19
|
+
margin-bottom: 0em;
|
|
20
|
+
letter-spacing: 0.08em;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
h3,
|
|
24
|
+
h4,
|
|
25
|
+
h5 {
|
|
26
|
+
font-family: sans-serif;
|
|
27
|
+
margin-top: 1em;
|
|
28
|
+
margin-bottom: 0em;
|
|
29
|
+
letter-spacing: 0.08em;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
|
|
34
|
+
font-family: sans-serif;
|
|
35
|
+
letter-spacing: 0.02em;
|
|
36
|
+
background-color: #ffffff;
|
|
37
|
+
color: #000000;
|
|
38
|
+
margin: 0em 5.5em 0em 5.5em;
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
table,
|
|
43
|
+
th,
|
|
44
|
+
td {
|
|
45
|
+
border-width: 0;
|
|
46
|
+
table-layout: fixed;
|
|
47
|
+
font-family: sans-serif;
|
|
48
|
+
letter-spacing: 0.02em;
|
|
49
|
+
color: #000000;
|
|
50
|
+
margin-bottom: 10px;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.○ {
|
|
54
|
+
font-family: "Fira Code", monospace;
|
|
55
|
+
color: #000000;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.❌ {
|
|
59
|
+
color: #ff0000;
|
|
60
|
+
font-family: "Fira Code", monospace;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.🚦 {
|
|
64
|
+
color: #a4a100;
|
|
65
|
+
font-family: "Fira Code", monospace;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.🦟 {
|
|
69
|
+
color: #848484;
|
|
70
|
+
font-family: "Fira Code", monospace;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.hidden-by-default {
|
|
74
|
+
display: none;
|
|
75
|
+
border: 0px;
|
|
76
|
+
border-spacing: 0px;
|
|
77
|
+
border-collapse: collapse;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.hide-borders {
|
|
81
|
+
border: 0px;
|
|
82
|
+
border-collapse: collapse;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.row-disabled {
|
|
86
|
+
display: none;
|
|
87
|
+
border: 0px;
|
|
88
|
+
border-collapse: collapse;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.arrow::before {
|
|
92
|
+
content: "\23f5";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.arrow-expanded::before {
|
|
96
|
+
content: "\23F7";
|
|
97
|
+
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.row-low {
|
|
101
|
+
background-color: #ace3ac;
|
|
102
|
+
text-align: center;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.row-low:hover {
|
|
106
|
+
background-color: #caedca;
|
|
107
|
+
text-align: center;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.row-neutral {
|
|
111
|
+
background-color: #e0e0e0;
|
|
112
|
+
text-align: center;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.row-neutral:hover {
|
|
116
|
+
background-color: #f0f0f0;
|
|
117
|
+
text-align: center;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.row-high {
|
|
121
|
+
background-color: #ffb2aa;
|
|
122
|
+
text-align: center;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.row-high:hover {
|
|
126
|
+
background-color: #ffd5d1;
|
|
127
|
+
text-align: center;
|
|
128
|
+
}
|
|
129
|
+
</style>
|
|
130
|
+
</head>
|
|
131
|
+
|
|
132
|
+
<body>
|
|
133
|
+
<script>
|
|
134
|
+
function select_changed(selector, row) {
|
|
135
|
+
var x = document.getElementById(selector).value;
|
|
136
|
+
var y;
|
|
137
|
+
var rows = document.querySelectorAll(row + " tr.row-disabled");
|
|
138
|
+
for (var i = 0; i < rows.length; i++) {
|
|
139
|
+
rows[i].style.display = "none";
|
|
140
|
+
}
|
|
141
|
+
if (x != "0") {
|
|
142
|
+
document.querySelector(row + x).style.display = "table-row";
|
|
143
|
+
if (row == row + x)
|
|
144
|
+
document.getElementById(selector).value = 0;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function cycle_data_changed() {
|
|
148
|
+
select_changed("cycles", "#cycledata")
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function failure_data_changed() {
|
|
152
|
+
select_changed("failures", "#failuredata")
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function debug_data_changed() {
|
|
156
|
+
select_changed("debug", "#debugdata")
|
|
157
|
+
if (document.getElementById("debug").value != "0") {
|
|
158
|
+
document.getElementById("debug_label").style.display = "";
|
|
159
|
+
} else {
|
|
160
|
+
document.getElementById("debug_label").style.display = "none";
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function prereq_debug_data_changed() {
|
|
165
|
+
var table = document.getElementById("prereqdebugdata");
|
|
166
|
+
var arrow = document.getElementById("prereqdata-arrow")
|
|
167
|
+
if (table.classList.contains("hidden-by-default")) {
|
|
168
|
+
table.className = "hide-borders";
|
|
169
|
+
arrow.className = "arrow-expanded";
|
|
170
|
+
} else {
|
|
171
|
+
table.className = "hidden-by-default";
|
|
172
|
+
arrow.className = "arrow"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function parseTimeToSeconds(timeString) {
|
|
177
|
+
var timeParts = timeString.split(":");
|
|
178
|
+
var hours = parseInt(timeParts[0]);
|
|
179
|
+
var minutes = parseInt(timeParts[1]);
|
|
180
|
+
var seconds = parseInt(timeParts[2]);
|
|
181
|
+
return (hours * 3600) + (minutes * 60) + seconds;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function pick_data_for_cycle(num) {
|
|
185
|
+
//show cycles messages for this cycle
|
|
186
|
+
document.getElementById("cycles").selectedIndex = num + 1;
|
|
187
|
+
cycle_data_changed();
|
|
188
|
+
{% if failures %}
|
|
189
|
+
//show failures messages for this cycle
|
|
190
|
+
document.getElementById("failures").value = num + 1;
|
|
191
|
+
failure_data_changed();
|
|
192
|
+
{% endif %}
|
|
193
|
+
{% if debug_data %}
|
|
194
|
+
//show debug data for this cycle
|
|
195
|
+
document.getElementById("debug").selectedIndex = num + 1;
|
|
196
|
+
debug_data_changed();
|
|
197
|
+
{% endif %}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function summary_data_changed() {
|
|
201
|
+
var table = document.getElementById("summary");
|
|
202
|
+
const start_select = document.getElementById('start_select');
|
|
203
|
+
const end_select = document.getElementById('end_select');
|
|
204
|
+
var start = parseInt(start_select.value);
|
|
205
|
+
var end = parseInt(end_select.value);
|
|
206
|
+
var min_duration = 0;
|
|
207
|
+
|
|
208
|
+
// if duration filter activated, hide rows that don't match
|
|
209
|
+
if (document.getElementById('med_duration').checked)
|
|
210
|
+
min_duration = document.getElementById("med_duration").value;
|
|
211
|
+
else if (document.getElementById('min_duration').checked)
|
|
212
|
+
min_duration = document.getElementById("min_duration").value;
|
|
213
|
+
|
|
214
|
+
// reset end if start was picked bigger than end
|
|
215
|
+
if (start > end) {
|
|
216
|
+
end_select.selectedIndex = start;
|
|
217
|
+
end = start;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// show all rows between start and end
|
|
221
|
+
for (var i = 1; i < table.rows.length; i++) {
|
|
222
|
+
var row = table.rows[i];
|
|
223
|
+
var index = parseInt(row.cells[0].textContent);
|
|
224
|
+
var row_duration = parseTimeToSeconds(row.cells[2].textContent);
|
|
225
|
+
|
|
226
|
+
if (row_duration >= min_duration &&
|
|
227
|
+
index >= start && index <= end) {
|
|
228
|
+
row.style.display = "";
|
|
229
|
+
} else {
|
|
230
|
+
row.style.display = "none";
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// reset other tables if we now show more than one cycle
|
|
235
|
+
if (end - start > 0) {
|
|
236
|
+
// reset cycle data selector
|
|
237
|
+
document.getElementById("cycles").selectedIndex = 0;
|
|
238
|
+
cycle_data_changed();
|
|
239
|
+
{% if failures %}
|
|
240
|
+
//reset failure data selector
|
|
241
|
+
document.getElementById("failures").value = 0;
|
|
242
|
+
failure_data_changed();
|
|
243
|
+
{% endif %}
|
|
244
|
+
{% if debug_data %}
|
|
245
|
+
//reset debug data selector
|
|
246
|
+
document.getElementById("debug").selectedIndex = 0;
|
|
247
|
+
debug_data_changed();
|
|
248
|
+
{% endif %}
|
|
249
|
+
} else if (start = end)
|
|
250
|
+
pick_data_for_cycle(start)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function populate_summary_selectors() {
|
|
254
|
+
const table = document.getElementById('summary');
|
|
255
|
+
const start_select = document.getElementById('start_select');
|
|
256
|
+
const end_select = document.getElementById('end_select');
|
|
257
|
+
|
|
258
|
+
for (let i = 0; i < table.rows.length; i++) {
|
|
259
|
+
const start_option = document.createElement('option');
|
|
260
|
+
const end_option = document.createElement('option');
|
|
261
|
+
var columns = table.rows[i].getElementsByTagName("td");
|
|
262
|
+
|
|
263
|
+
//Populate all start/end selector values
|
|
264
|
+
if (i != table.rows.length - 1) {
|
|
265
|
+
start_option.text = `Cycle ${i}`;
|
|
266
|
+
start_option.value = i
|
|
267
|
+
end_option.text = `Cycle ${i}`;
|
|
268
|
+
end_option.value = i
|
|
269
|
+
start_select.add(start_option);
|
|
270
|
+
end_select.add(end_option);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
//apply coloring to hardware sleep
|
|
274
|
+
if (i != 0) {
|
|
275
|
+
if (parseFloat(columns[2].innerHTML) < 85)
|
|
276
|
+
table.rows[i].className = "row-high";
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Pick the end selector for last column
|
|
281
|
+
end_select.selectedIndex = table.rows.length - 2;
|
|
282
|
+
|
|
283
|
+
// if we only have one selector then pick it
|
|
284
|
+
if (start_select.selectedIndex == end_select.selectedIndex) {
|
|
285
|
+
pick_summary_cycle(start_select.selectedIndex)
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
function pick_summary_cycle(num) {
|
|
290
|
+
//narrow down filter to just the selected cycle
|
|
291
|
+
document.getElementById('start_select').selectedIndex = num;
|
|
292
|
+
document.getElementById('end_select').selectedIndex = num;
|
|
293
|
+
summary_data_changed();
|
|
294
|
+
pick_data_for_cycle(num);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function reset_clicked() {
|
|
298
|
+
const table = document.getElementById('summary');
|
|
299
|
+
document.getElementById('start_select').selectedIndex = 0;
|
|
300
|
+
console.log(table.rows.length);
|
|
301
|
+
document.getElementById('end_select').selectedIndex = table.rows.length - 2;
|
|
302
|
+
document.getElementById('all_time').checked = true;
|
|
303
|
+
summary_data_changed();
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
window.addEventListener('load', populate_summary_selectors);
|
|
307
|
+
</script>
|
|
308
|
+
<h1>Linux s2idle Power Report</h1>
|
|
309
|
+
<p>s2idle report created {{ date }} using amd-s2idle {{version}}</p>
|
|
310
|
+
{% if prereq %}
|
|
311
|
+
<table class="hide-borders">
|
|
312
|
+
{% for obj in prereq %}
|
|
313
|
+
<TR>
|
|
314
|
+
<TD>{{obj.symbol}}</TD>
|
|
315
|
+
<TD>{{obj.text}}</TD>
|
|
316
|
+
</TR>
|
|
317
|
+
{% endfor %}
|
|
318
|
+
</table>
|
|
319
|
+
{% endif %}
|
|
320
|
+
{% if prereq_debug_data %}
|
|
321
|
+
<h3>
|
|
322
|
+
<label id="prereqdata-arrow" for="prereqdebugdata" onclick="prereq_debug_data_changed()"
|
|
323
|
+
class="arrow">Prerequisites</label>
|
|
324
|
+
</h3>
|
|
325
|
+
<table id="prereqdebugdata" class="hidden-by-default">
|
|
326
|
+
{% for obj in prereq_debug_data %}
|
|
327
|
+
<TR>
|
|
328
|
+
<TD>
|
|
329
|
+
<pre>{{obj.data}}</pre>
|
|
330
|
+
</TD>
|
|
331
|
+
</TR>
|
|
332
|
+
{% endfor %}
|
|
333
|
+
</table>
|
|
334
|
+
{% endif %}
|
|
335
|
+
<h2>Summary</h2>
|
|
336
|
+
{% if battery_svg %}
|
|
337
|
+
<h3>Battery</h3>
|
|
338
|
+
{{ battery_svg | safe }}
|
|
339
|
+
{% endif %}
|
|
340
|
+
{% if hwsleep_svg %}
|
|
341
|
+
<h3>Low power state residency</h3>
|
|
342
|
+
{{ hwsleep_svg | safe }}
|
|
343
|
+
{% endif %}
|
|
344
|
+
{% if cycle_data|length > 1 %}
|
|
345
|
+
<h3>Cycle data</h3>
|
|
346
|
+
<p>Choose a single cycle to see messages and data for that cycle.</p>
|
|
347
|
+
<button type="button" onclick="reset_clicked()">Reset</button>
|
|
348
|
+
<h4>Filter cycle range</h4>
|
|
349
|
+
<select id="start_select" onchange="summary_data_changed()"></select>
|
|
350
|
+
and
|
|
351
|
+
<select id="end_select" onchange="summary_data_changed()"></select>
|
|
352
|
+
<h4>Filter minimum session length</h4>
|
|
353
|
+
<input type="radio" name="session1" id="all_time" value="all_time" onchange="js:summary_data_changed()"
|
|
354
|
+
checked="" />
|
|
355
|
+
<label>All</label>
|
|
356
|
+
<input type="radio" name="session1" id="med_duration" value="600" onchange="js:summary_data_changed()" />
|
|
357
|
+
<label>>10 min</label>
|
|
358
|
+
<input type="radio" name="session1" id="min_duration" value="60" onchange="js:summary_data_changed()" />
|
|
359
|
+
<label>>1 min</label>
|
|
360
|
+
{% else %}
|
|
361
|
+
<select id="start_select" class="hidden-by-default"></select>
|
|
362
|
+
<select id="end_select" class="hidden-by-default"></select>
|
|
363
|
+
<input type="radio" name="session1" id="all_time" value="all_time" checked="" class="hidden-by-default" />
|
|
364
|
+
<input type="radio" name="session1" id="med_duration" value="600" class="hidden-by-default" />
|
|
365
|
+
<input type="radio" name="session1" id="min_duration" value="60" class="hidden-by-default" />
|
|
366
|
+
{% endif %}
|
|
367
|
+
{{ summary }}
|
|
368
|
+
{% if cycle_data %}
|
|
369
|
+
<p><label for="cycle" class="hidden-by-default">Choose a cycle:</label>
|
|
370
|
+
<select id="cycles" onchange="cycle_data_changed()" class="hidden-by-default">
|
|
371
|
+
<option value="0">Disabled</option>
|
|
372
|
+
{% for obj in cycle_data %}
|
|
373
|
+
<option value="{{obj.cycle_num + 1}}">Cycle {{obj.cycle_num}}</option>
|
|
374
|
+
{% endfor %}
|
|
375
|
+
</select>
|
|
376
|
+
</p>
|
|
377
|
+
<table id="cycledata" class="hide-borders">
|
|
378
|
+
{% for obj in cycle_data %}
|
|
379
|
+
<TR class="row-disabled" id="cycledata{{obj.cycle_num + 1}}">
|
|
380
|
+
<TD>{{obj.data}}</TD>
|
|
381
|
+
</TR>
|
|
382
|
+
{% endfor %}
|
|
383
|
+
</table>
|
|
384
|
+
{% endif %}
|
|
385
|
+
{% if failures %}
|
|
386
|
+
<p><label for="failure" class="hidden-by-default">Choose a cycle:</label>
|
|
387
|
+
<select id="failures" onchange="failure_data_changed()" class="hidden-by-default">
|
|
388
|
+
<option value="0">Disabled</option>
|
|
389
|
+
{% for obj in failures %}
|
|
390
|
+
<option value="{{obj.cycle_num + 1}}">Cycle {{obj.cycle_num}}</option>
|
|
391
|
+
{% endfor %}
|
|
392
|
+
</select>
|
|
393
|
+
</p>
|
|
394
|
+
<table id="failuredata" class="hide-borders">
|
|
395
|
+
{% for obj in failures %}
|
|
396
|
+
<TR class="row-disabled" id="failuredata{{obj.cycle_num + 1}}">
|
|
397
|
+
<TD>{{obj.problem}}</TD>
|
|
398
|
+
<TD>{{obj.data}}</TD>
|
|
399
|
+
</TR>
|
|
400
|
+
{% endfor %}
|
|
401
|
+
</table>
|
|
402
|
+
{% endif %}
|
|
403
|
+
{% if debug_data %}
|
|
404
|
+
<h3 id="debug_label" style="display:none;">Debugging 🦟</h3>
|
|
405
|
+
<p><label for="debug" class="hidden-by-default">Choose a cycle:</label>
|
|
406
|
+
<select id="debug" onchange="debug_data_changed()" class="hidden-by-default">
|
|
407
|
+
<option value="0">Disabled</option>
|
|
408
|
+
{% for obj in debug_data %}
|
|
409
|
+
<option value="{{obj.cycle_num + 1}}">Cycle {{obj.cycle_num}}</option>
|
|
410
|
+
{% endfor %}
|
|
411
|
+
</select>
|
|
412
|
+
</p>
|
|
413
|
+
<table id="debugdata" class="hide-borders">
|
|
414
|
+
{% for obj in debug_data %}
|
|
415
|
+
<TR class="row-disabled" id="debugdata{{obj.cycle_num + 1}}">
|
|
416
|
+
<TD>
|
|
417
|
+
{% for index in range(obj.messages | length) %}
|
|
418
|
+
<div class="{{obj.priorities[index]}}">{{obj.messages[index]}}</div>
|
|
419
|
+
{% endfor %}
|
|
420
|
+
</TD>
|
|
421
|
+
</TR>
|
|
422
|
+
{% endfor %}
|
|
423
|
+
</table>
|
|
424
|
+
{% endif %}
|
|
425
|
+
</body>
|
|
426
|
+
|
|
427
|
+
</html>
|
amd_debug/templates/md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# s2idle report created on {{ date }} using amd-s2idle {{ version }}
|
|
2
|
+
|
|
3
|
+
{% if prereq %}
|
|
4
|
+
## ⚓ Prerequisite checks
|
|
5
|
+
Measured {{ prereq_date }}.
|
|
6
|
+
{% filter indent(width=4) %}
|
|
7
|
+
{% for obj in prereq %}{{ obj.symbol }} {{ obj.text }}
|
|
8
|
+
{% endfor %}
|
|
9
|
+
{% endfilter %}
|
|
10
|
+
{% endif %}
|
|
11
|
+
{% if prereq_debug_data %}🦟 Prereq Debug Data
|
|
12
|
+
{% filter indent(width=4) %}
|
|
13
|
+
{% for obj in prereq_debug_data %}
|
|
14
|
+
{{obj.data}}{% endfor %}
|
|
15
|
+
{% endfilter %}{% endif %}
|
|
16
|
+
{% if cycle_data %}## 🚴 Cycle Data
|
|
17
|
+
{{ cycle_data }}
|
|
18
|
+
{% endif %}
|
|
19
|
+
{% if debug_data %}
|
|
20
|
+
## 🦟 Debug Data
|
|
21
|
+
{% for debug in debug_data %}Cycle {{ debug.cycle_num }}
|
|
22
|
+
{% filter indent(width=4) %}
|
|
23
|
+
{% for message in debug.messages %}{{ message }}
|
|
24
|
+
{% endfor %}
|
|
25
|
+
{% endfilter %}
|
|
26
|
+
{% endfor %}
|
|
27
|
+
{% endif %}
|
|
28
|
+
## Summary
|
|
29
|
+
{{ summary }}
|
|
30
|
+
|
|
31
|
+
{% if battery_svg %}
|
|
32
|
+
{{ battery_svg | safe }}
|
|
33
|
+
{% endif %}
|
|
34
|
+
{% if hwsleep_svg %}
|
|
35
|
+
{{ hwsleep_svg | safe }}
|
|
36
|
+
{% endif %}
|
|
37
|
+
|
|
38
|
+
## Failures reported
|
|
39
|
+
{{ failures }}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
🗣️Summary
|
|
2
|
+
{{ summary }}
|
|
3
|
+
{% if prereq_debug_data %}🦟Prereq Debug Data
|
|
4
|
+
{% for obj in prereq_debug_data %}
|
|
5
|
+
🦟{{obj.data}}
|
|
6
|
+
{% endfor %}{% endif %}
|
|
7
|
+
{% if cycle_data %}{{ cycle_data }}{% endif %}
|
|
8
|
+
{% if debug_data %}🗣️Debug Data{% for obj in debug_data %}
|
|
9
|
+
|
|
10
|
+
💯Cycle {{ obj.cycle_num }}{% for index in range(obj.messages | length) %}
|
|
11
|
+
{{obj.priorities[index]}}{{obj.messages[index]}}{% endfor %}
|
|
12
|
+
{% endfor %}{% endif %}
|
|
13
|
+
{% if failures %}{{ failures }}{% endif %}
|
amd_debug/templates/txt
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
s2idle report created on {{ date }} using amd-s2idle {{ version }}
|
|
2
|
+
|
|
3
|
+
{% if prereq %}
|
|
4
|
+
⚓ Prerequisite checks
|
|
5
|
+
Measured {{ prereq_date }}.
|
|
6
|
+
{% for obj in prereq %} {{ obj.symbol }} {{ obj.text }}
|
|
7
|
+
{% endfor %}{% endif %}
|
|
8
|
+
{% if cycle_data %}Cycle Data
|
|
9
|
+
{{ cycle_data }}
|
|
10
|
+
{% endif %}
|
|
11
|
+
{% if prereq_debug_data %}🦟 Debug Data
|
|
12
|
+
{% for obj in prereq_debug_data %}{{obj.data}}
|
|
13
|
+
{% endfor %}{% endif %}
|
|
14
|
+
{% if debug_data %}🦟 Debug Data
|
|
15
|
+
{% for debug in debug_data %}Cycle {{ debug.cycle_num }}
|
|
16
|
+
{% for message in debug.messages %}{{ message }}
|
|
17
|
+
{% endfor %}{% endfor %}{% endif %}
|
|
18
|
+
Summary
|
|
19
|
+
{{ summary }}
|
|
20
|
+
{% if failures %}
|
|
21
|
+
Failures reported
|
|
22
|
+
{{ failures }}
|
|
23
|
+
{% endif %}
|