Files
2026-09-15 09:29:11 +02:00

99 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STARTUP-01 — raccourcir la création de monde
Branche : `codex/initial-loading`. Minecraft **26.3-pre-2**, Fabric Loader
**0.19.5**, Fabric API **0.160.0+26.3**. Correctif local **beta.022**, préparé à partir du
chantier beta.021 ; publication et instance Prism distinctes.
## Problème observé
Les plans deau, de traversées et de structures sont calculés avant larrivée.
Le profil JFR du serveur de développement situe le coût surtout dans les bruits
Perlin du champ `PopulationIslandDensity`. Le message Minecraft `Time elapsed`
arrive après la planification : il sous-estime donc la création totale.
## Correctif
Les bruits restent identiques, mais leur évaluation devient conditionnelle :
- À lintérieur de `radius - 128`, le facteur d’érosion du bord est exactement
nul. Le bruit du bord nest pas nécessaire.
- À partir de Y140, le facteur d’érosion inférieur est exactement nul, même
avec les bruits à leurs bornes maximales. Le bruit du dessous est inutile.
- Lorsque ces deux conditions sont réunies, les bruits de sculpture et de
détail ne contribuent plus au champ, sauf dans lancienne variante à terrasses.
- À partir de Y320, avec le repère vertical normal, l’érosion haute vaut au
moins 2 pour un terrain borné à 1 : la densité de base vaut exactement -1.
Les corps flottants sont toujours ajoutés ensuite par `FloatingTerrain306`.
La variante historique 30.4, qui déplace le repère vertical, garde son calcul.
Aucun plan nest supprimé ou différé, aucun cache disque nest ajouté. Les codecs,
identifiants, graines et formats de sauvegarde restent inchangés. La suppression
de calculs doit conserver exactement les mêmes valeurs, pas une approximation
visuelle. Les essais utilisent uniquement des mondes de développement neufs.
## Mesures
Mac Apple M1, 8 Gio, Java Temurin 25.0.3, tas JVM 2 Gio. Profil de départ Moyen
724, graine 0, structures actives, nouveau dossier de monde à chaque essai.
| Mesure | Résultat |
| --- | --- |
| CPU de 441 colonnes, référence beta.021 | médiane 706,874 ms |
| CPU des mêmes colonnes, correctif | médiane 567,929 ms |
| Réduction de CPU sur ce travail | **19,66 %** |
| Création serveur finale, du lancement du serveur de test à sa disponibilité | **89 s** |
| Préparation finale du spawn seule, incluse dans ces 89 s | 4,578 s |
Le benchmark CPU utilise la graine 42, 183 456 densités par passage, un
échauffement puis trois paires alternées dans la même JVM. Les six empreintes
sont identiques : `d47c98ab8f10169c`. Il mesure du calcul de terrain, pas un gain
universel de 20 % sur la durée totale du lancement.
Le premier serveur profilé demandait 171 s, puis la première optimisation 132 s.
Dautres constructions et tests tournaient pendant ces essais. Le dernier essai
sans JFR atteint 89 s : ces trois temps ne prouvent pas à eux seuls une division
par deux du chargement. Ils excluent le lancement du client, linterface de
création, le réseau et le rendu graphique. La planification restante prend
encore du temps ; ce correctif ne rend pas la création instantanée.
## Vérifications réussies
- Référence beta.021 figée dans `StartupDensityReference` : **588 288 comparaisons
bit à bit réussies**, champs actuels et legacy27, capacités 5/10/20/100 et
graines 0, 42, -7228211907433324401. Colonnes traversant les seuils et
coordonnées positives/négatives, modes scalaire et volume.
- Mesure CPU alternée dans une même JVM, sur les mêmes 441 colonnes complètes,
pour distinguer le gain de calcul des variations de charge de la machine.
- `./gradlew check build assemblePack` réussit en **7 min 17 s**, avec les
sélecteurs ci-dessous : tous les contrôles purs et **10 tests serveur** réussis.
Couverture native : équivalence, mesure CPU, anciennes expéditions, plans
aériens, traversées, village et ruines asséchées.
- Le correctif testé dans `build/startup-lab` est intégré aux sources principales
après contrôle des empreintes avant modification. Les travaux préexistants
restent conservés. `build assemblePack -x :sanctuary:check` y réussit en 18 s :
cette seconde commande assemble lintégration et ne remplace pas le `check`
réussi dans lespace isolé. Les classes optimisées du JAR intégré sont
identiques octet par octet à celles du serveur testé.
- Pas dessai graphique ni de validation Windows pour ce correctif.
Commande de validation complète utilisée :
```sh
./gradlew check build assemblePack \
-PsanctuaryFocusedTests=startup,expeditions,aerial,transit,village,drained \
-PsanctuaryAerial24Tests=true -PsanctuaryTransit29Tests=true
```
Les preuves restent ignorées dans `build/startup-evidence/`,
`build/startup-check-build.log` et `build/startup-integrated-build.log`.
Le profil initial reste dans `build/startup-baseline-preserved.jfr`.
Le mod et le pack prennent ensemble la version beta.022. Aucun tag,
canal public ou installation Prism nest modifié.
Export local : [Sanctuary-beta.022.mrpack](../build/Sanctuary-beta.022.mrpack).
Intégrité ZIP, dépendances exactes, absence de tests et identité du JAR embarqué
vérifiées. Reçu : `build/startup-evidence/artifact.json`.
SHA-256 JAR : `53203075916e1f494e5cb73b6a28959170c7f9df26b6edd4746b3531d404f3d1`.
SHA-256 MRpack : `97545339b9f7c2465a8248e7fad018e694190ba5acf46aa38c3b40774aa55b56`.