Cef 架構


cef支持各種語言和多種操作系統。在設計的時候充分考慮了性能和易用性。cef核心功能提供了c和c++的接口。cef提供了和主程序之間的通信能力(利用 custom plugins, protocols,javascrpit object 和 javascript extensions)。主應用程序可以選擇性的使用控制 資源的加載,切換, context menus, printing等。

依賴

  1. chromium
  2. webkit
  3. v8
  4. skia
  5. angle

線程注意事項

CEF線程有如下幾種

typedef enum {
	TID_UI,
	TID_DB,
	TID_FILE,
	TID_FILE_USER_BLOCKING,
	TID_PROCESS_LAUNCHER,
	TID_CACHE,
	TID_IO,
	TID_RENDERER,
} cef_thread_id_t;

在使用線程的時候需要注意如下幾點:

  1. 千萬不要阻塞UI線程
  2. UI線程會任務是主線程,當 CefSettings.multi_threaded_message_loop = false的時候。
  3. 所有的webkit和V8的交互必須用 TID_RENDERER線程
  4. CefPostTask 方法可以再不同線程中進行異步調用

接口

  1. CefApp,此接口用來傳遞到CefInitialize(),和允許應用程序定制全局,如資源加載,代理。這些功能是由所有進程共享的,有些必須實現瀏覽器的過程中,必須在渲染過程中執行。見詳情頭文件的注釋。
  2. CefClient,此接口用來傳遞到CefCreateBrowser() or CefCreateBrowserSync(),和充當單獨CEF Browser事例和客戶端應用程序的連接,也負責請求和顯示處理的接口。請求處理,顯示處理等額外的接口,通過這個接口暴露。
  3. CefBrowser,公開由瀏覽器提供的功能。包括前進后退導航,來源檢索,加載請求等,一個CefBrowser可能有一到多個子類的CefFrame對象。在一個特定的過程或一個特定的線程必須調用一些方法,所以仔細閱讀文檔。
  4. CefBrowserHost - 公開有關運行browser進程中唯一可用的browser窗口的功能。例如,檢索本地父窗口句柄,或銷毀browser窗口。
    CefRenderProcessHandler - 公開WebKit和V8對渲染進程中應用程序的集成能力。通過CefApp返回此對象的一個​​實例。

進程注意事項

CEF3使用了很多不同的進程:

  1. Broser process- 這個進程可以認為是應該程序的主進程,當調用CefInitialize()的時候建立
  2. Render process- web容器(webkit和v8)在此進程中執行
  3. plugin process- 插件(如 Flash)
  4. GPU process-GPU渲染進程
  5. Utility process- 各種其他任務在這個進程中跑。

所有關於chrome 進程的資料可以在這里這里找到。

CefBrowser 和 CefFrame 在browser和render進程中都存在,並且傳遞一系列callbacks。 CefProcessMessage能夠在browser進中利用CefBrowser::SendProcessMessage 函數發出, 並且在CefClient::OnProcessMessageRecieved 和CefRenderProcessHandler::OnProcessMessageRecieved 接收。

重要的細節

CEF3 有如下幾個比較重要的類:

  • CefMainDelegate - 用於普通進程的邏輯過程
  • CefContentClient- 在普通進程 展現Content Api的回調。
  • CefContext-在browser進程中,展現全局的CEF上下文。 一個單獨的CefContext對象時由CefInitialize()建立,有CefShutdown銷毀。
  • CefBrowserMainParts- browser 進程的邏輯
  • CefContentBrowserClient-在browser 進程展現Content Api的回調。
  • CefBrowserHostImpl-是CefBrowserHost 的實現
  • CefContentRendererClient- 在render 進程中展現Content Api的回調
  • CefBrowserImpl- CefBrowser的實現者


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM