MotionMark 浏览器图形性能测试套件深入分析

简介: [MotionMark][1] 是 Apple 开发的一个浏览器图形性能测试套件,用来[测试和评估 Safari/WebKit 的图形性能][2],这里的图形性能并不仅仅包括光栅化和合成,而是涵盖了完整的浏览器渲染流水线,包括 DOM API,样式计算,排版等。 MotionMark 虽然不能涵盖浏览器图形性能的所有方面,但是作为衡量浏览器图形性能的其中一项指标,还是有不错的参考价值。Ch

MotionMark 是 Apple 开发的一个浏览器图形性能测试套件,用来测试和评估 Safari/WebKit 的图形性能,这里的图形性能并不仅仅包括光栅化和合成,而是涵盖了完整的浏览器渲染流水线,包括 DOM API,样式计算,排版等。

MotionMark 虽然不能涵盖浏览器图形性能的所有方面,但是作为衡量浏览器图形性能的其中一项指标,还是有不错的参考价值。Chromium 目前也会使用 MotionMark 分数作为其中一项指标来衡量自身图形性能优化的成果。

关于浏览器渲染请参考我之前的一些文章,比如渲染流水线中的光栅化

MotionMark 的一个主要特性是自适应动态调整测试的复杂度,从而更好地适应不同的设备,这些设备的性能可能差异很大,比如 PC 的性能通常几倍甚至十倍于移动设备。MotionMark 的每一项测试都包含一个连续的动画,它收集动画每一帧的复杂度和耗时等数据,然后计算出一个分数(复杂度越高,耗时越少,分数就越高),最后根据所有项目的成绩计算出一个总得分,分数越高代表性能越好。

因为 MotionMark 动态调整复杂度的缘故,导致测试的结果波动较大,所以除了分数外,测试还给出一个波动范围,通常需要测试多次,取波动值较小的为准。

这篇文章主要分析 MotionMark 每一项测试的测试内容,在 Chromium 上,该项测试的主要性能瓶颈在哪里,是在 DOM,是在样式计算和排版,还是在光栅化和合成。如果读者对浏览器的图形性能感兴趣,可以通过这篇文章更好地了解如何通过 MotionMark 的成绩来衡量浏览器的图形性能。

用于分析的 Chromium 版本是 Chrome 77 for Android,我们可以看到从 75 开始,Chrome for Android 已经正式开启了 OOPR,普通图层分块光栅化的主要耗时从原来的光栅化线程(CompositorTileWorker)相当大的一部分转移到了 GPU 线程(CrGpuMain),光栅化的耗时在两个线程上都有一定的比例。测试的设备是 Google Pixel 手机。因为不同的设备有可能有不同的性能瓶颈,所以文章的结论不是普适的,只能作为一个参考。

各项测试分析

Multiply

Multiply

测试 CSS border radius,transform,opacity 动画的性能。测试过程中不断改变一组 div 元素的样式,包括背景色(带半透明),transform 和可见性,div 设置了 border radius 属性用来绘制圆角。

Multiply

在 Chromium 上,主要的性能瓶颈是在 Renderer,耗时最多的部分是 DOM API(改变样式),样式计算,重排版,图层树更新(重新绘制),图层光栅化部分耗时也较多,但是相对而言较前者要少。留意上图 CrRendererMain 和 CrGpuMain 线程上调用耗时的比例。

Canvas Arcs

Arcs

测试 Canvas 路径绘制(弧形路径,包括描边和填充)的性能。

Arcs

在 Chromium 上,主要的性能瓶颈是在 Renderer,耗时最多的部分是 DOM API(Canvas API),和 Skia 的路径绘制(Canvas 的光栅化)。

Leaves

Leaves

测试 CSS transform 动画的性能,大量的较小的 img 元素在动画过程被改变 transform。

Leaves

