Skip to content

Rinku 3.0.4: чинит краш GUI на 26.2 и снимает несуществующий флаг Chromium - #32

Closed
KoSHeroff wants to merge 1 commit into
chore/deps-refresh-mc26-stablefrom
feat/rinku-3
Closed

KoSHeroff wants to merge 1 commit into
chore/deps-refresh-mc26-stablefrom
feat/rinku-3

Conversation

@KoSHeroff

Copy link
Copy Markdown
Member

Closes #28. Closes #31.

Ветка стоит поверх #30 — там переименование slug на rinku, без которого зависимость не резолвится. Base у этого PR соответственно chore/deps-refresh-mc26-stable, а не main. Мержить после #30.

Результат

26.2, preload-пул включён
Rinku 2.2.1 краш на 4-м цикле открытия GUI
Rinku 3.0.4 25/25 циклов, GUI проверенно открыт на каждом

Обходной путь с browser-preload-enabled=false из #31 больше не нужен.

Главное: мина была наша, не в Rinku

CefUtilMixin подмешивал в CefApp.startup флаг --use-gl=desktop, удалённый из Chromium несколько лет назад. Пока Rinku тянул старый Chromium, флаг проходил незамеченным. На Chromium 151 из Rinku 3 он валит CefApp.startup, CEF уходит в INITIALIZATION_FAILED, браузер не создаётся вообще:

IllegalStateException: Can't create client in state INITIALIZATION_FAILED
  at org.cef.CefApp.createClient(CefApp.java:405)
  at de.keksuccino.rinku.util.CefUtil.init(CefUtil.java:145)
     {mixin[webgui.mixins.json:CefUtilMixin from mod webgui]}

Это не миграция сломала мод — она подорвала то, что лежало в коде и рвануло бы при любом обновлении Chromium. Остальные флаги проверены и оставлены: --enable-gpu-rasterization и --disable-gpu-vsync валидны, --enable-oop-rasterization — no-op, но безвредный.

Миграция API

Было Стало
com.cinemamod.mcef.MCEF de.keksuccino.rinku.Rinku
com.cinemamod.mcef.MCEFBrowser de.keksuccino.rinku.RinkuBrowser
com.cinemamod.mcef.CefUtil (цель миксина) de.keksuccino.rinku.util.CefUtil
getTextureLocation() getTextureIdentifier()
mcef_version rinku_version

Обошлось 12 файлами механической замены: RinkuInitListener — функциональный интерфейс, поэтому лямбды scheduleForInit не тронуты; RinkuBrowser extends CefBrowserOsr, поэтому setFocus/getURL/executeJavaScript/loadURL/setZoomLevel наследуются; CefUtil.init() всё ещё зовёт CefApp.startup(String[]), так что @ModifyArg пережил переезд.

Обход апстримной непоследовательности упаковки

NeoForge-сборки Rinku 3.0.4 различаются между собой: у 26.2 классы лежат сверху, а у 1.21.1, 1.21.11 и 26.1.2 это jarJar-обёртки с настоящим модом внутри META-INF/jarjar/. В рантайме NeoForge распаковывает сам, а javac видит пустой jar. Сборка теперь компилируется против того, где реально лежат классы; опубликованный артефакт остаётся на runtime-classpath нетронутым. Стоит завести баг у Keksuccino.

Проверено

Все 7 таргетов собираются. End-to-end на 1.21.11-fabric и 26.2-neoforge, по 10/10: CEF инициализируется, страница грузится, мост инжектится, каналы page→game доходят до мода, GUI переоткрывается без краша, скриншот снимается.

Проверка гонялась стендом webgui-testkit — тем же, что нашёл исходный краш.

Fixes the 26.2 client crash: with Rinku 2.2.1 a GUI open/close loop died
on the fourth iteration with "Texture view Sampler0 (MCEF Browser
Texture 1x1) has been closed!", and on 3.0.4 the same loop runs 25 times
with the browser preload pool left enabled.

The API move is mostly mechanical — com.cinemamod.mcef.MCEF becomes
de.keksuccino.rinku.Rinku, MCEFBrowser becomes RinkuBrowser, the mixin
follows CefUtil to de.keksuccino.rinku.util, and getTextureLocation is
now getTextureIdentifier. Three things kept it small: RinkuInitListener
is a functional interface so the scheduleForInit lambdas are untouched,
RinkuBrowser still extends CefBrowserOsr so setFocus/getURL/
executeJavaScript/loadURL/setZoomLevel come along for free, and
CefUtil.init still calls CefApp.startup(String[]) so the GPU-flag
ModifyArg survives the move. mcef_version is renamed to rinku_version
since MCEF is gone from the project entirely.

CefUtilMixin no longer injects --use-gl=desktop. That flag was removed
from Chromium years ago; it slipped through while Rinku shipped an older
build, but against Chromium 151 it fails CefApp.startup outright, so CEF
reached INITIALIZATION_FAILED and no browser was ever created. It was
our own mine, not something the migration broke — any Chromium bump
would have set it off.

Rinku publishes its NeoForge builds inconsistently: 26.2 carries classes
at the top level while 1.21.1, 1.21.11 and 26.1.2 are jarJar wrappers
whose real mod sits in META-INF/jarjar/. NeoForge unpacks that at
runtime, but javac sees an empty jar, so the build now compiles against
whatever actually holds the classes and leaves the published artifact on
the runtime classpath untouched.

All seven targets build. Verified end to end on 1.21.11-fabric and
26.2-neoforge: CEF initializes, the page loads, the bridge is injected,
page-to-game channels arrive, and the GUI reopens without crashing.

Closes #28
Closes #31
@KoSHeroff

Copy link
Copy Markdown
Member Author

Поглощён #33.

Разделять их оказалось нельзя: миграция на Rinku 3 ломает runServer на 1.21.11-neoforge (тот же NoClassDefFoundError: Screen, что и на 26.x — Rinku 3.0.4 не dist-safe и там, где 2.2.0 была), а чинит это уже коммит про dev-сервер. Поэтому CI на этом PR красный, а на #33 зелёный. Оставлять в истории коммит с красным required-чеком смысла нет, так что всё едет одним PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant