解决Deepin Linux + KWin屏幕界面的撕裂问题

解决Deepin Linux + KWin屏幕界面的撕裂问题,第1张

笔者是一个苛求显卡性能的程序员,对坐拥的两台“古董”笔记本也一视同仁。这两台笔记本,一台是2009年的老机器ThinkPad X61,安装了OpenSUSE;而另一台是2012年的ThinkPad X200,用的是Deepin Linux。

按理说,新机器的显卡性能相对于旧机器应当有所改善,可是事实却让我无奈——X200的Deepin下,拖动窗口时画面会有明显的撕裂感,一个窗口被拆成两半,而且在使用SMPlayer播放视频(720p)时,也会有细微但肉眼可辨的撕裂。然而,X61的OpenSUSE却完全不存在这样的问题,拖动窗口时一气呵成,不会撕裂,观感体验要好上不少。

撕裂现象是Deepin在一些老机器上容易产生的问题。Deepin属于比较新的系统,不可能会对旧机型进行细致的优化,其默认的显卡配置(Xorg的配置文件)也不是放之四海而皆准的,因此还得手动解决。但是,Deepin最新适配的窗口管理器(下文简称“窗管”)KWin,能够便捷地解决这个问题。KWin是KDE的窗管,得益于它的桌面混成器(desktop compositor),KDE Plasma桌面得以充分发挥显卡的性能,哪怕是X61所使用的旧显卡都能实现行云流水的使用体验。这一特性也在Deepin版的KWin得到了实现。

Deepin目前的版本(15.10.1)默认的窗管是Mutter,而不是KWin。KWin需要手动安装,安装下面的包之后,下次启动系统后窗管就会自动从Mutter切换到KWin:

Deepin的KWin默认没有启用桌面混成器,所以在KWin下仍然会出现画面撕裂的情况,与默认的Mutter窗管无异。笔者曾以为Deepin团队会针对KWin的性能作出针对性优化,然而事与愿违了。接下来只能手动启用混成器。

桌面混成器的设置位于 systemsettings 包中。这个包是精简版的KDE系统设置程序,只保留了与KWin和网络有关的设置项。使用下面命令直接安装:

安装后,启动器中就会多出一个“KDE系统设置”,如图所示。

打开KDE系统设置,左栏最后一项“显示和监控”即为桌面混成器的设置。点开它:

首先,勾选“Enable compositor on startup”,让KWin在系统启动时自动启动混成器。然后“Rendering backend”(渲染后端)选择“OpenGL 2.0”或“OpenGL 3.1”。

垂直同步是防止撕裂的关键。KDE提供了若干种垂直同步的处理方法,位于“Tearing prevention ('vsync')”这个选项中。每选择一个方法,设置界面中就会用蓝色的框说明该选项可能会导致的后果。

具体的方法见下表:

实践证明,只有Full screen repaints适合我的X200笔记本。 选择该模式并应用,再拖动窗口,果然不再撕裂了,使用体验变得顺滑了不少!

另外两种方式中,“Only when cheap”只在播放视频时能起到防止撕裂的作用。而对于“Re-use screen content”,KDE的开发者表示 该模式会在MESA驱动中导致严重的性能问题 ,果不其然,选择该模式后,电脑就卡成了PPT,动d不得,延迟爆表!我可是费了很大的劲才把设置还原回来。Linux配备的英特尔集显驱动就是一种MESA驱动,它最终的表现正应了开发者的警告。

启用桌面混成器并选用有效的垂直同步处理方法后,Deepin的体验有了质的提升。

首先是窗口拖动不再出现撕裂的情况,使得界面的 *** 作体验更为舒适流畅,提高了Deepin的规格。

同时,桌面混成器也提高了各种应用程序的界面渲染性能,这是我意料之外的收获。举个例子:Typora,基于Electron开发的Markdown编辑器,它的Chromium内核默认没有启用硬件加速,在启用桌面混成器之前滚屏时会有间歇性错位的现象;Deepin设置,滚屏时虽然很流畅,但也常常会出现界面错位,影响观感。上述两个问题在配置桌面混成器后,竟然在我不经意之间都得到了解决,偶然再使用它们时才发现这一切的转变。