这个测试在 Chromium 上的结果比较吊诡,并不能真实反映 Chromium 在普通页面上 CSS transorm 动画的性能(通常只有少量元素同时做 transform 动画)。测试使用了大量尺寸较小的 img 元素,触发了 Chromium 的图层合并特性,将大量的小图层合并成一个大图层,它的副作用是导致了反复的图层重复光栅化。从上图可以看到,无论是在 Renderer 上的 DOM API(改变样式)和样式计算的耗时,还是图层光栅化的耗时(分布在光栅化线程和 GPU 线程)都不低,两者都可能成为性能瓶颈。

Canvas Paths

Paths

跟 Canvas Arcs 类似,也是测试 Canvas 路径绘制的性能,只是不是弧形而是各种不同的曲线。

Chromium 的性能瓶颈跟 Canvas Arcs 类似,主要的性能瓶颈是在 Renderer,耗时最多的部分是 DOM API(Canvas API),和 Skia 的路径绘制(Canvas 的光栅化)。

Canvas Lines

Lines

跟 Canvas Arcs/Paths 类似,测试 Canvas 线段绘制的性能。

Chromium 的性能瓶颈跟 Canvas Arcs/Paths 类似,主要的性能瓶颈是在 Renderer,耗时最多的部分是 DOM API(Canvas API),和 Skia 的线段绘制(Canvas 的光栅化)。

Focus

Focus

测试 CSS blur 和 opacity filter 动画的性能。动画过程中不断改变一组 div 元素的 transform 和 blur & opacity filter 的值。

Focus

Chromium 的主要性能瓶颈是在 GPU 线程的合成上,也就是 blur & opacity filter 效果的绘制。Renderer 在 DOM API(改变样式)上也有一定的开销,但是相对合成来说还是较低。

Images

Images

测试 Canvas getImageData 和 putImageData 的性能。动画过程中通过 get/putImageData 不断改变一组尺寸较小的 canvas 元素的内容。

Images

Chromium 悲剧地因为 getImageData 被阻塞,GL readPixels 从 GPU 读取纹理数据到 CPU 内存非常耗时。Safari 在这项上应该会有巨大的优势 -_-p

Design

Design

测试大量重复但是使用不同颜色的文本绘制的性能,重复的文本因为 transform 和 color 的差异形成投影的效果。动画过程中不断改变文本元素的 transform 和 color 属性。

Design

Chromium 主要的性能瓶颈反而是在 Renderer 的样式计算上面,文本的光栅化耗时也不少,不过比起 Renderer 的耗时稍微略少,也可能成为瓶颈。

Suits

Suits

大量使用不同的非矩形裁剪,不同渐变色,不同 transform 矩阵的 svg 元素的绘制,测试 svg 的绘制性能。

Suits

Chromium 在图层光栅化(SVG 的绘制)和 Renderer 的样式计算上耗时都不低,两者都有可能成为性能瓶颈。

结语

