weasel icon indicating copy to clipboard operation
weasel copied to clipboard

在玩ff14的时候中文模式按字母键狂掉帧数

Open MoonSueAoi opened this issue 10 months ago • 17 comments

按wasd或者其他的会导致帧数下降,狂按直接降到1帧了

Image

MoonSueAoi avatar Feb 16 '25 11:02 MoonSueAoi

我这里没有复现你说的问题。

按enter焦点移动到聊天框,切到中文打几个字,然后按ESC,再用asdw移动,帧率没有变化,任务管理器里gpu占用也没有特别大的起伏。

你把能退出的程序都退出了试试。

oTnTh avatar Feb 22 '25 16:02 oTnTh

在任何程序都会有类似的情况,我是使用的雾凇拼音,只要打字就会造成主进程卡顿,这是tsf的原理引起的 下图为Minecraft 1.20.5的F3+2,可以很清楚的看到在打字时会阻塞主进程并降低帧数,按住时直接卡死,点按阻塞时长逐步上升 一个可能的修复方法是用多线程/进程把耗时任务放到其它进程避免阻塞主进程/使用简单快速的输入方案/关闭输入法 看#1159 的情况可能是Windows的锅,在不该启动输入法的情况下启动了输入法 微软拼音也有类似的问题,但因为速度快所以帧数影响较小,并且有上限

Image

Image

Image

CDHJS avatar Feb 24 '25 02:02 CDHJS

这个是MC内置的工具么,我刚才又去ff14里试了一下,在任务管理器里看CPU占用,还是没有观察到明显的变化。

Windows现在输入法的工作模式跟以前不一样了,rime没办法也只能跟着变。

目前小狼毫还可以做到“关闭输入法”这件事,但要是跟着微软拼音的实现走的话,以后可能小狼毫也会拿掉这个功能。

如果输入法影响游戏性能这个问题确实存在的话,我觉得还是有找一找问题所在的必要。

比如说是不是方案占用了太多资源,或者能不能定位到究竟是哪个部分占用了过多资源之类的。

oTnTh avatar Feb 24 '25 16:02 oTnTh

猜测可能是目前默认的状态,小狼毫输入法的按键都要IPC传递给服务,等回复。如果在/toggleime状态的时候关闭了输入法,那响应就应该是正常的。

fxliang avatar Feb 25 '25 01:02 fxliang

这个是MC内置的工具么,我刚才又去ff14里试了一下,在任务管理器里看CPU占用,还是没有观察到明显的变化。

Windows现在输入法的工作模式跟以前不一样了,rime没办法也只能跟着变。

目前小狼毫还可以做到“关闭输入法”这件事,但要是跟着微软拼音的实现走的话,以后可能小狼毫也会拿掉这个功能。

如果输入法影响游戏性能这个问题确实存在的话,我觉得还是有找一找问题所在的必要。

比如说是不是方案占用了太多资源,或者能不能定位到究竟是哪个部分占用了过多资源之类的。

CPU并不会有较高的占用,是直接卡死主进程的 尝试了下原神,在输入框按住某个键也是直接卡死整个进程,但在正常游戏中按键并不会给TSF接收到 Firefox按住也是卡死主进程,但渲染正常,可以观测到的是按住时视频正常播放但不缓冲了,所以我说在任何程序都会有类似的情况

CDHJS avatar Feb 25 '25 02:02 CDHJS

猜测可能是目前默认的状态,小狼毫输入法的按键都要IPC传递给服务,等回复。如果在/toggleime状态的时候关闭了输入法,那响应就应该是正常的。

有没有可能把UI分离出来,在组词时不需要等回复,只有选词插入时才通过IPC取词,这个功能感觉在预编辑区内容非候选时是成立的

CDHJS avatar Feb 25 '25 02:02 CDHJS

首先ui怎么个分出来,目前没有办法分离 如果怀疑是ui性能不够,可以将style/layout/margin_x设置为负值隐藏输入框看有没有变化,如果没有变化那就不是ui性能的问题

其次,通信是全部按键事件都有在做的,至于是不是要更新ui是看内容变化情况而定的。

再次,如果后端的插件多响应慢或者方案复杂计算多,那肯定会影响前端的响应的

fxliang avatar Feb 25 '25 02:02 fxliang

首先ui怎么个分出来,目前没有办法分离 如果怀疑是ui性能不够,可以将style/layout/margin_x设置为负值隐藏输入框看有没有变化,如果没有变化那就不是ui性能的问题

其次,通信是全部按键事件都有在做的,至于是不是要更新ui是看内容变化情况而定的。

