diff --git a/build.gradle.kts b/build.gradle.kts index 0e0df9dbc6..2ea2561289 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -156,6 +156,17 @@ allprojects { if (isScreenshotTest) { // Increase heap size for screenshot tests maxHeapSize = "2g" + // Give every screenshot test class its own JVM. + // + // There are 5 screenshot classes (PreviewShard1..4Test + PreviewA11yTest) and each + // shard renders ~770 previews in a single process. Gradle reuses a forked JVM for the + // next class once maxParallelForks is exhausted, so on a 6-core runner (forks = 3) two + // classes run second, in a process that has already rendered a full shard — and they + // render differently from how the goldens were recorded. That is exactly the observed + // failure: shards 2 and 4 fail 100% while 1 and 3 pass 100%, deterministically, for + // byte-identical states. The 8-core runner (forks = 4) reused only one JVM and was green + // on the same tree. Restarting per class costs 5 JVM startups and no extra peak memory. + forkEvery = 1L // Record all the languages? if (project.hasProperty("allLanguagesNoEnglish")) { // Do not record English language