阅读笔记:Multi-threaded Rasterization in the Chromium Compositor

news2024/12/23 12:30:05

Multi-threaded Rasterization in the Chromium Compositor PPT 原始链接:

https://docs.google.com/presentation/d/1nPEC4YRz-V1m_TsGB0pK3mZMRMVvHD1JXsHGr8I3Hvc/edit?usp=sharing

PPT主要介绍了Chromium浏览器中使用多线程光栅化(Impl-side painting)的机制,这是一种提高渲染性能和用户体验的技术。以下是涉及的关键知识点汇总:

  1. 多线程光栅化概念:也称为Impl-side painting或多线程绘制,是Chromium渲染引擎(cc)中用于加速页面渲染过程的一项技术。它通过将光栅化任务从主线程移到合成器线程来减少渲染延迟和提高页面滚动时的流畅性。

  2. 架构概述:文档描述了cc(Compositor)如何与Blink(负责JavaScript、布局等)以及GPU进程交互,并且引入了两个树(活动树和待激活树)的概念,用以实现异步渲染和减少检查板效应(checkerboarding)。

  3. 线程分工:主线程处理JavaScript执行、样式重计算、布局、图像解码和部分内容的光栅化;而合成器线程处理滚动事件、更新图层树和快速重绘。

  4. 双树结构:引入了活动树和待激活树的双树模型,使得在当前帧内容还在光栅化的同时,可以准备下一帧的内容。待激活树一旦准备充分,就会激活并替换活动树,提高了渲染效率。

  5. Tile Manager:负责管理所有的图块,包括优先级排序、GPU内存分配、触发光栅化和解码任务到RasterWorkerPool。它还具备优化策略,如跳过纯色图块的光栅化、对低成本图块进行同步光栅化以减少延迟,并利用SkPicture进行更智能的分析决策。

  6. 资源管理与优化:提到了对上传操作的优化,例如在用户未进行滚动或缩放操作时强制完成上传以快速显示新帧,以及通过资源池重用旧资源来提升性能。

  7. 问题与挑战:文档也提到了一些实施多线程光栅化带来的挑战,比如遮挡剔除(occlusion culling)的架构难题、更多并行可能导致的额外延迟,以及对Blink中像素级优化的无效化。

  8. 光栅化与纹理生命周期:详细对比了实施多线程光栅化前后的纹理处理流程,包括减少了复制次数、采用EGL图像语义,以及Skia在记录时对光栅化比例的无感知要求。

  9. 设计哲学:强调了“无特殊案例”原则,即Tile Manager需要考虑所有可能的图块,包括那些暂时不可见但未来可能需要的,以支持预渲染和减少页面滚动时的空白现象。

  10. 性能改进目标:包括减少检查板效应、优化内存管理、更快的上传速度和更智能的图块优先级处理。此外,还计划增加低质量模式以实现快速低分辨率渲染,以及改进Tile Manager性能等。

