Cef 架構

sld666666發表於2014-12-02

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的實現者

相關文章