实际负载的执行步骤
点击开始后,工具申请 WebGL2 上下文,创建着色器程序并上传固定数量的生成纹理。每张纹理包含红、绿、蓝和透明度四个 8 位通道。颜色随坐标和纹理编号变化,预览画面来自所选纹理,并非预先录制的视频。
每次动画回调中,片元着色器在移动坐标处采样所有选中的纹理,按不同权重混合颜色,再用两个三角形覆盖 640 × 360 画布。线性过滤对纹素插值,最近邻过滤选择最接近的纹素。纹理数量和尺寸可以独立设置。
纹理只在开始时上传一次。逐帧计数记录纹理绑定操作,不代表新上传或物理内存传输。工具没有调用 readPixels 回读纹理,也没有比较预期字节与返回字节,因此没有显存错误计数。
计算纹理数据量
公式是:纹理数量 × 宽度 × 高度 × 4 字节 ÷ 1,048,576。4 张 1024 × 1024 的 RGBA8 纹理包含 16 MiB 基础层像素数据;16 张 2048 × 2048 纹理包含 256 MiB。宽高都翻倍,数据量变为四倍;数量翻倍,数据量翻倍。
估算不包含浏览器副本、着色器资源、帧缓冲、驱动开销和对齐空间,此负载也不会生成 mipmap。资源放置由驱动决定。上传成功不能证明这些数据全部驻留在独立显存,也不能证明已到达可用容量上限。
| 设置 | 计算 | 数据量 |
|---|---|---|
| 1 × 256 × 256 | 1 × 256² × 4 字节 | 0.25 MiB |
| 4 × 1024 × 1024 | 4 × 1024² × 4 字节 | 16 MiB |
| 16 × 2048 × 2048 | 16 × 2048² × 4 字节 | 256 MiB |
时间指标测量什么
帧数来自 requestAnimationFrame 回调,按约一秒一组统计。帧时间是相邻回调的时间间隔,其中包含浏览器调度和 JavaScript 工作,既不是独立的 GPU 执行时间,也不是显存带宽。
报告中的平均 FPS 是这些约一秒采样值的平均值。最低、最高和低百分位也来自同一组采样值,而不是最慢的单帧。帧时间统计使用最近 600 个间隔。停止得太早、还没有第一个采样时,FPS 统计可能为零,不能据此判断性能。
帧一致性为描述性指标,公式是 100 ÷(1 + 保留帧间隔的标准差 ÷ 平均值)。间隔完全一致时为 100%,波动越大指标越低。性能分数将此指标与按 60 FPS 归一化、上限为 100 的平均帧率取平均。它是本站启发式指标,不是硬件健康评分或行业基准。
怎样做可重复的比较
使用相同设备、浏览器、显示器、画布负载、纹理数量、尺寸、过滤方式和时长。记录是否接通电源、是否有其他图形应用运行,并始终保持标签页可见。研究某项影响时只改变一个设置。
例如,在保持过滤和时长不变时,对比 4 张 1024 像素纹理与 4 张 2048 像素纹理。帧率下降说明该负载条件下表现发生变化,不等于找到了损坏的显存芯片,也不等于测量了容量。重复两个设置,确认差异是否超过正常的多次运行波动。
检查显存数据完整性用什么
完整性测试必须验证数据,这与绘制带纹理的三角形是不同任务。memtest_vulkan 等原生工具说明了自己的测试图案和验证方法。按照工具文档操作,记录实际测试量、时长和错误情况。
原生测试仍会受到驱动、共享内存、系统不稳定和无法访问的保留内存影响。结合实际症状解读结果,不要把某一次零错误当成永久可靠的保证。