michael@0: # HG changeset patch michael@0: # Parent fae4a63127468bd6447453495c82b9f6713888fb michael@0: michael@0: diff --git a/content/canvas/test/webgl/conformance/extensions/oes-standard-derivatives.html b/content/canvas/test/webgl/conformance/extensions/oes-standard-derivatives.html michael@0: --- a/content/canvas/test/webgl/conformance/extensions/oes-standard-derivatives.html michael@0: +++ b/content/canvas/test/webgl/conformance/extensions/oes-standard-derivatives.html michael@0: @@ -116,16 +116,17 @@ if (!gl) { michael@0: testPassed("Successfully enabled OES_standard_derivatives extension"); michael@0: michael@0: runSupportedTest(true); michael@0: michael@0: runHintTestEnabled(); michael@0: runShaderTests(true); michael@0: runOutputTests(); michael@0: runUniqueObjectTest(); michael@0: + runReferenceCycleTest(); michael@0: } michael@0: } michael@0: michael@0: function runSupportedTest(extensionEnabled) { michael@0: var supported = gl.getSupportedExtensions(); michael@0: if (supported.indexOf("OES_standard_derivatives") >= 0) { michael@0: if (extensionEnabled) { michael@0: testPassed("OES_standard_derivatives listed as supported and getExtension succeeded"); michael@0: @@ -365,16 +366,30 @@ function runUniqueObjectTest() michael@0: } else if (window.opera && window.opera.collect) { michael@0: window.opera.collect(); michael@0: } else { michael@0: attemptToForceGC(); michael@0: } michael@0: shouldBe('gl.getExtension("OES_standard_derivatives").myProperty', '2'); michael@0: } michael@0: michael@0: +function runReferenceCycleTest() michael@0: +{ michael@0: + // create some reference cycles. The goal is to see if they cause leaks. The point is that michael@0: + // some browser test runners have instrumentation to detect leaked refcounted objects. michael@0: + michael@0: + debug("Testing reference cycles between context and extension objects"); michael@0: + var ext = gl.getExtension("OES_standard_derivatives"); michael@0: + michael@0: + // create cycle between extension and context, since the context has to hold a reference to the extension michael@0: + ext.context = gl; michael@0: + michael@0: + // create a self-cycle on the extension object michael@0: + ext.ext = ext; michael@0: +} michael@0: michael@0: debug(""); michael@0: successfullyParsed = true; michael@0: michael@0: michael@0: michael@0: michael@0: michael@0: diff --git a/content/canvas/test/webgl/conformance/extensions/oes-texture-float.html b/content/canvas/test/webgl/conformance/extensions/oes-texture-float.html michael@0: --- a/content/canvas/test/webgl/conformance/extensions/oes-texture-float.html michael@0: +++ b/content/canvas/test/webgl/conformance/extensions/oes-texture-float.html michael@0: @@ -81,16 +81,17 @@ if (!gl) { michael@0: michael@0: if (!gl.getExtension("OES_texture_float")) { michael@0: testPassed("No OES_texture_float support -- this is legal"); michael@0: } else { michael@0: testPassed("Successfully enabled OES_texture_float extension"); michael@0: runTextureCreationTest(testProgram, true); michael@0: runRenderTargetTest(testProgram); michael@0: runUniqueObjectTest(); michael@0: + runReferenceCycleTest(); michael@0: } michael@0: } michael@0: michael@0: // Needs to be global for shouldBe to see it. michael@0: var pixels; michael@0: michael@0: function allocateTexture() michael@0: { michael@0: @@ -206,16 +207,30 @@ function runUniqueObjectTest() michael@0: } else if (window.opera && window.opera.collect) { michael@0: window.opera.collect(); michael@0: } else { michael@0: attemptToForceGC(); michael@0: } michael@0: shouldBe('gl.getExtension("OES_texture_float").myProperty', '2'); michael@0: } michael@0: michael@0: +function runReferenceCycleTest() michael@0: +{ michael@0: + // create some reference cycles. The goal is to see if they cause leaks. The point is that michael@0: + // some browser test runners have instrumentation to detect leaked refcounted objects. michael@0: + michael@0: + debug("Testing reference cycles between context and extension objects"); michael@0: + var ext = gl.getExtension("OES_texture_float"); michael@0: + michael@0: + // create cycle between extension and context, since the context has to hold a reference to the extension michael@0: + ext.context = gl; michael@0: + michael@0: + // create a self-cycle on the extension object michael@0: + ext.ext = ext; michael@0: +} michael@0: michael@0: debug(""); michael@0: successfullyParsed = true; michael@0: michael@0: michael@0: michael@0: michael@0: