Chromium源码由浅入深(一)

news2024/11/15 19:24:38

工作中需要对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 map
    const 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 list
    featureStatusList.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 list
    if (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 list
    if (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”等等。

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

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

相关文章

docker 部署tig监控服务

前言 tig对应的服务是influxdb grafana telegraf 此架构比传统的promethus架构更为简洁,虽然influxdb开源方案没有集群部署,但是对于中小型服务监控需求该方案简单高效 本文以docker-compose来演示这套监控体系的快速搭建和效果。 部署 docker-compos…

vue手动拖入和导入excel模版

1.列表按钮 系统设置的按钮权限 v-if“$hasPermission(‘om:equipmentinformation:importProblemStatistics’)” <el-button click“importExcel(scope.row.id)” size“small” type“text” v-if“$hasPermission(‘om:equipmentinformation:importProblemStatistics’)…

【lesson14】进程控制之进程等待

文章目录 为什么要有进程等待&#xff1f;如何等待和什么是等待&#xff1f; 为什么要有进程等待&#xff1f; 1.子进程退出&#xff0c;父进程不管子进程&#xff0c;子进程就要处于僵尸状态------会导致内存泄漏 2.父进程创建子进程是要让子进程办事的&#xff0c;那么子进…

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

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

图片放大缩小时,图片上会出现蓝色蒙版解决方案

1. 问题描述&#xff1a; 页面上需要展示几张图片&#xff0c;并且有放大、缩小、旋转功能&#xff0c;在放大时&#xff0c;图片上出现了蓝色蒙版&#xff0c;如下图&#xff1a; 2. 解决方案&#xff1a; body{ -webkit-user-select:none; -moz-user-select:none; -ms-user…

等电位连接器行业应用综合方案

等电位连接器的原理 等电位连接器的原理是利用气体放电管或压敏电阻等非线性元件&#xff0c;当连接器两端的电位差大于所限峰值电压时&#xff0c;连接器导通&#xff0c;迫使连接器两端不同接地体电位基本相等&#xff0c;消除接地体间放电现象&#xff0c;从而避免了由于地…

p11 第60题 设计一个算法,逆序单链表中的数据 电子科技大学2014年数据结构(c语言代码实现)

通过头插法可以实现单链表的逆置 下方博客有图解&#xff1a; 王道p40 5.将带头结点的单链表就地逆置&#xff0c;所谓“就地”是指辅助空间复杂度为O&#xff08;1&#xff09;-CSDN博客 单链表的逆置可以通过遍历链表&#xff0c;逐个将节点取出并插入到新链表的头部来实现…

第31届中国国际测量控制与仪器仪表展览会隆重举行,汉威科技创新产品精彩亮相

10月23日~25日&#xff0c;由中国仪器仪表学会主办的第31届中国国际测量控制与仪器仪表展览会&#xff08;原“多国仪器仪表展”&#xff09;于北京国家会议中心隆重举行。 本届展会吸引了全球400多家行业企业、高校及科研院所参展&#xff0c;同期还举办了主论坛及多场分论坛活…

GB28181学习(十三)——订阅与通知

事件订阅 要求 事件订阅应使用SUBSCRIBE方法&#xff1b;事件源接收事件订阅时&#xff0c;事件源应向事件观察者发送确认消息&#xff1b;事件源&#xff1a; 联网系统SIP服务器报警设备移动设备被集成的卡口系统等 事件观察者 联网系统SIP服务器客户端 事件&#xff1a; 报…

学习笔记-极大似然法与最小二乘法

1、极大似然法&#xff08; maximum likelihood estimation&#xff0c;MLE &#xff09; 极大似然法&#xff08; maximum likelihood estimation&#xff0c;MLE &#xff09;是概率统计中估算模型参数的一种很经典和重要的方法。 &#xff08;1&#xff09;定义 最大似然估…

ArcGIS中批量mxd高版本转低版本

我们经常在给别人发ArcGIS的工程文件mxd&#xff0c;结果到别人那发现mxd工程文件打不开&#xff0c;原因是我们的arcgis版本高于别人&#xff0c;此时工程文件又很多&#xff0c;一个个转存成低版本又嫌麻烦&#xff0c;于是我们做了个批量mxd高版本转低版本的小工具&#xff…

2023平台工程崭露头角,AI 带来新机遇与挑战

在今年&#xff0c;平台工程正在迅速在 IT 企业中崭露头角&#xff0c;成为软件开发团队的必要实践。根据 CloudBees 发布的最新报告《2023年平台工程&#xff1a;快速采纳和影响》&#xff0c;83%的受访者已经完全实施了平台工程&#xff0c;或正处于某种实施阶段。 平台工…

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node&#xff0c;官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径&#xff0c; 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令&#xff0c;Windows10 一般自带。 可以通过以下方式…

DC-7 靶机

DC_7 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 搜索相关信息 在配置中发现了用户名密码字样 $username "dc7user"; $password "MdR3xOgB7#dW";ssh 登录 尝试使用获取的账密进行登录 网页登录失败 尝试 ssh 登录 成功登录 登陆今后提…

迷你洗衣机哪个牌子好又实惠?内裤洗衣机热销前四榜单

小型内裤洗衣机是一款很实用的家用电器&#xff0c;非常适合住在小户型的房子里&#xff0c;或者经常要出差的人。所以&#xff0c;买什么牌子的内衣洗衣机比较好&#xff1f;目前市场上各品牌各有各的特色及应用场合&#xff0c;例如适合于贴身衣物如内衣、内裤、婴儿衣物清洗…

线性表操作的实现--单链表(链式存储结构)

本文参考朱战力老师的数据结构与算法--使用C语言一书 目录 文章目录 前言 一、链表是什么&#xff1f; 二、具体实现 1.单链表的定义 2.初始化ListInitiate&#xff08;SLNode **head&#xff09; 3.求当前元素的个数ListLength&#xff08;SLNode *head&#xff09; 4.插入Lis…

学会Docker之——界面化操作(Docker Desktop)

Docker Desktop 是一款用于在桌面环境下开发、构建和容器化应用程序的工具。它适用于 Windows 和 Mac 操作系统&#xff0c;让开发人员可以轻松地在本地环境中创建和运行容器&#xff0c;并与 Docker Hub 和其他容器注册表进行交互。Docker Desktop集成了Docker Engine&#xf…

C语言文件操作(详解)

&#x1f493;博客主页&#xff1a;江池俊的博客⏩收录专栏&#xff1a;C语言进阶之路&#x1f449;专栏推荐&#xff1a;✅C语言初阶之路 ✅数据结构探索✅C语言刷题专栏&#x1f4bb;代码仓库&#xff1a;江池俊的代码仓库&#x1f389;欢迎大家点赞&#x1f44d;评论&#x…

Maven历史版本下载

网址: https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/