Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐞 反馈问题:EasyDict 运行一段时间后 Mac 出现画面卡顿现象 #250

Closed
3 of 4 tasks
xlyslr opened this issue Nov 30, 2023 · 57 comments
Closed
3 of 4 tasks
Assignees

Comments

@xlyslr
Copy link

xlyslr commented Nov 30, 2023

请先确认以下事项:

  • 已仔细阅读了 README
  • issues 页面搜索过问题(包括已关闭的 issue),但未能找到解决方法
  • Easydict 已升级到 最新版本

问题描述

EasyDict 运行一段时间后,Mac 会出现画面卡顿,重启 EasyDict 后就会恢复。卡顿期间 CPU、GPU 都不高,内存压力也没上升。有遇到类似情况的吗

重现步骤

运行一段时间就会复现

截图

期望结果

可以看下需要提供哪些信息帮助分析。

解决方案(可选)

No response

设备型号 && 系统版本

MacBook Pro 16 ,2019,MacOS 14.1.1

是否愿意提交 PR 解决该问题?

  • 我愿意提交 PR
@xlyslr xlyslr added the bug Something isn't working label Nov 30, 2023
Copy link

Hello xlyslr, Thank you for your first issue contribution 🎉

@tisfeng
Copy link
Owner

tisfeng commented Nov 30, 2023

没有用户反应过这种情况,Easydict 理论上也不会导致系统卡顿。不知道你说的卡顿具体是什么,你录个视频来看一下。

Mac 会出现画面卡顿

重启 Easydict 后,后面就都不卡了?你能确定是 Easydict 导致的卡顿吗?你可以尝试减少服务,测试一下看到底哪个服务导致问题。

重启 EasyDict 后就会恢复

@ZZChaser
Copy link

ZZChaser commented Dec 1, 2023

+1,更新后我也遇到相同的问题

@tisfeng
Copy link
Owner

tisfeng commented Dec 1, 2023

请提供更多的上下文信息,否则开发者无法定位问题。

或者可以先尝试重启应用,重启电脑,或卸载重装应用,看能否解决问题 🤔

@WangLeto
Copy link

WangLeto commented Dec 3, 2023

m1 pro MacBook,系统是 14.1.1。问题非常明显。内存和 CPU 都没有异常占用的情况,但是各种软件中的组件滚动、文本选择的速度都显著变慢了。即使是不会展示划词图标的 vscode 中也是一样

@xlyslr
Copy link
Author

xlyslr commented Dec 4, 2023

没有用户反应过这种情况,Easydict 理论上也不会导致系统卡顿。不知道你说的卡顿具体是什么,你录个视频来看一下。

Mac 会出现画面卡顿

重启 Easydict 后,后面就都不卡了?你能确定是 Easydict 导致的卡顿吗?你可以尝试减少服务,测试一下看到底哪个服务导致问题。

重启 EasyDict 后就会恢复

不确定是 Easydict 导致的,但是近期只是新增了这一个软件。我之前怀疑过 goland,但是发现重启也不会减轻。后来重启 Easydict 就发现明显问题消失了。我现在一有顿挫感就重启 Easydict😂。目前,后台运行的有 mos、ishot、rectangle,不知道会不会有冲突

@Jerry23011
Copy link
Collaborator

后台运行的有 mos、ishot、rectangle,不知道会不会有冲突

我这边后台常驻 Rectangle,但是并没有发现这个问题

请问另外几位后台都有什么呢?

@WangLeto
Copy link

WangLeto commented Dec 4, 2023

snipaste,飞书,微信,arc浏览器。难道跟截图工具(snipaste)还有冲突?

@xlyslr
Copy link
Author

xlyslr commented Dec 4, 2023

snipaste,飞书,微信,arc浏览器。难道跟截图工具(snipaste)还有冲突?

arc +1

@Jerry23011
Copy link
Collaborator

Jerry23011 commented Dec 4, 2023

难道跟截图工具(snipaste)还有冲突?

我的截图用的 Shottr,目前还没发现这个问题,让我再试试
@xlyslr @WangLeto 是一开启 Easydict 立刻就会出现这个问题吗?还是等一段时间才有呢?

@xlyslr
Copy link
Author

xlyslr commented Dec 4, 2023

是一开启 Easydict 立刻就会出现这个问题吗?还是等一段时间才有呢?

一段时间之后才有

@Jerry23011
Copy link
Collaborator

一段时间之后才有

我来开 Shottr + Easydict 试试

@xlyslr
Copy link
Author

xlyslr commented Dec 4, 2023

我截图和 Easydict 有相同授权的软件,看下有没有帮助
image
image
image

@WangLeto
Copy link

WangLeto commented Dec 4, 2023

