Chromium源码由浅入深(一)

工作中需要对Chromium源码、尤其是源码中图形部分进行深入研究,所以借此机会边学习边写文章,分享一下我的实时学习研究Chromium源码的由浅入深的过程。

闲言少叙,书归正传。

通过命令行启动Chrome浏览器,命令及结果如下:

$ google-chrome-stable 
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

在浏览器地址栏中输入“chrome://gpu”,得到以下结果:

第一步工作就是要找到如上所示的信息在Chromium源码中的具体位置。

经过查找定位,以上信息对应的代码在Chromium源码目录的content/browser/resources/gpu/info_view.js中,如下所示:

appendFeatureInfo_(featureInfo, featureStatusList, problemsDiv, problemsList, workaroundsDiv,workaroundsList) {// Feature mapconst featureLabelMap = {'2d_canvas': 'Canvas','gpu_compositing': 'Compositing','webgl': 'WebGL','multisampling': 'WebGL multisampling','texture_sharing': 'Texture Sharing','video_decode': 'Video Decode','rasterization': 'Rasterization','opengl': 'OpenGL','metal': 'Metal','vulkan': 'Vulkan','multiple_raster_threads': 'Multiple Raster Threads','native_gpu_memory_buffers': 'Native GpuMemoryBuffers','protected_video_decode': 'Hardware Protected Video Decode','surface_control': 'Surface Control','vpx_decode': 'VPx Video Decode','webgl2': 'WebGL2','canvas_oop_rasterization': 'Canvas out-of-process rasterization','raw_draw': 'Raw Draw','video_encode': 'Video Encode','direct_rendering_display_compositor':'Direct Rendering Display Compositor','webgpu': 'WebGPU',};const statusMap = {'disabled_software': {'label': 'Software only. Hardware acceleration disabled','class': 'feature-yellow',},'disabled_off': {'label': 'Disabled', 'class': 'feature-red'},'disabled_off_ok': {'label': 'Disabled', 'class': 'feature-yellow'},'unavailable_software': {'label': 'Software only, hardware acceleration unavailable','class': 'feature-yellow',},'unavailable_off': {'label': 'Unavailable', 'class': 'feature-red'},'unavailable_off_ok': {'label': 'Unavailable', 'class': 'feature-yellow'},'enabled_readback': {'label': 'Hardware accelerated but at reduced performance','class': 'feature-yellow',},'enabled_force': {'label': 'Hardware accelerated on all pages','class': 'feature-green',},'enabled': {'label': 'Hardware accelerated', 'class': 'feature-green'},'enabled_on': {'label': 'Enabled', 'class': 'feature-green'},'enabled_force_on': {'label': 'Force enabled', 'class': 'feature-green'},};// feature status listfeatureStatusList.textContent = '';for (const featureName in featureInfo.featureStatus) {const featureStatus = featureInfo.featureStatus[featureName];const featureEl = document.createElement('li');const nameEl = document.createElement('span');if (!featureLabelMap[featureName]) {console.info('Missing featureLabel for', featureName);}nameEl.textContent = featureLabelMap[featureName] + ': ';featureEl.appendChild(nameEl);const statusEl = document.createElement('span');const statusInfo = statusMap[featureStatus];if (!statusInfo) {console.info('Missing status for ', featureStatus);statusEl.textContent = 'Unknown';statusEl.className = 'feature-red';} else {statusEl.textContent = statusInfo['label'];statusEl.className = statusInfo['class'];}featureEl.appendChild(statusEl);featureStatusList.appendChild(featureEl);}// problems listif (featureInfo.problems.length) {problemsDiv.hidden = false;problemsList.textContent = '';for (const problem of featureInfo.problems) {const problemEl = this.createProblemEl_(problem);problemsList.appendChild(problemEl);}} else {problemsDiv.hidden = true;}// driver bug workarounds listif (featureInfo.workarounds.length) {workaroundsDiv.hidden = false;workaroundsList.textContent = '';for (const workaround of featureInfo.workarounds) {const workaroundEl = document.createElement('li');workaroundEl.textContent = workaround;workaroundsList.appendChild(workaroundEl);}} else {workaroundsDiv.hidden = true;}}

可以看到,上边网页中显示的内容大部分都能对应到代码中的featureLabelMap和statusMap中。比如:网页中“Graphics Feature Status”下的“Canvas: Hardware accelerated”、“Compositing: Hardware accelerated”、“OpenGL: Enabled”、“Video Decode: Hardware accelerated”、“Video Encode: Software only. Hardware acceleration disabled”、“Vulkan: Disabled”、“WebGPU: Disabled”等等。

那么appendFeatureInfo_函数也就不难理解了。一段一段来看。

首先来看以下代码片段:

 // feature status listfeatureStatusList.textContent = '';for (const featureName in featureInfo.featureStatus) {const featureStatus = featureInfo.featureStatus[featureName];const featureEl = document.createElement('li');const nameEl = document.createElement('span');if (!featureLabelMap[featureName]) {console.info('Missing featureLabel for', featureName);}nameEl.textContent = featureLabelMap[featureName] + ': ';featureEl.appendChild(nameEl);const statusEl = document.createElement('span');const statusInfo = statusMap[featureStatus];if (!statusInfo) {console.info('Missing status for ', featureStatus);statusEl.textContent = 'Unknown';statusEl.className = 'feature-red';} else {statusEl.textContent = statusInfo['label'];statusEl.className = statusInfo['class'];}featureEl.appendChild(statusEl);featureStatusList.appendChild(featureEl);}

代码注释说得很清楚,这段是“feature status list”,从这里就可以看出来是对应Chrome网页中的“Graphics Feature Status”。

featureInfo是调用appendFeatureInfo_函数时传下来的,暂时不管其实际内容。循环处理featureInfo.featureStatus中的每一项。

先要获得每一项的

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

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

相关文章

系统升级数量超微软预期,Win10/11盗版激活被封杀

声明:本文提供的命令、工具来自第三方网站,仅供学习交流使用,下载后24小时内删除,一切非法使用责任由使用者自行承担。 上月底 Win11 迎来了 Moment 4 功能更新,任务栏取消合并居然真的回归了。 巨硬终于妥协&#x…

asp.net网上商城系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio协同过滤设计

一、源码特点 asp.net网上商城系统是一套完善的web设计管理系统系统采用协同过滤算法进行商品推荐,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库 为sqlserver2008,使用c#语言开发 ASP…

ilr normalize isometric log-ratio transformation

visium_heart/st_snRNAseq/05_colocalization/create_niches_ct.R at 5b30c7e497e06688a8448afd8d069d2fa70ebcd2 saezlab/visium_heart (github.com) 更多内容,关注微信:生信小博士 The ILR (Isometric Log-Ratio) transformation is used in the anal…

面试算法40:矩阵中的最大矩形

题目 请在一个由0、1组成的矩阵中找出最大的只包含1的矩形并输出它的面积。例如,在图6.6的矩阵中,最大的只包含1的矩阵如阴影部分所示,它的面积是6。 分析 直方图是由排列在同一基线上的相邻柱子组成的图形。由于题目要求矩形中只包含数字…

网络安全https

http是明文的,相当于在网上裸奔,引出了https,大多数网站都转为了https,连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书? 答:分两种,一种是单向认证,像…

2023高频前端面试题-vue

1. 什么是 M V VM Model-View-ViewModel 模式 Model 层: 数据模型层 通过 Ajax、fetch 等 API 完成客户端和服务端业务模型的同步。 View 层: 视图层 作为视图模板存在,其实 View 就是⼀个动态模板。 ViewModel 层: 视图模型层 负责暴露数据给 View 层&…

移远通信5G RedCap模组拿下首个中国移动5G物联网开放实验室5G及轻量化产品能力认证

10月21日,在2023世界物联网博览会期间,中国移动举办了以“智融万物 创见未来”为主题的物联网开发者大会暨物联网产业论坛。作为中国移动在物联网领域重要的合作伙伴,移远通信应邀参加论坛。 随着千行百业数智化进程的不断加速,5G…

什么是web3.0?

Web 3.0,也常被称为下一代互联网,代表着互联网的下一个重大演变。尽管关于Web 3.0的确切定义尚无共识,但它通常被认为是一种更分散、更开放且更智能的互联网。 以下是Web 3.0的一些主要特征和概念: 1. 去中心化 Web 3.0旨在减少…

达芬奇MacOS最新中文版 DaVinci Resolve Studio 18中文注册秘钥

DaVinci Resolve Studio 18是一款专业的视频编辑软件,它具有多种强大的功能。首先,它提供了丰富的视频剪辑工具,如剪切、复制、粘贴、剪辑、缩放和移动等,使用户可以轻松地剪辑和组合视频素材。其次,该软件还支持多个轨…

搜维尔科技:伦敦艺术家利用Varjo头显捕捉盲人隐藏的梦想

在伦敦举行的弗里泽艺术博览会上,与专业级虚拟现实/XR硬件和软件领域的全球领先者Varjo合作,展示一个突破性的混合现实艺术装置, 皇家国家盲人学会 (rnib),英国领先的视力丧失慈善机构。 这个名为"公共交通的私人生活"的装置是一个互动的声音和图像雕塑,旨在让有眼光…

AI小百科 - 什么是词向量?

如何表示一个单词的意义?对人来说,一般用解释法,用一段话来解释词的含义。如“太阳”在新华字典中的释义是“太阳系的中心天体。银河系的一颗普通恒星。”然而,这样的解释计算机是听不懂的,必须用更简洁的方式来对词义…

Unity3D 打包发布时生成文件到打包目录

有时候需要自己创建批处理文件或日志文件,在启动程序的同级目录使用,减少手动操作的时间和错误率。主要使用到的是OnPostprocessBuild方法。 1、在工程中的Editor文件夹下创建脚本 2、将文件放入Plugins的相关目录 3.脚本内容 using System.Collection…

智慧垃圾站:AI视频智能识别技术助力智慧环保项目,以“智”替人强监管

一、背景分析 建设“技术先进、架构合理、开放智能、安全可靠”的智慧环保平台,整合环境相关的数据,对接已建业务系统,将环境相关数据进行统一管理,结合GIS技术进行监测、监控信息的展现和挖掘分析,实现业务数据的快速…

3ds Max2023安装教程(最新最详细)

目录 一.简介 二.安装步骤 软件:3ds Max版本:2023语言:简体中文大小:6.85G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU3GHz 内存16G(或更高)下载通道①百度网盘丨64位下载链接: …

UMMKD

方法 对于“Y”形模型,绿线之前的层是分开的,绿线之后的层在模态之间共享。对于“X”形模型,第一条蓝线之前和第二条蓝线之后的层是分开的,蓝线之间的层在模态之间共享 作者未提供数据

Android Studio新功能-设备镜像Device mirroring-在电脑侧显示手机实时画面并可控制

下载最新的灰测版本-蜥蜴 成功运行到真机后,点击右侧Running Devices选项卡,再点击号 选中当前设备; 非常丝滑同步,在电脑侧也可以顺畅控制真机 该功能大大方便了我们视线保持在显示器上专注开发,并且便于与UI视觉进行…

Guacamole Web端配置使用

文章目录 项目目的下载需要的docker镜像配置数据库并启动服务访问并配置web页面连接windows系统 项目目的 使用Guacamole搭建,类似腾讯云那样的web远程控制页面 下载需要的docker镜像 guacamole和guacd都下载最新版,mysql则使用5.6的版本 docker pul…

报错:SSL routines:ssl3_get_record:wrong version number

一、问题描述 前后端联调的时候,连接后端本地服务器,接口一直pending调不通,控制台还报以下错误: 立马随手搜索了一下解决方案,但是emmm,不符合前端的实际情况: 二、解决方法: 实际…

RetentionPolicy枚举类

包名package java.lang.annotation 作用 注释保留策略。此枚举类型的常量描述用于保留注释的各种策略。它们被使用与{ Retention}元注释类型一起指定注释要保留多长时间。 属性 SOURCE编译器将丢弃注释。CLASS注释将由编译器记录在类文件…

封装一个vue3 Toast组件,支持组件和api调用

先来看一段代码 components/toast/index.vue <template><div v-if"isShow" class"toast">{{msg}}</div> </template><script setup> import { ref, watch } from vue const props defineProps({show: {type: Boolean,def…