Skip to content

j615 (MacBook Air 15" M3): Chrome trackpad scrolling stutters with no GPU faults logged, even at cap 5 #385

Open

Description

@omermuneer

Drafted by Claude Code from this machine's logs and posted at the owner's request. The stutter itself is the owner's observation. No frame times have been measured.

Mac and installed build

  • Model / board / SoC: MacBook Air 15-inch, M3, 2024 / apple,j615 / apple,t8122, 10 GPU cores (10 active / 10 slots)
  • uname -r: 7.2.11-14-1-ARCH
  • Packages: linux-aurora 7.2.11.aurora14-1, mesa-aurora 1:26.3.0_devel.20261031.231483.a1969111475-1, vulkan-aurora (same), m1n1-aurora 1.6.1.aurora22-1, uboot-aurora 2026.07.aurora6-1, asahi-scripts 20261023-1, omarchy-aurora-firmware 20261014-7, omarchy 4.5.0-3
  • These are the newest packages in the repo. Apple Silicon boot check: installed boot files match.
  • Local changes:
    • asahi.t8122_pstate_cap=5 on the kernel command line. This is above the default of 2, so the driver warns that states up to 5 run with no temperature feedback.
    • A locally built appledrm.ko for J615 brightness control, the same change as drm/apple: enable J615 panel brightness control #354. The kernel is tainted for that out-of-tree module.

Both firmware versions and provisioning

  • asahi,os-fw-version: 14.7
  • asahi,system-fw-version: 27.0
  • GPU firmware: T8122 C0, firmware-compat 14.8.3

Reproduction, expected result, and actual result

  1. Open YouTube in Google Chrome on the internal panel.
  2. Scroll with the trackpad.

Expected: smooth scrolling at 60 Hz.

Actual: scrolling is visibly not fully smooth. It happens during normal use, but the rate hasn't been counted.

Raising the GPU cap helped only partly:

Cap Owner's report
2 / 618 MHz (default) Not fully smooth
4 / 928 MHz Better, "could be a little better"
5 / 1056 MHz (highest accepted) Minor choppiness remains

No known-good build. This has only been seen on the builds above.

Graphics or session details

  • Active renderer: Apple M3 (G15G C0), Mesa. Internal panel 2880x1864@60, scale 2, VRR off, no direct scanout.
  • Hyprland 0.56.2 with no file capabilities (getcap is empty). It logs Got a high priority context.
  • Google Chrome 157.0.8103.38, Wayland, GPU process on renderD128.
  • Video decodes in software: Omarchy sets --disable-features=AcceleratedVideoDecoder on Apple Silicon. /dev/video0 (avd) is present.

Relevant error lines

No GPU fault appears this boot. Counts from 3h17m of uptime: page fault 0, timed out 0, flip_done timed out 0, vblank 0, underrun 0, and 0 asahi fault/timeout/halt/recover lines.

The only related signal is in hyprland.log. libinput rate-limits these lines, so the count is a lower bound:

[libinput] event0  - Apple MTP multi-touch: client bug: event processing lagging behind by 32ms, your system is too slow
[libinput] event0  - Apple MTP multi-touch: kernel bug: Touch jump detected and discarded.
[libinput] event0  - Apple MTP multi-touch: client bug: event processing lagging behind by 318ms, your system is too slow
[libinput] client bug: timer event0 hold: scheduled expiry is in the past (-54ms), your system is too slow
[libinput] event0  - Apple MTP multi-touch: WARNING: log rate limit exceeded (5 msgs per 60min). Discarding future messages.

The log has no timestamps, so these lines can't be tied to specific stutters.

/sys/kernel/debug/asahi-m3, cumulative since boot:

timing: render retirements=971430 active_ns=1673273838304 gpu_span_ns=876454964807 fragment_ns=750729049435
completion_wait: version=1 wait_us=100 notifications=1880721 sleeps=7590910 timer_wakes=6794474
  • Mean GPU span is about 0.90 ms per render, and mean active time about 1.72 ms. That is well inside a 16.7 ms frame, although means can hide slow outliers.
  • About 90% of completion-wait sleeps ended on the timer.
  • The firmware peak state reached the cap in 101 of 109 thermal summaries.
  • CPU temperatures stayed at or below 61°C in a short logged sample of about 4.5 minutes at cap 5. That sample wasn't a sustained scrolling load, and this board has no GPU die sensor.

Related issues, pull requests, or code examples

Main question: is this the desktop lag that #346 and #347 target, and should J615 test them?

Workaround tried: raising the cap to 5, as in the table above. An attempt at cap 7 was refused as expected (accepts 1 to 5, GPU startup disabled).

What was not tested

Activity

  1. contursofran commented on Nov 8, 2026

    @contursofran

    Drafted by Claude Code from this machine's logs and posted at the owner's request. The lag is the owner's observation; no frame times were measured.

    Second j615 with the same symptom, on the same packages, plus a desktop hang when Chromium's GPU rasterization was forced on.

    Mac and build

    • MacBook Air 15-inch, M3, 2024 / apple,j615 / apple,t8122, 10 active / 10 slots
    • uname -r: 7.2.11-14-1-ARCH
    • linux-aurora 7.2.11.aurora14-1, mesa-aurora 1:26.3.0_devel.20261031.231483.a1969111475-1, vulkan-aurora (same), m1n1-aurora 1.6.1.aurora22-1, uboot-aurora 2026.07.aurora6-1, asahi-scripts 20261023-1, omarchy-aurora-firmware 20261014-7, omarchy 4.5.0-3, hyprland 0.56.2-7
    • asahi,os-fw-version 14.7, asahi,system-fw-version 26.6.2 (yours is 27.0)
    • No asahi.* options on the kernel command line, so the default cap: runtime cap 2 (618 MHz) of 2..=2, logged with no SoC die temperature (no SoC die temperature zone) every 30 s.
    • Internal panel 2880x1864@60, scale 1.6, VRR off, no direct scanout. No out-of-tree modules.

    Lag

    • Browser: Helium 0.21.1.1 (Chromium 157.0.8103.38), Wayland, GPU process on renderD128 with system Mesa (libgallium-26.3.0-devel, libEGL_mesa), not SwiftShader.
    • Hovering cards on claude.ai and watching a live stream on kick.com lag visibly, and the pointer lags with them. The display exposes a single plane (Plane 35 has type 1, no cursor plane), so the cursor is composited and waits for Hyprland's frames.
    • At rest with that page open: renderer ~20–30 % CPU, GPU process ~13 %. CPU not throttled (balanced profile, schedutil, P-cores reach 4056 MHz).
    • No GPU fault, timeout or recovery lines on the current boot or the previous one.

    Hang with forced GPU rasterization

    To check whether CPU rasterization was the bottleneck, Helium was started with:

    --ignore-gpu-blocklist --enable-gpu-rasterization --enable-zero-copy
    

    The flags took effect: raster work moved from the renderer to the GPU process (~27 % CPU). The lag didn't improve, and about 4 minutes later the desktop froze:

    • 13:52:42 Helium starts with the flags
    • the kernel kept logging normally (the 30 s thermal line until 13:56:30, a firewall line at 13:56:38)
    • 13:56:47 at-spi2-registryd: Disabling unresponsive app
    • 13:57:10 power key, 13:57:15 macsmc-input: Triggering forced shutdown!

    The kernel log for that boot has no asahi fault, timeout, firmware-error or recovery line before the hang, so I can't tell whether it's the firmware halt from #174 / #90 or something else. The only asahi lines are the 30 s thermal summaries. The runtime switches were asahi.m3_unlocked_wait=1 asahi.m3_timeout_nohang=1 resume-after-fault=0. Since removing the flags (Chromium's default GPU path, CPU raster), there has been no hang.

  2. freber commented on Nov 13, 2026

    @freber

    Same symptom on a second J615. Scrolling in Chromium still isn't fully smooth at cap 5. Going from cap 2 to 5 helped here too, but it didn't fix it.

    • MacBook Air 15-inch, M3, 2024 / apple,j615 / apple,t8122, 10 GPU cores
    • linux-aurora 7.2.11.aurora16-1, mesa-aurora 26.3.0_devel.20261107, m1n1-aurora 1.6.1.aurora23-2, Hyprland 0.57.2
    • OS firmware 14.7, system firmware 26.6.2
    • Chromium 156.0.8078.79 on Wayland, internal panel 2880x1864@60, scale 1.6

    One difference from your setup is that my cap 5 runs with temperature feedback. #464 gives the J615 the J613's SMC die keys. Until it lands I'm running with them through macsmc_hwmon soc_die_keys=. This is what the governor logs during normal desktop use.

    asahi 292400000.gpu: M3: thermal: SoC die 58.3 C, runtime cap 5 (1056 MHz) of 5..=5, firmware peak state 5 since the last summary, raised 0 and lowered 0 times so far
    

    That log isn't from a scrolling run. The cap can't move anyway, since the range is 5..=5. The die read 58.3 C, so I don't think the stutter left at cap 5 is thermal.

    On an earlier boot (still at cap 2), a GPU client lost its device twice within three minutes during a Google Meet call in Chromium where I screen shared some basic 3D content. The machine has 23 GB of RAM. free -h showed 14 GB available a few minutes after the call.

    asahi 292400000.gpu: M3: cannot allocate 4096 KiB of GPU memory
    asahi: GPU work of a client failed (ENOMEM, reported at m3/m3_submit.rs:101); the client sees a lost device
    

    The call was slow from then on, which fits Chromium being that client and falling back to software rendering. I haven't checked chrome://gpu to confirm it.

    No libinput "your system is too slow" lines in hyprland.log this session (34 minutes of uptime). I haven't measured frame times. Tell me which tool you want for that and I'll run it on this J615.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions