swung0x48
01a33dfc58
[Docs] (P11): B0 tests the cross-app client as a retrace client in one app against a render server in another - no Termux route; the fallback channel is a bound Service in the server app handing over a socketpair end
2026-09-29 07:23:41 -04:00
swung0x48
93a72678ca
[Docs] (P11): B is scheduled - the consumer is a GL program started from another app on the same device (Termux and the like); B0 probes a cross-app fd channel, B1 moves such a client onto shared-memory segments, B2 adds the T0 import
2026-09-29 07:23:41 -04:00
swung0x48
3cb3e32b87
[Test] (P11 M): ImageBindableRemintScenario pins a barrier before its imageLoad copy - the kept-allocation case read the pre-clear upload once on push-monolith under load, the ID-P9-11 shape
2026-09-29 06:47:11 -04:00
swung0x48
89f1e6cfba
[Test] (P11 M): P4aFinalFixScenario expects no re-mint count on the monolith arm either - dev's 568090f0 keeps an immutable, unwidened allocation there as the server already did
2026-09-29 06:47:10 -04:00
swung0x48
2c7d99d5e8
[Test] (P11 M): the server half of a split eglSwapInterval - Magma's backend object carries the request into its table's SetSwapInterval (null before dev@c60639db)
2026-09-29 06:33:36 -04:00
swung0x48
9cde08064c
[Test] (P11 M): dev's ImageBindableRemint and PartialUploadOverGpuContent scenarios on the Split/Spawn/Tcp arms of both backends, three scattered-upload cases for the handle arm's carried layout, and TextureRemintPullScenario's monolith Espryt skip retired
2026-09-29 06:30:54 -04:00
swung0x48
48a306025d
[Fix] (Espryt, P11 M): the push builds' monolith re-mint merges the applier's pending boxes over the GPU readback - the client clears its dirty flags at emission there, so a pending glTexSubImage was read back over and lost
2026-09-29 06:30:54 -04:00
swung0x48
e0102bad8c
[Merge] (P11): dev@c60639db - the Espryt image-bindable re-mint reads GPU levels back on the monolith arm too, partial writes into converted or reshaped levels upload only their region on every arm, Magma orders an upload after the recording's writes and queued clears, and Magma's eglSwapInterval reaches the swapchain
2026-09-29 06:15:56 -04:00
swung0x48
ffeed0da3a
[Docs] (P11): the re-scoped plan - each roadmap item against the tree at 74ae652e; A makes the adopt tier honest (client-side verdict, the Stream refusal, a tier assertion, three arms) and re-runs open question 3 and the baseline on the device, B (T0) is conditional, C closes by docs
2026-09-29 05:52:51 -04:00
swung0x48
c60639db1d
[Fix] (Magma): eglSwapInterval reaches the swapchain - 0 picks IMMEDIATE, else MAILBOX, else FIFO; >= 1 FIFO; < 0 FIFO_RELAXED, else FIFO; rebuilt after the next present when the mode changes (MC 26.3 vsync on: 190-290 fps -> 120)
2026-09-29 05:51:18 -04:00
swung0x48
74ae652ecd
[Docs] (P10): close the phase - CONTRACT-P10 sections 2-3, rulings ID-P10-1..14 with the integration gate, C-MEASUREMENTS (device fence bench, loopback credit 1/2/3, the retrace round-trip census), the roadmap row, the debts P10 hands on, design/09, the phase README and the status page
2026-09-29 05:29:00 -04:00
swung0x48
414dd09bda
[Test] (P10): the fence bench comment - the replay corpus does carry timed fence waits (improved-transparency-minecraft-26.3), the bench isolates the shape
2026-09-29 05:29:00 -04:00
swung0x48
47bbf5e6fd
[Docs] (P10 A): CONTRACT-P10 section 1 - the fence-report protocol, the present-time report, the gates and red-once - with the re-scoped plan and A-FENCE-POLL, the paired host bench and the llvmpipe finding
2026-09-29 04:34:16 -04:00
swung0x48
73089cf2b3
[Test] (P10 B): the caps mirror's parallel-shader-compile entry is the client's switch in both directions - the extension-list read-back case pins compilation inline, and a new case holds the reconcile (red once with it removed)
2026-09-29 04:34:02 -04:00
swung0x48
80d205c401
[Refactor] (Remote, P10 B): the emit table's SetSwapInterval slot is the server forwarder - SetSwapInterval_Unmigrated and the BackendObject_Remote override deleted, class C empty (69 emitted / 0 unmigrated), and a unit control that the slot crosses as one control frame
2026-09-29 04:34:02 -04:00
swung0x48
4373964443
[Test] (P10 B): AsyncCompileScenario (AsyncOn/AsyncOff/OptimisticShaderStatus), XfbPrimitiveQueryScenario and PrimitivesGeneratedNoXfbScenario on the split arms of both backends - Espryt Split/Spawn/Tcp, Magma Split/Spawn/Tcp gated, PrimGenReroute split+spawn only
2026-09-29 04:34:02 -04:00
swung0x48
2271f6c1ec
[Fix] (Remote, P10 B): GL_KHR_parallel_shader_compile follows the client's compile switch - the caps mirror re-derives it on adoption, so a tcp server started with another MOBILEGL_ASYNC_SHADER_COMPILE no longer decides the client's string
2026-09-29 04:34:02 -04:00
swung0x48
8d0a1b6ca5
[Test] (P10 A): PacedFrameFenceWaitsBench - the per-frame timed wait on an older frame's fence as an opt-in measurement (MGITEST_FENCE_PACE_BENCH, _LAG) on both backends
2026-09-29 04:29:49 -04:00
swung0x48
625f4db47d
[Feat] (MG_Remote, P10 A): a present reports the fences finished so far before it returns the credit, so the client the credit releases finds the fence of a frame ago already known
2026-09-29 04:29:49 -04:00
swung0x48
b1d60523e4
[Fix] (Magma): an upload into an image the open recording already wrote, or that still has a queued clear, is submitted after that work - a glTexSubImage after a clear or a draw into the level no longer ends up under it
2026-09-29 04:28:55 -04:00
swung0x48
8966d5c294
[Fix] (Espryt, Magma): a partial write into a level whose upload is converted (widened RGB formats, Magma's RGB->RGBA expansion) or reshaped (Espryt 1D arrays) uploads only its dirty region - the rest of the stale shadow no longer lands over GPU-drawn texels
2026-09-29 04:28:22 -04:00
swung0x48
bcff9b00cc
[Feat] (MG_Remote): fence polls are answered from the server's reports - the apply thread posts kEventFenceSignaled as the GPU finishes each client fence (and submits and re-checks while idle), glClientWaitSync(0) / glGetSynciv answer locally, and only every MOBILEGL_IPC_POLL_ESCALATE-th unanswered poll crosses
2026-09-29 03:59:44 -04:00
swung0x48
de33d40173
[Docs] (P9): close the phase - the contract's remint section and invariants, rulings ID-P9-11..12 with the integration gate, the roadmap row, the debts P9 hands on, the phase README and the status page
2026-09-29 03:36:45 -04:00
swung0x48
7aa00761f8
[Docs] (P9 W2): W2-REMINT - no pull protocol, the census, the coverage matrix and the red-once record; design/04 8.4, the P5c/P5e contract amendments, open question 2 and the P7 census attribution
2026-09-29 03:24:03 -04:00
swung0x48
aa0c242b51
[Test] (P9 W2): TextureRemintPullScenario - fourteen re-mint cases on both backends x monolith/Split/Spawn/Tcp, and the forced-readback-failure fallback entries
2026-09-29 03:23:54 -04:00
swung0x48
6c2f8a560c
[Fix] (Espryt, P9 W2): a texture re-mint never needs the client - read back only levels the driver holds, replay the staged level when the readback is refused, count trp on the server path, and retire the texture-remint-pull markers and OnTexturePullRequest (callbacks 9 -> 8)
2026-09-29 03:23:54 -04:00
swung0x48
568090f09f
[Fix] (Espryt): the image-bindable re-mint reads every level back from the driver texture before replaying it, so GPU-written levels survive the first glBindImageTexture - iris-derivative SSIM 0.996196552 -> 0.996376198
2026-09-29 03:06:45 -04:00
swung0x48
738b29f3e4
[Docs] (P9): the contract's first three sections (pack-buffer readback, graded log forwarding, the glGetError observation point), both fault injections, the W1 note with its red-once evidence, and rulings ID-P9-1..10
2026-09-29 03:03:03 -04:00
swung0x48
a7a82ffee5
[Test] (MG_Remote): P9 W3 - LogForwardTest leaves no role logs in /tmp on a green run
2026-09-29 02:42:20 -04:00
swung0x48
24560ffe81
[Fix] (MG_Remote): P9 W3 - a FATAL forward waits once per stall rather than once per line (MGLOG_F also marks survivable conditions), and F2 proves the flood got through on a live connection, inside TCP_USER_TIMEOUT
2026-09-29 02:42:20 -04:00
swung0x48
6bcfb1fba1
[Feat] (MG_Remote): P9 W3 - the server's log forward carries each line's level and never blocks a logging thread (<=WARN dropped and counted, >=ERROR lossless and paced, FATAL a bounded flush), fault injection F2, and the producerless OnLog callback deleted (9 -> 8)
2026-09-29 02:42:20 -04:00
swung0x48
362daafeed
[Fix] (MG_Remote): the pack-buffer readbacks check their whole shape before the read and refuse it at one latch site per sink, each with a raw-peer control, and a verb counts as statically barriered only when every op that stamps it waits
2026-09-29 02:21:36 -04:00
swung0x48
6485ae1dc0
[Feat] (MG_Remote): a read into a pixel pack buffer crosses as read_pixels_to_buffer / get_texture_image_to_buffer and waits for nothing - the server lands the rows through the buffer-write gate on both backends, the client marks the buffer GPU-written, and a device lost with the write still owed ends in Fatal{ReadbackDeclined, "buffer-writeback"}
2026-09-29 02:02:29 -04:00
swung0x48
ad705a7392
[Docs] (P9): the implementation hand-off - the roadmap row checked against the tree (half of it is done, one design premise changed), five work packages and two fault injections
2026-09-29 01:23:58 -04:00
swung0x48
acfd367852
[Docs] (P12): the FCL fork's keep-running setting is committed and pushed
2026-09-29 01:10:19 -04:00
swung0x48
743f4e8e6e
[Docs] (P12): close the phase - the contract, the disposition of every leftover item, a G1 line that only compares same-machine builds, and the doc citation the docs reshuffle broke
2026-09-29 01:05:45 -04:00
swung0x48
6e35ea2c02
[Docs] (P12): the portrait-window clipping was the 0x0 window request, not Magma - root cause, fix and evidence
2026-09-29 00:54:46 -04:00
swung0x48
c932af7f3c
[Fix] (EGLImpl): a server-owned window surface with no EGL_WIDTH/HEIGHT asks for the native window's size, so a landscape game is no longer clipped in a portrait server window
2026-09-29 00:54:46 -04:00
swung0x48
8a71ea5954
[Docs] (P12): exit gate (a) passes - FCL's Minecraft renders into the render server window on both backends and killing the server latches device-lost in tens of milliseconds
2026-09-29 00:27:29 -04:00
swung0x48
984e2b69f4
[Feat] (tools): the FCL exit-gate driver - Minecraft renders into the render server window, then the server is killed
2026-09-29 00:27:28 -04:00
swung0x48
f2ad2fae9b
[Fix] (MG_Remote): once the device-lost latch has spoken, declined verbs no longer log one ERROR line each - an FCL game wrote 113,080 of them in 48 s
2026-09-29 00:27:28 -04:00
swung0x48
27cbc53241
[Docs] (P12): exit gate (b) passes - a WSL client replays the in-world trace over Wi-Fi TCP at ssim 0.999883; the load frame is bandwidth-bound, the steady state is latency-bound
2026-09-28 23:22:06 -04:00
swung0x48
b60da6729d
[Feat] (tools): the cross-host acceptance driver and its report reducer, and a note that netbench's nc sink understates the link
2026-09-28 23:22:05 -04:00
swung0x48
b4f0c53426
[Docs] (Disaggregated): the cross-host eglMakeCurrent hang was the host's xray TUN proxy stalling its relay, not MobileGL; direct Wi-Fi runs pass and are bandwidth-bound
2026-09-28 22:57:20 -04:00
swung0x48
429b4472bb
[Fix] (tools): cross-host runs first prove the WSL -> phone TCP path is end to end, and netbench's pkill no longer kills its own shell
2026-09-28 22:57:20 -04:00
swung0x48
221a8144c2
[Docs] (Disaggregated): sync stage progress and roadmap with the five-arm perf comparison and the cross-host hang blocker
2026-09-28 22:33:53 -04:00
swung0x48
1987bdff5c
[Feat] (Android): the render server screen and binary ship in the plugin APK too, not just trace
2026-09-28 22:10:56 -04:00
swung0x48
2fa58940e4
[Fix] (ci): the trace APK is a launchable app; assert exactly one launcher activity
...
The "Trace APK must not expose a launcher activity" check predates the render-server
screen: 1f72597dd gave the trace APK a launcher on purpose and 884f6aac9 moved the entry
icon back to PostActivity with a bottom navigation bar between the two screens, so the
apk.yml build job has been red ever since - taking the whole retrace matrix down with it
(skipped, not failed), which hid the distinction.
What is left of the old isolation contract is the count: exactly one
android.intent.action.MAIN in the merged manifest (a second one means a screen grew a
launcher entry by accident), and it belongs to PostActivity. The fclPlugin metadata ban is
unchanged.
2026-09-28 21:54:16 -04:00
swung0x48
35dddc0c89
[Fix] (MG_Remote): the socket-io stats are LinkMetrics free functions, not StreamLink members
...
6bccf98d7 put TakeSendStats/TakeReadStats on the concrete StreamLink class, so
ClientSession.cpp and ServerLoop.cpp had to include <MG_Remote/Transport/StreamLink.h> -
which the P6.5 seam gate (scripts/ci/link_seam_purity.py, "concrete link included above
Transport") rejects, and the MGPipe generators and hygiene gates job has been red since.
The counters stay in StreamLink.cpp beside the recv/sendmsg loops that feed them; only the
struct and the two Take functions move, to LinkMetrics.h as LinkIoStats +
LinkMetricsTakeReadStats/TakeSendStats. The readers drop the concrete include; the hot
loops are untouched.
2026-09-28 21:54:08 -04:00
swung0x48
3bdd565dc6
[Chore] (docs): Remove orphaned CS_Refactor notes accidentally committed in 4e48702f2
2026-09-28 21:16:35 -04:00