@lightningtv/renderer 3.0.0-beta1 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +4 -0
- package/README.md +22 -28
- package/dist/exports/canvas-shaders.js +0 -16
- package/dist/exports/canvas-shaders.js.map +1 -1
- package/dist/exports/canvas.d.ts +1 -1
- package/dist/exports/canvas.js +1 -19
- package/dist/exports/canvas.js.map +1 -1
- package/dist/exports/index.d.ts +2 -5
- package/dist/exports/index.js +1 -23
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/inspector.js +0 -18
- package/dist/exports/inspector.js.map +1 -1
- package/dist/exports/utils.d.ts +2 -1
- package/dist/exports/utils.js +2 -19
- package/dist/exports/utils.js.map +1 -1
- package/dist/exports/webgl-shaders.js +0 -16
- package/dist/exports/webgl-shaders.js.map +1 -1
- package/dist/exports/webgl.d.ts +2 -1
- package/dist/exports/webgl.js +2 -19
- package/dist/exports/webgl.js.map +1 -1
- package/dist/src/common/CommonTypes.d.ts +15 -3
- package/dist/src/common/CommonTypes.js +0 -18
- package/dist/src/common/CommonTypes.js.map +1 -1
- package/dist/src/common/EventEmitter.js +0 -18
- package/dist/src/common/EventEmitter.js.map +1 -1
- package/dist/src/common/IEventEmitter.js +0 -16
- package/dist/src/common/IEventEmitter.js.map +1 -1
- package/dist/src/core/Autosizer.d.ts +35 -0
- package/dist/src/core/Autosizer.js +178 -0
- package/dist/src/core/Autosizer.js.map +1 -0
- package/dist/src/core/CoreNode.d.ts +140 -102
- package/dist/src/core/CoreNode.js +812 -528
- package/dist/src/core/CoreNode.js.map +1 -1
- package/dist/src/core/CoreShaderManager.d.ts +3 -3
- package/dist/src/core/CoreShaderManager.js +0 -18
- package/dist/src/core/CoreShaderManager.js.map +1 -1
- package/dist/src/core/CoreTextNode.d.ts +75 -87
- package/dist/src/core/CoreTextNode.js +380 -258
- package/dist/src/core/CoreTextNode.js.map +1 -1
- package/dist/src/core/CoreTextureManager.d.ts +25 -14
- package/dist/src/core/CoreTextureManager.js +82 -139
- package/dist/src/core/CoreTextureManager.js.map +1 -1
- package/dist/src/core/Stage.d.ts +102 -36
- package/dist/src/core/Stage.js +424 -191
- package/dist/src/core/Stage.js.map +1 -1
- package/dist/src/core/TextureError.d.ts +11 -0
- package/dist/src/core/TextureError.js +37 -0
- package/dist/src/core/TextureError.js.map +1 -0
- package/dist/src/core/TextureMemoryManager.d.ts +11 -4
- package/dist/src/core/TextureMemoryManager.js +114 -134
- package/dist/src/core/TextureMemoryManager.js.map +1 -1
- package/dist/src/core/animations/AnimationManager.js +0 -18
- package/dist/src/core/animations/AnimationManager.js.map +1 -1
- package/dist/src/core/animations/CoreAnimation.d.ts +3 -3
- package/dist/src/core/animations/CoreAnimation.js +8 -24
- package/dist/src/core/animations/CoreAnimation.js.map +1 -1
- package/dist/src/core/animations/CoreAnimationController.d.ts +1 -0
- package/dist/src/core/animations/CoreAnimationController.js +11 -22
- package/dist/src/core/animations/CoreAnimationController.js.map +1 -1
- package/dist/src/core/lib/ContextSpy.js +0 -18
- package/dist/src/core/lib/ContextSpy.js.map +1 -1
- package/dist/src/core/lib/ImageWorker.d.ts +2 -2
- package/dist/src/core/lib/ImageWorker.js +33 -31
- package/dist/src/core/lib/ImageWorker.js.map +1 -1
- package/dist/src/core/lib/Matrix3d.d.ts +1 -0
- package/dist/src/core/lib/Matrix3d.js +7 -19
- package/dist/src/core/lib/Matrix3d.js.map +1 -1
- package/dist/src/core/lib/RenderCoords.d.ts +9 -10
- package/dist/src/core/lib/RenderCoords.js +27 -55
- package/dist/src/core/lib/RenderCoords.js.map +1 -1
- package/dist/src/core/lib/WebGlContextWrapper.d.ts +83 -8
- package/dist/src/core/lib/WebGlContextWrapper.js +150 -25
- package/dist/src/core/lib/WebGlContextWrapper.js.map +1 -1
- package/dist/src/core/lib/collectionUtils.d.ts +5 -0
- package/dist/src/core/lib/collectionUtils.js +82 -0
- package/dist/src/core/lib/collectionUtils.js.map +1 -0
- package/dist/src/core/lib/colorCache.d.ts +1 -0
- package/dist/src/core/lib/colorCache.js +19 -0
- package/dist/src/core/lib/colorCache.js.map +1 -0
- package/dist/src/core/{renderers/canvas/internal/ColorUtils.js → lib/colorParser.js} +1 -19
- package/dist/src/core/lib/colorParser.js.map +1 -0
- package/dist/src/core/lib/textureCompression.d.ts +14 -2
- package/dist/src/core/lib/textureCompression.js +320 -85
- package/dist/src/core/lib/textureCompression.js.map +1 -1
- package/dist/src/core/lib/textureSvg.js +0 -18
- package/dist/src/core/lib/textureSvg.js.map +1 -1
- package/dist/src/core/lib/utils.d.ts +8 -1
- package/dist/src/core/lib/utils.js +44 -20
- package/dist/src/core/lib/utils.js.map +1 -1
- package/dist/src/core/lib/validateImageBitmap.d.ts +2 -1
- package/dist/src/core/lib/validateImageBitmap.js +4 -4
- package/dist/src/core/lib/validateImageBitmap.js.map +1 -1
- package/dist/src/core/platforms/Platform.d.ts +42 -0
- package/dist/src/core/platforms/Platform.js +4 -0
- package/dist/src/core/platforms/Platform.js.map +1 -0
- package/dist/src/core/platforms/web/WebPlatform.d.ts +10 -0
- package/dist/src/core/platforms/web/WebPlatform.js +90 -0
- package/dist/src/core/platforms/web/WebPlatform.js.map +1 -0
- package/dist/src/core/renderers/CoreContextTexture.d.ts +2 -1
- package/dist/src/core/renderers/CoreContextTexture.js +0 -18
- package/dist/src/core/renderers/CoreContextTexture.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderOp.js +0 -18
- package/dist/src/core/renderers/CoreRenderOp.js.map +1 -1
- package/dist/src/core/renderers/CoreRenderer.d.ts +15 -3
- package/dist/src/core/renderers/CoreRenderer.js +1 -18
- package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderNode.d.ts +13 -3
- package/dist/src/core/renderers/CoreShaderNode.js +25 -2
- package/dist/src/core/renderers/CoreShaderNode.js.map +1 -1
- package/dist/src/core/renderers/CoreShaderProgram.js +0 -18
- package/dist/src/core/renderers/CoreShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasRenderer.d.ts +4 -5
- package/dist/src/core/renderers/canvas/CanvasRenderer.js +89 -83
- package/dist/src/core/renderers/canvas/CanvasRenderer.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js +3 -21
- package/dist/src/core/renderers/canvas/CanvasShaderNode.js.map +1 -1
- package/dist/src/core/renderers/canvas/CanvasTexture.d.ts +3 -2
- package/dist/src/core/renderers/canvas/CanvasTexture.js +18 -31
- package/dist/src/core/renderers/canvas/CanvasTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/SdfRenderOp.d.ts +33 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js +80 -0
- package/dist/src/core/renderers/webgl/SdfRenderOp.js.map +1 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.d.ts +2 -0
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js +14 -24
- package/dist/src/core/renderers/webgl/WebGlCtxRenderTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.d.ts +13 -0
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js +34 -23
- package/dist/src/core/renderers/webgl/WebGlCtxSubTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.d.ts +16 -6
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js +102 -70
- package/dist/src/core/renderers/webgl/WebGlCtxTexture.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlRenderer.d.ts +34 -20
- package/dist/src/core/renderers/webgl/WebGlRenderer.js +319 -195
- package/dist/src/core/renderers/webgl/WebGlRenderer.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderNode.d.ts +2 -3
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js +1 -4
- package/dist/src/core/renderers/webgl/WebGlShaderNode.js.map +1 -1
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.d.ts +9 -7
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js +99 -48
- package/dist/src/core/renderers/webgl/WebGlShaderProgram.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/BufferCollection.d.ts +1 -0
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js +12 -21
- package/dist/src/core/renderers/webgl/internal/BufferCollection.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/RendererUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/ShaderUtils.js.map +1 -1
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js +0 -18
- package/dist/src/core/renderers/webgl/internal/WebGlUtils.js.map +1 -1
- package/dist/src/core/shaders/canvas/Border.d.ts +8 -2
- package/dist/src/core/shaders/canvas/Border.js +67 -41
- package/dist/src/core/shaders/canvas/Border.js.map +1 -1
- package/dist/src/core/shaders/canvas/HolePunch.js +3 -19
- package/dist/src/core/shaders/canvas/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/canvas/LinearGradient.js +7 -21
- package/dist/src/core/shaders/canvas/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/RadialGradient.js +14 -28
- package/dist/src/core/shaders/canvas/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/canvas/Rounded.js +1 -17
- package/dist/src/core/shaders/canvas/Rounded.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorder.d.ts +6 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js +44 -22
- package/dist/src/core/shaders/canvas/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.d.ts +2 -3
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js +47 -25
- package/dist/src/core/shaders/canvas/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js +9 -21
- package/dist/src/core/shaders/canvas/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/Shadow.js +0 -16
- package/dist/src/core/shaders/canvas/Shadow.js.map +1 -1
- package/dist/src/core/shaders/canvas/utils/render.d.ts +1 -1
- package/dist/src/core/shaders/canvas/utils/render.js +31 -34
- package/dist/src/core/shaders/canvas/utils/render.js.map +1 -1
- package/dist/src/core/shaders/templates/BorderTemplate.d.ts +12 -2
- package/dist/src/core/shaders/templates/BorderTemplate.js +31 -27
- package/dist/src/core/shaders/templates/BorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/HolePunchTemplate.d.ts +2 -2
- package/dist/src/core/shaders/templates/HolePunchTemplate.js +3 -19
- package/dist/src/core/shaders/templates/HolePunchTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js +0 -16
- package/dist/src/core/shaders/templates/LinearGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RadialGradientTemplate.d.ts +8 -6
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js +2 -18
- package/dist/src/core/shaders/templates/RadialGradientTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedTemplate.js +1 -17
- package/dist/src/core/shaders/templates/RoundedTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.d.ts +4 -2
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js +3 -17
- package/dist/src/core/shaders/templates/RoundedWithBorderTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/RoundedWithShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.d.ts +1 -1
- package/dist/src/core/shaders/templates/ShadowTemplate.js +0 -16
- package/dist/src/core/shaders/templates/ShadowTemplate.js.map +1 -1
- package/dist/src/core/shaders/{templates/shaderUtils.d.ts → utils.d.ts} +1 -1
- package/dist/src/core/shaders/utils.js +25 -0
- package/dist/src/core/shaders/utils.js.map +1 -0
- package/dist/src/core/shaders/webgl/Border.js +118 -51
- package/dist/src/core/shaders/webgl/Border.js.map +1 -1
- package/dist/src/core/shaders/webgl/Default.js +6 -41
- package/dist/src/core/shaders/webgl/Default.js.map +1 -1
- package/dist/src/core/shaders/webgl/HolePunch.js +4 -19
- package/dist/src/core/shaders/webgl/HolePunch.js.map +1 -1
- package/dist/src/core/shaders/webgl/LinearGradient.js +73 -34
- package/dist/src/core/shaders/webgl/LinearGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/RadialGradient.js +56 -48
- package/dist/src/core/shaders/webgl/RadialGradient.js.map +1 -1
- package/dist/src/core/shaders/webgl/Rounded.js +25 -23
- package/dist/src/core/shaders/webgl/Rounded.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js +160 -55
- package/dist/src/core/shaders/webgl/RoundedWithBorder.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js +168 -58
- package/dist/src/core/shaders/webgl/RoundedWithBorderAndShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js +73 -34
- package/dist/src/core/shaders/webgl/RoundedWithShadow.js.map +1 -1
- package/dist/src/core/shaders/webgl/SdfShader.d.ts +0 -2
- package/dist/src/core/shaders/webgl/SdfShader.js +8 -36
- package/dist/src/core/shaders/webgl/SdfShader.js.map +1 -1
- package/dist/src/core/shaders/webgl/Shadow.js +39 -34
- package/dist/src/core/shaders/webgl/Shadow.js.map +1 -1
- package/dist/src/core/text-rendering/CanvasFontHandler.d.ts +59 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js +206 -0
- package/dist/src/core/text-rendering/CanvasFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.d.ts +17 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js +139 -0
- package/dist/src/core/text-rendering/CanvasTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/SdfFontHandler.d.ts +167 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js +371 -0
- package/dist/src/core/text-rendering/SdfFontHandler.js.map +1 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.d.ts +18 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js +301 -0
- package/dist/src/core/text-rendering/SdfTextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.d.ts +18 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js +380 -0
- package/dist/src/core/text-rendering/TextLayoutEngine.js.map +1 -0
- package/dist/src/core/text-rendering/TextRenderer.d.ts +384 -0
- package/dist/src/core/text-rendering/TextRenderer.js +2 -0
- package/dist/src/core/text-rendering/TextRenderer.js.map +1 -0
- package/dist/src/core/text-rendering/Utils.d.ts +30 -0
- package/dist/src/core/text-rendering/Utils.js +66 -0
- package/dist/src/core/text-rendering/Utils.js.map +1 -0
- package/dist/src/core/textures/ColorTexture.d.ts +1 -1
- package/dist/src/core/textures/ColorTexture.js +3 -22
- package/dist/src/core/textures/ColorTexture.js.map +1 -1
- package/dist/src/core/textures/ImageTexture.d.ts +13 -6
- package/dist/src/core/textures/ImageTexture.js +57 -66
- package/dist/src/core/textures/ImageTexture.js.map +1 -1
- package/dist/src/core/textures/NoiseTexture.d.ts +3 -3
- package/dist/src/core/textures/NoiseTexture.js +8 -26
- package/dist/src/core/textures/NoiseTexture.js.map +1 -1
- package/dist/src/core/textures/RenderTexture.d.ts +7 -7
- package/dist/src/core/textures/RenderTexture.js +12 -30
- package/dist/src/core/textures/RenderTexture.js.map +1 -1
- package/dist/src/core/textures/SubTexture.d.ts +6 -8
- package/dist/src/core/textures/SubTexture.js +19 -55
- package/dist/src/core/textures/SubTexture.js.map +1 -1
- package/dist/src/core/textures/Texture.d.ts +90 -12
- package/dist/src/core/textures/Texture.js +160 -35
- package/dist/src/core/textures/Texture.js.map +1 -1
- package/dist/src/core/utils.d.ts +2 -1
- package/dist/src/core/utils.js +1 -19
- package/dist/src/core/utils.js.map +1 -1
- package/dist/src/main-api/INode.js.map +1 -1
- package/dist/src/main-api/Inspector.d.ts +135 -2
- package/dist/src/main-api/Inspector.js +507 -30
- package/dist/src/main-api/Inspector.js.map +1 -1
- package/dist/src/main-api/Renderer.d.ts +294 -81
- package/dist/src/main-api/Renderer.js +225 -96
- package/dist/src/main-api/Renderer.js.map +1 -1
- package/dist/src/utils.d.ts +19 -6
- package/dist/src/utils.js +32 -27
- package/dist/src/utils.js.map +1 -1
- package/dist/tsconfig.dist.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/exports/canvas-shaders.ts +0 -17
- package/exports/canvas.ts +1 -19
- package/exports/index.ts +6 -27
- package/exports/inspector.ts +0 -19
- package/exports/utils.ts +7 -19
- package/exports/webgl-shaders.ts +0 -16
- package/exports/webgl.ts +3 -20
- package/package.json +23 -22
- package/src/common/CommonTypes.ts +20 -22
- package/src/common/EventEmitter.ts +0 -19
- package/src/common/IAnimationController.ts +0 -18
- package/src/common/IEventEmitter.ts +0 -17
- package/src/core/Autosizer.ts +205 -0
- package/src/core/CoreNode.test.ts +376 -45
- package/src/core/CoreNode.ts +1015 -656
- package/src/core/CoreShaderManager.ts +3 -21
- package/src/core/CoreTextNode.ts +457 -314
- package/src/core/CoreTextureManager.ts +110 -167
- package/src/core/Stage.ts +526 -236
- package/src/core/TextureError.ts +46 -0
- package/src/core/TextureMemoryManager.ts +150 -167
- package/src/core/animations/AnimationManager.ts +0 -19
- package/src/core/animations/CoreAnimation.ts +15 -32
- package/src/core/animations/CoreAnimationController.ts +13 -23
- package/src/core/lib/ContextSpy.ts +0 -19
- package/src/core/lib/ImageWorker.ts +45 -32
- package/src/core/lib/Matrix3d.ts +7 -20
- package/src/core/lib/RenderCoords.ts +36 -67
- package/src/core/lib/WebGlContextWrapper.ts +196 -72
- package/src/core/lib/collectionUtils.ts +99 -0
- package/src/core/lib/colorCache.ts +20 -0
- package/src/core/{renderers/canvas/internal/ColorUtils.ts → lib/colorParser.ts} +2 -21
- package/src/core/lib/textureCompression.ts +433 -93
- package/src/core/lib/textureSvg.ts +0 -19
- package/src/core/lib/utils.ts +58 -19
- package/src/core/lib/validateImageBitmap.ts +17 -6
- package/src/core/platforms/Platform.ts +64 -0
- package/src/core/platforms/web/WebPlatform.ts +132 -0
- package/src/core/renderers/CoreContextTexture.ts +2 -20
- package/src/core/renderers/CoreRenderOp.ts +0 -19
- package/src/core/renderers/CoreRenderer.ts +16 -23
- package/src/core/renderers/CoreShaderNode.ts +37 -6
- package/src/core/renderers/CoreShaderProgram.ts +0 -19
- package/src/core/renderers/canvas/CanvasRenderer.ts +108 -137
- package/src/core/renderers/canvas/CanvasShaderNode.ts +3 -23
- package/src/core/renderers/canvas/CanvasTexture.ts +25 -37
- package/src/core/renderers/webgl/SdfRenderOp.ts +88 -0
- package/src/core/renderers/webgl/WebGlCtxRenderTexture.ts +18 -34
- package/src/core/renderers/webgl/WebGlCtxSubTexture.ts +50 -24
- package/src/core/renderers/webgl/WebGlCtxTexture.ts +134 -103
- package/src/core/renderers/webgl/WebGlRenderer.ts +368 -233
- package/src/core/renderers/webgl/WebGlShaderNode.ts +4 -7
- package/src/core/renderers/webgl/WebGlShaderProgram.ts +122 -76
- package/src/core/renderers/webgl/internal/BufferCollection.ts +15 -23
- package/src/core/renderers/webgl/internal/RendererUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/ShaderUtils.ts +0 -19
- package/src/core/renderers/webgl/internal/WebGlUtils.ts +0 -19
- package/src/core/shaders/canvas/Border.ts +91 -50
- package/src/core/shaders/canvas/HolePunch.ts +4 -28
- package/src/core/shaders/canvas/LinearGradient.ts +10 -25
- package/src/core/shaders/canvas/RadialGradient.ts +23 -54
- package/src/core/shaders/canvas/Rounded.ts +2 -19
- package/src/core/shaders/canvas/RoundedWithBorder.ts +72 -35
- package/src/core/shaders/canvas/RoundedWithBorderAndShadow.ts +77 -47
- package/src/core/shaders/canvas/RoundedWithShadow.ts +21 -34
- package/src/core/shaders/canvas/Shadow.ts +0 -17
- package/src/core/shaders/canvas/utils/render.ts +45 -53
- package/src/core/shaders/templates/BorderTemplate.ts +42 -29
- package/src/core/shaders/templates/HolePunchTemplate.ts +5 -22
- package/src/core/shaders/templates/LinearGradientTemplate.ts +0 -17
- package/src/core/shaders/templates/RadialGradientTemplate.ts +10 -25
- package/src/core/shaders/templates/RoundedTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderAndShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/RoundedWithBorderTemplate.ts +7 -19
- package/src/core/shaders/templates/RoundedWithShadowTemplate.ts +1 -18
- package/src/core/shaders/templates/ShadowTemplate.ts +1 -18
- package/src/core/shaders/utils.ts +30 -0
- package/src/core/shaders/webgl/Border.ts +118 -55
- package/src/core/shaders/webgl/Default.ts +6 -43
- package/src/core/shaders/webgl/HolePunch.ts +4 -24
- package/src/core/shaders/webgl/LinearGradient.ts +73 -35
- package/src/core/shaders/webgl/RadialGradient.ts +58 -51
- package/src/core/shaders/webgl/Rounded.ts +25 -45
- package/src/core/shaders/webgl/RoundedWithBorder.ts +161 -63
- package/src/core/shaders/webgl/RoundedWithBorderAndShadow.ts +169 -68
- package/src/core/shaders/webgl/RoundedWithShadow.ts +73 -39
- package/src/core/shaders/webgl/SdfShader.ts +8 -41
- package/src/core/shaders/webgl/Shadow.ts +39 -35
- package/src/core/text-rendering/CanvasFontHandler.ts +285 -0
- package/src/core/text-rendering/CanvasTextRenderer.ts +236 -0
- package/src/core/text-rendering/SdfFontHandler.ts +566 -0
- package/src/core/text-rendering/SdfTextRenderer.ts +406 -0
- package/src/core/text-rendering/TextLayoutEngine.ts +672 -0
- package/src/core/text-rendering/TextRenderer.ts +426 -0
- package/src/core/text-rendering/Utils.ts +80 -0
- package/src/core/text-rendering/tests/TextLayoutEngine.test.ts +434 -0
- package/src/core/textures/ColorTexture.ts +7 -24
- package/src/core/textures/ImageTexture.ts +110 -92
- package/src/core/textures/NoiseTexture.ts +14 -31
- package/src/core/textures/RenderTexture.ts +18 -35
- package/src/core/textures/SubTexture.ts +25 -65
- package/src/core/textures/Texture.ts +214 -46
- package/src/core/utils.ts +9 -26
- package/src/main-api/INode.ts +0 -18
- package/src/main-api/Inspector.ts +794 -38
- package/src/main-api/Renderer.ts +519 -159
- package/src/utils.ts +64 -29
- package/dist/src/core/platform.d.ts +0 -10
- package/dist/src/core/platform.js +0 -56
- package/dist/src/core/platform.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.d.ts +0 -1
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js +0 -217
- package/dist/src/core/renderers/canvas/internal/C2DShaderUtils.js.map +0 -1
- package/dist/src/core/renderers/canvas/internal/ColorUtils.js.map +0 -1
- package/dist/src/core/renderers/webgl/WebGlRenderOp.d.ts +0 -36
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js +0 -107
- package/dist/src/core/renderers/webgl/WebGlRenderOp.js.map +0 -1
- package/dist/src/core/shaders/templates/shaderUtils.js +0 -41
- package/dist/src/core/shaders/templates/shaderUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextRenderingUtils.d.ts +0 -12
- package/dist/src/core/text-rendering/TextRenderingUtils.js +0 -14
- package/dist/src/core/text-rendering/TextRenderingUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TextTextureRendererUtils.d.ts +0 -72
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js +0 -217
- package/dist/src/core/text-rendering/TextTextureRendererUtils.js.map +0 -1
- package/dist/src/core/text-rendering/TrFontManager.d.ts +0 -26
- package/dist/src/core/text-rendering/TrFontManager.js +0 -131
- package/dist/src/core/text-rendering/TrFontManager.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.d.ts +0 -39
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js +0 -125
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.d.ts +0 -103
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js +0 -21
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.d.ts +0 -62
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js +0 -88
- package/dist/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.d.ts +0 -118
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js +0 -63
- package/dist/src/core/text-rendering/font-face-types/TrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.d.ts +0 -14
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js +0 -66
- package/dist/src/core/text-rendering/font-face-types/WebTrFontFace.js.map +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.d.ts +0 -1
- package/dist/src/core/text-rendering/font-face-types/utils.js +0 -38
- package/dist/src/core/text-rendering/font-face-types/utils.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +0 -59
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +0 -397
- package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.d.ts +0 -126
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js +0 -551
- package/dist/src/core/text-rendering/renderers/LightningTextTextureRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +0 -91
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +0 -611
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.d.ts +0 -12
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js +0 -61
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.d.ts +0 -33
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js +0 -52
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.d.ts +0 -13
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js +0 -32
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.d.ts +0 -23
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js +0 -84
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.d.ts +0 -4
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js +0 -34
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.d.ts +0 -20
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -308
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.d.ts +0 -10
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js +0 -40
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.d.ts +0 -26
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js +0 -70
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.d.ts +0 -16
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js +0 -39
- package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.js.map +0 -1
- package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +0 -370
- package/dist/src/core/text-rendering/renderers/TextRenderer.js +0 -178
- package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +0 -1
- package/scripts/please-use-pnpm.js +0 -13
- package/src/core/platform.ts +0 -64
- package/src/core/renderers/canvas/internal/C2DShaderUtils.ts +0 -220
- package/src/core/renderers/webgl/WebGlRenderOp.ts +0 -145
- package/src/core/shaders/templates/shaderUtils.ts +0 -47
- package/src/core/shaders/webgl/DefaultBatched.ts +0 -129
- package/src/core/text-rendering/TextRenderingUtils.ts +0 -36
- package/src/core/text-rendering/TextTextureRendererUtils.ts +0 -263
- package/src/core/text-rendering/TrFontManager.ts +0 -183
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/SdfTrFontFace.ts +0 -176
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/FontShaper.ts +0 -139
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.test.ts +0 -173
- package/src/core/text-rendering/font-face-types/SdfTrFontFace/internal/SdfFontShaper.ts +0 -171
- package/src/core/text-rendering/font-face-types/TrFontFace.ts +0 -187
- package/src/core/text-rendering/font-face-types/WebTrFontFace.ts +0 -94
- package/src/core/text-rendering/font-face-types/utils.ts +0 -39
- package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +0 -509
- package/src/core/text-rendering/renderers/LightningTextTextureRenderer.ts +0 -815
- package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +0 -841
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.test.ts +0 -48
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/PeekableGenerator.ts +0 -66
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/SpecialCodepoints.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/constants.ts +0 -32
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getStartConditions.ts +0 -117
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.test.ts +0 -133
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/getUnicodeCodepoints.ts +0 -38
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -408
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.test.ts +0 -49
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/measureText.ts +0 -52
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.test.ts +0 -205
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/setRenderWindow.ts +0 -93
- package/src/core/text-rendering/renderers/SdfTextRenderer/internal/util.ts +0 -40
- package/src/core/text-rendering/renderers/TextRenderer.ts +0 -550
- /package/dist/src/core/{renderers/canvas/internal/ColorUtils.d.ts → lib/colorParser.d.ts} +0 -0
|
@@ -5,9 +5,63 @@ import {
|
|
|
5
5
|
} from '../core/CoreNode.js';
|
|
6
6
|
import { type RendererMainSettings } from './Renderer.js';
|
|
7
7
|
import type { AnimationSettings } from '../core/animations/CoreAnimation.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
IAnimationController,
|
|
10
|
+
AnimationControllerState,
|
|
11
|
+
} from '../common/IAnimationController.js';
|
|
9
12
|
import { isProductionEnvironment } from '../utils.js';
|
|
10
|
-
import
|
|
13
|
+
import { CoreTextNode, type CoreTextNodeProps } from '../core/CoreTextNode.js';
|
|
14
|
+
import type { Texture } from '../core/textures/Texture.js';
|
|
15
|
+
import { TextureType } from '../core/textures/Texture.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Inspector Options
|
|
19
|
+
*
|
|
20
|
+
* Configuration options for the Inspector's performance monitoring features.
|
|
21
|
+
*/
|
|
22
|
+
export interface InspectorOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Enable performance monitoring for setter calls
|
|
25
|
+
*
|
|
26
|
+
* @defaultValue true
|
|
27
|
+
*/
|
|
28
|
+
enablePerformanceMonitoring: boolean;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Threshold for excessive setter calls before logging a warning
|
|
32
|
+
*
|
|
33
|
+
* @defaultValue 100
|
|
34
|
+
*/
|
|
35
|
+
excessiveCallThreshold: number;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Time interval in milliseconds to reset the setter call counters
|
|
39
|
+
*
|
|
40
|
+
* @defaultValue 5000
|
|
41
|
+
*/
|
|
42
|
+
resetInterval: number;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Enable animation monitoring and statistics tracking
|
|
46
|
+
*
|
|
47
|
+
* @defaultValue true
|
|
48
|
+
*/
|
|
49
|
+
enableAnimationMonitoring: boolean;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Maximum number of animations to keep in history for statistics
|
|
53
|
+
*
|
|
54
|
+
* @defaultValue 1000
|
|
55
|
+
*/
|
|
56
|
+
maxAnimationHistory: number;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Automatically print animation statistics every X seconds (0 to disable)
|
|
60
|
+
*
|
|
61
|
+
* @defaultValue 0
|
|
62
|
+
*/
|
|
63
|
+
animationStatsInterval: number;
|
|
64
|
+
}
|
|
11
65
|
|
|
12
66
|
/**
|
|
13
67
|
* Inspector
|
|
@@ -48,16 +102,16 @@ const stylePropertyMap: {
|
|
|
48
102
|
y: (y) => {
|
|
49
103
|
return { prop: 'top', value: `${y}px` };
|
|
50
104
|
},
|
|
51
|
-
|
|
105
|
+
w: (w) => {
|
|
52
106
|
if (w === 0) {
|
|
53
|
-
return
|
|
107
|
+
return { prop: 'width', value: 'auto' };
|
|
54
108
|
}
|
|
55
109
|
|
|
56
110
|
return { prop: 'width', value: `${w}px` };
|
|
57
111
|
},
|
|
58
|
-
|
|
112
|
+
h: (h) => {
|
|
59
113
|
if (h === 0) {
|
|
60
|
-
return
|
|
114
|
+
return { prop: 'height', value: 'auto' };
|
|
61
115
|
}
|
|
62
116
|
|
|
63
117
|
return { prop: 'height', value: `${h}px` };
|
|
@@ -79,8 +133,6 @@ const stylePropertyMap: {
|
|
|
79
133
|
zIndex: () => 'z-index',
|
|
80
134
|
fontFamily: () => 'font-family',
|
|
81
135
|
fontStyle: () => 'font-style',
|
|
82
|
-
fontWeight: () => 'font-weight',
|
|
83
|
-
fontStretch: () => 'font-stretch',
|
|
84
136
|
letterSpacing: () => 'letter-spacing',
|
|
85
137
|
textAlign: () => 'text-align',
|
|
86
138
|
overflowSuffix: () => 'overflow-suffix',
|
|
@@ -154,6 +206,22 @@ const gradientColorPropertyMap = [
|
|
|
154
206
|
'colorBr',
|
|
155
207
|
];
|
|
156
208
|
|
|
209
|
+
const textureTypeNames: Record<number, string> = {
|
|
210
|
+
[TextureType.generic]: 'generic',
|
|
211
|
+
[TextureType.color]: 'color',
|
|
212
|
+
[TextureType.image]: 'image',
|
|
213
|
+
[TextureType.noise]: 'noise',
|
|
214
|
+
[TextureType.renderToTexture]: 'renderToTexture',
|
|
215
|
+
[TextureType.subTexture]: 'subTexture',
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
interface TextureMetrics {
|
|
219
|
+
previousState: string;
|
|
220
|
+
loadedCount: number;
|
|
221
|
+
failedCount: number;
|
|
222
|
+
freedCount: number;
|
|
223
|
+
}
|
|
224
|
+
|
|
157
225
|
const knownProperties = new Set<string>([
|
|
158
226
|
...Object.keys(stylePropertyMap),
|
|
159
227
|
...Object.keys(domPropertyMap),
|
|
@@ -161,23 +229,87 @@ const knownProperties = new Set<string>([
|
|
|
161
229
|
'src',
|
|
162
230
|
'parent',
|
|
163
231
|
'data',
|
|
232
|
+
'text',
|
|
164
233
|
]);
|
|
165
234
|
|
|
166
235
|
export class Inspector {
|
|
167
236
|
private root: HTMLElement | null = null;
|
|
168
237
|
private canvas: HTMLCanvasElement | null = null;
|
|
238
|
+
private mutationObserver: MutationObserver = new MutationObserver(() => {});
|
|
239
|
+
private resizeObserver: ResizeObserver = new ResizeObserver(() => {});
|
|
169
240
|
private height = 1080;
|
|
170
241
|
private width = 1920;
|
|
171
242
|
private scaleX = 1;
|
|
172
243
|
private scaleY = 1;
|
|
244
|
+
private textureMetrics = new Map<Texture, TextureMetrics>();
|
|
245
|
+
|
|
246
|
+
// Performance monitoring for frequent setter calls
|
|
247
|
+
private static setterCallCount = new Map<
|
|
248
|
+
string,
|
|
249
|
+
{ count: number; lastReset: number; nodeId: number }
|
|
250
|
+
>();
|
|
251
|
+
|
|
252
|
+
// Animation monitoring structures
|
|
253
|
+
private static activeAnimations = new Map<
|
|
254
|
+
string,
|
|
255
|
+
{
|
|
256
|
+
nodeId: number;
|
|
257
|
+
animationId: string;
|
|
258
|
+
startTime: number;
|
|
259
|
+
props: CoreNodeAnimateProps;
|
|
260
|
+
settings: AnimationSettings;
|
|
261
|
+
controller: IAnimationController;
|
|
262
|
+
state: AnimationControllerState;
|
|
263
|
+
}
|
|
264
|
+
>();
|
|
265
|
+
|
|
266
|
+
private static animationHistory: Array<{
|
|
267
|
+
nodeId: number;
|
|
268
|
+
animationId: string;
|
|
269
|
+
startTime: number;
|
|
270
|
+
endTime: number;
|
|
271
|
+
duration: number;
|
|
272
|
+
actualDuration: number;
|
|
273
|
+
props: CoreNodeAnimateProps;
|
|
274
|
+
settings: AnimationSettings;
|
|
275
|
+
completionType: 'finished' | 'stopped' | 'cancelled';
|
|
276
|
+
}> = [];
|
|
277
|
+
|
|
278
|
+
// Performance monitoring settings (configured via constructor)
|
|
279
|
+
private performanceSettings: InspectorOptions = {
|
|
280
|
+
enablePerformanceMonitoring: false,
|
|
281
|
+
excessiveCallThreshold: 100,
|
|
282
|
+
resetInterval: 5000,
|
|
283
|
+
enableAnimationMonitoring: false,
|
|
284
|
+
maxAnimationHistory: 1000,
|
|
285
|
+
animationStatsInterval: 0,
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
// Animation stats printing timer
|
|
289
|
+
private animationStatsTimer: number | null = null;
|
|
173
290
|
|
|
174
291
|
constructor(canvas: HTMLCanvasElement, settings: RendererMainSettings) {
|
|
175
|
-
if (isProductionEnvironment
|
|
292
|
+
if (isProductionEnvironment === true) return;
|
|
176
293
|
|
|
177
294
|
if (!settings) {
|
|
178
295
|
throw new Error('settings is required');
|
|
179
296
|
}
|
|
180
297
|
|
|
298
|
+
// Initialize performance monitoring settings with defaults
|
|
299
|
+
this.performanceSettings = {
|
|
300
|
+
enablePerformanceMonitoring:
|
|
301
|
+
settings.inspectorOptions?.enablePerformanceMonitoring ?? false,
|
|
302
|
+
excessiveCallThreshold:
|
|
303
|
+
settings.inspectorOptions?.excessiveCallThreshold ?? 100,
|
|
304
|
+
resetInterval: settings.inspectorOptions?.resetInterval ?? 5000,
|
|
305
|
+
enableAnimationMonitoring:
|
|
306
|
+
settings.inspectorOptions?.enableAnimationMonitoring ?? false,
|
|
307
|
+
maxAnimationHistory:
|
|
308
|
+
settings.inspectorOptions?.maxAnimationHistory ?? 1000,
|
|
309
|
+
animationStatsInterval:
|
|
310
|
+
settings.inspectorOptions?.animationStatsInterval ?? 0,
|
|
311
|
+
};
|
|
312
|
+
|
|
181
313
|
// calc dimensions based on the devicePixelRatio
|
|
182
314
|
this.height = Math.ceil(
|
|
183
315
|
settings.appHeight ?? 1080 / (settings.deviceLogicalPixelRatio ?? 1),
|
|
@@ -196,25 +328,395 @@ export class Inspector {
|
|
|
196
328
|
document.body.appendChild(this.root);
|
|
197
329
|
|
|
198
330
|
//listen for changes on canvas
|
|
199
|
-
|
|
331
|
+
this.mutationObserver = new MutationObserver(
|
|
200
332
|
this.setRootPosition.bind(this),
|
|
201
333
|
);
|
|
202
|
-
mutationObserver.observe(canvas, {
|
|
334
|
+
this.mutationObserver.observe(canvas, {
|
|
203
335
|
attributes: true,
|
|
204
336
|
childList: false,
|
|
205
337
|
subtree: false,
|
|
206
338
|
});
|
|
207
339
|
|
|
208
340
|
// Create a ResizeObserver to watch for changes in the element's size
|
|
209
|
-
|
|
210
|
-
resizeObserver.observe(canvas);
|
|
341
|
+
this.resizeObserver = new ResizeObserver(this.setRootPosition.bind(this));
|
|
342
|
+
this.resizeObserver.observe(canvas);
|
|
211
343
|
|
|
212
344
|
//listen for changes on window
|
|
213
345
|
window.addEventListener('resize', this.setRootPosition.bind(this));
|
|
214
346
|
|
|
347
|
+
// Start animation stats timer if enabled
|
|
348
|
+
this.startAnimationStatsTimer();
|
|
349
|
+
|
|
215
350
|
console.warn('Inspector is enabled, this will impact performance');
|
|
216
351
|
}
|
|
217
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Track setter calls for performance monitoring
|
|
355
|
+
* Only active when Inspector is loaded
|
|
356
|
+
*/
|
|
357
|
+
private trackSetterCall(nodeId: number, setterName: string): void {
|
|
358
|
+
if (!this.performanceSettings.enablePerformanceMonitoring) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
const key = `${nodeId}_${setterName}`;
|
|
363
|
+
const now = Date.now();
|
|
364
|
+
const existing = Inspector.setterCallCount.get(key);
|
|
365
|
+
|
|
366
|
+
if (!existing) {
|
|
367
|
+
Inspector.setterCallCount.set(key, { count: 1, lastReset: now, nodeId });
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Reset counter if enough time has passed
|
|
372
|
+
if (now - existing.lastReset > this.performanceSettings.resetInterval) {
|
|
373
|
+
existing.count = 1;
|
|
374
|
+
existing.lastReset = now;
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
existing.count++;
|
|
379
|
+
|
|
380
|
+
// Log if threshold exceeded
|
|
381
|
+
if (existing.count === this.performanceSettings.excessiveCallThreshold) {
|
|
382
|
+
console.warn(
|
|
383
|
+
`🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId}`,
|
|
384
|
+
);
|
|
385
|
+
} else if (
|
|
386
|
+
existing.count > this.performanceSettings.excessiveCallThreshold &&
|
|
387
|
+
existing.count % 50 === 0
|
|
388
|
+
) {
|
|
389
|
+
console.warn(
|
|
390
|
+
`🚨 Inspector Performance Warning: Setter '${setterName}' called ${existing.count} times in ${this.performanceSettings.resetInterval}ms on node ${nodeId} (continuing...)`,
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Get current performance monitoring statistics
|
|
397
|
+
*/
|
|
398
|
+
public static getPerformanceStats(): Array<{
|
|
399
|
+
nodeId: number;
|
|
400
|
+
setterName: string;
|
|
401
|
+
count: number;
|
|
402
|
+
timeWindow: number;
|
|
403
|
+
}> {
|
|
404
|
+
const stats: Array<{
|
|
405
|
+
nodeId: number;
|
|
406
|
+
setterName: string;
|
|
407
|
+
count: number;
|
|
408
|
+
timeWindow: number;
|
|
409
|
+
}> = [];
|
|
410
|
+
const now = Date.now();
|
|
411
|
+
|
|
412
|
+
Inspector.setterCallCount.forEach((data, key) => {
|
|
413
|
+
const parts = key.split('_');
|
|
414
|
+
const nodeIdStr = parts[0];
|
|
415
|
+
const setterName = parts[1];
|
|
416
|
+
|
|
417
|
+
if (nodeIdStr && setterName) {
|
|
418
|
+
const timeWindow = now - data.lastReset;
|
|
419
|
+
|
|
420
|
+
stats.push({
|
|
421
|
+
nodeId: parseInt(nodeIdStr, 10),
|
|
422
|
+
setterName,
|
|
423
|
+
count: data.count,
|
|
424
|
+
timeWindow,
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
return stats.sort((a, b) => b.count - a.count);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Clear performance monitoring statistics
|
|
434
|
+
*/
|
|
435
|
+
public static clearPerformanceStats(): void {
|
|
436
|
+
Inspector.setterCallCount.clear();
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Generate a unique animation ID
|
|
441
|
+
*/
|
|
442
|
+
private static generateAnimationId(): string {
|
|
443
|
+
return `anim_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/**
|
|
447
|
+
* Wrap animation controller with monitoring capabilities
|
|
448
|
+
*/
|
|
449
|
+
private wrapAnimationController(
|
|
450
|
+
controller: IAnimationController,
|
|
451
|
+
nodeId: number,
|
|
452
|
+
props: CoreNodeAnimateProps,
|
|
453
|
+
settings: AnimationSettings,
|
|
454
|
+
div: HTMLElement,
|
|
455
|
+
): IAnimationController {
|
|
456
|
+
if (!this.performanceSettings.enableAnimationMonitoring) {
|
|
457
|
+
// Just add the basic DOM animation without tracking
|
|
458
|
+
const originalStart = controller.start.bind(controller);
|
|
459
|
+
controller.start = () => {
|
|
460
|
+
this.animateNode(div, props, settings);
|
|
461
|
+
return originalStart();
|
|
462
|
+
};
|
|
463
|
+
return controller;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
const animationId = Inspector.generateAnimationId();
|
|
467
|
+
|
|
468
|
+
// Create wrapper controller
|
|
469
|
+
const wrappedController: IAnimationController = {
|
|
470
|
+
start: () => {
|
|
471
|
+
this.trackAnimationStart(
|
|
472
|
+
animationId,
|
|
473
|
+
nodeId,
|
|
474
|
+
props,
|
|
475
|
+
settings,
|
|
476
|
+
controller,
|
|
477
|
+
);
|
|
478
|
+
this.animateNode(div, props, settings);
|
|
479
|
+
return controller.start();
|
|
480
|
+
},
|
|
481
|
+
|
|
482
|
+
stop: () => {
|
|
483
|
+
this.trackAnimationEnd(animationId, 'stopped');
|
|
484
|
+
return controller.stop();
|
|
485
|
+
},
|
|
486
|
+
|
|
487
|
+
pause: () => {
|
|
488
|
+
this.updateAnimationState(animationId, 'paused');
|
|
489
|
+
return controller.pause();
|
|
490
|
+
},
|
|
491
|
+
|
|
492
|
+
restore: () => {
|
|
493
|
+
this.trackAnimationEnd(animationId, 'cancelled');
|
|
494
|
+
return controller.restore();
|
|
495
|
+
},
|
|
496
|
+
|
|
497
|
+
waitUntilStopped: () => {
|
|
498
|
+
return controller.waitUntilStopped().then(() => {
|
|
499
|
+
this.trackAnimationEnd(animationId, 'finished');
|
|
500
|
+
});
|
|
501
|
+
},
|
|
502
|
+
|
|
503
|
+
get state() {
|
|
504
|
+
return controller.state;
|
|
505
|
+
},
|
|
506
|
+
|
|
507
|
+
// Event emitter methods
|
|
508
|
+
on: controller.on.bind(controller),
|
|
509
|
+
off: controller.off.bind(controller),
|
|
510
|
+
once: controller.once.bind(controller),
|
|
511
|
+
emit: controller.emit.bind(controller),
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
// Track animation events
|
|
515
|
+
controller.on('animating', () => {
|
|
516
|
+
this.updateAnimationState(animationId, 'running');
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
controller.on('stopped', () => {
|
|
520
|
+
this.trackAnimationEnd(animationId, 'finished');
|
|
521
|
+
});
|
|
522
|
+
|
|
523
|
+
return wrappedController;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Track animation start
|
|
528
|
+
*/
|
|
529
|
+
private trackAnimationStart(
|
|
530
|
+
animationId: string,
|
|
531
|
+
nodeId: number,
|
|
532
|
+
props: CoreNodeAnimateProps,
|
|
533
|
+
settings: AnimationSettings,
|
|
534
|
+
controller: IAnimationController,
|
|
535
|
+
): void {
|
|
536
|
+
const startTime = Date.now();
|
|
537
|
+
|
|
538
|
+
Inspector.activeAnimations.set(animationId, {
|
|
539
|
+
nodeId,
|
|
540
|
+
animationId,
|
|
541
|
+
startTime,
|
|
542
|
+
props,
|
|
543
|
+
settings,
|
|
544
|
+
controller,
|
|
545
|
+
state: 'scheduled',
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Update animation state
|
|
551
|
+
*/
|
|
552
|
+
private updateAnimationState(
|
|
553
|
+
animationId: string,
|
|
554
|
+
state: AnimationControllerState,
|
|
555
|
+
): void {
|
|
556
|
+
const animation = Inspector.activeAnimations.get(animationId);
|
|
557
|
+
if (animation) {
|
|
558
|
+
animation.state = state;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Track animation end
|
|
564
|
+
*/
|
|
565
|
+
private trackAnimationEnd(
|
|
566
|
+
animationId: string,
|
|
567
|
+
completionType: 'finished' | 'stopped' | 'cancelled',
|
|
568
|
+
): void {
|
|
569
|
+
const animation = Inspector.activeAnimations.get(animationId);
|
|
570
|
+
if (!animation) return;
|
|
571
|
+
|
|
572
|
+
const endTime = Date.now();
|
|
573
|
+
const actualDuration = endTime - animation.startTime;
|
|
574
|
+
const expectedDuration = animation.settings.duration || 1000;
|
|
575
|
+
|
|
576
|
+
// Move to history
|
|
577
|
+
Inspector.animationHistory.unshift({
|
|
578
|
+
nodeId: animation.nodeId,
|
|
579
|
+
animationId: animation.animationId,
|
|
580
|
+
startTime: animation.startTime,
|
|
581
|
+
endTime,
|
|
582
|
+
duration: expectedDuration,
|
|
583
|
+
actualDuration,
|
|
584
|
+
props: animation.props,
|
|
585
|
+
settings: animation.settings,
|
|
586
|
+
completionType,
|
|
587
|
+
});
|
|
588
|
+
|
|
589
|
+
// Limit history size for performance
|
|
590
|
+
if (
|
|
591
|
+
Inspector.animationHistory.length >
|
|
592
|
+
this.performanceSettings.maxAnimationHistory
|
|
593
|
+
) {
|
|
594
|
+
Inspector.animationHistory.splice(
|
|
595
|
+
this.performanceSettings.maxAnimationHistory,
|
|
596
|
+
);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// Remove from active animations
|
|
600
|
+
Inspector.activeAnimations.delete(animationId);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/**
|
|
604
|
+
* Get currently active animations
|
|
605
|
+
*/
|
|
606
|
+
public static getActiveAnimations(): Array<{
|
|
607
|
+
nodeId: number;
|
|
608
|
+
animationId: string;
|
|
609
|
+
startTime: number;
|
|
610
|
+
duration: number;
|
|
611
|
+
elapsedTime: number;
|
|
612
|
+
props: CoreNodeAnimateProps;
|
|
613
|
+
settings: AnimationSettings;
|
|
614
|
+
state: AnimationControllerState;
|
|
615
|
+
}> {
|
|
616
|
+
const now = Date.now();
|
|
617
|
+
const activeAnimations: Array<{
|
|
618
|
+
nodeId: number;
|
|
619
|
+
animationId: string;
|
|
620
|
+
startTime: number;
|
|
621
|
+
duration: number;
|
|
622
|
+
elapsedTime: number;
|
|
623
|
+
props: CoreNodeAnimateProps;
|
|
624
|
+
settings: AnimationSettings;
|
|
625
|
+
state: AnimationControllerState;
|
|
626
|
+
}> = [];
|
|
627
|
+
|
|
628
|
+
Inspector.activeAnimations.forEach((animation) => {
|
|
629
|
+
activeAnimations.push({
|
|
630
|
+
nodeId: animation.nodeId,
|
|
631
|
+
animationId: animation.animationId,
|
|
632
|
+
startTime: animation.startTime,
|
|
633
|
+
duration: animation.settings.duration || 1000,
|
|
634
|
+
elapsedTime: now - animation.startTime,
|
|
635
|
+
props: animation.props,
|
|
636
|
+
settings: animation.settings,
|
|
637
|
+
state: animation.state,
|
|
638
|
+
});
|
|
639
|
+
});
|
|
640
|
+
|
|
641
|
+
return activeAnimations.sort((a, b) => b.startTime - a.startTime);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* Get animation statistics
|
|
646
|
+
*/
|
|
647
|
+
public static getAnimationStats(): {
|
|
648
|
+
totalAnimations: number;
|
|
649
|
+
activeCount: number;
|
|
650
|
+
averageDuration: number;
|
|
651
|
+
} {
|
|
652
|
+
const totalAnimations = Inspector.animationHistory.length;
|
|
653
|
+
const activeCount = Inspector.activeAnimations.size;
|
|
654
|
+
|
|
655
|
+
// Calculate average duration from finished animations only
|
|
656
|
+
const finishedAnimations = Inspector.animationHistory.filter(
|
|
657
|
+
(anim) => anim.completionType === 'finished',
|
|
658
|
+
);
|
|
659
|
+
|
|
660
|
+
const averageDuration =
|
|
661
|
+
finishedAnimations.length > 0
|
|
662
|
+
? finishedAnimations.reduce(
|
|
663
|
+
(sum, anim) => sum + anim.actualDuration,
|
|
664
|
+
0,
|
|
665
|
+
) / finishedAnimations.length
|
|
666
|
+
: 0;
|
|
667
|
+
|
|
668
|
+
return {
|
|
669
|
+
totalAnimations,
|
|
670
|
+
activeCount,
|
|
671
|
+
averageDuration,
|
|
672
|
+
};
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* Clear animation monitoring data
|
|
677
|
+
*/
|
|
678
|
+
public static clearAnimationStats(): void {
|
|
679
|
+
Inspector.activeAnimations.clear();
|
|
680
|
+
Inspector.animationHistory.length = 0;
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* Start the animation stats timer if enabled
|
|
685
|
+
*/
|
|
686
|
+
private startAnimationStatsTimer(): void {
|
|
687
|
+
console.log(
|
|
688
|
+
`Starting animation stats timer with interval: ${this.performanceSettings.animationStatsInterval} seconds`,
|
|
689
|
+
);
|
|
690
|
+
|
|
691
|
+
if (this.performanceSettings.animationStatsInterval > 0) {
|
|
692
|
+
this.animationStatsTimer = setInterval(() => {
|
|
693
|
+
this.printAnimationStats();
|
|
694
|
+
}, this.performanceSettings.animationStatsInterval * 1000) as unknown as number;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Stop the animation stats timer
|
|
700
|
+
*/
|
|
701
|
+
private stopAnimationStatsTimer(): void {
|
|
702
|
+
if (this.animationStatsTimer) {
|
|
703
|
+
clearInterval(this.animationStatsTimer);
|
|
704
|
+
this.animationStatsTimer = null;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* Print current animation statistics to console
|
|
710
|
+
*/
|
|
711
|
+
private printAnimationStats(): void {
|
|
712
|
+
const stats = Inspector.getAnimationStats();
|
|
713
|
+
|
|
714
|
+
console.log(
|
|
715
|
+
`🎬 Animation Stats: ${stats.activeCount} active, ${
|
|
716
|
+
stats.totalAnimations
|
|
717
|
+
} completed, ${Math.round(stats.averageDuration)}ms avg duration`,
|
|
718
|
+
);
|
|
719
|
+
}
|
|
218
720
|
setRootPosition() {
|
|
219
721
|
if (this.root === null || this.canvas === null) {
|
|
220
722
|
return;
|
|
@@ -259,6 +761,24 @@ export class Inspector {
|
|
|
259
761
|
return div;
|
|
260
762
|
}
|
|
261
763
|
|
|
764
|
+
createNodes(node: CoreNode): boolean {
|
|
765
|
+
if (this.root === null) {
|
|
766
|
+
return false;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
const div = this.root.querySelector(`[id="${node.id}"]`);
|
|
770
|
+
if (div === null && node instanceof CoreTextNode) {
|
|
771
|
+
this.createTextNode(node);
|
|
772
|
+
} else if (div === null && node instanceof CoreNode) {
|
|
773
|
+
this.createNode(node);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
for (const child of node.children) {
|
|
777
|
+
this.createNodes(child);
|
|
778
|
+
}
|
|
779
|
+
return true;
|
|
780
|
+
}
|
|
781
|
+
|
|
262
782
|
createNode(node: CoreNode): CoreNode {
|
|
263
783
|
const div = this.createDiv(node.id, node.props);
|
|
264
784
|
(div as HTMLElement & { node: CoreNode }).node = node;
|
|
@@ -272,10 +792,13 @@ export class Inspector {
|
|
|
272
792
|
return this.createProxy(node, div);
|
|
273
793
|
}
|
|
274
794
|
|
|
275
|
-
createTextNode(node:
|
|
276
|
-
|
|
795
|
+
createTextNode(node: CoreTextNode): CoreTextNode {
|
|
796
|
+
// eslint-disable-next-line
|
|
797
|
+
// @ts-ignore - textProps is a private property and keeping it that way
|
|
798
|
+
// but we need it from the inspector to set the initial properties on the div element
|
|
799
|
+
const div = this.createDiv(node.id, node.textProps);
|
|
277
800
|
(div as HTMLElement & { node: CoreNode }).node = node;
|
|
278
|
-
(node as
|
|
801
|
+
(node as CoreTextNode & { div: HTMLElement }).div = div;
|
|
279
802
|
|
|
280
803
|
return this.createProxy(node, div) as CoreTextNode;
|
|
281
804
|
}
|
|
@@ -284,6 +807,94 @@ export class Inspector {
|
|
|
284
807
|
node: CoreNode | CoreTextNode,
|
|
285
808
|
div: HTMLElement,
|
|
286
809
|
): CoreNode | CoreTextNode {
|
|
810
|
+
// Store texture event listeners for cleanup
|
|
811
|
+
const textureListeners = new Map<
|
|
812
|
+
Texture,
|
|
813
|
+
{
|
|
814
|
+
onLoaded: () => void;
|
|
815
|
+
onFailed: () => void;
|
|
816
|
+
onFreed: () => void;
|
|
817
|
+
}
|
|
818
|
+
>();
|
|
819
|
+
|
|
820
|
+
const coreNodeListeners = new Map<
|
|
821
|
+
CoreNode,
|
|
822
|
+
{
|
|
823
|
+
onLoaded: () => void;
|
|
824
|
+
}
|
|
825
|
+
>();
|
|
826
|
+
|
|
827
|
+
const setupCoreNodeListeners = (coreNode: CoreNode) => {
|
|
828
|
+
const onLoaded = () => {
|
|
829
|
+
this.updateTextNodeDimensions(div, coreNode as CoreTextNode);
|
|
830
|
+
};
|
|
831
|
+
coreNode.on('loaded', onLoaded);
|
|
832
|
+
coreNodeListeners.set(coreNode, { onLoaded });
|
|
833
|
+
};
|
|
834
|
+
|
|
835
|
+
// Helper function to setup texture event listeners
|
|
836
|
+
const setupTextureListeners = (texture: Texture | null) => {
|
|
837
|
+
// Clean up existing listeners first
|
|
838
|
+
textureListeners.forEach((listeners, oldTexture) => {
|
|
839
|
+
oldTexture.off('loaded', listeners.onLoaded);
|
|
840
|
+
oldTexture.off('failed', listeners.onFailed);
|
|
841
|
+
oldTexture.off('freed', listeners.onFreed);
|
|
842
|
+
});
|
|
843
|
+
textureListeners.clear();
|
|
844
|
+
|
|
845
|
+
// Setup new listeners if texture exists
|
|
846
|
+
if (texture) {
|
|
847
|
+
// Initialize metrics if not exists
|
|
848
|
+
if (!this.textureMetrics.has(texture)) {
|
|
849
|
+
this.textureMetrics.set(texture, {
|
|
850
|
+
previousState: texture.state,
|
|
851
|
+
loadedCount: 0,
|
|
852
|
+
failedCount: 0,
|
|
853
|
+
freedCount: 0,
|
|
854
|
+
});
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
const onLoaded = () => {
|
|
858
|
+
const metrics = this.textureMetrics.get(texture);
|
|
859
|
+
if (metrics) {
|
|
860
|
+
metrics.previousState =
|
|
861
|
+
metrics.previousState !== texture.state
|
|
862
|
+
? metrics.previousState
|
|
863
|
+
: 'loading';
|
|
864
|
+
metrics.loadedCount++;
|
|
865
|
+
}
|
|
866
|
+
this.updateTextureAttributes(div, texture);
|
|
867
|
+
};
|
|
868
|
+
const onFailed = () => {
|
|
869
|
+
const metrics = this.textureMetrics.get(texture);
|
|
870
|
+
if (metrics) {
|
|
871
|
+
metrics.previousState =
|
|
872
|
+
metrics.previousState !== texture.state
|
|
873
|
+
? metrics.previousState
|
|
874
|
+
: 'loading';
|
|
875
|
+
metrics.failedCount++;
|
|
876
|
+
}
|
|
877
|
+
this.updateTextureAttributes(div, texture);
|
|
878
|
+
};
|
|
879
|
+
const onFreed = () => {
|
|
880
|
+
const metrics = this.textureMetrics.get(texture);
|
|
881
|
+
if (metrics) {
|
|
882
|
+
metrics.previousState =
|
|
883
|
+
metrics.previousState !== texture.state
|
|
884
|
+
? metrics.previousState
|
|
885
|
+
: texture.state;
|
|
886
|
+
metrics.freedCount++;
|
|
887
|
+
}
|
|
888
|
+
this.updateTextureAttributes(div, texture);
|
|
889
|
+
};
|
|
890
|
+
|
|
891
|
+
texture.on('loaded', onLoaded);
|
|
892
|
+
texture.on('failed', onFailed);
|
|
893
|
+
texture.on('freed', onFreed);
|
|
894
|
+
|
|
895
|
+
textureListeners.set(texture, { onLoaded, onFailed, onFreed });
|
|
896
|
+
}
|
|
897
|
+
};
|
|
287
898
|
// Define traps for each property in knownProperties
|
|
288
899
|
knownProperties.forEach((property) => {
|
|
289
900
|
let originalProp = Object.getOwnPropertyDescriptor(node, property);
|
|
@@ -298,12 +909,19 @@ export class Inspector {
|
|
|
298
909
|
return;
|
|
299
910
|
}
|
|
300
911
|
|
|
912
|
+
if (property === 'text') {
|
|
913
|
+
setupCoreNodeListeners(node);
|
|
914
|
+
}
|
|
915
|
+
|
|
301
916
|
Object.defineProperty(node, property, {
|
|
302
917
|
get() {
|
|
303
918
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
304
919
|
return originalProp?.get?.call(node);
|
|
305
920
|
},
|
|
306
921
|
set: (value) => {
|
|
922
|
+
// Track setter call for performance monitoring
|
|
923
|
+
this.trackSetterCall(node.id, property);
|
|
924
|
+
|
|
307
925
|
originalProp?.set?.call(node, value);
|
|
308
926
|
this.updateNodeProperty(
|
|
309
927
|
div,
|
|
@@ -311,6 +929,15 @@ export class Inspector {
|
|
|
311
929
|
value,
|
|
312
930
|
node.props,
|
|
313
931
|
);
|
|
932
|
+
|
|
933
|
+
// Setup texture event listeners if this is a texture property
|
|
934
|
+
if (property === 'texture') {
|
|
935
|
+
const textureValue =
|
|
936
|
+
value && typeof value === 'object' && 'state' in value
|
|
937
|
+
? (value as Texture)
|
|
938
|
+
: null;
|
|
939
|
+
setupTextureListeners(textureValue);
|
|
940
|
+
}
|
|
314
941
|
},
|
|
315
942
|
configurable: true,
|
|
316
943
|
enumerable: true,
|
|
@@ -319,10 +946,26 @@ export class Inspector {
|
|
|
319
946
|
|
|
320
947
|
const originalDestroy = node.destroy;
|
|
321
948
|
Object.defineProperty(node, 'destroy', {
|
|
322
|
-
value: () => {
|
|
949
|
+
value: (isChild: boolean = false) => {
|
|
950
|
+
// Clean up texture event listeners and metrics
|
|
951
|
+
textureListeners.forEach((listeners, texture) => {
|
|
952
|
+
texture.off('loaded', listeners.onLoaded);
|
|
953
|
+
texture.off('failed', listeners.onFailed);
|
|
954
|
+
texture.off('freed', listeners.onFreed);
|
|
955
|
+
// Clean up metrics for this texture
|
|
956
|
+
this.textureMetrics.delete(texture);
|
|
957
|
+
});
|
|
958
|
+
textureListeners.clear();
|
|
959
|
+
|
|
960
|
+
coreNodeListeners.forEach((listeners, coreNode) => {
|
|
961
|
+
coreNode.off('loaded', listeners.onLoaded);
|
|
962
|
+
});
|
|
963
|
+
coreNodeListeners.clear();
|
|
964
|
+
|
|
323
965
|
this.destroyNode(node.id);
|
|
324
|
-
originalDestroy.call(node);
|
|
966
|
+
originalDestroy.call(node, isChild);
|
|
325
967
|
},
|
|
968
|
+
configurable: true,
|
|
326
969
|
});
|
|
327
970
|
|
|
328
971
|
const originalAnimate = node.animate;
|
|
@@ -333,21 +976,119 @@ export class Inspector {
|
|
|
333
976
|
): IAnimationController => {
|
|
334
977
|
const animationController = originalAnimate.call(node, props, settings);
|
|
335
978
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
return animationController;
|
|
979
|
+
// Wrap animation controller with monitoring
|
|
980
|
+
return this.wrapAnimationController(
|
|
981
|
+
animationController,
|
|
982
|
+
node.id,
|
|
983
|
+
props,
|
|
984
|
+
settings,
|
|
985
|
+
div,
|
|
986
|
+
);
|
|
345
987
|
},
|
|
988
|
+
configurable: true,
|
|
346
989
|
});
|
|
347
990
|
|
|
348
991
|
return node;
|
|
349
992
|
}
|
|
350
993
|
|
|
994
|
+
updateTextNodeDimensions(div: HTMLElement, node: CoreTextNode) {
|
|
995
|
+
const textMetrics = node.renderInfo;
|
|
996
|
+
if (textMetrics) {
|
|
997
|
+
div.style.width = `${textMetrics.width}px`;
|
|
998
|
+
div.style.height = `${textMetrics.height}px`;
|
|
999
|
+
} else {
|
|
1000
|
+
div.style.removeProperty('width');
|
|
1001
|
+
div.style.removeProperty('height');
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
updateTextureAttributes(div: HTMLElement, texture: Texture) {
|
|
1006
|
+
// Update texture state
|
|
1007
|
+
div.setAttribute('data-texture-state', texture.state);
|
|
1008
|
+
|
|
1009
|
+
// Update texture type
|
|
1010
|
+
div.setAttribute(
|
|
1011
|
+
'data-texture-type',
|
|
1012
|
+
textureTypeNames[texture.type] || 'unknown',
|
|
1013
|
+
);
|
|
1014
|
+
|
|
1015
|
+
// Update texture dimensions if available
|
|
1016
|
+
if (texture.dimensions) {
|
|
1017
|
+
div.setAttribute('data-texture-width', String(texture.dimensions.w));
|
|
1018
|
+
div.setAttribute('data-texture-height', String(texture.dimensions.h));
|
|
1019
|
+
} else {
|
|
1020
|
+
div.removeAttribute('data-texture-width');
|
|
1021
|
+
div.removeAttribute('data-texture-height');
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
// Update renderable owners count
|
|
1025
|
+
div.setAttribute(
|
|
1026
|
+
'data-texture-owners',
|
|
1027
|
+
String(texture.renderableOwners.length),
|
|
1028
|
+
);
|
|
1029
|
+
|
|
1030
|
+
// Update retry count
|
|
1031
|
+
div.setAttribute('data-texture-retry-count', String(texture.retryCount));
|
|
1032
|
+
|
|
1033
|
+
// Update max retry count if available
|
|
1034
|
+
if (texture.maxRetryCount !== null) {
|
|
1035
|
+
div.setAttribute(
|
|
1036
|
+
'data-texture-max-retry-count',
|
|
1037
|
+
String(texture.maxRetryCount),
|
|
1038
|
+
);
|
|
1039
|
+
} else {
|
|
1040
|
+
div.removeAttribute('data-texture-max-retry-count');
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// Update metrics if available
|
|
1044
|
+
const metrics = this.textureMetrics.get(texture);
|
|
1045
|
+
if (metrics) {
|
|
1046
|
+
div.setAttribute('data-texture-previous-state', metrics.previousState);
|
|
1047
|
+
div.setAttribute(
|
|
1048
|
+
'data-texture-loaded-count',
|
|
1049
|
+
String(metrics.loadedCount),
|
|
1050
|
+
);
|
|
1051
|
+
div.setAttribute(
|
|
1052
|
+
'data-texture-failed-count',
|
|
1053
|
+
String(metrics.failedCount),
|
|
1054
|
+
);
|
|
1055
|
+
div.setAttribute('data-texture-freed-count', String(metrics.freedCount));
|
|
1056
|
+
} else {
|
|
1057
|
+
div.removeAttribute('data-texture-previous-state');
|
|
1058
|
+
div.removeAttribute('data-texture-loaded-count');
|
|
1059
|
+
div.removeAttribute('data-texture-failed-count');
|
|
1060
|
+
div.removeAttribute('data-texture-freed-count');
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
// Update error information if present
|
|
1064
|
+
if (texture.error) {
|
|
1065
|
+
div.setAttribute(
|
|
1066
|
+
'data-texture-error',
|
|
1067
|
+
texture.error.code || texture.error.message,
|
|
1068
|
+
);
|
|
1069
|
+
} else {
|
|
1070
|
+
div.removeAttribute('data-texture-error');
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
|
|
1074
|
+
public destroy() {
|
|
1075
|
+
// Stop animation stats timer
|
|
1076
|
+
this.stopAnimationStatsTimer();
|
|
1077
|
+
|
|
1078
|
+
// Remove DOM observers
|
|
1079
|
+
this.mutationObserver.disconnect();
|
|
1080
|
+
this.resizeObserver.disconnect();
|
|
1081
|
+
|
|
1082
|
+
// Remove resize listener
|
|
1083
|
+
window.removeEventListener('resize', this.setRootPosition.bind(this));
|
|
1084
|
+
if (this.root && this.root.parentNode) {
|
|
1085
|
+
this.root.remove();
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
// Clean up animation monitoring data
|
|
1089
|
+
Inspector.clearAnimationStats();
|
|
1090
|
+
}
|
|
1091
|
+
|
|
351
1092
|
destroyNode(id: number) {
|
|
352
1093
|
const div = document.getElementById(id.toString());
|
|
353
1094
|
div?.remove();
|
|
@@ -386,9 +1127,11 @@ export class Inspector {
|
|
|
386
1127
|
if (property === 'text') {
|
|
387
1128
|
div.innerHTML = String(value);
|
|
388
1129
|
|
|
389
|
-
//
|
|
390
|
-
//
|
|
391
|
-
div.style.
|
|
1130
|
+
// Keep DOM text invisible without breaking visibility checks
|
|
1131
|
+
// Use very low opacity (0.001) instead of 0 so Playwright still detects it
|
|
1132
|
+
div.style.opacity = '0.001';
|
|
1133
|
+
div.style.pointerEvents = 'none';
|
|
1134
|
+
div.style.userSelect = 'none';
|
|
392
1135
|
return;
|
|
393
1136
|
}
|
|
394
1137
|
|
|
@@ -430,14 +1173,14 @@ export class Inspector {
|
|
|
430
1173
|
let value = mappedStyleResponse.value;
|
|
431
1174
|
if (property === 'x') {
|
|
432
1175
|
const mount = props.mountX;
|
|
433
|
-
const width = props.
|
|
1176
|
+
const width = props.w;
|
|
434
1177
|
|
|
435
1178
|
if (mount) {
|
|
436
1179
|
value = `${parseInt(value) - width * mount}px`;
|
|
437
1180
|
}
|
|
438
1181
|
} else if (property === 'y') {
|
|
439
1182
|
const mount = props.mountY;
|
|
440
|
-
const height = props.
|
|
1183
|
+
const height = props.h;
|
|
441
1184
|
|
|
442
1185
|
if (mount) {
|
|
443
1186
|
value = `${parseInt(value) - height * mount}px`;
|
|
@@ -475,6 +1218,19 @@ export class Inspector {
|
|
|
475
1218
|
}
|
|
476
1219
|
}
|
|
477
1220
|
|
|
1221
|
+
updateViewport(
|
|
1222
|
+
width: number,
|
|
1223
|
+
height: number,
|
|
1224
|
+
deviceLogicalPixelRatio: number,
|
|
1225
|
+
) {
|
|
1226
|
+
this.scaleX = deviceLogicalPixelRatio ?? 1;
|
|
1227
|
+
this.scaleY = deviceLogicalPixelRatio ?? 1;
|
|
1228
|
+
|
|
1229
|
+
this.width = width;
|
|
1230
|
+
this.height = height;
|
|
1231
|
+
this.setRootPosition();
|
|
1232
|
+
}
|
|
1233
|
+
|
|
478
1234
|
// simple animation handler
|
|
479
1235
|
animateNode(
|
|
480
1236
|
div: HTMLElement,
|
|
@@ -493,8 +1249,8 @@ export class Inspector {
|
|
|
493
1249
|
const {
|
|
494
1250
|
x,
|
|
495
1251
|
y,
|
|
496
|
-
|
|
497
|
-
|
|
1252
|
+
w,
|
|
1253
|
+
h,
|
|
498
1254
|
alpha = 1,
|
|
499
1255
|
rotation = 0,
|
|
500
1256
|
scale = 1,
|
|
@@ -506,10 +1262,10 @@ export class Inspector {
|
|
|
506
1262
|
// ignoring loops and repeats for now, as that might be a bit too much for the inspector
|
|
507
1263
|
function animate() {
|
|
508
1264
|
setTimeout(() => {
|
|
509
|
-
div.style.top = `${y -
|
|
510
|
-
div.style.left = `${x -
|
|
511
|
-
div.style.width = `${
|
|
512
|
-
div.style.height = `${
|
|
1265
|
+
div.style.top = `${y - h * mountY}px`;
|
|
1266
|
+
div.style.left = `${x - w * mountX}px`;
|
|
1267
|
+
div.style.width = `${w}px`;
|
|
1268
|
+
div.style.height = `${h}px`;
|
|
513
1269
|
div.style.opacity = `${alpha}`;
|
|
514
1270
|
div.style.rotate = `${rotation}rad`;
|
|
515
1271
|
div.style.scale = `${scale}`;
|