回顧
DDE 在 V15 時期,使用 Mutter 作為帶合成器的窗管,以及 Metacity 這種不帶合成器的窗管,一個是在高性能設備上使用,一個是為低性能設備上使用。
在 V20 時期,DDE 更換 KWin 當窗口管理器,由于 KWin 自帶有關閉合成器的模式,所以 DDE 也放棄了 Metacity 作為備用窗管的選項。
痛點
從社區收集到的體驗報告,絕大部分用戶不滿意在屏幕縮放上,一部分用戶不滿意在動畫僵硬、死板、卡頓等用戶體驗上。
在以往版本的 DDE 中,受限于 X11 的架構,無法針對不同屏幕使用不同的縮放。很多用戶可能是 1080p 的筆記本屏幕,外接一個 2K 或者 4K 的顯示器,在 X11 下,用戶只能照顧高分辨率的屏幕,犧牲低分辨率屏幕的使用,例如開啟兩倍屏幕縮放,在高分辨率下的屏幕顯示剛剛好,但低分辨率屏幕已經無法查看任何一個正常的窗口了。
Treeland
Treeland 是 deepin 社區開發的一款基于 Wayland 協議的顯示服務器,Treeland在底層使用 wlroots 作為 Wayland 的基礎庫,不修改 wlroots 的代碼,也就意味著可以隨時同步上游進度,獲得新的功能與修復。上層使用 Qt,可以充分利用已有的大量 Qt 開發者,不再需要一直有專人負責特定項目,讓 DDE 的技術棧更加統一。
優化
1屏幕縮放
Treeland 直接管理屏幕,支持為不同屏幕設置獨立的縮放比例,從而確保高分辨率和普通分辨率的屏幕可以完美共存。通過擴展協議,Treeland 還支持浮點數縮放比例(如 1.25 或 1.5),讓各種分辨率下的顯示效果都能得到良好支持。
當窗口在不同屏幕間移動時,Treeland 會實時根據窗口所在位置調整其縮放比例。當窗口跨越兩個屏幕時,系統會按照各自的縮放比例分別渲染窗口的不同部分,保證顯示流暢且過渡自然。這種設計讓用戶在多屏工作時始終獲得清晰、易用的界面體驗。
2復制模式
在 X11 下,復制模式是通過將兩個屏幕設置為相同分辨率并重疊坐標來實現的。然而,這種方法存在以下顯著劣勢:
重復渲染
X11 需要為兩個屏幕分別渲染相同的畫面,這種資源利用方式非常低效。相比之下,Treeland 可以在 DRM 層面直接將同一份畫面數據發送到多個屏幕,避免重復渲染,從而大幅降低 GPU 負載,提升性能。
畫面壓縮與變形
當兩個屏幕分辨率差異較大時,X11 會強制調整分辨率以保持一致,導致畫面壓縮或變形。Treeland 則采用原始分辨率輸出,通過在屏幕上下或左右留出空白區域(letterboxing/pillarboxing)的方式保持畫面比例,有效避免畫面失真,優化復制模式下的顯示效果。
增強的視覺效果
Treeland 不僅保持畫面比例,還能在空白區域(如上下或左右空隙)繪制額外內容,比如模糊處理后的桌面壁紙。這種設計既提升了美觀性,又改善了用戶體驗,使復制模式更加精致自然。
總的來說,Treeland 的實現方案在性能、畫面質量和用戶體驗等方面都顯著優于傳統的 X11 復制模式,為多屏應用場景帶來了重要優化。
3窗口效果
Treeland 使用 QtQuick 作為渲染層,然而 QtQuick 自帶的部分組件性能并不太好,以下是其針對 QtQuick 自帶組件性能問題的改進措施與實現細節。
圓角處理優化
QtQuick 的 Rectangle 組件支持圓角效果,但受限于只能同時對四個角進行操作,且性能存在一定瓶頸。Treeland 為了解決這一問題,實現了自定義的圓角裁剪控件:
異形窗口支持:相比 QtQuick 原生 Rectangle 的四角統一裁剪,Treeland 的自定義控件支持不規則圓角設計(如 DTK 的異形窗口效果),大幅提升了界面靈活性。
算法優化:
新的圓角造型算法使得幾何頂點數量減少 50%,降低了 GPU 的頂點處理負擔;
三角細分效率提高了 100%,進一步優化了 GPU 渲染性能。
抗鋸齒改進:引入自研抗鋸齒算法,相比傳統的 4xMSAA 算法,減少了 25% 的片元著色器計算量,同時保持視覺質量。
模糊效果重構
QtQuick 本身對模糊效果的支持較弱,性能表現難以滿足復雜場景需求。Treeland 針對模糊效果進行了徹底重構:
顯存訪問優化:通過直接從顯存中讀取組件下方的圖像數據,避免了多余的 CPU-GPU 數據交換,提高了整體模糊處理效率。
融合模糊算法:
將多種模糊算法(如高斯模糊和雙邊模糊)進行融合,以實現更好的性能和視覺平衡;
針對動態內容場景,采用增量模糊計算方式,進一步減少了幀間計算成本。
陰影效果優化
QtQuick 提供了 BorderImage 組件,能通過九宮格拉伸技術為組件增加裝飾效果。但原生機制在大規模應用時性能不足。Treeland 的改進如下:
材質復用:利用 ImageProvider 手動控制陰影貼圖資源的創建和管理。在多個組件大小相同的情況下,共享同一份材質資源,避免重復加載,節省顯存;
實時更新:對于動態調整大小的窗口,Treeland 實現了實時更新的陰影裁剪算法,無需完全重新生成貼圖,進一步優化了性能;
視覺一致性:陰影的過渡效果與窗口動畫聯動,增強了整體界面的一致性和流暢性。
動畫效果改進
Treeland 在動畫實現上直接采用 QtQuick 的 State 和 Transition 機制,同時結合自定義優化,實現了流暢的界面動態效果:
狀態驅動:
使用 State 定義組件的不同狀態(如窗口最大化、最小化、還原等);
通過 Transition 配置狀態切換時的屬性變化邏輯(如位置、大小、透明度等)。
動畫增強:
借助 QtQuick 動畫組件(如 NumberAnimation 和 PropertyAnimation),實現了高幀率的動畫過渡;
自適應動畫曲線,根據窗口的大小和目標狀態調整動畫時長,提供更貼合用戶直覺的交互體驗。
通過以上優化,Treeland 不僅顯著提升了組件的渲染效率,還在視覺效果和用戶體驗上實現了跨越式進步。具體表現為:
GPU 性能提升:相比 QtQuick 原生組件,Treeland 的渲染性能整體提高了;
資源利用率優化:通過顯存訪問優化和材質復用技術,大幅降低了內存和顯存占用,為低性能設備也帶來了良好的兼容性。
4截圖錄屏
Treeland 提供了高效的快速區域選擇功能,支持吸附窗口以自動確定選區邊界,使操作更加直觀便捷。系統監視器可通過該接口快速獲取特定窗口的相關信息,簡化信息提取的流程。
此外,Treeland 通過引入 DMA Buffer 技術,大幅提升了數據復制的效率,支持跨屏幕截圖功能,無需客戶端處理復雜的窗口邏輯。為保護用戶隱私,Treeland 對截圖和錄屏返回的信息進行嚴格管控,自動抹除窗口的敏感信息,杜絕隱私泄露的風險。
在錄屏功能方面,Treeland對錄屏會話進行了全面監控,實時提醒用戶當前處于錄屏狀態,有效避免用戶在不知情的情況下泄露隱私。這種設計還彌補了 X11 環境下程序可直接獲取屏幕數據所導致的潛在隱患,顯著增強了系統的隱私保護能力。
5多用戶
Treeland 的多用戶優化是其核心設計目標之一。在傳統的 LightDM 模式下,不同用戶之間的切換依賴于 tty 層面前端程序的控制權轉移,每個用戶獨占一個 tty 進行畫面顯示。然而,這種方式存在明顯的問題:
切換延遲與閃爍
由于 tty 切換需要進行底層 DRM 和顯卡驅動的操作,屏幕緩沖區會被不同程序覆蓋,導致屏幕出現閃爍甚至短暫黑屏的現象。
資源消耗
每個用戶運行獨立的一套進程組,包括窗口管理器、任務欄、文件管理器等。這不僅占用大量內存,還要求每個用戶運行獨立的鎖屏界面,額外增加了資源負擔。
信息同步難題
為維持界面的一致性,用戶切換時需要同步跨用戶的狀態,這帶來了實現上的復雜性。
Treeland 在設計中引入了 DDM(Deepin Display Manager),通過重新定義工作流程,解決了上述問題:
集中式合成
Treeland 被獨立抽離為一個統一的畫面合成器,各用戶的窗口畫面都通過統一機制發送到 Treeland 進行最終的合成和顯示。這種架構徹底消除了多 tty 切換的閃爍問題。
內存優化
不再需要為每個用戶單獨運行窗口管理器、鎖屏界面等進程,大幅減少了內存開銷。
狀態統一
由于所有用戶的界面由 Treeland 集中管理,切換用戶時無需進行跨進程的狀態同步,簡化了實現。
即便在 LightDM 下,Treeland 仍然可以通過用戶級別的 systemd 服務正常運行,作為一個獨立的 Wayland 合成器使用。然而,在這種模式下,Treeland 無法實現 DDM 的多用戶優化功能,僅具備單用戶 Wayland 合成器的基礎能力。
Treeland 的多用戶優化通過集中式合成與資源整合,顯著改善了用戶切換的體驗,既提升了系統性能,又簡化了實現邏輯。雖然在傳統 LightDM 環境中無法完全發揮優勢,但其靈活的架構設計確保了廣泛的適用性和良好的兼容性。
6手勢
Treeland 在手勢方面也有極大的進步,以下是 Treeland 和 X11 以及原生 Wayland 協議之間的對比:
X11 的手勢事件處理
手勢事件由 libinput 生成,經由 XInput2 轉發至 X Server。
X Server 解析事件后,依據焦點窗口的配置,將事件分發給客戶端應用程序或窗口管理器(如 KWin)。
KWin 通過 XInput2 接口處理全局手勢,包括:
注冊輸入管理器;
識別全局手勢;
阻止手勢事件冒泡。
由于事件需在 libinput、X Server 和窗口管理器之間多次傳遞,造成較高延遲,導致手勢動畫不夠流暢且跟手性差。
Wayland 的手勢事件處理
手勢事件由 libinput 直接傳遞至 Wayland 合成器,無需經過中間轉發(如 XInput2);
合成器(如 Treeland)可直接處理手勢事件,從而提升響應速度和復雜手勢支持能力。
Treeland 的優化
使用 Waylib 將 libinput 輸入事件轉換為 Qt 事件;
利用 Qt 原生手勢事件支持,將窗口或動畫組件與手勢處理器綁定,通過 QtQuick 實現流暢的跟手動畫。
Wayland 采用直接事件處理機制,簡化了手勢事件的傳遞路徑,大幅提升響應速度,有效降低延遲。相比之下,X11 的復雜交互流程使手勢體驗欠佳。Treeland 結合 Wayland 和 QtQuick 技術,實現了更出色的手勢動畫實時性和跟手性,帶來現代化的用戶體驗。
總結
總的來說,Treeland 作為新一代的 Wayland 合成器,在多個方面都實現了重大突破:
通過狀態驅動和動畫增強,顯著提升了視覺效果和交互體驗;
引入 DMA Buffer 和隱私保護機制,讓截圖錄屏功能更加安全高效;
創新性地采用 DDM 和集中式合成,優化了多用戶切換體驗;
基于 Wayland 和 QtQuick 技術,實現了更流暢的手勢控制系統。
Treeland 的創新不僅顯著提升了系統性能,為用戶帶來更現代化、更安全的使用體驗,更充分展現了其在 Linux 桌面環境中巨大的發展潛力。
-
顯示器
+關注
關注
21文章
5004瀏覽量
140264 -
服務器
+關注
關注
12文章
9287瀏覽量
85847 -
管理器
+關注
關注
0文章
248瀏覽量
18575
原文標題:deepin 25 Preview丨Treeland:更快、更流暢
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論