Run replays in reverse order, in the hopes of a teeny speedup

This commit is contained in:
Eevee (Evelyn Woods) 2024-04-21 00:38:34 -06:00
parent b360fa3998
commit c45ebe60e1

View File

@ -25,6 +25,11 @@ function pad(s, n) {
} }
const RESULT_TYPES = { const RESULT_TYPES = {
pending: {
// not a real result type, but used for the initial display
color: "\x1b[90m",
symbol: "?",
},
skipped: { skipped: {
color: "\x1b[90m", color: "\x1b[90m",
symbol: "-", symbol: "-",
@ -351,22 +356,36 @@ async function test_pack(testdef) {
let dots_per_row = columns - title_width - 1 - 1 - 9 - 1; let dots_per_row = columns - title_width - 1 - 1 - 9 - 1;
// TODO factor out the common parts maybe? // TODO factor out the common parts maybe?
stdout.write(pad(`${pack.title} (${ruleset})`, title_width) + " "); stdout.write(pad(`${pack.title} (${ruleset})`, title_width) + " ");
let d = num_levels; let indices = [];
let num_dot_lines = 1; let num_dot_lines = 1;
while (d > 0) { let previous_type = null;
let n = Math.min(d, dots_per_row); for (let i = 0; i < num_levels; i++) {
stdout.write("\x1b[90m"); if (i > 0 && i % dots_per_row === 0) {
stdout.write("?".repeat(n));
d -= n;
if (d > 0) {
stdout.write("\n"); stdout.write("\n");
stdout.write(" ".repeat(title_width + 1)); stdout.write(" ".repeat(title_width + 1));
num_dot_lines += 1; num_dot_lines += 1;
} }
let type = (level_filter && ! level_filter.has(i)) ? 'skipped' : 'pending';
if (type !== previous_type) {
stdout.write(RESULT_TYPES[type].color);
}
stdout.write(RESULT_TYPES[type].symbol);
previous_type = type;
if (type === 'pending') {
indices.push(i);
}
} }
ansi_cursor_move(0, -(num_dot_lines - 1)); ansi_cursor_move(0, -(num_dot_lines - 1));
stdout.write(`\x1b[${title_width + 2}G`); stdout.write(`\x1b[${title_width + 2}G`);
// We really really don't want to have only a single thread left running at the end on a single
// remaining especially-long replay, so it would be nice to run the levels in reverse order of
// complexity. But that sounds hard so instead just run them backwards, since the earlier
// levels in any given pack tend to be easier.
indices.reverse();
let num_passed = 0; let num_passed = 0;
let num_missing = 0; let num_missing = 0;
let total_tics = 0; let total_tics = 0;
@ -374,7 +393,6 @@ async function test_pack(testdef) {
let last_pause = t0; let last_pause = t0;
let failures = []; let failures = [];
let promises = []; let promises = [];
let indices = [...Array(num_levels).keys()];
for await (let result of run_in_thread_pool(4, testdef, indices)) { for await (let result of run_in_thread_pool(4, testdef, indices)) {
//let result = test_level_wrapper(pack, i, level_filter, compat); //let result = test_level_wrapper(pack, i, level_filter, compat);
let result_stuff = RESULT_TYPES[result.type]; let result_stuff = RESULT_TYPES[result.type];