99 lines
5.3 KiB
Markdown
99 lines
5.3 KiB
Markdown
# 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 d’eau, de traversées et de structures sont calculés avant l’arrivé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 :
|
||
|
||
- À l’intérieur de `radius - 128`, le facteur d’érosion du bord est exactement
|
||
nul. Le bruit du bord n’est 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 l’ancienne 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 n’est supprimé ou différé, aucun cache disque n’est 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.
|
||
D’autres 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, l’interface 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 l’intégration et ne remplace pas le `check`
|
||
réussi dans l’espace isolé. Les classes optimisées du JAR intégré sont
|
||
identiques octet par octet à celles du serveur testé.
|
||
- Pas d’essai 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 n’est 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`.
|