fune/devtools/client/canvasdebugger/test/browser_profiling-webgl.js
Tom Ritter aa82f54ab6 Bug 1435296 Address test failures caused by bumping timer precision to 2 ms r=baku
There are a few different reasons why tests needed updating (not an exhaustive list):

- Tests assume that successive operations take place at different times.
- Tests assume that an operation took a minimum amount of time.
- Tests hardcodes a specific delay.

In most cases we hardcode the preference off. In some cases this is the best approach,
in others, we would like to improve. The bug for tracking those improvements is Bug 1429648

An improvement that is present in some tests is to hardcode a specific precision reduction
that is acceptable based on the confides of the test. (Obviously this needs to be a fix for
the test framework and not a requirement on the feature being tested.)

In a few places, the test itself can be fixed, for example to no longer require the end
time of an operation to be strictly greater than the start time, and allows it to be equal
to it.

MozReview-Commit-ID: J59c7xQtZZJ

--HG--
extra : rebase_source : df8a03e76eaf9cdc9524dbb3eb9035af237e534b
2018-02-12 11:39:41 -06:00

87 lines
3.3 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Tests if functions inside a single animation frame are recorded and stored
* for a canvas context profiling.
*/
function* ifTestingSupported() {
let currentTime = window.performance.now();
info("Start to estimate WebGL drawArrays function.");
var { target, front } = yield initCanvasDebuggerBackend(WEBGL_DRAW_ARRAYS);
let navigated = once(target, "navigate");
yield front.setup({ reload: true });
ok(true, "The front was setup up successfully.");
yield navigated;
ok(true, "Target automatically navigated when the front was set up.");
let snapshotActor = yield front.recordAnimationFrame();
ok(snapshotActor,
"A snapshot actor was sent after recording.");
let animationOverview = yield snapshotActor.getOverview();
ok(animationOverview,
"An animation overview could be retrieved after recording.");
let functionCalls = animationOverview.calls;
ok(functionCalls,
"An array of function call actors was sent after recording.");
testFunctionCallTimestamp(functionCalls, currentTime);
info("Check triangle and vertex counts in drawArrays()");
is(animationOverview.primitive.tris, 5, "The count of triangles is correct.");
is(animationOverview.primitive.vertices, 26, "The count of vertices is correct.");
is(animationOverview.primitive.points, 4, "The count of points is correct.");
is(animationOverview.primitive.lines, 8, "The count of lines is correct.");
yield removeTab(target.tab);
info("Start to estimate WebGL drawElements function.");
var { target, front } = yield initCanvasDebuggerBackend(WEBGL_DRAW_ELEMENTS);
navigated = once(target, "navigate");
yield front.setup({ reload: true });
ok(true, "The front was setup up successfully.");
yield navigated;
ok(true, "Target automatically navigated when the front was set up.");
snapshotActor = yield front.recordAnimationFrame();
ok(snapshotActor,
"A snapshot actor was sent after recording.");
animationOverview = yield snapshotActor.getOverview();
ok(animationOverview,
"An animation overview could be retrieved after recording.");
functionCalls = animationOverview.calls;
ok(functionCalls,
"An array of function call actors was sent after recording.");
testFunctionCallTimestamp(functionCalls, currentTime);
info("Check triangle and vertex counts in drawElements()");
is(animationOverview.primitive.tris, 5, "The count of triangles is correct.");
is(animationOverview.primitive.vertices, 26, "The count of vertices is correct.");
is(animationOverview.primitive.points, 4, "The count of points is correct.");
is(animationOverview.primitive.lines, 8, "The count of lines is correct.");
yield removeTab(target.tab);
finish();
}
function testFunctionCallTimestamp(functionCalls, currentTime) {
info("Check the timestamps of function calls");
for ( let i = 0; i < functionCalls.length-1; i += 2 ) {
ok( functionCalls[i].timestamp > 0, "The timestamp of the called function is larger than 0." );
ok( functionCalls[i].timestamp < currentTime, "The timestamp has been minus the frame start time." );
ok( functionCalls[i+1].timestamp >= functionCalls[i].timestamp, "The timestamp of the called function is correct." );
}
}