ANGLE Metal backend significantly slower for a Web-based game on Apple Silicon

104 views
Skip to first unread message

Jason Cao

unread,
Oct 30, 2025, 11:23:59 AM (7 days ago) Oct 30
to angleproject

Hello ANGLE team,

I’m playing a first-person shooter Web game hosted on: https://webcs.xyz/

Environment

  • Device: MacBook Pro with Apple M4
  • Compared backends:
    • Metal (default)
    • OpenGL
    • Windows + Edge via Parallels Desktop

Results Summary

macOS Chrome Metal: Very laggy / frequent frame drops, unplayable in fast-paced scenes

macOS Chrome OpenGL: Noticeably smoother, still not perfect but playable

Windows (Parallels) Edge D3D: Best performance, very smooth

Request

Since Metal is the official and preferred backend moving forward, could please:

Investigate why Metal backend has such severe frame stuttering and low performance for this WebGL FPS game
Help ensure macOS has similar performance to Windows for games like this


I can provide performance logs, GPU traces, screen recordings, or specific game configurations if needed.

Thanks for your excellent work on ANGLE! Looking forward to any insights or updates.

Ken Russell

unread,
Oct 30, 2025, 4:24:58 PM (7 days ago) Oct 30
to ieve...@icloud.com, angleproject
Hi Jason,

We'd need the ability to run the game to investigate why the Metal backend is performing poorly. When I visit the site it thinks I'm a bot.

Screenshot 2025-10-30 at 1.20.41 PM.png

-Ken


--
You received this message because you are subscribed to the Google Groups "angleproject" group.
To unsubscribe from this group and stop receiving emails from it, send an email to angleproject...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/angleproject/b5aafe97-8de3-4629-9739-650a2db76085n%40googlegroups.com.
Message has been deleted

Jason Cao

unread,
Oct 31, 2025, 12:37:18 AM (6 days ago) Oct 31
to angleproject

Hi Ken,

Thanks for your response, and sorry for the inconvenience. The website you tried to access is intentionally restricted to regions outside of China, which is why it flagged you as a bot. You can instead access our demo here for single-player testing:

https://play.webcs.xyz

Once the game resources finish loading and the main page appears, please click “新建游戏” at the bottom left and then “开始” to enter the game.

The environment is the same as the site I shared previously, and the performance issue with the Metal backend can be reproduced there as well.

Best regards,
Jason

Shahbaz Youssefi

unread,
Oct 31, 2025, 9:51:49 AM (6 days ago) Oct 31
to angleproject
Unrelated to metal: I gave this a try with both Vulkan and GL on Linux, and it runs smoothly. This seems very specific to the metal backend.

Ken Russell

unread,
Oct 31, 2025, 6:11:00 PM (6 days ago) Oct 31
to syou...@chromium.org, angleproject
Thanks for access to the game. I'm seeing worse behavior on an M3 MacBook Air than on an older M1 MacBook Pro. about:tracing profiles don't show much, and I'm not having success yet gathering profiles with Instruments and getting them sufficiently symbolized.

I filed https://issues.angleproject.org/issues/456739615 with restricted visibility in case you didn't want the game's URL posted in the issue tracker. Could we collaborate on this issue there? I'll try to get symbolized Instruments traces from Chrome to see what's going on at the native level - in particular, where in the Metal backend time seems to be going.



Vladimir Davidovich

unread,
Nov 3, 2025, 8:00:33 AM (3 days ago) Nov 3
to angleproject
Please unrestrict visibility if possible.
I've observed the same problem in my game, both Chrome and Safari (it uses ANGLE too as far as i know).
I think only indexed draws are affected.

Geoff Lang

unread,
Nov 3, 2025, 12:55:18 PM (3 days ago) Nov 3
to thy....@gmail.com, angleproject
I took a quick look with the CPU profiler. Looks like the performance loss is due to many buffer data updates to index buffers which need to be read back for index range validation. I'll see if this is necessary but the Metal backend struggles with frequent index buffer updates so consider if you can do fewer updates at the cost of more buffers.

Geoff

Ken Russell

unread,
Nov 3, 2025, 6:12:31 PM (3 days ago) Nov 3
to geof...@google.com, thy....@gmail.com, angleproject
I've unrestricted access to the bug since the URL already went out on this public mailing list. Thanks Geoff for profiling it and finding the bottleneck. In the Metal backend, can we shadow the contents of buffers bound to the ELEMENT_ARRAY_BUFFER binding point to avoid readbacks? If this is undesirable, could we do this only when the context is created with WebGL compatibility mode? In WebGL, buffers can only be bound to either the ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER binding points throughout their lifetime.

Thanks,

-Ken



Reply all
Reply to author
Forward
0 new messages