再次,如果后端的插件多响应慢或者方案复杂计算多,那肯定会影响前端的响应的

不是怀疑UI性能不够,是为了让主进程不必等待组词并且UI可以“异步”更新,这样后端再慢也不影响主进程的帧率,只有选词的那一刻需要等待,UI分出来的思路是让服务来创建窗口,TSF只需要发送位置和按键而不必等待算法响应

CDHJS avatar Feb 25 '25 02:02 CDHJS

遊戲裏需要輸入中文嗎? 不轉換(ascii_mode=true)時響應速度如何?

按照目前 librime 的處理流程,按鍵的處理結果和候選詞同時返回,分開不容易。 因爲有些按鍵處理的過程會用到轉換結果,處理完成,候選詞也已經算完。 框架這樣設計,流程比較統一,也考慮到,轉換算法本身應當做到足夠快,而不是試圖靠異步優化。 如果性能很差,是不是方案設置的規則太複雜或是使用了腳本程序?

UI 由前端繪製有必要,TSF 是這樣設計的。已經改成這樣很久了。可以翻查以往的記錄。

lotem avatar Feb 25 '25 04:02 lotem

遊戲裏需要輸入中文嗎? 不轉換(ascii_mode=true)時響應速度如何?

按照目前 librime 的處理流程,按鍵的處理結果和候選詞同時返回,分開不容易。 因爲有些按鍵處理的過程會用到轉換結果,處理完成,候選詞也已經算完。 框架這樣設計,流程比較統一,也考慮到,轉換算法本身應當做到足夠快,而不是試圖靠異步優化。 如果性能很差,是不是方案設置的規則太複雜或是使用了腳本程序?

UI 由前端繪製有必要,TSF 是這樣設計的。已經改成這樣很久了。可以翻查以往的記錄。

不转换时几乎不影响帧数,而且如果不是同一个按键按十几次以上的非正常输入也不会出现可见的卡顿,我只是提供了一个可能解决问题源头的思路,这个issue的问题主要还是在Windows,weasel如果要解决的话可以参照微软拼音给输入设置一个上限或者让用户自行切换输入法

CDHJS avatar Feb 25 '25 07:02 CDHJS

我再去试了一下,感觉楼主说的,跟后面讨论的,可能不是一回事。

原神和FF14里,我都可以观察到CDHJS说的情况。

1、在游戏要求用户输入文本的地方,打开小狼毫的中文输入模式,按着一个键不放,确实能观察到游戏帧率狂掉。

2、完成中文输入后继续游戏,此时小狼毫仍然处于中文输入模式,按住ASDW进行操作,游戏帧率并没有发生变化。

操作1导致帧率下降,因为本来也不是打游戏时会出现的正常操作,所以我觉得是还好。

但是看描述,楼主说的是操作2时,会出现帧率下降的情况,可是在我这里没法复现。

如果是操作2会影响游戏帧率,那就确实是个问题。

oTnTh avatar Feb 25 '25 09:02 oTnTh

我再去试了一下,感觉楼主说的,跟后面讨论的,可能不是一回事。

原神和FF14里,我都可以观察到CDHJS说的情况。

1、在游戏要求用户输入文本的地方,打开小狼毫的中文输入模式,按着一个键不放,确实能观察到游戏帧率狂掉。

2、完成中文输入后继续游戏,此时小狼毫仍然处于中文输入模式,按住ASDW进行操作,游戏帧率并没有发生变化。

操作1导致帧率下降,因为本来也不是打游戏时会出现的正常操作,所以我觉得是还好。

但是看描述,楼主说的是操作2时,会出现帧率下降的情况,可是在我这里没法复现。

如果是操作2会影响游戏帧率,那就确实是个问题。

我这边在FF14里可以观察到【2】,观察方法是 按住W或鼠标左右键前进 + 按住或快速连打数字1 用上面的方法不论是长按还是快速连打1都能肉眼观测到卡顿,而且快速连打的时候完全能够看出是按一下卡一下。

不过这种卡顿无法被游戏内置帧数统计以及NVIDIA APP捕获到

liuxd17thu avatar May 29 '25 17:05 liuxd17thu

我这边在FF14里可以观察到【2】,观察方法是 按住W或鼠标左右键前进 + 按住或快速连打数字1 用上面的方法不论是长按还是快速连打1都能肉眼观测到卡顿,而且快速连打的时候完全能够看出是按一下卡一下。

不过这种卡顿无法被游戏内置帧数统计以及NVIDIA APP捕获到

如果方便的话,要不要详细说明一下输入法的版本和你的测试方法?

