• 忘掉天地
  • 仿佛也想不起自己
  • 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-06-29 22:12 Aet 隐藏边栏 |   抢沙发  61 
文章评分 1 次,平均分 5.0

cef结构简介

CMakeLists.txt

Debug

  1. cef的debug构建,以及平台需要的其他库

include

  1. cef头文件

libcef_dll

  1. libcef_dll静态库的源代码,
  2. 用到cef的C++API的,都必须链接这个库

Release

  1. cef的release构建,以及平台需要的其他库

Resources

  1. 构建CEF需要的资源(Windows和Linux)

tests/cefclient

tests/cefsimple

tests/ceftests

C++ Wrapper

  1. libcef动态库导出的是C的API,将用户和CEF运行代码库隔离开来
  2. libcef_dll_wrapper,它将libcef导出的CAPI封装在C++API中,然后客户端应用程序链接这个libcef_dll_wrapper库

架构

概述

  1. cef3使用多个进程
    1. 处理窗口创建,UI和网络访问的主进程称为“浏览器”进程
    2. Blink渲染和JavaScript执行在单独的“渲染”进程
    3. 其他进程根据需要生成
  2. cef生成的单独进程使用进程间(IPC)进行通信
  3. cef3中的每个进程都运行着多个线程,如下:

TID_UI

  1. TID_UI,浏览器进程中的主线程(如果CefSetting.multi_threded_message_loop的值为false),调用了CefInitialize(),则该线程将与主应用程序线程

TID_IO

  1. 在浏览器进程中用于处理IPC和网络消息

TID_FILE

  1. 在浏览器进程中用于与文件系统交互(阻塞操作只能在此线程或客户端应用程序创建的CefThread上执行)

TID_FILE_BACKGROUND

  1. 用于阻止用户不会执行的任务

TID_FILE_USER_VISIBLE

TID_FILE_USER_BLOCKING

TID_PROCESS_LAUNCHER

  1. 用于启动和终止浏览器进程

TID_RENDERER

  1. 是渲染进程中的主线程(所有Blink和V8交互都必须在这个线程上进行)

其他

判断当前线程

同步

引用计数

字符串操作

  1. std::string之间

  1. std::wstring之间

  1. ASCII

  1. 某些cef结构体

命令行参数

  1. cef和chromium中的许多功能可以使用命令行参数进行配置
  2. 要禁用命令行参数的处理,要在CefSetting传给CefInitialize之前将CefSettingcommand_line_args_disabled设置为true
  3. 要在主应用程序内指定参数,要实现CefApp::OnBeforeCommandLineProcessing
  4. 要在应用程序特定的(非cef和chromium)命令行参数传递给子进程,要实现CefBrowserProcessHandler::OnBeforeChildProcessLaunch

应用结构

windows

linux

macOS

macOS Chromium Embedded Framework.framework

  1. 是一个无版本框架,包含所有 CEF 二进制文件和资源

macOS cefclient Helper

  1. 应用程序用于执行具有不同特征的单独进程(渲染器、插件等)
  2. 它需要有一个单独的应用程序包和 Info.plist 文件
  3. 他不会在dock里面显示

应用流程

  1. 提供一个入口点函数,用于初始化 CEF 并运行子进程可执行逻辑或 CEF 消息循环
  2. 提供CefApp的实现来处理特定于流程的回调
  3. 提供CefClient的实现来处理特定于浏览器实例的回调
  4. 调用 CefBrowserHost::CreateBrowser() 创建浏览器实例并使用CefLifeSpanHandler管理浏览器生命周期

入口函数

  1. CEF3 应用程序将运行多个进程。这些进程可以全部使用相同的可执行文件,也可以为子进程指定单独的可执行文件。该过程的执行从入口点函数开始
  2. 当启动子进程时,CEF 将使用命令行指定配置信息,该信息必须通过 CefMainArgs 结构传递到 CefExecuteProcess 函数中。CefMainArgs 的定义是特定于平台的。
  3. Linux和macOS

  1. Windows