今天用了半天,暂时还没有复现该问题

@tisfeng
Copy link
Owner

tisfeng commented Dec 6, 2023

@Jerry23011 后面如果有人反馈,你就跟进一下,看能不能定位到问题。

@WangLeto
Copy link

WangLeto commented Dec 8, 2023

又遇到了。在执行一些动画的时候(截图中为 hover 到 dock 栏上触发缩放效果),会导致 windowServer CPU 飙升,导致操作严重卡顿。当关闭 EasyDict 以后,CPU 占用和操作重新变正常。

image

@WangLeto
Copy link

WangLeto commented Dec 8, 2023

下次遇到应该先试试关闭划词翻译,看下表现。怀疑是跟划词翻译功能有关 🤔

@tisfeng
Copy link
Owner

tisfeng commented Dec 8, 2023

WindowServer 是 macOS 系统中负责管理图形用户界面的进程,其他应用都可能唤起它活动,在我电脑上测试,Easydict 在触发 dock 动画时,CPU 占用都是正常的。

和电脑环境有关,问题可能比较复杂。

@WangLeto
Copy link

WangLeto commented Dec 8, 2023

@tisfeng 需要连续使用一段时间后才会偶现,并不是立即触发的

@tisfeng
Copy link
Owner

tisfeng commented Dec 8, 2023

继续观察看看。

@WangLeto
Copy link

刚刚又遇到了,抓了一下 WindowServer 进程的取样,发现 add_events_to_tap 这个方法(钩子?)被调用得比较多
image
关闭 EasyDict 以后会少一些
image

@WangLeto
Copy link

