chromium UI 简要解析

概述

chromium 源码十分庞大,本文只是简要介绍。 chrome 浏览器对使用者来说最直观的也是最先接触到的就是其 UI,而且会发现 chrome 客户端在各个平台上表现(UI 和操作)基本上完全一致。 结合其源码来看,chrome 自己实现了一套 UI 组件,可以充分解决外观不一致、功能受限、性能瓶颈、维护成本等问题。

View 基类

通过简单了解 Viewui/views/view.h) 类,会发现基本所有的基础组件(Button、Menu、Table等 ui/views/controls目录下)都继承自 View 类,该类有一个核心的虚函数 OnPaint函数,子类通过实现 OnPaint 函数来实现自己的绘制。

cpp 复制代码
virtual void OnPaint(gfx::Canvas* canvas);     // 绘制方法

在进一步了解 gfx::Canvas会发现,gfx::Canvas是 Chromium 中的 2D 图形绘制抽象层,它是一个高级的绘图 API 包装器,主要基于 Google 的 Skia 图形库构建。

浏览器 UI(browser UI)

上面所介绍的是 chrome 中整体跨平台 UI 组件的基本类型,而真正实现我们看到的浏览器 UI 在 chrome/browser/ui/ 目录中,该目录中有两个与 UI 视觉展示特别相关的模块:

  • Views实现 (chrome/browser/ui/views/) - 基于Views框架的具体UI实现,如下图中红色部分,主要的菜单入口以及其菜单的二级目录。整体界面的主要入口在 browser_view.hchrome/browser/ui/views/frame)。
  • WebUI (chrome/browser/ui/webui/) - 基于Web技术的UI组件,类似在地址栏中输入如下的部分,跳转到 chrome 自带的页面,它使用HTML、CSS、JavaScript 等 Web 技术来构建 Chrome 浏览器的各种内置页面和设置界面。

Compositor

ui/compositor 目录下。在未深入了解源码之前,一直没有想到在 UI 层居然也有一个 Compositor,对于我当前的认知来说,这个合成器是专门给浏览器窗口、工具栏、菜单、按钮、UI动画等工作的。 从 cc/README.md可以看出,render 中的 Blink 和 ui 都是使用 cc。

plain 复制代码
This directory contains a compositor, used in both the renderer and the browser. In the renderer, Blink is the client. In the browser, both ui and Android browser compositor are the clients.

从描述来看,大概层次关系如下。

相关推荐
BigTopOne6 小时前
【WebRtc】DTLS-SRTP 加密完整流程详解
前端
陈随易6 小时前
pm2 替代品,nodejs&bun 线上部署必备工具
前端·后端·程序员
单线程_016 小时前
从案例分析 Vue3 Tokenizer 源码一
前端·javascript·vue.js
BigTopOne6 小时前
【WebRtc】-ICE Candidate 与 STUN/TURN 原理详解
前端
l1258656 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
码视野6 小时前
基于 Spring Boot + Vue3 的【大学英语四六级 (CET-4/6) 作文智能评分与句式润色系统】设计与实现(含PRD/三端高保真源码/大屏)
java·前端·人工智能·spring boot·后端·vue3
大模型码小白6 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
xm_xm_xm_17 小时前
react17版本以前类组件常用操作
前端·javascript·react.js
ly76898 小时前
Web 性能优化实战:从 Core Web Vitals 到工程化性能治理
前端·性能优化
冬奇Lab9 小时前
一天一个开源项目(第200篇):next-forge - 生产级 Next.js SaaS 启动模板
前端·前端框架·开源