X61上的OpenSUSE,它的KDE Plasma桌面默认就配置好了混成器,所以一开始就无比流畅。而Deepin在经过调教之后,它的表现也开始不输于KDE了。电脑要流畅,启用混成器是王道。

deepin--解决屏幕撕裂问题 :从更改Xorg配置文件来解决撕裂。

Linux系统中,如果需要禁止特定ip地址访问来保证系统的安全,只需通过 *** 作iptalbes来实现,下面就给绍下Linux如何禁止某个ip地址访问。 一、概述 这两个文件是tcpd服务器的配置文件

帧率是衡量单个图像(称为帧)在屏幕上显示速度的指标。所有视频实际上都是快速显示的一系列图片。当人眼看到这些图像快速变化时,它会将其解释为运动。 帧速率通常以 FPS 或每秒帧数表示。显然,帧率越高,每秒出现在屏幕上的图像就越多。更多的帧意味着更多的细节,所以在更高的帧速率下运动看起来更流畅。

刷新率是指屏幕更新其显示图像的次数。在 CRT(阴极射线管)显示器的旧时代,这是显示器内的电子q在屏幕上绘制新图像的次数。低刷新率会导致恼人的闪烁,即当您的眼睛注意到帧之间的亮度变化时。刷新率通常以赫兹 (Hz) 表示。您今天可以买到的几乎所有显示器的刷新率都至少为 60Hz。不过,可以使用更高刷新率的显示器,并且通常用于游戏。

帧率和刷新率的区别:帧速率是计算机、视频游戏控制台、视频播放器或其他设备每秒发送到显示器的图像数量。同时,刷新率是显示器实际显示这些帧的速度。

从逻辑上讲,这意味着 GPU 生成帧的速率高于显示硬件可以消耗的速率。当显视器在屏幕上显示任何内容时,它会从称为帧缓冲区的内存区域读取帧。当显示硬件尚未完成绘制一帧并且 GPU 用其他即将到来的帧覆盖帧缓冲区时,我们会在屏幕上看到第一帧的一部分和第二帧的一部分。这称为屏幕撕裂。

通常,不会发现这种情况发生。但假设这种情况发生了,屏幕将在多次刷新后显示相同的帧。从视觉的角度来看,用户不会看到任何差异。

VSync 使用称为双缓冲的机制解决了这个问题。 它是一种将帧率与显示硬件的刷新率同步的机制 。它规定在当前刷新周期完成之前,GPU 不会将任何新帧复制到帧缓冲区。

GPU 使用一个缓冲区来写入新帧。它称为后缓冲区,以前使用的帧缓冲区现在称为前缓冲区。所以规则是: “仅当显示硬件的当前刷新周期完成时,帧才会从后缓冲区移动到前缓冲区。”确保看到流畅的 UI。

在 Jelly Bean 4.1 的 android 中引入了垂直同步,在引入 Vsync 之前,输入、动画和绘图没有同步发生。当输入出现时,它被处理,当有动画或视图发生变化时,然后处理它,这导致过多的 CPU *** 作,当有一些动画正在进行时,很难处理输入事件。

VSync 是 android Linux 内核以固定间隔定期发布的事件,其中输入处理、动画和窗口绘制以标准顺序同步发生。举个例子, VSync 信号以 16.66 ms 的间隔传送,相当于 60fps。输入处理、动画和窗口绘制在此信号到达时发生 。如果输入事件在 VSync 信号之前到达,它们将被排队 ,在动画完成, UI 重绘完成后在处理它。

Choreographer只是一个抽象,从较低的子系统接收定时脉冲(Vsync)并将命令传递给较高的子系统以渲染即将到来的帧。 每个具有 looper 的线程都会有一个单独的 Choreographer 实例。每个 HandlerThread 实例也会有它自己的 Choreographer。

Choreographer 类有一个回调 onVsync() 来处理 Vsync 信号。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7308019.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存