看了眼代码,没看懂(
但是感觉跟 EZEventMonitor.m 应该是有关系的,估计是某些边界 case 下有逻辑泄露,导致一直在执行 CGEventTapCreate 之类的。

@tisfeng
Copy link
Owner

tisfeng commented Dec 11, 2023

看了下代码,CGEventTapCreate 这个方法只在每次鼠标取词成功时触发,且每次生成新值时都会释放旧值,应该不会泄漏。

@vaayne
Copy link

vaayne commented Dec 18, 2023

我也遇到过这个问题,排除很久才发现是 Easydict 导致的,每次出现的时间长短不一,有时候开着两个小时就会发现变慢了,有时候可能两天后才会变慢,退出 Easydict 就好了。
@tisfeng 请问出现的时候如何收集 debug 信息,方便你分析?

macOS: 13.5.1
Easydict: 2.3.0

@tisfeng
Copy link
Owner

tisfeng commented Dec 18, 2023

如果出现异常问题,你可以打开【活动监视器】取样,它会自动收集一段时间的日志信息。

image

@vaayne
Copy link

vaayne commented Dec 19, 2023

Sample of Easydict.txt

@tisfeng I have some samples; I hope this will help.

@tisfeng
Copy link
Owner

tisfeng commented Dec 19, 2023

你点进去看看 monitorCGEventTap 方法内容,它监听了 kCGEventKeyDown 事件,这个方法需要辅助功能权限,这是为了能够在用户按下键盘按键时隐藏查询图标,不然使用快捷键触发某些应用时,会导致 Easydict 查询图标一直显示。

当然了,代码中还有其他方法隐藏查询图标。

@WangLeto
Copy link

咦,这个逻辑有点……为什么不持续监听,而是不断地重建销毁事件监听呢。逻辑如(类似 JavaScript 语法伪代码):

const listenKeyDownForIconPop = {
  keyDownAt,
  keyCode, // 如果需要判断具体按键是什么
}

键盘监听回调(按键) {
  listenKeyDown.keyDownAt = 当前时间()
  listenKeyDown.keyCode = 按键
}

划词回调() {
  setTimeout(() => {
    if 当前时间() - listenKeyDownForIconPop.keyDownAt < 阈值时间如500ms
      return  // 如果选词后500ms内有按键就不展示
    展示图标()
  }, 500ms) // 延时500ms判断
}

这样你就监听一次就完事辣

@tisfeng
Copy link
Owner

tisfeng commented Dec 19, 2023

可以,但没必要,这个监控事件只是为了隐藏查询图标,如果没显示图标,就没必要监听。另外,我也担心长时间监听,可能会有什么副作用。

@WangLeto
Copy link

现在的实现其实等价于持续监听,因为是在下一次启动监听时销毁上一次的监听的。😂

@tisfeng
Copy link
Owner

tisfeng commented Dec 19, 2023

我也发现了,之前忘记在隐藏图标时销毁了 🥹

刚加上了,你用最新的 dev 代码试一下。

@WangLeto
Copy link

行,我编译一版本地长期用下,看看是否复现

@WangLeto
Copy link

似乎不太行。用 dev 里的代码,仍然出现了 WindowServer 里大量的 add_events_to_tap。而且我打印了一下日志,可以确认 eventTap 的销毁逻辑是正常被执行了的,每次划词成功后都能找到对应的销毁方法被执行了 😰。现在我怀疑,作者不复现,难道是只有 m 芯片的 mac 有这个问题
image

@tisfeng
Copy link
Owner

tisfeng commented Dec 20, 2023

我电脑也是 Apple M1 Pro

@WangLeto
Copy link

WangLeto commented Dec 22, 2023

前天我把两处 [self monitorCGEventTap]; 的调用代码注释掉然后构建了一个 release 版本,使用到目前为止没有再复现卡顿问题。

@tisfeng
Copy link
Owner

tisfeng commented Dec 22, 2023

有点神奇,主要 monitorCGEventTap 方法也没发现问题,内存泄漏也没有 😑

@tisfeng
Copy link
Owner

tisfeng commented Dec 22, 2023

直接去掉 monitorCGEventTap 有点不妥,我先加个限制条件,在关闭显示查询图标时,就不执行这个方法。

我打了一个测试包,如果有用户的电脑运行 Easydict 出现这个问题,可以用这个包,在设置中关闭【鼠标自动划词】选项,测试一段时间,如果确认是这个方法导致问题,后面我再想办法处理一下。

Easydict.zip

@Mr-zhaohy
Copy link

相同的问题,每次用个半天就会变卡,重启EasyDict之后正常 M1 Max macOS14

@tisfeng
Copy link
Owner

tisfeng commented Dec 27, 2023

直接去掉 monitorCGEventTap 有点不妥,我先加个限制条件,在关闭显示查询图标时,就不执行这个方法。

我打了一个测试包,如果有用户的电脑运行 Easydict 出现这个问题,可以用这个包,在设置中关闭【鼠标自动划词】选项,测试一段时间,如果确认是这个方法导致问题,后面我再想办法处理一下。

Easydict.zip

如果有卡顿问题的,请用这个包试一下,如果还有问题,也请反馈一下。

如果几天后没有反馈,我就视作问题已解决。

@tisfeng
Copy link
Owner

tisfeng commented Jan 7, 2024

2.5.0 版本已经做了一些优化,如果遇到卡顿问题,请尝试在设置中关闭【鼠标自动划词】选项。

该问题没有后续反馈,就先关闭了。

@hiberabyss
Copy link

使用 2.7.2 版本,运行一段时间后还会出现系统比较卡顿的情况。此时 WindowServer 的 cpu 使用率会比较高。

重启 EasyDict 之后就恢复正常了。

@Jerry23011
Copy link
Collaborator

@hiberabyss 可以发一下你的 macOS 版本吗?我记得之前一些macOS 版本 WindowServer 是有问题的

@hiberabyss
Copy link

处理器是 m1 pro。
macOS 版本是 14.5

@Jerry23011
Copy link
Collaborator

和我的环境一模一样,请问还有其他同时开启需要录制屏幕权限的软件吗?

@hiberabyss
Copy link

有 iBar,iShot Pro 和飞书。

@Jerry23011
Copy link
Collaborator

在不运行那三个的时候也会出现这个问题吗

@hiberabyss
Copy link

在不运行那三个的时候也会出现这个问题吗

这个没试过。
准备通过脚本定时重启 easydict 来避免这个问题。

@hiberabyss
Copy link

大概率和飞书视频会议有关系。每次用飞书开完会后系统就变卡顿。

@JiangHanfeng
Copy link

最新的版本依然存在这个问题

@Jerry23011
Copy link
Collaborator

@JiangHanfeng 你使用飞书吗?

@guanguans
Copy link

guanguans commented Aug 14, 2024

我这边的情况是,用触控板上下滚动页面,一卡一顿的,很难受。重启 Easydict 就好了。过一段时间就又开始又卡顿了。用外接鼠标始终不会卡顿。

macOs:Ventura 13.6.7
Easydict:2.8.0

@tisfeng
Copy link
Owner

tisfeng commented Aug 14, 2024

有点神奇,我也经常使用触摸板,没有遇到类似问题 🙃

@SovereignRemedy
Copy link

同样的情况 运行两三天之后就卡顿 但是关闭ed立刻缓解

15.1.1 (24B91)
Easydict:2.10.1

@tisfeng
Copy link
Owner

tisfeng commented Dec 15, 2024

如果感觉电脑卡顿,请用活动监视器看看 Easydict 的内存和 CPU 占用情况,看有没有异常。

某些情况下确实可能导致问题,但这个一时半会没办法解决 😥

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

No branches or pull requests