浏览器渲染引擎中图层记录(Recording)和图块化(Tiled)的一些抽象概念以及它们在历史上的发展:

  1. Recording Abstraction: 这里提到的“Recording”是指浏览器渲染引擎记录下页面内容如何绘制的过程。这通常涉及到将页面中的元素、样式等抽象成一系列的绘图命令。这些命令随后可以被用来在屏幕上重现这些内容。

  2. Projection of the viewport into the layer: 这意味着渲染引擎将当前用户可见的部分(视口)映射到一个或多个图层上。一个图层可以理解为页面的一个独立部分,它可以单独绘制和缓存。

  3. Recordings around the viewport: 为了优化性能和响应速度,浏览器不会记录整个页面的所有内容,而是只记录用户当前看到的视口区域以及周围一定距离的部分。这样可以确保用户滚动或者操作时,相邻的内容可以迅速显示出来。

  4. Dropping recordings on invalidation: 如果页面的一部分内容发生了变化(称为“失效”),与之相关的记录会被丢弃。这是因为这些记录不再反映页面的最新状态,需要重新进行记录。

  5. Historical progression: 早期,浏览器可能会将整个图层作为一个单一的SkPicture(Skia库中的一个类,代表一系列的绘图命令)进行记录。这种方法的缺点是,即使只有很小的更新,也需要重新记录整个图层,导致效率低下。

  6. PictureList: 为了解决这个问题,Android浏览器的开发者提出了“PictureList”的概念。通过将图层分割成多个小的记录单元,可以实现只更新有变化的部分。这样既减少了记录的时间,也减少了需要重绘的内容量。

  7. Why tiled?: 图块化是将图层划分成更小的区块(tiles),每个区块可以独立记录和缓存。这种方法的优点是,即使某些绘制操作很慢或者图层很大,也可以更有效地管理和渲染。对于一些需要在记录时解码的内容(例如动画GIF)或者某些特殊效果,图块化可以提供更好的性能表现。

  8. Heuristics for minimizing complexity: 为了进一步优化性能,使用了一些启发式算法来减少“图层堆”(pile,可能指由多个图块组成的结构)的复杂性。例如,如果一次失效影响到了太多的小图块,渲染引擎可能会将它们合并为一个更大的区块,然后对这个区块进行新的记录。

  9. cc::DebugState setting: 这里提到的是一个编译时的设置,它可能属于Chrome的组件(cc代表Chrome Compositor),用于调试和查看图层记录的边界。

  • Skia: Skia是一个开源的2D图形库,用于在各种平台上绘制文字、图形等。它是Chrome浏览器以及Android操作系统中的2D渲染引擎的核心组成部分。

  • Invalidation: 在浏览器中,当一部分内容因为某些操作(如元素样式更改)需要重新绘制时,这部分内容会被标记为“失效”。失效机制确保了只有必要的部分被重新绘制,避免不必要的性能开销。

  • Rasterization: 渲染引擎将记录的绘图命令(如SkPicture)转换为像素数据,以便显示在屏幕上,这个过程称为光栅化(rasterization)。对于图块化的内容,每个图块可以独立光栅化。

  • Performance Optimization: 上述所有技术和策略的目的都是为了优化浏览器的性能。通过仅记录和光栅化用户可能看到的内容,减少了内存使用和提高了渲染速度,从而为用户提供了更流畅的浏览体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1793850.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何快速的将Excel定义的表结构变成MySQL的建表语句

如何快速的将Excel定义的表结构变成MySQL的建表语句 最近需求有点多啊,做一个小需求就有一堆表结构,一个一个实行CV大法,实在太伤身体了,有没有能够快速便捷的方法将一大堆Excel表转换成MySQL的表结构建表语句呢,网上…

Gmail 两步验证+应用专用密码登录

1、为什么做这个? 如果需要使用Gmail作为应用程序的邮件发送者,必须进行相关配置,否则不能直接使用 2、怎么做? 谷歌邮箱(gmail.com):两步验证应用专用密码登录 - 来发信 - 您的外贸拓客好帮…

递归在多级数据结构中的简单应用

哈喽,我是小码,半年多没更新了,这段时间换了新工作,工作也很忙。后续会尽量多写点,坚持确实是一件很难,很酷的事情。最近在公司负责开发商品有关的开发,商品包含类型、款式等属性,而…

从零开始发布你的第一个npm插件包并在多项目中使用

引言 在开源的世界里,每个人都有机会成为贡献者,甚至是创新的引领者。您是否有过这样的想法:开发一个解决特定问题的小工具,让她成为其他开发者手中的利器?今天,我们就来一场实战训练,学习如何将…

多链路聚合设备在自然灾害应急能力提升工程基层防灾项目内的应用

在近几年信息技术的飞速发展,面对应急通信和指挥调度时需要移动化无线通信技术来做支撑,多链路聚合设备在中间的作用至关重要,实现从车到车、人到车、车到中心的多样化应用场景进行数据图像的无线传输和多节点组网方案需求,来满足…

Linux[高级管理]——使用源码包编译安装Apache网站

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年5月31日14点20分 🀄️文章质量:96分 在Linux系统上编译和安装Apache HTTP Server是…

乡村振兴与脱贫攻坚相结合:巩固拓展脱贫攻坚成果,推动乡村全面振兴,建设更加美好的乡村生活

目录 一、引言 二、巩固拓展脱贫攻坚成果 1、精准施策,确保稳定脱贫 2、强化政策支持,巩固脱贫成果 3、激发内生动力,促进持续发展 三、推动乡村全面振兴 1、加快产业发展,增强乡村经济实力 2、推进乡村治理体系和治理能力…

2.6倍!WhaleTunnel 客户POC实景对弈DataX

