WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-175400-20170809181126.patch (text/plain), 23.13 KB, created by
Devin Rousso
on 2017-08-09 18:11:27 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2017-08-09 18:11:27 PDT
Size:
23.13 KB
patch
obsolete
>diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog >index 8fd51fc4f9794b52a038bf5d8234ca8979f6921b..7c254c5bd059025c7efd555f8a1082d6f3354a6b 100644 >--- a/Source/JavaScriptCore/ChangeLog >+++ b/Source/JavaScriptCore/ChangeLog >@@ -1,3 +1,15 @@ >+2017-08-09 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide way for ShaderPrograms to be enabled/disabled >+ https://bugs.webkit.org/show_bug.cgi?id=175400 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * inspector/protocol/Canvas.json: >+ Add `setShaderProgramDisabled` command that sets the `disabled` flag on the given shader >+ program to the supplied boolean value. If this value is true, calls to `drawArrays` and >+ `drawElements` when that program is in use will have no effect. >+ > 2017-08-08 Devin Rousso <drousso@apple.com> > > Web Inspector: Canvas: support editing WebGL shaders >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index b8f5d0dbb943712d381bda2e6637fdcc04735dda..519f7b8a7c1201c247fafa53e41a9467f2440c4f 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,26 @@ >+2017-08-09 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide way for ShaderPrograms to be enabled/disabled >+ https://bugs.webkit.org/show_bug.cgi?id=175400 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Test: inspector/canvas/setShaderProgramDisabled.html >+ >+ * html/canvas/WebGLProgram.h: >+ (WebCore::WebGLProgram::disabled): >+ (WebCore::WebGLProgram::setDisabled): >+ >+ * html/canvas/WebGLRenderingContextBase.cpp: >+ (WebCore::WebGLRenderingContextBase::drawArrays): >+ (WebCore::WebGLRenderingContextBase::drawElements): >+ If the current program is disabled, return early. This will prevent the current shader >+ program from drawing anything to the canvas. >+ >+ * inspector/InspectorCanvasAgent.h: >+ * inspector/InspectorCanvasAgent.cpp: >+ (WebCore::InspectorCanvasAgent::setShaderProgramDisabled): >+ > 2017-08-08 Devin Rousso <drousso@apple.com> > > Web Inspector: Canvas: support editing WebGL shaders >diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index b161ffe5e6df628a8feb55d28bdc53c6b1ed87ed..a8f5b21375a78236a0f7c888c9066695e849908b 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,32 @@ >+2017-08-09 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide way for ShaderPrograms to be enabled/disabled >+ https://bugs.webkit.org/show_bug.cgi?id=175400 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Adds a status element to ShaderProgramTreeElement that, when clicked, will toggle the >+ disabled state of the corresponding ShaderProgram. Disabled shader programs will not draw >+ anything to the context. >+ >+ * Localizations/en.lproj/localizedStrings.js: >+ * UserInterface/Main.html: >+ >+ * UserInterface/Models/ShaderProgram.js: >+ (WI.ShaderProgram): >+ (WI.ShaderProgram.prototype.get disabled): >+ (WI.ShaderProgram.prototype.toggleDisabled): >+ >+ * UserInterface/Views/ShaderProgramTreeElement.js: >+ (WI.ShaderProgramTreeElement): >+ (WI.ShaderProgramTreeElement.prototype.selectOnMouseDown): >+ (WI.ShaderProgramTreeElement.prototype._disabledImageElementClicked): >+ * UserInterface/Views/ShaderProgramTreeElement.css: Added. >+ (.item.shader-program .status > img): >+ (.item.shader-program:not(:hover, .selected, .disabled) .status > img): >+ (.tree-outline:matches(:focus, .force-focus) .item.shader-program.selected .status > img): >+ (.item.shader-program.disabled > *): >+ > 2017-08-08 Devin Rousso <drousso@apple.com> > > Web Inspector: Canvas: support editing WebGL shaders >diff --git a/Source/JavaScriptCore/inspector/protocol/Canvas.json b/Source/JavaScriptCore/inspector/protocol/Canvas.json >index b01b833180a83b151ded7c193f8d508d14d1eb37..64c310a3d709d21cd2d3d2d90f2d15060209f1a2 100644 >--- a/Source/JavaScriptCore/inspector/protocol/Canvas.json >+++ b/Source/JavaScriptCore/inspector/protocol/Canvas.json >@@ -139,6 +139,14 @@ > { "name": "shaderType", "$ref": "ShaderType" }, > { "name": "source", "type": "string" } > ] >+ }, >+ { >+ "name": "setShaderProgramDisabled", >+ "description": "Enable/disable the visibility of the given shader program.", >+ "parameters": [ >+ { "name": "programId", "$ref": "ProgramId" }, >+ { "name": "disabled", "type": "boolean" } >+ ] > } > ], > "events": [ >diff --git a/Source/WebCore/html/canvas/WebGLProgram.h b/Source/WebCore/html/canvas/WebGLProgram.h >index eab76c89751cbe492b46e74cfe8d195809e131a8..30a31293b435c155383cfac2195775e0c8bd4574 100644 >--- a/Source/WebCore/html/canvas/WebGLProgram.h >+++ b/Source/WebCore/html/canvas/WebGLProgram.h >@@ -56,6 +56,9 @@ public: > bool attachShader(WebGLShader*); > bool detachShader(WebGLShader*); > >+ bool disabled() const { return m_disabled; } >+ void setDisabled(bool disabled) { m_disabled = disabled; } >+ > protected: > WebGLProgram(WebGLRenderingContextBase&); > >@@ -76,6 +79,7 @@ private: > RefPtr<WebGLShader> m_fragmentShader; > > bool m_infoValid { true }; >+ bool m_disabled { false }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp b/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp >index 16964280145093205343bccd3d7e0a4ad9503786..77e2f35a0f824b57037a0e0479cfe0c00088d742 100644 >--- a/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp >+++ b/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp >@@ -2003,6 +2003,9 @@ void WebGLRenderingContextBase::drawArrays(GC3Denum mode, GC3Dint first, GC3Dsiz > if (!validateDrawArrays("drawArrays", mode, first, count, 0)) > return; > >+ if (m_currentProgram && m_currentProgram->disabled()) >+ return; >+ > clearIfComposited(); > > bool vertexAttrib0Simulated = false; >@@ -2027,6 +2030,9 @@ void WebGLRenderingContextBase::drawElements(GC3Denum mode, GC3Dsizei count, GC3 > if (!validateDrawElements("drawElements", mode, count, type, offset, numElements, 0)) > return; > >+ if (m_currentProgram && m_currentProgram->disabled()) >+ return; >+ > clearIfComposited(); > > bool vertexAttrib0Simulated = false; >diff --git a/Source/WebCore/inspector/InspectorCanvasAgent.cpp b/Source/WebCore/inspector/InspectorCanvasAgent.cpp >index 2b0ee71fa80ab1c2ce4588b6820b905cde96adfa..b503d5c978f89b0c5e1f02a3af84c2dc38908e9a 100644 >--- a/Source/WebCore/inspector/InspectorCanvasAgent.cpp >+++ b/Source/WebCore/inspector/InspectorCanvasAgent.cpp >@@ -324,6 +324,21 @@ void InspectorCanvasAgent::updateShader(ErrorString& errorString, const String& > #endif > } > >+void InspectorCanvasAgent::setShaderProgramDisabled(ErrorString& errorString, const String& programId, bool disabled) >+{ >+#if ENABLE(WEBGL) >+ auto* inspectorProgram = assertInspectorProgram(errorString, programId); >+ if (!inspectorProgram) >+ return; >+ >+ inspectorProgram->program().setDisabled(disabled); >+#else >+ UNUSED_PARAM(programId); >+ UNUSED_PARAM(disabled); >+ errorString = ASCIILiteral("WebGL is not supported."); >+#endif >+} >+ > void InspectorCanvasAgent::frameNavigated(Frame& frame) > { > if (frame.isMainFrame()) { >diff --git a/Source/WebCore/inspector/InspectorCanvasAgent.h b/Source/WebCore/inspector/InspectorCanvasAgent.h >index aa10042cb779d7c9d2289963308dabc5cbe6a8c1..28a3f83badb91f8c47c97652113cf8ee8e54f7fc 100644 >--- a/Source/WebCore/inspector/InspectorCanvasAgent.h >+++ b/Source/WebCore/inspector/InspectorCanvasAgent.h >@@ -77,6 +77,7 @@ public: > void cancelRecording(ErrorString&, const String& canvasId) override; > void requestShaderSource(ErrorString&, const String& programId, const String& shaderType, String*) override; > void updateShader(ErrorString&, const String& programId, const String& shaderType, const String& source) override; >+ void setShaderProgramDisabled(ErrorString&, const String& programId, bool disabled) override; > > // InspectorInstrumentation > void frameNavigated(Frame&); >diff --git a/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js b/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >index 9d9571abc61ef2d4de75de82780e4bb514835883..0a248ee37237f1f6827666ff8f5691eb52cb9bdc 100644 >--- a/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >+++ b/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >@@ -283,6 +283,7 @@ localizedStrings["Dimensions"] = "Dimensions"; > localizedStrings["Direction"] = "Direction"; > localizedStrings["Disable Breakpoint"] = "Disable Breakpoint"; > localizedStrings["Disable Breakpoints"] = "Disable Breakpoints"; >+localizedStrings["Disable Program"] = "Disable Program"; > localizedStrings["Disable all breakpoints (%s)"] = "Disable all breakpoints (%s)"; > localizedStrings["Disable paint flashing"] = "Disable paint flashing"; > localizedStrings["Disabled"] = "Disabled"; >@@ -345,6 +346,7 @@ localizedStrings["Element overlaps other compositing element"] = "Element overla > localizedStrings["Elements"] = "Elements"; > localizedStrings["Enable Breakpoint"] = "Enable Breakpoint"; > localizedStrings["Enable Breakpoints"] = "Enable Breakpoints"; >+localizedStrings["Enable Program"] = "Enable Program"; > localizedStrings["Enable all breakpoints (%s)"] = "Enable all breakpoints (%s)"; > localizedStrings["Enable breakpoints"] = "Enable breakpoints"; > localizedStrings["Enable paint flashing"] = "Enable paint flashing"; >diff --git a/Source/WebInspectorUI/UserInterface/Main.html b/Source/WebInspectorUI/UserInterface/Main.html >index c4b0174806e22e4ee001bcd5aeba635cb18fdb66..41f716d351030acf36be6a57dc2cb78598409a1f 100644 >--- a/Source/WebInspectorUI/UserInterface/Main.html >+++ b/Source/WebInspectorUI/UserInterface/Main.html >@@ -164,6 +164,7 @@ > <link rel="stylesheet" href="Views/SearchSidebarPanel.css"> > <link rel="stylesheet" href="Views/SettingsTabContentView.css"> > <link rel="stylesheet" href="Views/ShaderProgramContentView.css"> >+ <link rel="stylesheet" href="Views/ShaderProgramTreeElement.css"> > <link rel="stylesheet" href="Views/Sidebar.css"> > <link rel="stylesheet" href="Views/SidebarPanel.css"> > <link rel="stylesheet" href="Views/Slider.css"> >diff --git a/Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js b/Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js >index fdca5883065ab444ecc21cdc755076ce5160468d..d972913e256b28480c5ec6d5ef2ba19411e9801f 100644 >--- a/Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js >+++ b/Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js >@@ -23,24 +23,25 @@ > * THE POSSIBILITY OF SUCH DAMAGE. > */ > >-WI.ShaderProgram = class ShaderProgram extends WI.Object >+WI.ShaderProgram = class ShaderProgram > { > constructor(identifier, canvas) > { >- super(); >- > console.assert(identifier); > console.assert(canvas instanceof WI.Canvas); > > this._identifier = identifier; > this._canvas = canvas; > this._uniqueDisplayNumber = canvas.nextShaderProgramDisplayNumber(); >+ >+ this._disabled = false; > } > > // Public > > get identifier() { return this._identifier; } > get canvas() { return this._canvas; } >+ get disabled() { return this._disabled; } > > get displayName() > { >@@ -67,6 +68,18 @@ WI.ShaderProgram = class ShaderProgram extends WI.Object > this._updateShader(CanvasAgent.ShaderType.Fragment, source); > } > >+ toggleDisabled(callback) >+ { >+ CanvasAgent.setShaderProgramDisabled(this._identifier, !this._disabled, (error) => { >+ console.assert(!error, error); >+ if (error) >+ return; >+ >+ this._disabled = !this._disabled; >+ callback(); >+ }); >+ } >+ > // Private > > _requestShaderSource(shaderType, callback) >@@ -93,8 +106,3 @@ WI.ShaderProgram.ShaderType = { > Fragment: "shader-type-fragment", > Vertex: "shader-type-vertex", > }; >- >-WI.ShaderProgram.Event = { >- ProgramLinked: "shader-program-program-linked", >- ShaderCompiled: "shader-program-shader-compiled", >-}; >diff --git a/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.css b/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.css >new file mode 100644 >index 0000000000000000000000000000000000000000..69b1db44e12435efa7d9cba1f5ee473eaa0b494b >--- /dev/null >+++ b/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.css >@@ -0,0 +1,42 @@ >+/* >+ * Copyright (C) 2017 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+.item.shader-program .status > img { >+ width: 18px; >+ margin-top: 2px; >+ content: url(../Images/Eye.svg); >+} >+ >+.item.shader-program:not(:hover, .selected, .disabled) .status > img { >+ display: none; >+} >+ >+.tree-outline:matches(:focus, .force-focus) .item.shader-program.selected .status > img { >+ filter: invert(); >+} >+ >+.item.shader-program.disabled > * { >+ opacity: 0.5; >+} >diff --git a/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.js b/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.js >index 12da64a972e065114a2a7d4c2cf8fda95a0a9ab9..dc9e08b87f6e9ad4e970d03ed63e2544f03cb66c 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.js >+++ b/Source/WebInspectorUI/UserInterface/Views/ShaderProgramTreeElement.js >@@ -31,5 +31,30 @@ WI.ShaderProgramTreeElement = class ShaderProgramTreeElement extends WI.GeneralT > > const subtitle = null; > super("shader-program", shaderProgram.displayName, subtitle, shaderProgram); >+ >+ this._disabledImageElement = document.createElement("img"); >+ this._disabledImageElement.title = WI.UIString("Disable Program"); >+ this._disabledImageElement.addEventListener("click", this._disabledImageElementClicked.bind(this)); >+ this.status = this._disabledImageElement; >+ } >+ >+ // Protected >+ >+ selectOnMouseDown(event) >+ { >+ if (event.target.isSelfOrDescendant(this._statusElement)) >+ return; >+ >+ super.selectOnMouseDown(event); >+ } >+ >+ // Private >+ >+ _disabledImageElementClicked(event) >+ { >+ this.representedObject.toggleDisabled(() => { >+ this._listItemNode.classList.toggle("disabled", !!this.representedObject.disabled); >+ this._disabledImageElement.title = this.representedObject.disabled ? WI.UIString("Enable Program") : WI.UIString("Disable Program"); >+ }); > } > }; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index d068e21899d0c5ef393b23cefdcf3e76f46b023b..f5caa1fa03225385461865b746cb8afe513ad6b7 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,13 @@ >+2017-08-09 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide way for ShaderPrograms to be enabled/disabled >+ https://bugs.webkit.org/show_bug.cgi?id=175400 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * inspector/canvas/setShaderProgramDisabled-expected.txt: Added. >+ * inspector/canvas/setShaderProgramDisabled.html: Added. >+ > 2017-08-08 Devin Rousso <drousso@apple.com> > > Web Inspector: Canvas: support editing WebGL shaders >diff --git a/LayoutTests/inspector/canvas/setShaderProgramDisabled-expected.txt b/LayoutTests/inspector/canvas/setShaderProgramDisabled-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..375ee96b0b8dba21c40f867adabf6882c0928f58 >--- /dev/null >+++ b/LayoutTests/inspector/canvas/setShaderProgramDisabled-expected.txt >@@ -0,0 +1,20 @@ >+Test disabling and re-enabling of shader programs. >+ >+ >+== Running test suite: Canvas.setShaderProgramDisabled >+-- Running test case: Canvas.setShaderProgramDisabled.disabledDrawArrays >+PASS: Disabled shader programs should have no visual effect. >+ >+-- Running test case: Canvas.setShaderProgramDisabled.disabledDrawElements >+PASS: Disabled shader programs should have no visual effect. >+ >+-- Running test case: Canvas.setShaderProgramDisabled.reenabledDrawArrays >+PASS: Re-enabled shader programs should have a visual effect. >+ >+-- Running test case: Canvas.setShaderProgramDisabled.reenabledDrawElements >+PASS: Re-enabled shader programs should have a visual effect. >+ >+-- Running test case: Canvas.setShaderProgramDisabled.invalidProgramId >+PASS: Should produce an error. >+Error: No shader program for given identifier. >+ >diff --git a/LayoutTests/inspector/canvas/setShaderProgramDisabled.html b/LayoutTests/inspector/canvas/setShaderProgramDisabled.html >new file mode 100644 >index 0000000000000000000000000000000000000000..0c00c7ec77f64768bbb616e8e269860848618518 >--- /dev/null >+++ b/LayoutTests/inspector/canvas/setShaderProgramDisabled.html >@@ -0,0 +1,163 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<script src="../../http/tests/inspector/resources/inspector-test.js"></script> >+<script src="resources/shaderProgram-utilities.js"></script> >+<script id="vertex-shader" type="x-shader/x-vertex"> >+ attribute vec3 position; >+ void main(void) { >+ gl_Position = vec4(position, 1.0); >+ } >+</script> >+<script id="fragment-shader" type="x-shader/x-fragment"> >+ precision mediump float; >+ >+ void main(void) { >+ gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); >+ } >+</script> >+<script> >+function load() { >+ createProgram("webgl"); >+ linkProgram("vertex-shader", "fragment-shader"); >+ context.useProgram(program); >+ >+ clearContext(); >+ >+ runTest(); >+} >+ >+function clearContext() { >+ context.clearColor(0.0, 0.0, 0.0, 1.0); >+ context.clear(context.COLOR_BUFFER_BIT); >+} >+ >+function drawArrays() { >+ clearContext(); >+ >+ let vertexes = [ >+ -0.5, 0.5, 0.0, >+ -0.5, -0.5, 0.0, >+ 0.5, -0.5, 0.0, >+ ]; >+ let vertexBuffer = context.createBuffer(); >+ context.bindBuffer(context.ARRAY_BUFFER, vertexBuffer); >+ context.bufferData(context.ARRAY_BUFFER, new Float32Array(vertexes), context.STATIC_DRAW); >+ >+ let position = context.getAttribLocation(program, "position"); >+ context.vertexAttribPointer(position, 3, context.FLOAT, false, 0, 0); >+ context.enableVertexAttribArray(position); >+ >+ context.drawArrays(context.TRIANGLES, 0, 3); >+} >+ >+function drawElements() { >+ clearContext(); >+ >+ let vertexes = [ >+ -0.5, 0.5, 0.0, >+ -0.5, -0.5, 0.0, >+ 0.5, -0.5, 0.0, >+ ]; >+ let vertexBuffer = context.createBuffer(); >+ context.bindBuffer(context.ARRAY_BUFFER, vertexBuffer); >+ context.bufferData(context.ARRAY_BUFFER, new Float32Array(vertexes), context.STATIC_DRAW); >+ >+ let indexes = [0, 1, 2]; >+ let indexBuffer = context.createBuffer(); >+ context.bindBuffer(context.ELEMENT_ARRAY_BUFFER, indexBuffer); >+ context.bufferData(context.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexes), context.STATIC_DRAW); >+ >+ let position = context.getAttribLocation(program, "position"); >+ context.vertexAttribPointer(position, 3, context.FLOAT, false, 0, 0); >+ context.enableVertexAttribArray(position); >+ >+ context.drawElements(context.TRIANGLES, indexes.length, context.UNSIGNED_SHORT, 0); >+} >+ >+function test() { >+ let suite = InspectorTest.createAsyncSuite("Canvas.setShaderProgramDisabled"); >+ >+ let shaderProgram = WI.canvasManager.shaderPrograms[0]; >+ let originalContent = null; >+ >+ function validTest({name, disabled, evaluateString}) { >+ suite.addTestCase({ >+ name, >+ test(resolve, reject) { >+ CanvasAgent.setShaderProgramDisabled(shaderProgram.identifier, disabled, (error) => { >+ if (error) { >+ reject(error); >+ return; >+ } >+ >+ InspectorTest.evaluateInPage(evaluateString, (error) => { >+ if (error) { >+ reject(error); >+ return; >+ } >+ >+ CanvasAgent.requestContent(shaderProgram.canvas.identifier) >+ .then(({content}) => { >+ if (disabled) >+ InspectorTest.expectEqual(content, originalContent, "Disabled shader programs should have no visual effect."); >+ else >+ InspectorTest.expectNotEqual(content, originalContent, "Re-enabled shader programs should have a visual effect."); >+ }) >+ .then(resolve, reject); >+ }); >+ }); >+ } >+ }); >+ } >+ >+ validTest({ >+ name: "Canvas.setShaderProgramDisabled.disabledDrawArrays", >+ disabled: true, >+ evaluateString: `drawArrays()`, >+ }); >+ >+ validTest({ >+ name: "Canvas.setShaderProgramDisabled.disabledDrawElements", >+ disabled: true, >+ evaluateString: `drawElements()`, >+ }); >+ >+ validTest({ >+ name: "Canvas.setShaderProgramDisabled.reenabledDrawArrays", >+ disabled: false, >+ evaluateString: `drawArrays()`, >+ }); >+ >+ validTest({ >+ name: "Canvas.setShaderProgramDisabled.reenabledDrawElements", >+ disabled: false, >+ evaluateString: `drawElements()`, >+ }); >+ >+ suite.addTestCase({ >+ name: "Canvas.setShaderProgramDisabled.invalidProgramId", >+ description: "Invalid program identifiers should cause an error.", >+ test(resolve, reject) { >+ const programId = "INVALID_PROGRAM_ID"; >+ const disabled = false; >+ CanvasAgent.setShaderProgramDisabled(programId, disabled, (error) => { >+ InspectorTest.expectThat(error, "Should produce an error."); >+ InspectorTest.log("Error: " + error); >+ resolve(); >+ }); >+ } >+ }); >+ >+ CanvasAgent.requestContent(shaderProgram.canvas.identifier, (error, content) => { >+ originalContent = content; >+ >+ suite.runTestCasesAndFinish(); >+ }); >+} >+</script> >+</head> >+<body onload="load()"> >+ <p>Test disabling and re-enabling of shader programs.</p> >+</body> >+</html>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 175400
:
317769
|
317770
|
318714
|
318728