万一哪个大神对这个问题感兴趣,随手就给咱臭打游戏的修了呢。

我测试的时候用的小狼毫版本是v0.16.3.31.41dc044,方案是雾凇拼音。

测试用的职业是赤魔,1键上放的是赤治疗。

1、打开FF14的市场布告板,输入焦点放到搜索框中,切到中文输入状态,按住x键不动。此时通过微星小飞机能观察到帧率掉到个位数,GPU的主频和功耗也在降低。

2、直接按ESC关闭市场布告板,按住w不动操纵角色前进的同时,一直重复按1试图读技能,此时微星小飞机显示的各项数据没有发生明显变化,肉眼也没观察到游戏画面出现明显可感知的卡顿。

oTnTh avatar May 29 '25 18:05 oTnTh

如果方便的话,要不要详细说明一下输入法的版本和你的测试方法?

万一哪个大神对这个问题感兴趣,随手就给咱臭打游戏的修了呢。

我测试的时候用的小狼毫版本是v0.16.3.31.41dc044,方案是雾凇拼音。

测试用的职业是赤魔,1键上放的是赤治疗。

1、打开FF14的市场布告板,输入焦点放到搜索框中,切到中文输入状态,按住x键不动。此时通过微星小飞机能观察到帧率掉到个位数,GPU的主频和功耗也在降低。

2、直接按ESC关闭市场布告板,按住w不动操纵角色前进的同时,一直重复按1试图读技能,此时微星小飞机显示的各项数据没有发生明显变化,肉眼也没观察到游戏画面出现明显可感知的卡顿。

我这里是小狼毫0.17.0.0 + 雾凇拼音的小鹤方案,游戏是无边框窗口,基础帧数在60~70 操作方法和你第二条基本一样,有可感知卡顿,每次按1都会冻一下,不知道你那边是不是基础帧数比较高看不出来?

此外还有一些情况下会出现聊天框没激活但是按技能的同时输入法也在后台记录按键,等到按下回车激活聊天框后跳出来一串WASD和候选词

liuxd17thu avatar May 30 '25 03:05 liuxd17thu

我测试过4K分辨率的窗口全屏模式,所有特效全部最高,小飞机和游戏实际画面都没有观察到什么异常。

不过有一个可能的变量是帧率上限,FF14的帧率上限好像是跟显示器的物理上限有关,我这里就是60。即使显卡有余力,也没法跑到更高了。

oTnTh avatar May 30 '25 13:05 oTnTh

我测试过4K分辨率的窗口全屏模式,所有特效全部最高,小飞机和游戏实际画面都没有观察到什么异常。

不过有一个可能的变量是帧率上限,FF14的帧率上限好像是跟显示器的物理上限有关,我这里就是60。即使显卡有余力,也没法跑到更高了。

我这边和楼上一样是小狼毫 + 雾凇拼音,之前是发现坐骑按空格升空的时候有几率变得特别卡,我一直以为是我替换dlss的缘故也没深究,昨天突然发现好像是我按一下键就会掉一下帧,按空格升空就是持续按住就一直掉帧,所以就特别明显地卡,才反应过来是按键的原因,任何搜到了这个帖子。 我是4K分辨率全屏和窗口全屏都试过,所有特效全部最高,帧数120,gsync自动到116这样,小飞机直接就能看到波动了已经,于是今天试了以前卡输入法的旧办法,新加了一个系统英语,然后切成自带的ENG键盘,不管怎么按键都完全不会导致波动了

https://github.com/user-attachments/assets/66e4ffba-0051-44a3-9ba1-5e117ac01967

https://github.com/user-attachments/assets/3796c310-4e6c-4b24-acd1-4b666c7a9f98

ATFieldBeast avatar Jul 14 '25 15:07 ATFieldBeast

我想着也不可能为了让维护人员修bug去装一个ff14,好几十G呢,所以就想说找一找有没有什么比较容易获得,体积也比较小的程序。

目前找到了的,Steam里3DMARK有Demo版,安装包只有5G多,勉强符合这两个条件。

其中Stell Nomad测试是免费的,并且我这里可以复现类似前面说的问题:

  1. 打开小狼毫并执行测试时,按住空格键会导致帧率下降;
  2. 换微软拼音执行同样的步骤,帧率不会发生明显的变化。

看起来我之前在ff14里没能观察到类似的现象,有可能是负载不够高的缘故。

不管有没有大佬有时间去追这个问题,找到能稳定复现的法子起码是一个开始吧。

oTnTh avatar Jul 18 '25 20:07 oTnTh