<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test that context eviction and garbage collection do not interfere with each other</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"> </script>
</head>
<body>
<div id="description"></div>
<div id="console"></div>
<script>
"use strict";
// See http://crbug.com/374086 for original failing case.
description("Test that context eviction and garbage collection do not interfere with each other.");
var wtu = WebGLTestUtils;

var total_iteration = 50;
var array_count = 10;

var bank = [];
for (var i = 0; i < array_count; i++)
  bank[i] = [];

for (var iter = 0; iter < total_iteration; ++iter) {
  for (var i = 0; i < array_count; i++)
    bank[i][iter * i] = iter;

  var canvas = document.createElement('canvas');
  var gl = wtu.create3DContext(canvas);
  canvas.width = 50;
  canvas.height = 50;
  var program = wtu.setupTexturedQuad(gl);
  shouldBeTrue("program != null");
  var tex = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, tex);
  var pixel = new Uint8Array([0, 255, 0, 255]);
  gl.texImage2D(
    gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, pixel);
  wtu.clearAndDrawUnitQuad(gl);
  wtu.glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors from iteration " + iter);
}

var successfullyParsed = true;
</script>
<script src="../../js/js-test-post.js"></script>

</body>
</html>

