通过连续的 DWM 合成活动消除了 Playnite 框速缓冲问题
作者: PeakyBlinder71创建于 2026年8月22日更新于 2026年8月25日
标签bug
问题描述 我正在开发一个自定义的 Playnite 全屏主题,并在水平游戏覆盖移动过程中遇到了可重复的帧速度调整/微卡顿问题。 为了清晰起见,这不是 Playnite 的原生全屏游戏行。主题使用一个通过插件控制的自定义轮播器。它是一个固定焦点的水平条带:选定位置保持固定,而游戏覆盖则使用 WPF 转换动画在其下移动。轮播器最多可包含 20 个游戏以及一个图书馆图块,大约有 9 个覆盖同时显示在屏幕上。 轮播器本身的移动工作正常,但在我的系统上,动画可能显得不均匀,帧似乎被保留,然后才追上。 我对轮播器、主题、插件、Playnite、Windows 和图形环境进行了广泛的测试。最强大的发现是,卡顿是由 Windows 桌面窗口管理器 (DWM) 组合活动直接控制的。 我创建了一个小型独立的 DirectComposition 测试程序,该程序持续地保持 DWM 处于活动状态。运行该程序后,轮播器变得平滑。立即停止它将使帧速度调整卡顿恢复。 然后,我测试了一个无关的第三方工具,称为 DWMfix,该工具使用一个微小的持续变化的表面来持续地进行 DWM 组合。它产生了相同的结果: DWMfix 运行 = 平滑的轮播器。DWMfix 停止 = 卡顿恢复。DWMfix 重新启动 = 再次平滑。 这也在重启后得到证实。 我并不声称每个 Playnite 主题或系统都会重现此问题。我目前正在使用我创建的自定义轮播器来重现。我报告了它,因为该行为似乎涉及 Windows/WPF/DWM 显示路径,而不仅仅是缓慢的轮播器代码,而且因为一个独立的 DWM 速度调整工具完全控制了可见问题。 我有大量的跟踪数据和大量的测试和排除原因,如果有用,我可以提供。 测试系统: Windows 11 Home Playnite 10.56 CPU: AMD Ryzen 7 9700X 主板: Gigabyte B850 AORUS ELITE WIFI7 BIOS: F11 / AGESA 1.3.0.1 GPU: NVIDIA GeForce RTX 5070 Ti NVIDIA 驱动: 610.88 显示器: Dell U2724D 分辨率: 2560 × 1440 刷新率: 120 Hz DWMfix 用于独立确认: https://GitHub.com/Arccalc/Dwmfix
内容来源: JosefNemec/Playnite