xfangfang / wiliwili

第三方B站客户端,目前可以运行在PC全平台、PSVita、PS4 、Xbox 和 Nintendo Switch上
https://xfangfang.github.io/wiliwili
GNU General Public License v3.0
3.18k stars 146 forks source link

wiliwili 占用GPU过高 #120

Closed xfangfang closed 6 months ago

xfangfang commented 1 year ago

这个issue继续讨论,wiliwili在各个平台GPU占用过高的问题: https://github.com/xfangfang/wiliwili/issues/48#issuecomment-1509884545

lyhkkk commented 1 year ago

平台: Win10 22H2 X64 CPU:Intel E5-2680v42 内存:DDR4 3200 16G4 海力士 独立显卡:AMD 5700XT 硬件加速:开启 分辨率:1920*1080

Wiliwili CPU占用 选择HDR (无Hi-Res可选,是否要另开issue)Dash/AV1 初始窗口大小:CPU占用8-10% GPU占用12-13% 初始窗口大小并窗口全屏:CPU占用8-10% GPU占用14-15% 窗口最大化并窗口全屏:CPU占用8-10% GPU占用16-17%

EDGE浏览器 选择4K/Hi-Res Dash/AV1 选择窗口宽度最大/窗口浏览器最大/全屏 CPU占用1% GPU占用3-6% 三者一致

B站视频信息 BV1914y1J7nB

以下为Edge浏览器的Dash(HTML5播放器)源视频信息 Mime Type: video/mp4;codecs="avc1.640034", audio/mp4;codecs="flac" Player Type: DashPlayer Resolution: 3840 x 2160@50.000 Video DataRate: 14971 Kbps Audio DataRate: 1254 Kbps

Wiliwili是否可以开发相同的Dash(HTML5播放器?)源视频信息?(另开issue?)

xfangfang commented 1 year ago

@lyhkkk 感谢详细反馈,在播放器全屏按f1可以展示一些详细信息(更多的快捷键见设置 实用工具 使用教程)

hi-res和杜比全景声,因为我最近没在冲大会员,所以暂时先没有支持(以及,可能是设备不太行 我听不太出来区别)

wiliwili目前是每秒都按显示器最大帧数来刷新,所以还可以比对的一项是浏览器在页面滑动时的cpu/gpu

另外,5700xt 貌似不支持av1硬解:https://bluesky-soft.com/en/dxvac/deviceInfo/decoder/amd.html

Eitetsu0 commented 1 year ago

在写这条回复之前,我也觉得 wiliwili 在我的电脑上gpu占用非常高。(archlinux , intel i5-1135g7,使用 intel-gpu-top 查看gpu状态) 但是一边写一边测,发现 wiliwili 跟firefox比基本只有静止状态下gpu占用比较高。只好把写好的删了一半😂。 觉得wiliwili占用高其实是因为它可以播放比网页版更高码率的4k hdr片源。以及习惯性的跟mpv作比较。 播放视频时的gpu状态,同视频同分辨率firefox和wiliwili基本一样。

嗯.... 跟 mpv 比,wiliwili 的资源占用确实相当的高。

嘛,之前的时候也提过 https://github.com/xfangfang/wiliwili/issues/105#issuecomment-1527393888 当时还截了图,不过似乎跟当时的问题关系不大,也没仔细看,就编辑掉了。

对比一下wiliwili和firefox 、 mpv:

firefox:(软解,其实我配置了vaapi硬解但是intel-gpu-top看不到解码器活动) 在这个页面打字时,gpu频率一般在50MHz以下,迅速来回滚动也上到300多MHz。 Render/3D栏,静止打字时几乎没有,迅速来回滚动30%的样子。 wiliwili:(vaapi-copy 硬解) 在前台时,gpu频率跑到300多,不管静止页面还是迅速滚动。播放视频时600MHz(普通1080分辨率)~1300MHz(4k)。 Render/3D栏,静止页面会50%~70%左右的占用。播放时5、60%(1080分辨率)~100%(4k hdr,会卡顿)

