mirror of
https://github.com/Droid-Deck/DroidDeck.git
synced 2026-11-11 11:01:07 +00:00
ci/python-tests-on-workstation-runner
37
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
e1987ca785 | chore: pin gamescope to the DroidDeck-Components p22 release (#2183) | ||
|
+1 |
3733c50902 |
feat: non-Adreno graphics stack (Venus, open driver pairs, gamescope patches) (#2029)
* Retain compositor resources when GPU completion is unconfirmed * Stop quarantined GPU callers before retries and mapped writes * Support Android hardware-buffer presentation over Wayland * Support PowerVR swapchains and linear image imports in Gamescope * Bundle verified PowerVR graphics components through existing build preparation * Detect and select the system Vulkan backend on PowerVR * Apply PowerVR Steam and game compatibility during normal launches * Show PowerVR support through existing driver and component controls * Update existing hardware guidance for system Vulkan support * Import the shared system Vulkan readiness check * Discover and propagate the actual PowerVR render node * Prune obsolete PowerVR runtimes after guest processes exit * Retain external DMA-BUF ownership after GPU quarantine * Name the PowerVR HAL selection explicitly * Isolate component UI tests from application startup * Cover the inherited FEX preset in PowerVR profile tests * Log test worker failures for CI diagnosis * Remove temporary test logging after diagnostic CI * Prefer system dependencies for the Android Vulkan loader * Capture raw stderr before test worker termination * Remove the temporary test worker crash probe * Import pinned DXVK recipe prerequisite from PowerVR PR570 Copy only the standalone build recipe, source pin, BC-format prerequisite and presentation-sync patch/check from wallentx/DroidDeck at |
||
|
|
5614bd5d5a | Add enhanced one-session diagnostic bundles | ||
|
|
bba40cd69c |
fix(desktop): a game's window follows its own window mode (#2094)
* fix(desktop): a game's window follows its own window mode Desktop games ran in a titled gamescope window whatever mode they asked for. gamescope now fills the desktop for a fullscreen or borderless game and matches the window size of a windowed one. * Use the p30 gamescope test build * fix(desktop): a windowed game too big for the desktop is maximised * fix(desktop): a decorated game window stays a window * Use the published gamescope p21 |
||
|
|
5cf69732ef |
fix(input): make a hardware mouse and keyboard work like a PC (#2053)
* feat(gamescope): a three way switch for relative mouse motion Games that confine the cursor and warp it back to read movement never reach the nested hints rule, so their aim stays bounded by the screen. The convar defaults to 0 and leaves that rule alone; 1 forces relative motion for the focused game, 2 keeps the pointer absolute even when the rule would apply. (cherry picked from commit |
||
|
|
951270bc8f |
gamescope: EA sign-in stays above the EA launcher's splash (#2037)
* gamescope: EA sign-in stays above the EA launcher's splash The EA app's Steam launcher shows the game's splash as a layered tool window, and the EA app, another process, opens its sign-in window topmost. gamescope took the splash as the sign-in's override window, so the splash was painted over the sign-in and became gamescope's keyboard focus window (Burnout Paradise Remastered). With patch 0126 a window from another process that is neither topmost nor transient for a topmost focus window is no longer an override candidate for it, as on Windows. map_win now also reads _WINE_HWND_EXSTYLE: gamescope only took it from a PropertyNotify, which it listens for from map on, so a style Wine set before mapping was never known. * gamescope: the topmost rule needs both windows' pids gamescope keeps a window's pid at -1 when XRes cannot name its client, so an unknown pid next to a known one is not evidence of two processes. Patch 0126 now applies the rule only when both pids are known. The patch carries function names in its hunk headers, and the test also checks that its map_win hunk reads _WINE_HWND_EXSTYLE into hasHwndStyleEx (a check of the patch text, not of a running gamescope). |
||
|
|
c5577478ca |
chore: remove source comments and unused code, translate every missing string (#1965)
* chore(i18n): translate every missing string in all locales Adds the 87 strings the bottom-screen Dashboard and in-game stats pages introduced to all 32 locales, plus the 51 older settings strings Japanese and the 50 Chinese locales were still missing. Every locale now has all 3456 translatable strings with the same placeholders as English. Also translates 36 entries that were still English where the language does not use the English word, and makes es-419 touch_app_id use the same %1$s placeholder as English. * chore(patches): drop comments from the lines downstream patches add Removes comment lines and trailing comments from lines our patches add, with hunk headers recounted. Lines that a later patch uses as context and the upstream backport 0123 are left as they are. The gamescope, FEX, proot and xodus series still apply to their pinned sources, and the patched trees differ only in those comments. test_hud_frames now finds the HUD writer by its first declaration. * docs: credit Greenlight, Better xCloud, viture-v2, GameNative and DiRTTelemetryErrorFix These were credited only in source headers and NOTICE files. * chore: remove source comments and unused functions Removes explanatory comments from first-party Kotlin, Java, C, C++, Rust, TypeScript, Python, shell, Gradle, CMake and workflow files. License and attribution headers stay, and vendored third-party trees, generated files and license files are untouched. A shellcheck directive is kept, and udevmon's fallthrough comments became fallthrough attributes. Syntax trees and token streams match the previous sources apart from the comments and Python docstrings. Module docstrings that argparse prints are kept, and device-smoke.sh prints the same --help text from a heredoc. Also removes 37 functions and 4 fields that nothing referenced. * chore: remove comments from the Syncthing integration and the latest main sources * docs: credit Syncthing and the syncthing-android fork * chore(i18n): translate the Syncthing strings in all locales The 107 strings the Syncthing integration added are now in all 32 locales. sync_web_path_locked names the Syncthing tab by its label. * docs: credit @xXJSONDeruloXx for the HUD metric readers The CPU, GPU load, thermal and battery readers come from their PerformanceHudView pull requests #777, #877, #991, #1406 and #1573. The FusionHUD credit line is unchanged. * docs: credit the HUD metric readers to @xXJSONDeruloXx's work |
||
|
|
110cfc28f8 |
feat: FusionHUD replaces the session HUD, with MangoHud's readings (#1743)
The session HUD is FusionHUD (Bannerlator's HUD) with every reading taken from the same source, and worked out the same way, as the MangoHud build that runs Steam's performance overlay in a DroidDeck session. - gamescope patch 0125 (gamescope-3.16.29-p19) shares the frame times that mangoapp reads (one per signalled commit of connector 0) in a ring named by DROIDDECK_HUD_FRAMES; the app reads it once per display frame and counts the compositor's frames when gamescope sends none. - MangoHud's rules: FPS over periods of at least 500 ms, frame time = 1000/FPS, 200-frame graph on a fixed 0-50 ms scale; CPU, GPU, temperatures, RAM, swap, VRAM and battery from MangoHud's sources. Zones 22/26/28 are typed as GPU and DDR sensors, so Steam's overlay CPU temperature no longer includes them. - Five sizes in a panel shaped like the DroidDeck mark, with a centred header, one left edge, neon outline and FPS; Minimal is the default size. Settings on a new "Performance HUD" drawer page, with Bannerlator's options. - The HUD reads sensors and polls frames only while it is drawn (not while hidden, in picture-in-picture or behind another app), keeps its place after picture-in-picture, and the diagnostics export has its own reader. Device-tested on the AYANEO Pocket FIT: same readings as Steam's overlay side by side in Dead Cells; the HUD updates in a game, hides in picture-in-picture and comes back in place, no crashes. |
||
|
|
8c4f97a170 |
perf(gamescope): p18 – handle a finished frame in one loop pass (#1706)
0123 backports upstream 0efe47c and 666c52b by Matthew Schwartz (commit completion list lifetime, no Rc to a dying commit). 0124 polls a new commit's fence at import; a finished frame is marked done at once and handled in the same steamcompmgr pass instead of a second wake through the image waiter. commit_ready_check (default on) turns it off. Pins gamescope 3.16.29-p18 (0123 + 0124). On the AYANEO Pocket FIT about 81 % of commit fences are ready at import; gamescope-xwm 22-26 % -> 16 % of a core, gamescope_img 10-11 % -> under 2.5 %. |
||
|
|
b5cc6dd185 |
perf(gamescope): skip the repeated window lookup and wake on host events (#1672)
The WSI layer sends override_window_content on every present, and gamescope walked the X tree to the top-level window (a blocking XQueryTree round trip per level, under the wlserver lock) before noticing the same swapchain already overrides it. A swapchain repeating the same window now skips the walk for 100 ms (0121). Backport of upstream gamescope 2962992 by Matthew Schwartz: the nested Wayland backend's input thread reads the host display, but steamcompmgr does not watch that fd, so buffer releases and presentation feedback could wait up to one refresh for its next poll; the input thread now wakes it after each read (0122). Pins gamescope-3.16.29-p17, the archive that was A/B-tested on the device. PATCHES.md also describes the p16 change to 0120. |
||
|
|
43a0ce93f9 |
fix: Frame Limit sync and refresh follow on a still screen (review follow-ups) (#1663)
The Steam helper checked the Frame Limit only when the offered frame rates changed. With the limit off during a refresh change, turning it back on left a value the new rate does not offer, and a failed write was not tried again. It now checks on every state change and every 5 s, and waits for Steam's settings write so a rejected write is caught and tried again on the next check. gamescope 3.16.29-p16 (0120 changed): gamescope took a new host refresh only from the presentation feedback of a frame it drew, so with nothing moving on screen it kept the old rate. It now presents once when the host's wl_output mode changes and keeps presenting while a new rate is pending, so the 300 ms check runs on a still screen too. Found by CodeRabbit in the reviews of #1650 and #1663. |
||
|
|
4c7e59ed8b |
feat: Steam's Frame Limit decides; gamescope and the limit follow the refresh rate (#1650)
Remove the Performance mode switch. The session always runs the way Performance mode did: replaced buffers go back to the game at once (except while mirroring to glasses), gamescope's WSI layer and winex11 reuse their per-present window checks, and games get eight swapchain images while uncapped. Steam's Frame Limit in the Quick Access menu is the only limit. gamescope 3.16.29-p15 (p14 plus two patches): - 0119: with the Frame Limit on, gamescope forces FIFO while the WSI layer hands the driver MAILBOX, so a game with eight images could queue up to seven frames ahead of the screen. While the limiter forces FIFO the layer uses its default of 3 images; DXVK and VKD3D-Proton recreate their swapchain when the limiter changes, other apps are asked to with VK_SUBOPTIMAL_KHR. - 0120: -r fixed gamescope's pacing and limiter rate for the whole session. With GAMESCOPE_NESTED_REFRESH_FOLLOWS_HOST=1 a rate the host has reported for 300 ms replaces it (a switch from 144 to 120 Hz passes through 72 Hz for a few frames), and Steam gets the display information again. The session sets it whenever it passes -r. Steam keeps its Frame Limit as the client setting gamescope_app_target_framerate and offers the values gamescope's display state lists. After a refresh change, a limit the new rate does not offer (72 at 120 Hz) left the slider on its first value while the game kept the old limit. The Steam helper watches the offered values and, once they settle, keeps the limit when it is still offered and moves it to the highest value otherwise, through Steam's own setting so the slider shows it. Steam's webpack does not expose its module cache, so the gamescope service is found by the calls its module makes, and the helper retries the install every 10 s until Steam is ready. The session window asks for the fastest mode the peak refresh setting allows and chose again only when the display changed, so after it had asked for 60 Hz, raising Android's refresh setting left the display, gamescope and the limit at 60. It now also chooses again when peak_refresh_rate or min_refresh_rate changes. |
||
|
|
73daaf7adc |
fix(gamescope): keep Fill scaling and magnification visible (#1634)
* fix(gamescope): preserve signed plane positions * fix(gamescope): pin validated scaling component |
||
|
|
38926b3157 |
feat: Performance mode puts frame pacing and per-frame window-check fixes behind one switch (#1563)
Adds a Performance mode switch under Mode settings > Frame rate, off by default and stored per mode like the frame limit. Off keeps today's behaviour. On: - with no frame limit, the compositor hands buffers back to the game as soon as they are replaced instead of once per refresh, and gamescope's WSI layer is asked for at least 8 swapchain images; a chosen frame limit still paces - DROIDDECK_WSI_BYPASS_CHECK_MS=100 lets gamescope's WSI layer reuse its present-time Xwayland bypass check (patch 0117, gamescope-3.16.29-p13); WINE_OFFSCREEN_CHECK_MS=100 does the same for winex11 once a DroidDeck-Proton release carries that fix. Off sets both to 0. The gamescope pack now ships the patched WSI layer and SessionFiles stages it over the runtime's stock copy. Two per-game options, off by default: PROTON_DXVK_D3D8 and WINE_D3D_CONFIG renderer=vulkan|gl. AIO Graphics Test on an AYANEO Pocket FIT (Adreno 750), off -> on: Vulkan 204 -> 1787, OpenGL 296 -> 2169, D3D12 308 -> 3563, D3D11 1133 -> 2874, D3D9 1253 -> 3098 fps; DiRT Showdown 92.2 -> 93.4 (GPU-bound). |
||
|
|
d60f683b62 |
fix(gamescope): release cursor SHM buffers during long sessions (#1189)
* fix(gamescope): avoid retaining pointer cursor SHM commits * test(gamescope): verify cursor release and pending window control * test(gamescope): keep live probe inert during test discovery * test: match Gamescope process name in cursor probe * test: clarify cursor-role probe serial behavior --------- Co-authored-by: siyuan.qsy <siyuan.qsy@alibaba-inc.com> Co-authored-by: xXJsonDeruloXx <danielhimebauch@gmail.com> |
||
|
|
2111197bea |
perf: performance overlay updates ride the next game frame instead of an extra composite (#1274)
* perf: performance overlay updates ride the next game frame instead of an extra composite * gamescope: a held overlay repaint is only cleared once an output was painted * gamescope: release.env points at p12 |
||
|
|
fed9474539 | Show controller-driven cursors in nested Wayland sessions (#759) | ||
|
|
aecd2ebe1d | cleanup (#764) | ||
|
|
93352da1d0 | fix: pace gamescope's fixed-refresh frame limiter per window by time (#753) | ||
|
|
6eda278d9b | fix: backport upstream gamescope fix for games left behind Steam's loading screen (#401) | ||
|
|
82ad9330d0 | fix: revert gamescope patch 0113 now that games run on their own Xwayland (#372) | ||
|
|
33fe6edd0d | chore: stage gamescope-3.16.29-p5 | ||
|
|
df7ba1fead | fix: skip the pointer warps that jolted the game as the QAM opened and closed | ||
|
|
e8c69a89a2 | fix: keep the game running behind the Steam menu and QAM, as on a Steam Deck | ||
|
|
d1dcf2974c | gamescope-3.16.29-p4: restore a game minimized behind the Steam menu (patch 0112) | ||
|
|
f50d775912 |
Restore a game that minimized itself behind the Steam menu
The Steam menu is an overlay that takes input without changing gamescope's focus window. A fullscreen wine game minimizes itself when it loses input, and gamescope only takes a window out of iconic when the focus window changes, so after Resume the game stayed minimized: a black screen with its caption in the top-left corner (Titanfall 2 on GE-Proton 11, proven on device). gamescope patch 0112 remembers the iconify request and puts the window back to NormalState before input returns to it, then hands focus over again so wine restores and activates it. The session script also asks gamescope to restore the game once input comes back from the client (GAMESCOPE_RESTORE_FOCUS_WINDOW); BL_RESTORE_ON_RESUME=0 turns that off. |
||
|
|
72e4147449 |
perf(gamescope): ask X for the pointer only while a cursor is drawn
The gamepad-cursor port queried the X pointer on every vblank, a blocking round trip to Xwayland on the paint thread. With no cursor image the position comes from wlserver as upstream; while the cursor is hidden for inactivity X is asked every 50 ms. The realtime-queue comment now says it is a no-op on KGSL Turnip. |
||
|
|
126410a05a | gamescope: stage 3.16.29-p3 (0111, pointer warps in Passthrough) | ||
|
|
18e6d8a942 |
gamescope: the nested pointer moves Steam's pointer in Passthrough too
In touchpad mode the cursor moved but Big Picture highlighted nothing and a tap-to-click selected nothing: the nested pointer's motion reaches wlserver as touch 0, and in Passthrough (the touch mode Big Picture sets) a motion for a touch that is not down moves nothing, so the X pointer stayed where it was. 0111 passes bAlwaysWarpCursor, as the other touch modes already warp. |
||
|
|
0c06ede8d3 | gamescope: stage 3.16.29-p2 (0110, touch from the host) | ||
|
|
62687b8680 |
gamescope: take the host's touch in the nested Wayland backend
3.16.29's Wayland backend bound only wl_pointer and wl_keyboard; touch from DroidDeck's compositor was never read, so Steam could not be touched. 0110 binds wl_touch in the input thread and feeds each finger to wlserver_touchdown/touchmotion/touchup, the Steam Deck touchscreen's path, so Big Picture's Passthrough touch mode gets real touches. |
||
|
|
ae6dcc9798 |
Rename the app SteamDeck → DroidDeck
App name, app ID and code package: DroidDeck, com.droiddeck.launcher (sources moved to com/droiddeck/launcher, the 68 JNI functions renamed with them). The new app ID installs beside SteamDeck rather than over it. Everywhere the name was the app's own: the sidebar title, the session report, share zips, the shell title, wake-lock and log tags, User-Agents, the Compose theme, the Download folder and switch files (droiddeck-env, -osc, -driver, -tu-debug, -no-pad, -pad-log, -no-hud, -wlr-renderer; the old names are not read), and inside the runtime (droiddeck-desktop, Firefox's droiddeck.js, the shortcuts tag, the rumble socket, debug and cache paths). Build scripts, CI artifact (droiddeck-apk), CMake project, README and the progress log follow. Kept on purpose: Valve's Steam Deck (the -steamdeck flag, steamdeck_publicbeta/stable, 'Steam Deck mode', the steamos.cloud package URLs) and names inside the hosted desktop package (steamdeck.png, steamdeck-steam, steamdeck-bigpicture). 'Desktop installed' now tests for labwc instead of the launcher the app stages itself. A committed __pycache__ .pyc is removed. |
||
|
|
5b54bcfa49 | gamescope: the apk carries build gamescope-3.16.29-p1 | ||
|
|
f764885ecf | gamescope build: apply the patches from the checkout Arch's prepare() leaves us in; concrete mirrors ahead of the redirector | ||
|
|
b0a52ef71f | gamescope build: makepkg -A, the PKGBUILD names x86_64 only | ||
|
|
9841899cff | gamescope build: pacman without its download sandbox inside the container | ||
|
|
687b882983 |
gamescope: a build of the runtime's 3.16.29 with Armada's ARM64 client fixes and a realtime-queue switch, from Arch's own package in CI
Four of Armada's patches apply to 3.16.29 as they are (appid-focus fallback, ARM64 night mode, ARM64 colour-temperature slider, P3 red); two more are ported by hand: realtime-priority Vulkan queues on GAMESCOPE_FORCE_VULKAN_REALTIME=1 without CAP_SYS_NICE, and the gamepad cursor sprite following the X pointer. build-gamescope.yml builds Arch Linux ARM's package with them in an Arch container, checks every NEEDED library against the runtime's own list, and publishes the binary as a release asset for the apk to stage over /usr/local/bin/gamescope. |