作为阿里早期的开源产品,DataX是一款非常优秀的数据集成工具,普遍被用于多个数据源之间的批量同步,包括类似Apache DolphinScheduler的Task类型也对DataX进行了适配和增强,可以直接在DolphinScheduler里面利用通用的数据源调用Dat…

Java面试——专业技能

优质博文:IT-BLOG-CN 一、简单讲下 Java 的跨平台原理 由于各个操作系统(Windows,Linux等)支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟…

Python对获取数据的举例说明

当使用Python来获取数据时,有许多不同的方法和库可以根据你的需求来选择。以下是一些常见的示例,说明如何使用Python来从各种来源获取数据。 1. 从网站或API获取JSON数据 你可以使用requests库从网站或API获取JSON格式的数据。例如,从某个API…

C++ | Leetcode C++题解之第128题最长连续序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {unordered_set<int> num_set;for (const int& num : nums) {num_set.insert(num);}int longestStreak 0;for (const int& num : num_set) {…

accelerate 笔记:对齐不同设备配置的性能

在TPU、多GPU和单GPU上使用accelerate运行相同的脚本和相同的batch_size&#xff0c;可能结果是不一样的那应该怎么做呢? 1 设置正确的种子 确保在所有分布式情况下使用 utils.set_seed() 完全设置种子&#xff0c;以使训练可复现 from accelerate.utils import set_seedse…

【C++进阶】深入STL之string:模拟实现走进C++字符串的世界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C模板入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀STL之string &#x1f4d2;1. string…

男士什么牌子的内裤穿着舒服?五款实力派男士内裤分享

你是否曾因为内裤不透气、材质不佳而倍感烦恼&#xff1f;男士内裤作为贴身衣物&#xff0c;其舒适度和质量至关重要。在如今市场上品牌众多、材质各异的背景下&#xff0c;如何挑选一款合适的男士内裤成为了一大难题。 以下是测评过的部分男士内裤&#xff1a; 近期&#xff…

ArUco与AprilTag 标签

一、简介 在许多计算机视觉应用程序中&#xff0c;姿势估计非常重要&#xff1a;机器人导航&#xff0c;增强现实等等。 该过程基于发现真实环境中的点与其2d图像投影之间的对应关系。 这通常是一个困难的步骤&#xff0c;因此通常使用合成或基准标记来简化操作。 最受流行的…

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动

20240606在Toybrick的TB-RK3588开发板的Android12下确认HDMI的驱动 2024/6/6 9:48 【原文是在RK3328的Android7.1下写的。我将它升级成为RK3588的Android12了】 RK平台主要采用 FB 和 DRM 两种显示框架。与此相对应&#xff0c; HDMI 也有两套驱动。 FB&#xff1a; LINUX 3.10…

技巧:合并ZIP分卷压缩包

如果ZIP压缩文件文件体积过大&#xff0c;大家可能会选择“分卷压缩”来压缩ZIP文件&#xff0c;那么&#xff0c;如何合并zip分卷压缩包呢&#xff1f;今天我们分享两个ZIP分卷压缩包合并的方法给大家。 方法一&#xff1a; 我们可以将分卷压缩包&#xff0c;通过解压的方式…

【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南

【CentOS 7】挑战探索&#xff1a;在CentOS 7上实现Python 3.9的完美部署指南 大家好 我是寸铁&#x1f44a; 总结了一篇【CentOS 7】挑战探索&#xff1a;在CentOS 7上实现Python 3.9的完美部署指南详细步骤✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 此篇教程只适用于p…

linux网络 dns域名解析

目录 DNS 域名体系结构 如何实现域名解析 正向解析 反向解析 主从服务器解析 bond 网卡 DNS 是域名系统的简称 域名和ip地址之间的映射关系 互联网中 IP地址是通信的唯一标识 逻辑地址 访问网站 域名 IP地址不好记 域名朗朗上口 好记 域名解析的目的就是为了实现 访…

搭建高可用k8s

高可用只针对于api-server&#xff0c;需要用到nginx keepalived&#xff0c;nginx提供4层负载&#xff0c;keepalived提供vip(虚拟IP) 系统采用openEuler 22.03 LTS 1. 前期准备 因为机器内存只有16G&#xff0c;所有我采用3master 1node 1.1 修改主机配置&#xff08;所有节…