Skip to content

Commit 27f1f82

Browse files
authored
[test] Re-instate ability to delay reference image collection. NFC (#22672)
In #22665 I removed the manually_trigger_reftest. However this resulted in racey behaviour in some tests. It turns out that running `doReftest` during `postRun` was working, but only because `doReftest` itself was doing async work, thus delaying the actual capture of the canvas bits. This change re-instates the behaviour but without the need to test setting in python.
1 parent 4ba59f6 commit 27f1f82

File tree

6 files changed

+30
-1
lines changed

6 files changed

+30
-1
lines changed

test/browser/test_sdl2_image_prepare.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ void ready(const char *f) {
4040
testImage("screenshot.jpg"); // relative path
4141

4242
SDL_RenderPresent(renderer);
43+
44+
EM_ASM(reftestUnblock());
4345
}
4446

4547
int main() {
@@ -56,6 +58,7 @@ int main() {
5658

5759
assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0);
5860

61+
EM_ASM(reftestBlock());
5962
return 0;
6063
}
6164

test/browser/test_sdl2_image_prepare_data.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ void ready(void *arg, const char *fileName) {
5555
free((void*)seenName); // As the API docs say, we are responsible for freeing the 'fake' names we are given
5656

5757
SDL_RenderPresent(renderer);
58+
59+
EM_ASM(reftestUnblock());
5860
}
5961
}
6062

@@ -75,6 +77,7 @@ int main() {
7577
emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)25, ready, NULL);
7678
emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)33, ready, NULL); // twice to see different filenames
7779

80+
EM_ASM(reftestBlock());
7881
return 0;
7982
}
8083

test/browser/test_sdl_image_must_prepare.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ void ready(const char *f) {
3636
testImage("screenshot.jpg", 1);
3737

3838
SDL_Flip(screen);
39+
40+
EM_ASM(reftestUnblock());
3941
}
4042

4143
int main() {
@@ -48,6 +50,7 @@ int main() {
4850

4951
assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0);
5052

53+
EM_ASM(reftestBlock());
5154
return 0;
5255
}
5356

test/browser/test_sdl_image_prepare.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ void ready(const char *f) {
3737
testImage("screenshot.jpg"); // relative path
3838

3939
SDL_Flip(screen);
40+
41+
EM_ASM(reftestUnblock());
4042
}
4143

4244
int main() {
@@ -51,6 +53,7 @@ int main() {
5153

5254
assert(emscripten_run_preload_plugins("screenshot.jpg", ready, NULL) == 0);
5355

56+
EM_ASM(reftestBlock());
5457
return 0;
5558
}
5659

test/browser/test_sdl_image_prepare_data.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void ready(void *arg, const char *fileName) {
5555
free((void*)seenName); // As the API docs say, we are responsible for freeing the 'fake' names we are given
5656

5757
SDL_Flip(screen);
58+
EM_ASM(reftestUnblock());
5859
}
5960
}
6061

@@ -73,6 +74,7 @@ int main() {
7374
emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)25, ready, NULL);
7475
emscripten_run_preload_plugins_data(buffer, SIZE, "jpg", (void*)33, ready, NULL); // twice to see different filenames
7576

77+
EM_ASM(reftestBlock());
7678
return 0;
7779
}
7880

test/common.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2209,7 +2209,21 @@ def make_reftest(self, expected):
22092209
# pngcrush -rem gAMA -rem cHRM -rem iCCP -rem sRGB infile outfile
22102210
shutil.copy(expected, 'expected.png')
22112211
create_file('reftest.js', '''
2212+
// We have some tests that don't perform rendering during `main` so
2213+
// the normal process of performing `doReftest` in `postRun` doesn't
2214+
// work. These tests can delay the call to `doReftest` by calling
2215+
// `reftestBlock` and then calling `reftestUnblock` once they have
2216+
// done their rendering.
2217+
var reftestBlocked = false;
2218+
function reftestBlock() {
2219+
reftestBlocked = true;
2220+
}
2221+
function reftestUnblock() {
2222+
reftestBlocked = false;
2223+
doReftest();
2224+
}
22122225
function doReftest() {
2226+
if (reftestBlocked) return;
22132227
if (doReftest.done) return;
22142228
doReftest.done = true;
22152229
console.log('doReftest');
@@ -2330,9 +2344,10 @@ def reftest(self, filename, reference, reference_slack=0, *args, **kwargs):
23302344
expected = [str(i) for i in range(0, reference_slack + 1)]
23312345
self.make_reftest(reference)
23322346
if self.proxied:
2333-
print("XXXX")
23342347
assert 'post_build' not in kwargs
23352348
kwargs['post_build'] = self.post_manual_reftest
2349+
create_file('fakereftest.js', 'var reftestUnblock = () => {}; var reftestBlock = () => {};')
2350+
kwargs['args'] += ['--pre-js', 'fakereftest.js']
23362351
else:
23372352
kwargs.setdefault('args', [])
23382353
kwargs['args'] += ['--pre-js', 'reftest.js', '-sGL_TESTING']

0 commit comments

Comments
 (0)