黑色windows问题
Black windows issue
我在 Rust 中基于 gtk+ 和 webkit2gtk 开发了一个网络浏览器,有时,所有 GTK+ windows 都变黑了。
就连我们用环境变量GTK_DEBUG=interactive
得到的gtk inspectorwindow也是黑色的。
即使 windows 是黑色的,UI 仍然有响应,因为我可以用键盘浏览网页(我看到 window 标题更新,显示新页面 URL和加载进度)。
以下是每次发生时都会触发此问题的两个操作:
- 正在破坏网络视图
- 当 运行 第二次应用程序时,它通过 Unix 域套接字向第一个进程发送消息,以便它创建一个新的 Web 视图。
不幸的是,我没有小例子来重现这个问题。如果你愿意,我可以给你看项目的代码,但是它很大,non-trivial 并且在 gtk+ 上使用了很多抽象层。
我知道我不会给你很多帮助,但如果你能给我一些关于渲染如何工作以及如何调试的解释,我将不胜感激。
你能给我一些关于如何调试这个问题的提示吗?
是否有 GTK+ 的全局 OpenGL(或其他)上下文 windows?
是否有一些调试工具可以帮助我? (设置 G_MESSAGES_DEBUG=all
不显示任何相关内容。)
使用 strace
,我能够调试这个问题:
我发现用于IPC通信的FD关闭后还在轮询,所以返回POLLNVAL
。
使用 g_source_remove_unix_fd()
删除 FD 解决了这个问题。
我在 Rust 中基于 gtk+ 和 webkit2gtk 开发了一个网络浏览器,有时,所有 GTK+ windows 都变黑了。
就连我们用环境变量GTK_DEBUG=interactive
得到的gtk inspectorwindow也是黑色的。
即使 windows 是黑色的,UI 仍然有响应,因为我可以用键盘浏览网页(我看到 window 标题更新,显示新页面 URL和加载进度)。
以下是每次发生时都会触发此问题的两个操作:
- 正在破坏网络视图
- 当 运行 第二次应用程序时,它通过 Unix 域套接字向第一个进程发送消息,以便它创建一个新的 Web 视图。
不幸的是,我没有小例子来重现这个问题。如果你愿意,我可以给你看项目的代码,但是它很大,non-trivial 并且在 gtk+ 上使用了很多抽象层。
我知道我不会给你很多帮助,但如果你能给我一些关于渲染如何工作以及如何调试的解释,我将不胜感激。
你能给我一些关于如何调试这个问题的提示吗?
是否有 GTK+ 的全局 OpenGL(或其他)上下文 windows?
是否有一些调试工具可以帮助我? (设置 G_MESSAGES_DEBUG=all
不显示任何相关内容。)
使用 strace
,我能够调试这个问题:
我发现用于IPC通信的FD关闭后还在轮询,所以返回POLLNVAL
。
使用 g_source_remove_unix_fd()
删除 FD 解决了这个问题。