<script>
function createAndDescribeContext(msg, parameters)
{
    var canvas = document.createElement("canvas");
    var gl = canvas.getContext("webgl", parameters);
    var ext = gl.getExtension("WEBGL_debug_renderer_info");

    var header = document.createElement("p");
    header.textContent = msg;
    document.body.appendChild(header);

    var result = document.createElement("pre");
    result.textContent = "UNMASKED_VENDOR_WEBGL is " + gl.getParameter(ext.UNMASKED_VENDOR_WEBGL) + "\n";
    result.textContent += "UNMASKED_RENDERER_WEBGL is " + gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
    document.body.appendChild(result);
}

function run()
{
    createAndDescribeContext("With preferLowPowerToHighPerformance", {preferLowPowerToHighPerformance: true});
    createAndDescribeContext("Without preferLowPowerToHighPerformance", {});
}

window.addEventListener("load", run, false);
</script>
<p>
    This is a manual test, since it relies on hardware configurations. It creates two
    WebGL contexts. It first asks for a context with preferLowPowerToHighPerformance
    set to true, and then for a context with the default value (false).
</p>
<p>
    Unfortunately there isn't a completely reliable way to know if this test passed.
    On a system with both an integrated and discrete GPU, assuming that the system
    is configured to prefer the integrated GPU, and no other apps are running
    that might cause the discrete GPU to be active, the two renderers should be different.
    Also, if they are different, then the first one should be the lower power model
    (i.e. the integrated card).
</p>