當前位置:
首頁 > 最新 > Chrome瀏覽器中的GPU及內存運行

Chrome瀏覽器中的GPU及內存運行

GPU運行篇

整個瀏覽器,從上層通過DOM組織的樹形結構,來管理整個元素的繪製。DOM中的每一個對象,會在渲染過程中關聯到Render Object類。Render Object類下會分布Render Layer,Rander Layer的內容在底層會渲染到 Graphics Layer。

在Graphics Layer以下就是具體的繪製操作,這些繪製操作對於上層(應用網頁)和下層(顯示端)是透明的。通過調用google的圖形庫skia,完成中間的渲染、繪製環節。

chrome的GPU,是多進程運行的,每個進程將有一個或多個Granphic Layer的操作,將所有渲染繪製的單元視為點陣圖(SkBitmap類)進行拷貝、混合操作。整個渲染、繪製過程都是由一個單獨進程完成的,也可以認為是C/S結構中的Server端,將所有的渲染(繪製)命令(Command),通過進程間通信轉換成圖形上下文(Graphics Context)進行操作。其內存由共享內存申請。當所有的渲染繪製操作都完成後,此進程將其搬到顯示設備進行顯示。

2. 內存篇

GPU的內存都通過GpuMemoryBufferImplSharedMemory類進行管理(content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc文件中)。Chrome瀏覽器中GPU的繪製,也可以認為是一種C/S模式,幾乎所有的內存都是客戶端(Client)通過共享內存的方式申請。這樣繪製進程(Server端)就可以通過共享內存的方式進行訪問。

通過SharedMemory類來進行對共享內存空間的統一管理(base/memory/shared_memory.h),最初通過CreateAndMapAnonymous方法(base/memory/shared_memory_posix.cc)創建並映射(Map)出相應內存空間。

如在Linux系統上具體執行,在shared_memory_posix.cc文件中的SharedMemory類(base/memory/shared_memory.h),通過CreateAnonymousSharedMemory方法創建臨時文件(CreateAndOpenFdForTemporaryFile方法):

而後設置所創建內存的大小:

ftruncate(fileno(fp.get()), options.size)

這樣每個進程創建所需要繪製的內存空間,而後通過MapAt方法,將內存數據提供給上層應用使用:

使用周期結束後,通過Unmap方法,調用

munmap(memory_, mapped_size_)

對此段內存解除映射。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 喬治的達摩院 的精彩文章:

TAG:喬治的達摩院 |