Cef 架构
cef支持各種語言和多種操作系統。在設計的時候充分考慮了性能和易用性。cef核心功能提供了c和c++的接口。cef提供了和主程序之間的通信能力(利用 custom plugins, protocols,javascrpit object 和 javascript extensions)。主應用程序可以選擇性的使用控制 資源的加載,切換, context menus, printing等。
依賴
chromium
webkit
v8
skia
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;
在使用線程的時候需要注意如下幾點:
千萬不要阻塞UI線程
UI線程會任務是主線程,當 CefSettings.multi_threaded_message_loop = false的時候。
所有的webkit和V8的交互必須用 TID_RENDERER線程
CefPostTask 方法可以再不同線程中進行異步調用
接口
CefApp,此接口用來傳遞到CefInitialize(),和允許應用程序定制全局,如資源加載,代理。這些功能是由所有進程共享的,有些必須實現瀏覽器的過程中,必須在渲染過程中執行。見詳情頭文件的注釋。
CefClient,此接口用來傳遞到CefCreateBrowser() or CefCreateBrowserSync(),和充當單獨CEF Browser事例和客戶端應用程序的連接,也負責請求和顯示處理的接口。請求處理,顯示處理等額外的接口,通過這個接口暴露。
CefBrowser,公開由瀏覽器提供的功能。包括前進后退導航,來源檢索,加載請求等,一個CefBrowser可能有一到多個子類的CefFrame對象。在一個特定的過程或一個特定的線程必須調用一些方法,所以仔細閱讀文檔。
CefBrowserHost - 公開有關運行browser進程中唯一可用的browser窗口的功能。例如,檢索本地父窗口句柄,或銷毀browser窗口。
CefRenderProcessHandler - 公開WebKit和V8對渲染進程中應用程序的集成能力。通過CefApp返回此對象的一個??實例。
進程注意事項
CEF3使用了很多不同的進程:
Broser process- 這個進程可以認為是應該程序的主進程,當調用CefInitialize()的時候建立
Render process- web容器(webkit和v8)在此進程中執行
plugin process- 插件(如 Flash)
GPU process-GPU渲染進程
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的實現者
總結
- 上一篇: 机器人砂型铸造_安诺伊智能机器人丨助力压
- 下一篇: 飞塔防火墙密码忘记重置方法