单一可执行文件

  1. 当作为单个可执行文件运行时,需要入口点函数来区分不同的进程类型。Windows 和 Linux 支持单一可执行结构,但 MacOS 不支持。

  1. 单独的子进程可执行文件

消息循环集成

  1. CEF 还可以与现有应用程序消息循环集成,而不是运行自己的消息循环

方法一

  1. 定期调用 CefDoMessageLoopWork() 而不是调用 CefRunMessageLoop()
  2. 每次调用 CefDoMessageLoopWork() 都会执行 CEF 消息循环的单次迭代。使用这种方法时应小心
  3. 调用该方法的频率太低会使 CEF 消息循环陷入饥饿并对浏览器性能产生负面影响。过于频繁地调用该方法会对 CPU 使用率产生负面影响。有关高级使用详细信息,请参阅CefBrowserProcessHandler::OnScheduleMessagePumpWork

方法二

  1. 设置 CefSettings.multi_threaded_message_loop = true(仅限 Windows 和 Linux)
  2. 这将导致 CEF 在与主应用程序线程不同的线程上运行浏览器 UI 线程
  3. 使用这种方法,不需要调用 CefDoMessageLoopWork() 和 CefRunMessageLoop()
  4. CefInitialize() 和 CefShutdown() 仍应在主应用程序线程上调用
  5. 需要提供自己的机制来与主应用程序线程进行通信(参阅 cefclient_win.cpp 中的消息窗口用法)

Cef设置

  1. browser_subprocess_path
    1. 将为子进程启动的单独可执行文件的路径
  2. multi_threaded_message_loop
    1. 设置为 true 以使浏览器进程消息循环在单独的线程中运行
  3. command_line_args_disabled
    1. 设置为 true 以禁用使用标准 CEF 和 Chromium 命令行参数配置浏览器进程功能
  4. cache_path
    1. 缓存数据在磁盘上的存储位置。如果为空,内存缓存将用于某些功能,临时磁盘缓存将用于其他功能。如果指定了缓存路径,HTML5 数据库(例如 localStorage)将仅在会话之间保留
  5. locale
    1. 将传递给 Blink 的区域设置字符串。如果为空,将使用默认区域设置“en-US”。在 Linux 上,该值被忽略,其中区域设置是使用环境变量解析确定的,优先顺序为:LANGUAGE、LC_ALL、LC_MESSAGES 和 LANG。也可以使用“lang”命令行开关进行配置
  6. log_file
    1. 用于调试日志的目录和文件名。如果为空,则将使用默认名称“debug.log”,并将该文件写入应用程序目录。也可以使用“log-file”命令行开关进行配置
  7. log_severity
    1. 日志严重性。仅记录此严重级别或更高级别的消息。还可以使用“log-severity”命令行开关进行配置,其值为“verbose”、“info”、“warning”、“error”、“error-report”或“disable”。
  8. resources_dir_path
    1. 资源目录的完全限定路径。如果此值为空,则 cef.pak 和/或 devtools_resources.pak 文件必须位于 Windows/Linux 上的模块目录或 MacOS 上的应用程序包资源目录中。还可以使用“resources-dir-path”命令行开关进行配置。
  9. locales_dir_path
    1. 区域设置目录的完全限定路径。如果该值为空,则语言环境目录必须位于模块目录中。在 MacOS 上,此值将被忽略,其中包文件始终从应用程序包资源目录加载。也可以使用“locales-dir-path”命令行开关进行配置。
  10. remote_debugging_port
    1. 设置为 1024 到 65535 之间的值以在指定端口上启用远程调试。例如,如果指定 8080,则远程调试 URL 将为 http://localhost:8080。可以从任何 CEF 或 Chrome 浏览器窗口远程调试 CEF。还可以使用“远程调试端口”命令行开关进行配置。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2024-06-07
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享