Commit 5a62b230 authored by Aaron Krajeski's avatar Aaron Krajeski Committed by Caleb Rouleau

Add an app test and a gpu-bound test to blink_perf.canvas tests

https://chromium-review.googlesource.com/c/chromium/src/+/1351501 has
reverted some perf changes due to high-end mac laptops crashing. Re-add
that CL piece by piece, starting here.

Re-add 2 tests: a render of google-sheets and an intense shader-based
test that will be GPU bound.

Bug: 908515
Change-Id: I2d371c1db7e5e1502367fb7c2093f4ec521f3b62
Reviewed-on: https://chromium-review.googlesource.com/c/1352339Reviewed-by: default avatarNed Nguyen <nednguyen@google.com>
Reviewed-by: default avatarFernando Serboncini <fserb@chromium.org>
Reviewed-by: default avatarCaleb Rouleau <crouleau@chromium.org>
Commit-Queue: Aaron Krajeski <aaronhk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#611303}
parent ae1924a4
fserb@chromium.org
# TEAM: paint-dev@chromium.org
# COMPONENT: Blink>Canvas
<html>
<head>
<script src = "../resources/runner.js"></script>
<script src="resources/canvas_runner.js"></script>
<style type="text/css">
body, canvas { padding: 0; margin: 0; }
</style>
<script type="text/javascript">
const NUM_PIXELS = 1000;
// A very simple vertex shader
const VERTEX_SHADER_STRING = `
attribute vec2 pos;
void main() {
gl_Position = vec4(pos, 0, 1);
}`;
// A heavy fragment shader that calculates sin() 100,000 times per pixel
const FRAGMENT_SHADER_STRING = `
precision mediump float;
void main() {
float x = 0.0;
for (float i = 0.0; i < 100000.0; i += 1.0) {
x = sin(i);
}
gl_FragColor = vec4(1.0, 0.0, 1.0, 1.0);
}`;
function createShaderCanvas(vs, fs) {
const canvas = document.createElement("canvas");
canvas.width = Math.sqrt(NUM_PIXELS);
canvas.height = Math.sqrt(NUM_PIXELS);
const gl = canvas.getContext("webgl");
const glProgram = gl.createProgram();
const vertexShader = gl.createShader(gl.VERTEX_SHADER)
gl.shaderSource(vertexShader, vs);
gl.compileShader(vertexShader);
if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
console.error(gl.getShaderInfoLog(vertexShader));
}
gl.attachShader(glProgram, vertexShader);
const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fs);
gl.compileShader(fragmentShader);
if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
console.error(gl.getShaderInfoLog(fragmentShader));
}
gl.attachShader(glProgram, fragmentShader);
gl.linkProgram(glProgram);
if (!gl.getProgramParameter(glProgram, gl.LINK_STATUS)) {
console.error(gl.getProgramInfoLog(glProgram));
}
gl.useProgram(glProgram);
const vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(gl.ARRAY_BUFFER, new Int8Array([-3, 1, 1, -3, 1, 1]), gl.STATIC_DRAW);
gl.enableVertexAttribArray(0);
gl.vertexAttribPointer(0, 2, gl.BYTE, 0, 0, 0);
document.body.appendChild(canvas);
return gl;
}
window.onload = function() {
const webGLContext = createShaderCanvas(VERTEX_SHADER_STRING, FRAGMENT_SHADER_STRING);
CanvasRunner.start({
description: "Run a canvas with a heavy fragment shader to ensure the process is GPU bound",
doRun: (() => webGLContext.drawArrays(6, 0, 3)),
});
}
</script>
</head>
</html>
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment