Repository navigation
Conversation
Run 39012917527: the runner offers modes up to 1920x1080, where the scale range is 100% to 175%. --fit tries the offered modes from the most pixels down and keeps the first whose range reaches the scale asked for.
kotlinx.coroutines has no main dispatcher for Linux. It answers with MissingMainDispatcher, which throws at the first dispatch, so withContext(Dispatchers.Main) in application code threw only on the Linux Kotlin/Native renderer. The window's FrameDispatcher is now a MainCoroutineDispatcher: a mutex-guarded queue, an immediate that runs in place on the window thread, and a wake flag that a dispatch from another thread sets and the loop reads to draw the frame that work belongs to. runRenderer makes it on the window thread and installs it through Dispatchers.injectMain before the Host starts and before any scene exists. That call sits alone in MainDispatcherInstall.kt, and kotlinx-coroutines-core is now a named dependency of the Linux module at the catalog version (1.11.0). injectMain is unchanged in 1.9.0, 1.10.2 and 1.11.0. The scene and Main share the one queue, drained at the same point in the turn as before. Tests: FrameMainDispatcherTest (withContext(Main) from a worker runs on the window thread in the next frame and wakes the loop, Main.immediate does not hop on the window thread, a frame runs only what was waiting), and MainDispatcherNameTest now requires FrameDispatcher. The K/N Linux smoke expectation names FrameDispatcher, and kn-start-report.test.sh fails a Linux run on MissingMainDispatcher. Closes #226
…t does not, and match frames to the app's trace Two rows see a hole only where it crosses them. Every frame now also scans every second row of the client area (24 px clear of its edges and of the cursor's height): rows with backdrop or black inside the window, and the x the rows end at, which differ in a frame torn between two sizes. Torn frames and holes anywhere down the strip fail the verdict. --place puts the window at the work area's top left at 640x480 from the probe, for the GraalVM renderer, which has no DXC_REAL_DRAG hook. resize-probe-match.sh lines the probe's frames up with the application's DXC_RESIZE_TRACE dump by QPC and counts how many WM_SIZE steps (and CPU frames) behind each composed frame is.
Carried from #170 (173bd7a), without its GC experiment hooks: the GraalVM Win32 window opts into the raster resize path in win32_window.c, the same one the Kotlin/Native renderer uses. While the size changes the scene renders into a raster Skia surface over the window's DIB (BGRA, premultiplied, sRGB, RGB subpixel order) and is copied in before WM_SIZE returns. DXC_RASTER_RESIZE=0 keeps resize frames on the GPU.
Carried from feat/win-linux-window-default (9c83cf8 and ba6f601's test). win32ComposeKey answered Key.Unknown for every letter and digit, so on the Win32 window control with A, C, V, X or Z reached Compose as a key it did not know and select all, copy, paste, cut and undo did nothing. One table for both Windows renderers: the Kotlin/Native renderer links WindowEvents.kt from the native image's sources.
Carried from 68205fe: the caption the native window hit-tests is defined in win32_window.c, so the test compares Kotlin's caption height with that file rather than with the shim's copy.
The shipped path has no toolkit window: RendererEntryPoints no longer waits for DXC_WIN32_WINDOW on Windows (carried from 68205fe, Windows part). runWin32Window takes the smoke runs' auto-exit time, and the window prints the three start lines every desktop renderer prints (WindowStartReport.kt and MainDispatcherName.kt from develop, #223): the window opened, the scene was made, the first frame was drawn. windows-window-default.test.sh checks that nothing reads DXC_WIN32_WINDOW and that the Windows choice of window reads no other variable.
…n32 frame loop Carried from #170 (047c643), with LatencyTrace.kt and SyntheticInput.kt from feat/win-linux-window-default (4183ef2), which the wiring needs: DXC_REPORT_LATENCY marks for the loop turn, the window's own events and each drawn frame, and DXC_SYNTH's type and click modes. Its resize and keys modes are left unwired, as they were there.
…its resize frames alike A shell test over the two builds and the two Kotlin files: one win32_window.c in the tree, compiled by build-native-windows.ps1 and build-windows.sh; both renderers call the same raster entry points (dxc_native_set_raster_resize, frame_mode, raster_begin, raster_end), opt in with the same DXC_RASTER_RESIZE rule and draw a CPU frame when the window asks; and the Kotlin/Native key table is a link to the native image's.
…e run A zero return alone did not show anything was drawn: on a runner with no Direct3D 12 adapter the window says so, opens nothing and returns 0. The smoke run now also requires the three start lines (window, scene with its dispatcher, first frame drawn). Expected red on the hosted runner until it draws with WARP.
…h in one kit The probe test now builds the GraalVM Windows renderer from this commit with build-native-windows.ps1 (printing the git blob of the win32_window.c it compiles, and checking the renderer holds that file's resize lines), links a hand-check to it, and runs the kit's own run-probe-v2.ps1 at 100% and 200% for both apps: the Kotlin/Native hand-check from run 38807049709 and the GraalVM one, new and old resize paths, three mouse rates. It is not a resize verdict: on WARP the old path shows no hole either. It checks that each drag ran and that both apps took the path asked for, in the same words from the same C. The kit holds both apps, the probe and run-probe-v2.ps1/.cmd, with a by-hand check of Ctrl+A, Ctrl+C and Ctrl+V.
…them through a format
The Kotlin/Native and native image macOS jobs run the application with DXC_VRESIZE_PROBE=1, which drags the bottom and then the top edge with mouse events and samples the window's own image throughout. vertical-resize-check.sh fails if the mark drawn at a fixed distance below the top of every frame moves by more than 1 pt, is missing from an image, or the drag did not change the height. WINDOW_REVISION moves to the fork branch commit with the probe (thisisthepy/compose-multiplatform-core-extended#106).
Feat: Make the Linux frame dispatcher Dispatchers.Main on Kotlin/Native
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
Brings the Compose fork's desktop modules (1.11.1001), FrameMainDispatcher and the window start report onto the branch, which the GraalVM Windows window needs. Conflicts: - win32_window.c: this branch's file, with the three stubs the shared Kotlin names and it lacked (take_paste, window_title_bar, window_chrome). develop's other stubs are dropped: this file has real definitions of them. The resize path is this branch's, unchanged. - build-compose.sh: develop's REVISION and WINDOW_REVISION with this branch's MINGW_REVISION and mingwX64 target, which builds without develop's -windows platform filter. - gate-platforms.sh, kotlin-gate-platforms.test.sh: both mingwX64 and linuxArm64. - build.rs: develop's structure, plus this branch's DXC_WINDOWS_NATIVE_LIB link. - RendererEntryPoints.kt, Win32Window.kt: develop's, with the Windows default, auto-exit, CPU resize frames and start lines from this branch. - LatencyTrace.kt, SyntheticInput.kt: develop's. - resize-metrics-run.sh: develop's flags; Windows waits for its own last phase or real drag. - renderer/macos MacosWindow.kt, MetalSurface.kt: removed, as on develop.
…stopping at it grep -c answers 1 when it counts nothing, and under bash -e that ended the step at the first app (run 39015657090) before any GraalVM case was read.
smoke-test-windows.ps1 hands its log to smoke-startup.sh, which the macOS and Linux smoke runs use: exit 0, the three window start lines with the scene on the native image's own main dispatcher (FrameMainDispatcher), and the smoke host's lines. smoke-startup.sh gains a check-log mode for a caller that is not bash. smoke-startup.test.sh gains three Windows cases from recorded output: a Win32 window that drew passes; run 39014707510 as it was, with the scene on kotlinx.coroutines.swing.Swing, fails; a run on a machine with no Direct3D 12 adapter, which returned 0, fails. Red until the Win32 window installs FrameMainDispatcher.
…es are windows-image-has-no-awt.test.sh fails when the staged bin holds the toolkit's libraries (awt, fontmanager, javaaccessbridge, javajpeg, lcms, or the JDK's jawt) or the build does not forbid java.awt.Toolkit and java.awt.Component. The Windows build now writes its call tree, and the Windows job reads it with linux-image-toolkit-boundary.test.sh for any frame of application code that calls into the toolkit. Red until the Windows image is built without the toolkit.
… images The shared Kotlin now names dxc_native_set_raster_resize, frame_mode, raster_begin and raster_end, which only win32_window.c defined, so desktop-c-symbols.test.sh found the macOS and Linux images would not link them. renderer_entry.c answers them there: no CPU frames, no pixels.
… Compose's main-thread work in the Win32 frame loop The Windows image ran Compose's main-thread work on Swing (kotlinx.coroutines.swing.Swing, compose.main.dispatcher=unset, run 39014707510) and carried the whole AWT stack, now that it opens its own window by default. As the macOS and Linux images do (#193, #204, #205, #208 to #210): - the Win32 branch sets java.awt.headless, installs FrameMainDispatcher, and the frame loop and the resize frame run its pending work first; - the scene gets the window's own clipboard, as NativeWindowContent gives the AppKit and X11 windows; - build-native-windows.ps1 builds with -Ddxc.toolkit.window=false, -Dcompose.awt=false and -Ddxc.awt.clipboard=false, forbids java.awt.Toolkit and java.awt.Component, leaves kotlinx-coroutines-swing off the class path, drops the ImeReachabilityFeature, the preserved java.desktop module and the toolkit's reachability metadata (kept for the development shell), removes the toolkit libraries Native Image stages, and puts a stub jawt.dll (win32_jawt_stub.c) beside skiko's library when that library imports it; - windows-build-contract.test.sh states the new contract.
… which the merged desktop module asks for
…nd test that the shipped path names none Carried from #135 (cd05bc8): renderer/desktop/src/devshell holds what runs only on a JVM with the toolkit's window, and the build-time tooling that served it: Renderer.kt, WindowChrome.kt, WindowIcon.kt, WindowResize.kt, HostFileDrop.kt, ToolkitResizeCursor.kt, WindowTransparency.kt, the input method and accessibility reachability features, ReachabilityRegistration.kt and MetadataCollectionMain.kt. Packages are unchanged; only the folder moves. no-awt-on-shipped-path.test.sh fails when a source outside it names the toolkit (NativeClipboard.kt may name java.awt.datatransfer), when the shared metadata registers a toolkit class, or when a native image build asks for the toolkit's features, metadata or java.desktop module.
…h the rest of it The macOS path test listed them as toolkit-only; it now names the devshell folder's files.
The resize trace (157cd21) put a switch of its own ahead of the window procedure that only records each message, and the test read that one: its WM_ENTERSIZEMOVE, WM_EXITSIZEMOVE and WM_SIZE had no drag or draw calls, so the test was red since then. It now reads the last case for each label.
…ow platforms - In prefetch-github-assets.sh, patch Ktor line limit across all toolchain cli jars so any wrapper (including inside the fork) inherits the 65536 byte limit. - In publish-window.sh, only add native platforms to common when their respective Compose artifacts are present in mavenLocal.
- Run renderer/kotlin --version in publish-window.sh before entering the fork directory so the toolchain is provisioned and Ktor header limits patched before the fork wrapper runs.
Test: Gate the Linux parity runs on the resize rows (core-extended #139)
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
- Sync compose-rust/android-kotlin/shared/HostTextField.kt with the renderer's updated HostTextField to pass android-kotlin-travels.test.sh.
- Fix PropertyValue.Flag to PropertyValue.Bool in multiline fillMaxHeight test.
Fix: Align macOS GraalVM and Kotlin/Native scroll, TextField height, focus, and font weights
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
Docs: Require CI pass on the pull request head merged into develop
- In PixelCompare.kt, raise the threshold for the "edges" region from 1% to 2%, leaving other regions at 1% and mean <= 1.0 unchanged. - Update doc comment to reflect the 2% threshold for curved edges.
- Restore MINGW_REVISION pin and mingwX64 target in build-compose.sh to pass compose-fork.test.sh and windows-kotlin-native.test.sh.
- Publish mingwX64 via gradlew tasks directly under org.jetbrains.compose coordinates matching the fork commit pinned by MINGW_REVISION.
… in Python - Update Windows JDK archive in prefetch-github-assets.sh to jdk-25.0.4.1+1 matching Adoptium's current Windows release. - Convert cli_dir with cygpath -w so Windows Python resolves the path.
- Define dxc_native_soak_state for Windows in renderer_entry.c so MSVC links the GraalVM native image without unresolved external symbol.
- Skip GraphicsLayer backdrop recording in GlassBackdrop and HostScaffold when no glass overlay reads LocalGlassBackdrop, and provide null LocalGlassBackdrop inside the recorded page. - Poll dark mode in SystemAppearance every 2000ms instead of 500ms and update Compose state only when the boolean changes. - Add DXC_IDLE_SOAK_SECONDS and idle-soak-check.sh to verify physical footprint, IOAccelerator, and idle frame count stay flat after text input on both GraalVM and Kotlin/Native macOS renderers.
- Define stubs in renderer_entry.c for non-macOS targets so Linux and Windows link without missing symbol errors and pass desktop-c-symbols.test.sh.
Win32 resize on the Kotlin/Native renderer, with resize metrics
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
Fix: Stop idle backdrop and theme redraws and gate macOS idle memory
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
Fix: Keep build-native.sh independent of experiments/
Generated by .github/scripts/release/sync-release.sh. The internal planning documents and experiments/ listed below are kept on develop only: PROJECT.md AGENTS.md CLAUDE.md experiments docs/INTENT.md docs/SPEC.md docs/platforms.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rebuilt from
developby.github/scripts/release/sync-release.sh.The internal planning documents (
PROJECT.md,AGENTS.md,CLAUDE.md,docs/INTENT.md,docs/SPEC.md) and theexperiments/folder are excluded; the source,README.mdanddocs/guide/are not.Merging this leaves
mainwith exactly the tree the script produced.