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

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.rhkb.cn/news/345429.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于NodeJs 的Vue安装和创建项目

基于NodeJs 的Vue安装和创建项目 一、Node.js的下载与安装 下载地址: https://nodejs.org/en/download/prebuilt-installer 安装完之后,启动 cmd命令行,验证 Node.js 是否安装成功 二、配置npm的全局模块的存放路径以及缓存的路径 注&…

【简单介绍下DALL-E2,什么是DALL-E2?】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【数据结构】 -- 堆 (堆排序)(TOP-K问题)

引入 要学习堆,首先要先简单的了解一下二叉树,二叉树是一种常见的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。它具有以下特点: 根节点(Root):树的顶部节…

idea如何根据路径快速在项目中快速打卡该页面

在idea项目中使用快捷键shift根据路径快速找到该文件并打卡 双击shift(连续按两下shift) -粘贴文件路径-鼠标左键点击选中跳转的路径 自动进入该路径页面 例如:我的实例路径为src/views/user/govType.vue 输入src/views/user/govType或加vue后缀src/views/user/go…

Cweek4+5

C语言学习 十.指针详解 6.有关函数指针的代码 代码1:(*(void (*)())0)(); void(*)()是函数指针类型,0是一个函数的地址 (void(*)())是强制转换 总的是调用0地址处的函数,传入参数为空 代码2:void (*signal(int, void(*)(int))…

以客户为中心:消费电子行业的产品研发之道

在消费电子行业这片快速变化的领域中,产品的迭代更新和技术的创新是推动行业不断前进的动力。然而,随着市场的日益成熟和消费者需求的多样化,如何确保产品能够满足目标用户的需求,成为摆在每一个产品研发团队面前的难题。本文将探…

JVM垃圾收集器和性能调优

目标: 1.JVM垃圾收集器有哪几种? 2.CMS垃圾收集器回收步骤。 一、JVM常见的垃圾回收器 为什么垃圾回收的时候需要STW? 标记垃圾的时候,如果不STW,可能用户线程就会不停的产生垃圾。 1.1 单线程收集 Serial和SerialOld使用单…

如何下载BarTender软件及详细安装步骤

BarTender是美国海鸥科技推出的一款优秀的条码打印软件,应用于 WINDOWS95 、 98 、 NT 、 XP 、 2000 、 2003 和 3.1 版本, 产品支持广泛的条形码码制和条形码打印机, 不但支持条形码打印机而且支持激光打印机,还为世界知名品牌条…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析

原文链接:基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606139&idx4&snf94ec30bfb5fa7ac0320403d49db3b66&chksmfa821e9ccdf5978a44a9ba96f6e04a121c0bbf63beea0940b385011c0b…

联合体和枚举<C语言>

导言 在C语言中除了结构体外,联合体和枚举也是自定义类型,联合体主要用于节省空间,在同一块内存存储多种类型的数据,而枚举可以提高代码的可读性、可维护性。 联合体(union) 它还有个更容易理解的名字&…

力扣2444.统计定界子数组的数目

力扣2444.统计定界子数组的数目 观察到不满足条件的数 可以作为天然的分割线 因此在枚举右端点的过程中 预处理minK,maxK和分割线上一次出现的下标 res min(min_i,max_i) - i0; 但是因为可能在到下个区段时 min_i和max_i尚未更新 导致结果为负数 所以要跟0再取一…

【devops】 Bytebase 一站式开源 数据库DevOps平台

初识 Bytebase 1、安装 安装地址 https://www.bytebase.com/docs/get-started/self-host/#docker 安装指令 docker run --init \--name bytebase \--publish 8080:8080 --pull always \--volume ~/.bytebase/data:/var/opt/bytebase \bytebase/bytebase:2.18.02、登录-dashboa…

红黑树的介绍与实现

前言 前面我们介绍了AVL树,AVL树是一棵非常自律的树,有着严格的高度可控制!但是正它的自律给他带来了另一个问题,即虽然他的查找效率很高,但是插入和删除由于旋转而导致效率没有那么高。我们上一期的结尾说过经常修改…

为何PHP使用率 大幅度下降!需求量几乎为零!

用PHP的人越来越少的主要原因包括:市场竞争加剧、新技术的出现、性能和安全问题、以及开发者社区的变化。市场竞争加剧是其中一个突出的因素。随着Python、Node.js等现代编程语言的崛起,它们提供了更好的性能、更简洁的语法和更丰富的框架,逐…

技术与业务的完美融合:大数据BI如何真正提升业务价值

数据分析有一点经典案例 沃尔玛的啤酒和尿布案例 开始做BI的时候,大家肯定都看过书,那么一定也看过一个经典的案例,就是沃尔玛的啤酒和尿布的案例。这个案例确实很经典,但其实是一个失败的案例。为什么这么说呢?很明显…

Spring Boot 实现动态数据源配置

前言 之前在CSDN博客以及某站看了教程,不免觉得有点不知如何下手,好在最后融合了以下,得出了一个比较简单的配置动态数据源的过程。 首先项目是Spring Boot的单体项目,我们的需求是要连接多个数据库,那么就需要配置多个…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大疆RoboMaster AI挑战赛

NVIDIA Jetson TX2助力机器人战队斩获RoboMaster AI挑战赛冠亚军 一个汇聚数百万机器人专家与研究人员的赛场,一场兼具工程、策略和团队挑战的较量,说的正是近日刚刚在澳大利亚布里斯本ICRA大会上闭幕的大疆RoboMaster AI挑战赛今年的冠军I Hiter以及亚军…

nodejs最新某东h5st(4.7.2)参数分析与javascript逆向纯算法还原(含算法源码)(2024-06-09)

一、作者声明: 文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除! 二 、写在前面 h5st从4.1一路更新到4.7.2,逐渐vmp…

【Redis】什么是Redis缓存 雪崩、穿透、击穿?(一篇文章就够了)

目录 什么是Redis? Redis的正常存储流程? 什么是Redis缓存雪崩? 缓存雪崩 缓存预热 缓存失效时间的随机性 什么是Redis缓存穿透? 缓存穿透 缓存空对象 BloomFilter(布隆过滤器) 什么是Redis缓存击穿&#…

VBA高级应用30例应用2实现在列表框内及列表框间实现数据拖动

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…