黑色windows问题

Black windows issue

我在 Rust 中基于 gtk+ 和 webkit2gtk 开发了一个网络浏览器,有时,所有 GTK+ windows 都变黑了。

就连我们用环境变量GTK_DEBUG=interactive得到的gtk inspectorwindow也是黑色的。 即使 windows 是黑色的,UI 仍然有响应,因为我可以用键盘浏览网页(我看到 window 标题更新,显示新页面 URL和加载进度)。

以下是每次发生时都会触发此问题的两个操作:

不幸的是,我没有小例子来重现这个问题。如果你愿意,我可以给你看项目的代码,但是它很大,non-trivial 并且在 gtk+ 上使用了很多抽象层。

我知道我不会给你很多帮助,但如果你能给我一些关于渲染如何工作以及如何调试的解释,我将不胜感激。

你能给我一些关于如何调试这个问题的提示吗?

是否有 GTK+ 的全局 OpenGL(或其他)上下文 windows?

是否有一些调试工具可以帮助我? (设置 G_MESSAGES_DEBUG=all 不显示任何相关内容。)

使用 strace,我能够调试这个问题: 我发现用于IPC通信的FD关闭后还在轮询,所以返回POLLNVAL。 使用 g_source_remove_unix_fd() 删除 FD 解决了这个问题。