chromium/third_party/blink/web_tests/paint/invalidation/resources/text-based-repaint.js

// Asynchronous tests should manually call finishRepaintTest at the appropriate
// time.
window.testIsAsync = false;
window.outputRepaintRects = true;

// All repaint tests are asynchronous.
if (window.testRunner)
    testRunner.waitUntilDone();

if (window.internals)
    internals.runtimeFlags.paintUnderInvalidationCheckingEnabled = true;

// Add string names of objects that should be invalidated here. If you use this feature,
// you must also include testharness.js.
window.expectedObjectInvalidations = [];
// Objects which must *not* be invalidated.
window.expectedObjectNonInvalidations = [];

function runRepaintTest()
{
    if (!window.testRunner || !window.internals) {
        setTimeout(repaintTest, 500);
        return;
    }

    if (window.enablePixelTesting)
        testRunner.dumpAsTextWithPixelResults();
    else
        testRunner.dumpAsText();

    // This is equivalent to runAfterLayoutAndPaint() in
    // ../../resources/run-after-layout-and-paint.js. Duplicate it here so that
    // the callers don't need to include that file.
    requestAnimationFrame(() => {
        setTimeout(() => {
            internals.startTrackingRepaints(top.document);
            repaintTest();
            if (!window.testIsAsync)
                finishRepaintTest();
        }, 0);
    });
}

function runRepaintAndPixelTest()
{
    window.enablePixelTesting = true;
    runRepaintTest();
}

function finishRepaintTest()
{
    if (!window.testRunner || !window.internals)
        return;

    var flags = internals.LAYER_TREE_INCLUDES_INVALIDATIONS;

    if (window.layerTreeAsTextAdditionalFlags)
        flags |= layerTreeAsTextAdditionalFlags;

    var layersWithInvalidationsText = internals.layerTreeAsText(top.document, flags);

    internals.stopTrackingRepaints(top.document);

    // Play nice with JS tests which may want to print out assert results.
    if (window.isJsTest)
        window.outputRepaintRects = false;

    if (window.outputRepaintRects)
        testRunner.setCustomTextOutput(layersWithInvalidationsText);

    if (window.afterTest)
        window.afterTest();

    // Play nice with async JS tests which want to notifyDone themselves.
    if (!window.jsTestIsAsync)
        testRunner.notifyDone();
}