跟很多人第一直觉并不完全符合的是,浏览器的图形性能瓶颈,很多时候并不在真正的“图形”上面,也就是说光栅化和合成有时并不是动画的性能瓶颈,有时性能瓶颈反而是在 JavaScript(包括计算和 DOM API 调用),样式计算,和重排版上。当然,MotionMark 是一项压力测试,实际的应用中我们可能很少同时改变那么多元素的属性,但是如果页面碰到性能问题,在检查性能瓶颈时,这也是需要考虑的一个因素。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
19天前
|
测试技术 数据安全/隐私保护
深入理解与应用软件测试中的边界值分析法
【4月更文挑战第23天】在软件测试的诸多技术中,边界值分析法因其简洁性和高效性而备受青睐。本文旨在探讨边界值分析法的核心原理及其在实际测试场景中的应用。通过对边界条件进行系统的识别、分类和测试,该方法能够有效地发现软件缺陷。我们将详细讨论如何确定边界值,设计测试用例,以及如何处理复杂数据类型的边界情况。此外,文章还将展示通过案例研究来验证边界值分析法在提升测试覆盖率和发现潜在错误方面的实际效益。
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与准确性的策略分析
【4月更文挑战第30天】在快速发展的数字时代,软件已成为支撑现代社会运行的核心。随着软件系统的日益复杂化,确保其质量与稳定性显得尤为重要。软件测试作为保障软件质量的关键步骤,它的效率和准确性直接影响着产品的上市时间和用户体验。本文将探讨如何通过采用自动化测试工具、实施持续集成(CI)与持续交付(CD)流程、利用人工智能(AI)技术以及加强测试人员的专业培训等策略来提升软件测试的效率与准确性。
|
1天前
|
Web App开发 测试技术 C++
Playwright安装与Python集成:探索跨浏览器测试的奇妙世界
Playwright是新兴的跨浏览器测试工具,相比Selenium,它支持Chrome、Firefox、WebKit,执行速度快,选择器更稳定。安装Playwright只需一条`pip install playwright`的命令,随后的`playwright install`会自动添加浏览器,无需处理浏览器驱动问题。这一优势免去了Selenium中匹配驱动的烦恼。文章适合寻求高效自动化测试解决方案的开发者。
10 2
|
3天前
|
机器学习/深度学习 人工智能 数据管理
深入分析自动化测试中的挑战与机遇
【5月更文挑战第9天】随着软件行业的迅速发展,自动化测试已经成为确保软件质量、提高开发效率的关键手段。然而,在实施自动化测试过程中,企业和测试人员面临着众多挑战,包括测试脚本的维护问题、测试数据管理、与持续集成/持续部署(CI/CD)流程的融合等。本文将探讨这些挑战,并分析在这些挑战背后所隐藏的机遇,比如测试自动化工具的创新使用、人工智能(AI)在测试中的应用以及测试策略的优化。通过案例分析和最新行业趋势的讨论,我们旨在为读者提供对自动化测试未来发展的深刻见解。
|
6天前
|
安全 数据挖掘 测试技术
深入探究软件测试中的风险分析与管理
【5月更文挑战第7天】 在软件开发生命周期中,风险分析与管理是确保产品质量和项目成功的关键步骤。本文将探讨软件测试过程中如何有效进行风险评估、分类及采取相应的缓解措施。文章首先介绍了风险管理的重要性,然后详细阐述了风险识别的技术和工具,接着分析了如何制定和实施风险应对策略。最后,通过案例研究展示了一个结构化风险分析流程的实施效果。
|
9天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成
【5月更文挑战第4天】随着人工智能(AI)技术的飞速发展,其在软件测试领域的应用也日益广泛。特别是在自动化测试过程中,AI技术能够显著提高测试用例的生成效率和质量。本文将探讨AI在自动化测试用例生成中的应用原理、优势以及面临的挑战,并展示通过AI技术优化测试流程的实际案例。
44 8
|
10天前
|
测试技术
深入理解软件测试中的边界值分析法
【5月更文挑战第2天】 在软件测试领域,边界值分析是一种高效且实用的测试设计技术。本文将探讨边界值分析法的原理、实施步骤以及其在各种测试场景中的应用。通过对边界条件进行精确的测试,可以揭示那些可能被忽视的错误,从而提高软件产品的质量。文中还将讨论如何结合其他测试方法来优化边界值分析,确保测试过程更加全面和高效。
|
11天前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
13天前
|
前端开发 JavaScript 测试技术
深入探索自动化测试框架:Selenium与Appium的对比分析
【4月更文挑战第29天】 在快速迭代的软件发展环境中,自动化测试已成为确保软件质量和加速产品上市的关键步骤。本文将重点探讨两种广泛使用的自动化测试框架——Selenium和Appium,通过对比它们的核心特性、适用场景及执行效率,为软件开发和测试团队提供选择指南。文章不仅分析了各自的技术架构和脚本语言支持,还讨论了它们在处理Web应用和移动应用测试时的优缺点,旨在帮助读者根据项目需求做出更加明智的选择。
|
14天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成技术
【4月更文挑战第29天】随着人工智能技术的不断发展,其在软件测试领域的应用也越来越广泛。本文主要探讨了AI驱动的测试用例生成技术在自动化测试中的应用,以及其对提高测试效率和质量的影响。通过对现有技术的深入分析和实例演示,我们展示了AI如何通过学习和理解软件行为来自动生成有效的测试用例,从而减少人工编写测试用例的工作量,提高测试覆盖率,降低错误检测的成本。

热门文章

最新文章