mpv:(vaapi硬解) 本地播放视频码率20Mbps 左右的4K电影时,gpu频率在200M左右,Render/3D占用5%左右。

lyhkkk commented 1 year ago

我看了Wiliwili F1的视频信息,测试下来比如 [BV1Dg4y1j7nw] 是用的AV1解码并且硬解显示no,来源是我安装的VLC带的解码,前面压力测试的[BV1914y1J7nB]确实变成了HEVC然后硬解显示调用了显卡的dxva。 另外b站的Hi-Res开启后是可以突破投稿作品的音频码率限制320kbps,实例的视频[BV1914y1J7nB]的音频码率为1254 Kbps(Edge浏览器下),有的专业投稿高音质的up投稿比如[BV1HV4y1j7fj]的音频码率可以达到2500 Kbps。 至于音频码率上升是否代表个人的听感上的音质提升只能说见仁见智

xfangfang commented 1 year ago

从这个测试版开始,wiliwili默认(除switch外)会在用户没有操作的 3 秒后降低FPS到5。

https://github.com/xfangfang/wiliwili/actions/runs/5039069906

也增加了自定义选项用来满足不同的需求:https://github.com/xfangfang/wiliwili/wiki#自定义帧数限制

可能还有一些动画问题需要解决,比如目前我知道的有两处问题:

  1. 程序从闲置中重新接受操作升高FPS,在前面几帧会出现动画消失的问题
  2. 当焦点位于label时,如果label因为过长而出现动画,会因为帧数下降而卡顿。(考虑在这种情况下可以只循环一次标题,然后就结束动画)

如果还发现了其他问题欢迎反馈。


2023/06/25 更新,默认关闭了帧数限制,需要手动开启

zeromake commented 1 year ago

@xfangfang 话说我在 165hz 的笔记本屏幕下面跑 wiliwili 发现滚动动画明显比在 60hz 的屏幕下要快一些,应该不是我错觉。

xfangfang commented 1 year ago

@xfangfang 话说我在 165hz 的笔记本屏幕下面跑 wiliwili 发现滚动动画明显比在 60hz 的屏幕下要快一些,应该不是我错觉。

这个确实,滑动速度的计算方式好像是固定按60fps计算的,这个我之前好像看到过borealis作者的备注。

Eitetsu0 commented 1 year ago

感觉borealis好多坑...

zeromake commented 1 year ago

@xfangfang 发现按键长按的重复间隔也会随着刷新率变化,165hz 长按删除明显快一些,看 borealis 也没看到为啥,明明都是计算时间的。 https://github.com/xfangfang/borealis/blob/wiliwili/library/lib/core/application.cpp#L371

xfangfang commented 1 year ago

@zeromake

发现按键长按的重复间隔也会随着刷新率变化,165hz 长按删除明显快一些,看 borealis 也没看到为啥,明明都是计算时间的。

https://github.com/xfangfang/borealis/commit/b9a64b9491fab3b1135d27f485b6c6f26c60c3ae 应该修复了这个问题,我在 iPad 上试了一下没啥问题,没有其他高刷屏可以测试了。

xfangfang commented 6 months ago

占用GPU过高的问题应该是解决了,在 windows上使用 d3d 版本测试,在开弹幕播放视频时貌似 cpu/gpu 都优于官方版(甚至我感觉对比几个 uwp 版好像也略有优势)

除了图形 api 的切换,一个最主要影响 gpu 占用的是对 nanovg 的调整,只需要调大一些文字渲染纹理的尺寸满足一帧之内无需多次创建纹理即可,nanovg 默认的纹理太小了,而且缓存功能几乎可以说是没有,导致在高分辨率下(尤其是 4k)应用需要每帧都重新创建多个纹理,因此影响了性能。

https://github.com/xfangfang/wiliwili/actions/runs/7964242708