Changeset 220233 in webkit
- Timestamp:
- Aug 3, 2017, 3:31:44 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 7 added
- 20 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r220223 r220233 1 2017-08-03 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Instrument WebGLProgram created/deleted 4 https://bugs.webkit.org/show_bug.cgi?id=175059 5 6 Reviewed by Devin Rousso. 7 8 Add tests for CanvasManager shader program events and ShaderProgram model object. 9 WebGL and WebGL2 contexts are tested separately based on platform support. 10 11 * inspector/canvas/resources/shaderProgram-utilities.js: Added. 12 (createProgram): 13 (deleteProgram): 14 (deleteContext): 15 (TestPage.registerInitializer.awaitProgramAdded): 16 (TestPage.registerInitializer): 17 (TestPage.registerInitializer.window.initializeTestSuite): 18 (TestPage.registerInitializer.window.addSimpleTestCase): 19 (TestPage.registerInitializer.window.addParentCanvasRemovedTestCase): 20 21 * inspector/canvas/shaderProgram-add-remove-webgl-expected.txt: Added. 22 * inspector/canvas/shaderProgram-add-remove-webgl.html: Added. 23 * inspector/canvas/shaderProgram-add-remove-webgl2-expected.txt: Added. 24 * inspector/canvas/shaderProgram-add-remove-webgl2.html: Added. 25 26 * platform/gtk/TestExpectations: 27 * platform/mac/TestExpectations: 28 * platform/win/TestExpectations: 29 1 30 2017-08-03 Youenn Fablet <youenn@apple.com> 2 31 -
trunk/LayoutTests/platform/gtk/TestExpectations
r220218 r220233 592 592 webkit.org/b/166536 inspector/canvas/requestContent-webgl2.html [ Skip ] 593 593 webkit.org/b/166536 inspector/canvas/resolveCanvasContext-webgl2.html [ Skip ] 594 webkit.org/b/166536 inspector/canvas/shaderProgram-add-remove-webgl2.html [ Skip ] 594 595 595 596 # These tests reference specific fonts on Mac port. -
trunk/LayoutTests/platform/mac/TestExpectations
r220164 r220233 1139 1139 webkit.org/b/174066 inspector/canvas/create-context-webgpu.html [ Pass Timeout ] 1140 1140 webkit.org/b/174272 inspector/canvas/css-canvas-clients.html [ Pass Timeout ] 1141 webkit.org/b/174066 inspector/canvas/shaderProgram-add-remove-webgl2.html [ Pass Timeout ] 1141 1142 webkit.org/b/170615 inspector/codemirror/prettyprinting-css.html [ Pass Timeout ] 1142 1143 webkit.org/b/153460 inspector/codemirror/prettyprinting-css-rules.html [ Pass Timeout ] -
trunk/LayoutTests/platform/win/TestExpectations
r220218 r220233 1914 1914 inspector/canvas/resolveCanvasContext-webgl.html [ Skip ] 1915 1915 inspector/canvas/resolveCanvasContext-webgl2.html [ Skip ] 1916 inspector/canvas/shaderProgram-add-remove-webgl.html [ Skip ] 1917 inspector/canvas/shaderProgram-add-remove-webgl2.html [ Skip ] 1916 1918 ################################################################################ 1917 1919 ################# End WebGL Issues ####################### -
trunk/Source/JavaScriptCore/ChangeLog
r220220 r220233 1 2017-08-03 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Instrument WebGLProgram created/deleted 4 https://bugs.webkit.org/show_bug.cgi?id=175059 5 6 Reviewed by Devin Rousso. 7 8 Extend the Canvas protocol with types/events for tracking WebGLPrograms. 9 10 * inspector/protocol/Canvas.json: 11 1 12 2017-08-03 Brady Eidson <beidson@apple.com> 2 13 -
trunk/Source/JavaScriptCore/inspector/protocol/Canvas.json
r219964 r220233 8 8 "type": "string", 9 9 "description": "Unique canvas identifier." 10 }, 11 { 12 "id": "ProgramId", 13 "type": "string", 14 "description": "Unique shader program identifier." 10 15 }, 11 16 { … … 143 148 { "name": "recording", "$ref": "Recording.Recording" } 144 149 ] 150 }, 151 { 152 "name": "programCreated", 153 "parameters": [ 154 { "name": "canvasId", "$ref": "CanvasId", "description": "Canvas identifier." }, 155 { "name": "programId", "$ref": "ProgramId", "description": "Program identifier." } 156 ] 157 }, 158 { 159 "name": "programDeleted", 160 "parameters": [ 161 { "name": "programId", "$ref": "ProgramId", "description": "Program identifier." } 162 ] 145 163 } 146 164 ] -
trunk/Source/WebCore/CMakeLists.txt
r220220 r220233 3247 3247 html/canvas/WebGLVertexArrayObjectBase.cpp 3248 3248 html/canvas/WebGLVertexArrayObjectOES.cpp 3249 3250 inspector/InspectorShaderProgram.cpp 3249 3251 ) 3250 3252 list(APPEND WebCore_IDL_FILES -
trunk/Source/WebCore/ChangeLog
r220226 r220233 1 2017-08-03 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Instrument WebGLProgram created/deleted 4 https://bugs.webkit.org/show_bug.cgi?id=175059 5 6 Reviewed by Devin Rousso. 7 8 Tests: inspector/canvas/shaderProgram-add-remove-webgl.html 9 inspector/canvas/shaderProgram-add-remove-webgl2.html 10 11 This patch adds instrumentation to WebGLRenderingContextBase for tracking 12 WebGLPrograms. A new helper class, InspectorShaderProgram, is used by 13 the CanvasAgent to hold related data. 14 15 * CMakeLists.txt: 16 * WebCore.xcodeproj/project.pbxproj: 17 18 * html/canvas/WebGLRenderingContextBase.cpp: 19 (WebCore::WebGLRenderingContextBase::createProgram): 20 (WebCore::WebGLRenderingContextBase::deleteProgram): 21 22 * inspector/InspectorCanvasAgent.cpp: 23 (WebCore::InspectorCanvasAgent::enable): 24 (WebCore::InspectorCanvasAgent::frameNavigated): 25 (WebCore::InspectorCanvasAgent::didCreateProgram): 26 (WebCore::InspectorCanvasAgent::willDeleteProgram): 27 (WebCore::InspectorCanvasAgent::clearCanvasData): 28 (WebCore::InspectorCanvasAgent::unbindCanvas): 29 (WebCore::InspectorCanvasAgent::unbindProgram): 30 (WebCore::InspectorCanvasAgent::assertInspectorProgram): 31 (WebCore::InspectorCanvasAgent::findInspectorProgram): 32 * inspector/InspectorCanvasAgent.h: 33 34 * inspector/InspectorInstrumentation.cpp: 35 (WebCore::InspectorInstrumentation::didCreateCSSCanvasImpl): 36 (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl): 37 (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContextImpl): 38 (WebCore::InspectorInstrumentation::didChangeCanvasMemoryImpl): 39 (WebCore::InspectorInstrumentation::recordCanvasActionImpl): 40 (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrameImpl): 41 (WebCore::InspectorInstrumentation::didCreateProgramImpl): 42 (WebCore::InspectorInstrumentation::willDeleteProgramImpl): 43 44 * inspector/InspectorInstrumentation.h: 45 (WebCore::InspectorInstrumentation::recordCanvasActionImpl): 46 (WebCore::InspectorInstrumentation::didCreateCSSCanvas): 47 (WebCore::InspectorInstrumentation::didChangeCSSCanvasClientNodes): 48 (WebCore::InspectorInstrumentation::didCreateCanvasRenderingContext): 49 (WebCore::InspectorInstrumentation::didChangeCanvasMemory): 50 (WebCore::InspectorInstrumentation::recordCanvasAction): 51 (WebCore::InspectorInstrumentation::didFinishRecordingCanvasFrame): 52 (WebCore::InspectorInstrumentation::didCreateProgram): 53 (WebCore::InspectorInstrumentation::willDeleteProgram): 54 55 * inspector/InspectorShaderProgram.cpp: Added. 56 (WebCore::InspectorShaderProgram::create): 57 (WebCore::InspectorShaderProgram::InspectorShaderProgram): 58 (WebCore::InspectorShaderProgram::context const): 59 * inspector/InspectorShaderProgram.h: Added. 60 1 61 2017-08-03 Matt Lewis <jlewis3@apple.com> 2 62 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r220220 r220233 2884 2884 6A32D7CE1A16D8C000412F0B /* InspectorCanvasAgent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B6D6619D225D8006F11D3 /* InspectorCanvasAgent.cpp */; }; 2885 2885 6A4B6D6519D22519006F11D3 /* InspectorCanvasAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4B6D6419D22519006F11D3 /* InspectorCanvasAgent.h */; }; 2886 6A72798B1F16C29C003F39B8 /* InspectorShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A7279881F16C29B003F39B8 /* InspectorShaderProgram.h */; }; 2887 6A72798C1F16C29C003F39B8 /* InspectorShaderProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6A7279891F16C29B003F39B8 /* InspectorShaderProgram.cpp */; }; 2886 2888 6B3480940EEF50D400AC1B41 /* NativeImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3480920EEF50D400AC1B41 /* NativeImage.h */; settings = {ATTRIBUTES = (Private, ); }; }; 2887 2889 6B693A2E1C51A82E00B03BEF /* ResourceLoadObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 10712 10714 6A4B6D6419D22519006F11D3 /* InspectorCanvasAgent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorCanvasAgent.h; sourceTree = "<group>"; }; 10713 10715 6A4B6D6619D225D8006F11D3 /* InspectorCanvasAgent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorCanvasAgent.cpp; sourceTree = "<group>"; }; 10716 6A7279881F16C29B003F39B8 /* InspectorShaderProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InspectorShaderProgram.h; sourceTree = "<group>"; }; 10717 6A7279891F16C29B003F39B8 /* InspectorShaderProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InspectorShaderProgram.cpp; sourceTree = "<group>"; }; 10714 10718 6B3480920EEF50D400AC1B41 /* NativeImage.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = NativeImage.h; sourceTree = "<group>"; }; 10715 10719 6B693A2D1C51A82E00B03BEF /* ResourceLoadObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadObserver.h; sourceTree = "<group>"; }; … … 17250 17254 4F6FDD621341DEDD001F8EE3 /* InspectorPageAgent.cpp */, 17251 17255 4F6FDD631341DEDD001F8EE3 /* InspectorPageAgent.h */, 17256 6A7279891F16C29B003F39B8 /* InspectorShaderProgram.cpp */, 17257 6A7279881F16C29B003F39B8 /* InspectorShaderProgram.h */, 17252 17258 82AB176F125C826700C5069D /* InspectorStyleSheet.cpp */, 17253 17259 82AB1770125C826700C5069D /* InspectorStyleSheet.h */, … … 27775 27781 0F03C0751884805500A5F8CA /* InspectorOverlay.h in Headers */, 27776 27782 4F6FDD651341DEDD001F8EE3 /* InspectorPageAgent.h in Headers */, 27783 6A72798B1F16C29C003F39B8 /* InspectorShaderProgram.h in Headers */, 27777 27784 82AB1774125C826700C5069D /* InspectorStyleSheet.h in Headers */, 27778 27785 754133A8102E00E800075D00 /* InspectorTimelineAgent.h in Headers */, … … 31752 31759 7C522D4B15B477E8009B7C95 /* InspectorOverlay.cpp in Sources */, 31753 31760 4F6FDD641341DEDD001F8EE3 /* InspectorPageAgent.cpp in Sources */, 31761 6A72798C1F16C29C003F39B8 /* InspectorShaderProgram.cpp in Sources */, 31754 31762 82AB1773125C826700C5069D /* InspectorStyleSheet.cpp in Sources */, 31755 31763 754133AA102E00F400075D00 /* InspectorTimelineAgent.cpp in Sources */, -
trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp
r219856 r220233 1503 1503 auto program = WebGLProgram::create(*this); 1504 1504 addSharedObject(program.get()); 1505 1506 InspectorInstrumentation::didCreateProgram(*this, program.get()); 1507 1505 1508 return WTFMove(program); 1506 1509 } … … 1573 1576 void WebGLRenderingContextBase::deleteProgram(WebGLProgram* program) 1574 1577 { 1578 ASSERT(program); 1579 InspectorInstrumentation::willDeleteProgram(*this, *program); 1580 1575 1581 deleteObject(program); 1576 1582 // We don't reset m_currentProgram to 0 here because the deletion of the -
trunk/Source/WebCore/inspector/InspectorCanvasAgent.cpp
r220008 r220233 47 47 #if ENABLE(WEBGL) 48 48 #include "JSWebGLRenderingContext.h" 49 #include "WebGLProgram.h" 49 50 #endif 50 51 … … 95 96 for (auto& inspectorCanvas : m_identifierToInspectorCanvas.values()) 96 97 m_frontendDispatcher->canvasAdded(inspectorCanvas->buildObjectForCanvas(m_instrumentingAgents)); 98 99 #if ENABLE(WEBGL) 100 for (auto& inspectorProgram : m_identifierToInspectorProgram.values()) { 101 auto& inspectorCanvas = inspectorProgram->canvas(); 102 m_frontendDispatcher->programCreated(inspectorCanvas.identifier(), inspectorProgram->identifier()); 103 } 104 #endif 97 105 } 98 106 … … 271 279 272 280 Vector<InspectorCanvas*> inspectorCanvases; 273 for ( RefPtr<InspectorCanvas>& inspectorCanvas : m_identifierToInspectorCanvas.values()) {281 for (auto& inspectorCanvas : m_identifierToInspectorCanvas.values()) { 274 282 if (inspectorCanvas->canvas().document().frame() == &frame) 275 283 inspectorCanvases.append(inspectorCanvas.get()); … … 418 426 } 419 427 428 #if ENABLE(WEBGL) 429 void InspectorCanvasAgent::didCreateProgram(WebGLRenderingContextBase& context, WebGLProgram& program) 430 { 431 auto* inspectorCanvas = findInspectorCanvas(context.canvas()); 432 ASSERT(inspectorCanvas); 433 if (!inspectorCanvas) 434 return; 435 436 auto inspectorProgram = InspectorShaderProgram::create(program, *inspectorCanvas); 437 String programIdentifier = inspectorProgram->identifier(); 438 m_identifierToInspectorProgram.set(programIdentifier, WTFMove(inspectorProgram)); 439 440 if (m_enabled) 441 m_frontendDispatcher->programCreated(inspectorCanvas->identifier(), programIdentifier); 442 } 443 444 void InspectorCanvasAgent::willDeleteProgram(WebGLProgram& program) 445 { 446 auto* inspectorProgram = findInspectorProgram(program); 447 if (!inspectorProgram) 448 return; 449 450 String identifier = unbindProgram(*inspectorProgram); 451 if (m_enabled) 452 m_frontendDispatcher->programDeleted(identifier); 453 } 454 #endif 455 420 456 void InspectorCanvasAgent::canvasDestroyedTimerFired() 421 457 { … … 449 485 m_canvasToCSSCanvasName.clear(); 450 486 m_removedCanvasIdentifiers.clear(); 487 #if ENABLE(WEBGL) 488 m_identifierToInspectorProgram.clear(); 489 #endif 451 490 452 491 if (m_canvasRecordingTimer.isActive()) … … 460 499 { 461 500 ASSERT(!m_canvasToCSSCanvasName.contains(&inspectorCanvas.canvas())); 501 502 #if ENABLE(WEBGL) 503 Vector<InspectorShaderProgram*> programsToRemove; 504 for (auto& inspectorProgram : m_identifierToInspectorProgram.values()) { 505 if (&inspectorProgram->canvas() == &inspectorCanvas) 506 programsToRemove.append(inspectorProgram.get()); 507 } 508 509 for (auto* inspectorProgram : programsToRemove) 510 unbindProgram(*inspectorProgram); 511 #endif 462 512 463 513 String identifier = inspectorCanvas.identifier(); … … 488 538 } 489 539 540 #if ENABLE(WEBGL) 541 String InspectorCanvasAgent::unbindProgram(InspectorShaderProgram& inspectorProgram) 542 { 543 ASSERT(inspectorProgram.context()); 544 545 String identifier = inspectorProgram.identifier(); 546 m_identifierToInspectorProgram.remove(identifier); 547 548 return identifier; 549 } 550 551 InspectorShaderProgram* InspectorCanvasAgent::assertInspectorProgram(ErrorString& errorString, const String& identifier) 552 { 553 RefPtr<InspectorShaderProgram> inspectorProgram = m_identifierToInspectorProgram.get(identifier); 554 if (!inspectorProgram) { 555 errorString = ASCIILiteral("No shader program for given identifier."); 556 return nullptr; 557 } 558 559 return inspectorProgram.get(); 560 } 561 562 InspectorShaderProgram* InspectorCanvasAgent::findInspectorProgram(WebGLProgram& program) 563 { 564 for (auto& inspectorProgram : m_identifierToInspectorProgram.values()) { 565 if (&inspectorProgram->program() == &program) 566 return inspectorProgram.get(); 567 } 568 569 return nullptr; 570 } 571 #endif 572 490 573 } // namespace WebCore -
trunk/Source/WebCore/inspector/InspectorCanvasAgent.h
r220008 r220233 38 38 #include <wtf/text/WTFString.h> 39 39 40 #if ENABLE(WEBGL) 41 #include "InspectorShaderProgram.h" 42 #endif 43 40 44 namespace Inspector { 41 45 class InjectedScriptManager; … … 45 49 46 50 class CanvasRenderingContext; 51 #if ENABLE(WEBGL) 52 class WebGLProgram; 47 53 class WebGLRenderingContextBase; 54 #endif 48 55 49 56 typedef String ErrorString; … … 78 85 void recordCanvasAction(CanvasRenderingContext&, const String&, Vector<RecordCanvasActionVariant>&& = { }); 79 86 void didFinishRecordingCanvasFrame(HTMLCanvasElement&, bool forceDispatch = false); 87 #if ENABLE(WEBGL) 88 void didCreateProgram(WebGLRenderingContextBase&, WebGLProgram&); 89 void willDeleteProgram(WebGLProgram&); 90 #endif 80 91 81 92 // CanvasObserver … … 89 100 void clearCanvasData(); 90 101 String unbindCanvas(InspectorCanvas&); 91 InspectorCanvas* assertInspectorCanvas(ErrorString&, const String& );102 InspectorCanvas* assertInspectorCanvas(ErrorString&, const String& identifier); 92 103 InspectorCanvas* findInspectorCanvas(HTMLCanvasElement&); 104 #if ENABLE(WEBGL) 105 String unbindProgram(InspectorShaderProgram&); 106 InspectorShaderProgram* assertInspectorProgram(ErrorString&, const String& identifier); 107 InspectorShaderProgram* findInspectorProgram(WebGLProgram&); 108 109 HashMap<String, RefPtr<InspectorShaderProgram>> m_identifierToInspectorProgram; 110 #endif 93 111 94 112 std::unique_ptr<Inspector::CanvasFrontendDispatcher> m_frontendDispatcher; 95 113 RefPtr<Inspector::CanvasBackendDispatcher> m_backendDispatcher; 96 114 Inspector::InjectedScriptManager& m_injectedScriptManager; 97 98 115 HashMap<String, RefPtr<InspectorCanvas>> m_identifierToInspectorCanvas; 99 116 HashMap<HTMLCanvasElement*, String> m_canvasToCSSCanvasName; -
trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp
r220036 r220233 979 979 #endif 980 980 981 void InspectorInstrumentation::didCreateCSSCanvasImpl(InstrumentingAgents *instrumentingAgents, HTMLCanvasElement& canvasElement, const String& name)982 { 983 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())981 void InspectorInstrumentation::didCreateCSSCanvasImpl(InstrumentingAgents& instrumentingAgents, HTMLCanvasElement& canvasElement, const String& name) 982 { 983 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 984 984 canvasAgent->didCreateCSSCanvas(canvasElement, name); 985 985 } 986 986 987 void InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl(InstrumentingAgents *instrumentingAgents, HTMLCanvasElement& canvasElement)988 { 989 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())987 void InspectorInstrumentation::didChangeCSSCanvasClientNodesImpl(InstrumentingAgents& instrumentingAgents, HTMLCanvasElement& canvasElement) 988 { 989 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 990 990 canvasAgent->didChangeCSSCanvasClientNodes(canvasElement); 991 991 } 992 992 993 void InspectorInstrumentation::didCreateCanvasRenderingContextImpl(InstrumentingAgents *instrumentingAgents, HTMLCanvasElement& canvasElement)994 { 995 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())993 void InspectorInstrumentation::didCreateCanvasRenderingContextImpl(InstrumentingAgents& instrumentingAgents, HTMLCanvasElement& canvasElement) 994 { 995 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 996 996 canvasAgent->didCreateCanvasRenderingContext(canvasElement); 997 997 } 998 998 999 void InspectorInstrumentation::didChangeCanvasMemoryImpl(InstrumentingAgents *instrumentingAgents, HTMLCanvasElement& canvasElement)1000 { 1001 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())999 void InspectorInstrumentation::didChangeCanvasMemoryImpl(InstrumentingAgents& instrumentingAgents, HTMLCanvasElement& canvasElement) 1000 { 1001 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 1002 1002 canvasAgent->didChangeCanvasMemory(canvasElement); 1003 1003 } 1004 1004 1005 void InspectorInstrumentation::recordCanvasActionImpl(InstrumentingAgents *instrumentingAgents, CanvasRenderingContext& canvasRenderingContext, const String& name, Vector<RecordCanvasActionVariant>&& parameters)1006 { 1007 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())1005 void InspectorInstrumentation::recordCanvasActionImpl(InstrumentingAgents& instrumentingAgents, CanvasRenderingContext& canvasRenderingContext, const String& name, Vector<RecordCanvasActionVariant>&& parameters) 1006 { 1007 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 1008 1008 canvasAgent->recordCanvasAction(canvasRenderingContext, name, WTFMove(parameters)); 1009 1009 } 1010 1010 1011 void InspectorInstrumentation::didFinishRecordingCanvasFrameImpl(InstrumentingAgents *instrumentingAgents, HTMLCanvasElement& canvasElement, bool forceDispatch)1012 { 1013 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents ->inspectorCanvasAgent())1011 void InspectorInstrumentation::didFinishRecordingCanvasFrameImpl(InstrumentingAgents& instrumentingAgents, HTMLCanvasElement& canvasElement, bool forceDispatch) 1012 { 1013 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 1014 1014 canvasAgent->didFinishRecordingCanvasFrame(canvasElement, forceDispatch); 1015 1015 } 1016 1017 #if ENABLE(WEBGL) 1018 void InspectorInstrumentation::didCreateProgramImpl(InstrumentingAgents& instrumentingAgents, WebGLRenderingContextBase& context, WebGLProgram& program) 1019 { 1020 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 1021 canvasAgent->didCreateProgram(context, program); 1022 } 1023 1024 void InspectorInstrumentation::willDeleteProgramImpl(InstrumentingAgents& instrumentingAgents, WebGLProgram& program) 1025 { 1026 if (InspectorCanvasAgent* canvasAgent = instrumentingAgents.inspectorCanvasAgent()) 1027 canvasAgent->willDeleteProgram(program); 1028 } 1029 #endif 1016 1030 1017 1031 #if ENABLE(RESOURCE_USAGE) -
trunk/Source/WebCore/inspector/InspectorInstrumentation.h
r220036 r220233 51 51 #include <wtf/RefPtr.h> 52 52 53 #if ENABLE(WEBGL) 54 #include "WebGLRenderingContextBase.h" 55 #endif 56 53 57 namespace Inspector { 54 58 class ConsoleMessage; … … 83 87 class ShadowRoot; 84 88 class URL; 85 class WebGLRenderingContextBase; 89 #if ENABLE(WEBGL) 90 class WebGLProgram; 91 #endif 86 92 class WebKitNamedFlow; 87 93 class WorkerInspectorProxy; … … 235 241 static void recordCanvasAction(CanvasRenderingContext&, const String&, Vector<RecordCanvasActionVariant>&& = { }); 236 242 static void didFinishRecordingCanvasFrame(HTMLCanvasElement&, bool forceDispatch = false); 243 244 #if ENABLE(WEBGL) 245 static void didCreateProgram(WebGLRenderingContextBase&, WebGLProgram&); 246 static void willDeleteProgram(WebGLRenderingContextBase&, WebGLProgram&); 247 #endif 237 248 238 249 static void networkStateChanged(Page&); … … 391 402 static void updateApplicationCacheStatusImpl(InstrumentingAgents&, Frame&); 392 403 393 static void didCreateCSSCanvasImpl(InstrumentingAgents*, HTMLCanvasElement&, const String&); 394 static void didChangeCSSCanvasClientNodesImpl(InstrumentingAgents*, HTMLCanvasElement&); 395 static void didCreateCanvasRenderingContextImpl(InstrumentingAgents*, HTMLCanvasElement&); 396 static void didChangeCanvasMemoryImpl(InstrumentingAgents*, HTMLCanvasElement&); 397 static void recordCanvasActionImpl(InstrumentingAgents*, CanvasRenderingContext&, const String&, Vector<RecordCanvasActionVariant>&& = { }); 398 static void didFinishRecordingCanvasFrameImpl(InstrumentingAgents*, HTMLCanvasElement&, bool forceDispatch = false); 404 static void didCreateCSSCanvasImpl(InstrumentingAgents&, HTMLCanvasElement&, const String&); 405 static void didChangeCSSCanvasClientNodesImpl(InstrumentingAgents&, HTMLCanvasElement&); 406 static void didCreateCanvasRenderingContextImpl(InstrumentingAgents&, HTMLCanvasElement&); 407 static void didChangeCanvasMemoryImpl(InstrumentingAgents&, HTMLCanvasElement&); 408 static void recordCanvasActionImpl(InstrumentingAgents&, CanvasRenderingContext&, const String&, Vector<RecordCanvasActionVariant>&& = { }); 409 static void didFinishRecordingCanvasFrameImpl(InstrumentingAgents&, HTMLCanvasElement&, bool forceDispatch = false); 410 #if ENABLE(WEBGL) 411 static void didCreateProgramImpl(InstrumentingAgents&, WebGLRenderingContextBase&, WebGLProgram&); 412 static void willDeleteProgramImpl(InstrumentingAgents&, WebGLProgram&); 413 #endif 399 414 400 415 static void layerTreeDidChangeImpl(InstrumentingAgents&); … … 1100 1115 { 1101 1116 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasElement.document())) 1102 didCreateCSSCanvasImpl( instrumentingAgents, canvasElement, name);1117 didCreateCSSCanvasImpl(*instrumentingAgents, canvasElement, name); 1103 1118 } 1104 1119 … … 1107 1122 FAST_RETURN_IF_NO_FRONTENDS(void()); 1108 1123 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasElement.document())) 1109 didChangeCSSCanvasClientNodesImpl( instrumentingAgents, canvasElement);1124 didChangeCSSCanvasClientNodesImpl(*instrumentingAgents, canvasElement); 1110 1125 } 1111 1126 … … 1113 1128 { 1114 1129 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasElement.document())) 1115 didCreateCanvasRenderingContextImpl( instrumentingAgents, canvasElement);1130 didCreateCanvasRenderingContextImpl(*instrumentingAgents, canvasElement); 1116 1131 } 1117 1132 … … 1120 1135 FAST_RETURN_IF_NO_FRONTENDS(void()); 1121 1136 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasElement.document())) 1122 didChangeCanvasMemoryImpl( instrumentingAgents, canvasElement);1137 didChangeCanvasMemoryImpl(*instrumentingAgents, canvasElement); 1123 1138 } 1124 1139 … … 1127 1142 FAST_RETURN_IF_NO_FRONTENDS(void()); 1128 1143 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasRenderingContext.canvas().document())) 1129 recordCanvasActionImpl( instrumentingAgents, canvasRenderingContext, name, WTFMove(parameters));1144 recordCanvasActionImpl(*instrumentingAgents, canvasRenderingContext, name, WTFMove(parameters)); 1130 1145 } 1131 1146 … … 1134 1149 FAST_RETURN_IF_NO_FRONTENDS(void()); 1135 1150 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(&canvasElement.document())) 1136 didFinishRecordingCanvasFrameImpl(instrumentingAgents, canvasElement, forceDispatch); 1137 } 1151 didFinishRecordingCanvasFrameImpl(*instrumentingAgents, canvasElement, forceDispatch); 1152 } 1153 1154 #if ENABLE(WEBGL) 1155 inline void InspectorInstrumentation::didCreateProgram(WebGLRenderingContextBase& context, WebGLProgram& program) 1156 { 1157 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(context.canvas().document())) 1158 didCreateProgramImpl(*instrumentingAgents, context, program); 1159 } 1160 1161 inline void InspectorInstrumentation::willDeleteProgram(WebGLRenderingContextBase& context, WebGLProgram& program) 1162 { 1163 if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForDocument(context.canvas().document())) 1164 willDeleteProgramImpl(*instrumentingAgents, program); 1165 } 1166 #endif 1138 1167 1139 1168 inline void InspectorInstrumentation::networkStateChanged(Page& page) -
trunk/Source/WebInspectorUI/ChangeLog
r220232 r220233 1 2017-08-03 Matt Baker <mattbaker@apple.com> 2 3 Web Inspector: Instrument WebGLProgram created/deleted 4 https://bugs.webkit.org/show_bug.cgi?id=175059 5 6 Reviewed by Devin Rousso. 7 8 This patch adds frontend support for shader program instrumentation. 9 The frontend creates a ShaderProgram model object for each WebGLProgram. 10 Since only canvases with a WebGL context have programs, the Canvas model 11 object does not contain any logic specific to programs. CanvasManager 12 dispatches program added/removed events, and the parent Canvas can be 13 accessed from ShaderProgram but not the other way around. 14 15 * UserInterface/Controllers/CanvasManager.js: 16 (WI.CanvasManager): 17 (WI.CanvasManager.prototype.get shaderPrograms): 18 (WI.CanvasManager.prototype.canvasRemoved): 19 (WI.CanvasManager.prototype.programCreated): 20 (WI.CanvasManager.prototype.programDeleted): 21 (WI.CanvasManager.prototype._mainResourceDidChange): 22 (WI.CanvasManager.prototype._dispatchShaderProgramRemoved): 23 24 * UserInterface/Main.html: 25 26 * UserInterface/Models/Canvas.js: 27 (WI.Canvas.prototype.nextShaderProgramDisplayNumber): 28 (WI.Canvas): 29 30 * UserInterface/Models/ShaderProgram.js: Added. 31 (WI.ShaderProgram): 32 (WI.ShaderProgram.prototype.get identifier): 33 (WI.ShaderProgram.prototype.get canvas): 34 (WI.ShaderProgram.prototype.get displayName): 35 36 * UserInterface/Protocol/CanvasObserver.js: 37 (WI.CanvasObserver.prototype.programCreated): 38 (WI.CanvasObserver.prototype.programDeleted): 39 (WI.CanvasObserver): 40 41 * UserInterface/Test.html: 42 1 43 2017-08-03 Joseph Pecoraro <pecoraro@apple.com> 2 44 -
trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js
r220119 r220233 33 33 34 34 this._canvasIdentifierMap = new Map; 35 this._shaderProgramIdentifierMap = new Map; 36 this._canvasShaderProgramMap = new Map; 35 37 36 38 if (window.CanvasAgent) … … 45 47 } 46 48 49 get shaderPrograms() 50 { 51 return [...this._shaderProgramIdentifierMap.values()]; 52 } 53 47 54 canvasAdded(canvasPayload) 48 55 { … … 68 75 return; 69 76 77 let programs = this._canvasShaderProgramMap.take(canvas); 78 if (programs) { 79 for (let program of programs) { 80 this._shaderProgramIdentifierMap.delete(program.identifier); 81 this._dispatchShaderProgramRemoved(program); 82 } 83 } 84 70 85 canvas.frame.canvasCollection.remove(canvas); 71 86 … … 112 127 } 113 128 129 programCreated(canvasIdentifier, programIdentifier) 130 { 131 // Called from WI.CanvasObserver. 132 133 let canvas = this._canvasIdentifierMap.get(canvasIdentifier); 134 console.assert(canvas); 135 if (!canvas) 136 return; 137 138 console.assert(!this._shaderProgramIdentifierMap.has(programIdentifier), `ShaderProgram already exists with id ${programIdentifier}.`); 139 140 let program = new WI.ShaderProgram(programIdentifier, canvas); 141 this._shaderProgramIdentifierMap.set(program.identifier, program); 142 143 let programs = this._canvasShaderProgramMap.get(canvas); 144 if (!programs) { 145 programs = []; 146 this._canvasShaderProgramMap.set(canvas, programs); 147 } 148 149 programs.push(program); 150 151 this.dispatchEventToListeners(WI.CanvasManager.Event.ShaderProgramAdded, {program}); 152 } 153 154 programDeleted(programIdentifier) 155 { 156 // Called from WI.CanvasObserver. 157 158 let program = this._shaderProgramIdentifierMap.take(programIdentifier); 159 console.assert(program); 160 if (!program) 161 return; 162 163 let programs = this._canvasShaderProgramMap.get(program.canvas); 164 165 programs.remove(program); 166 167 if (!programs.length) 168 this._canvasShaderProgramMap.delete(program.canvas); 169 170 this._dispatchShaderProgramRemoved(program); 171 } 172 114 173 // Private 115 174 … … 121 180 122 181 WI.Canvas.resetUniqueDisplayNameNumbers(); 182 183 this._shaderProgramIdentifierMap.clear(); 184 this._canvasShaderProgramMap.clear(); 123 185 124 186 if (this._canvasIdentifierMap.size) { … … 126 188 this.dispatchEventToListeners(WI.CanvasManager.Event.Cleared); 127 189 } 190 } 191 192 _dispatchShaderProgramRemoved(program) 193 { 194 this.dispatchEventToListeners(WI.CanvasManager.Event.ShaderProgramRemoved, {program}); 128 195 } 129 196 }; … … 134 201 CanvasWasRemoved: "canvas-manager-canvas-was-removed", 135 202 RecordingFinished: "canvas-managger-recording-finished", 203 ShaderProgramAdded: "canvas-manager-shader-program-added", 204 ShaderProgramRemoved: "canvas-manager-shader-program-removed", 136 205 }; -
trunk/Source/WebInspectorUI/UserInterface/Main.html
r220188 r220233 401 401 <script src="Models/ScriptSyntaxTree.js"></script> 402 402 <script src="Models/ScriptTimelineRecord.js"></script> 403 <script src="Models/ShaderProgram.js"></script> 403 404 <script src="Models/SourceCodePosition.js"></script> 404 405 <script src="Models/SourceCodeRevision.js"></script> -
trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js
r220119 r220233 43 43 44 44 this._cssCanvasClientNodes = null; 45 46 this._nextShaderProgramDisplayNumber = 1; 45 47 } 46 48 … … 225 227 this.dispatchEventToListeners(WI.Canvas.Event.CSSCanvasClientNodesChanged); 226 228 } 229 230 nextShaderProgramDisplayNumber() 231 { 232 // Called from WI.ShaderProgram. 233 234 return this._nextShaderProgramDisplayNumber++; 235 } 227 236 }; 228 237 -
trunk/Source/WebInspectorUI/UserInterface/Models/ShaderProgram.js
r220232 r220233 24 24 */ 25 25 26 WI. CanvasObserver = class CanvasObserver26 WI.ShaderProgram = class ShaderProgram extends WI.Object 27 27 { 28 // Events defined by the "Canvas" domain. 28 constructor(identifier, canvas) 29 { 30 super(); 29 31 30 canvasAdded(canvas) 31 { 32 WI.canvasManager.canvasAdded(canvas); 32 console.assert(identifier); 33 console.assert(canvas instanceof WI.Canvas); 34 35 this._identifier = identifier; 36 this._canvas = canvas; 37 this._uniqueDisplayNumber = canvas.nextShaderProgramDisplayNumber(); 33 38 } 34 39 35 canvasRemoved(canvasId) 40 // Public 41 42 get identifier() { return this._identifier; } 43 get canvas() { return this._canvas; } 44 45 get displayName() 36 46 { 37 WI.canvasManager.canvasRemoved(canvasId); 38 } 39 40 canvasMemoryChanged(canvasId, memoryCost) 41 { 42 WI.canvasManager.canvasMemoryChanged(canvasId, memoryCost); 43 } 44 45 cssCanvasClientNodesChanged(canvasId) 46 { 47 WI.canvasManager.cssCanvasClientNodesChanged(canvasId); 48 } 49 50 recordingFinished(canvasId, recording) 51 { 52 WI.canvasManager.recordingFinished(canvasId, recording); 47 return WI.UIString("Program %d").format(this._uniqueDisplayNumber); 53 48 } 54 49 }; 50 51 WI.ShaderProgram.Event = { 52 ProgramLinked: "shader-program-program-linked", 53 ShaderCompiled: "shader-program-shader-compiled", 54 }; -
trunk/Source/WebInspectorUI/UserInterface/Protocol/CanvasObserver.js
r220119 r220233 52 52 WI.canvasManager.recordingFinished(canvasId, recording); 53 53 } 54 55 programCreated(canvasId, programId) 56 { 57 WI.canvasManager.programCreated(canvasId, programId); 58 } 59 60 programDeleted(programId) 61 { 62 WI.canvasManager.programDeleted(programId); 63 } 54 64 }; -
trunk/Source/WebInspectorUI/UserInterface/Test.html
r220119 r220233 169 169 <script src="Models/ScriptSyntaxTree.js"></script> 170 170 <script src="Models/ScriptTimelineRecord.js"></script> 171 <script src="Models/ShaderProgram.js"></script> 171 172 <script src="Models/SourceCodeRevision.js"></script> 172 173 <script src="Models/SourceCodeTimeline.js"></script>
Note:
See TracChangeset
for help on using the changeset viewer.