Skip to content

added cacheAsBitmap#268

Closed
ienaga wants to merge 26 commits into
mainfrom
develop
Closed

added cacheAsBitmap#268
ienaga wants to merge 26 commits into
mainfrom
develop

Conversation

@ienaga

@ienaga ienaga commented Mar 27, 2026

Copy link
Copy Markdown
Member

No description provided.

ienaga and others added 21 commits March 13, 2026 14:58
…e in Context.ts

- Add bilingual (Japanese + English) @description to all class methods
- Add @param and @return tags to all methods with parameters
- Add JSDoc comments to all class properties
- Add English translations to module-level constant JSDoc
- Convert camelCase method parameters to snake_case:
  - viewportWidth/viewportHeight -> viewport_width/viewport_height
  - vertexBuffer -> vertex_buffer, vertexCount -> vertex_count
  - bindGroup -> bind_group, uniformOffset -> uniform_offset
  - useStencilPipeline -> use_stencil_pipeline
  - flipY -> flip_y
- Internal method body variables left unchanged per convention

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove Matrix.release(rawData) on persistent cacheAsBitmap Matrix
  (rawData returns internal Float32Array; releasing it corrupts the Matrix
  on subsequent frames, causing cache key mismatch every frame)
- Signal render mode via render queue: 0=vector, 1=bitmap, 2=cacheAsBitmap
- Add bitmap-like drawing path for cacheAsBitmap in Shape/TextField renderers
  (setTransform with matrix/cacheScale compensation for correct screen size)
- Revert rotation path to original (cacheAsBitmap uses its own drawing path)
- Encode cacheAsBitmap flag in TextField changed field using bit flags

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…X/scaleY

Cache quality = cacheMatrix.scale × ownScale × stage.rendererScale
- Matrix(1,0,0,1) at scaleX=1 → 1x quality (base)
- Matrix(1,0,0,1) at scaleX=3 → 3x quality (matches own scale)
- Matrix(2,0,0,2) at scaleX=1 → 2x quality (double)
- Parent scale changes → cache reused (ownScale unchanged)
- Hit tests, width, height remain vector-based (no change needed)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings March 27, 2026 14:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces cacheAsBitmap support (Matrix-based bitmap caching) and updates rendering/hit-testing/bounds logic to respect the cache transform, along with broader refactors to WebGPU/WebGL utilities and test suites.

Changes:

  • Add DisplayObject.cacheAsBitmap (Matrix) and propagate cache-scale into render queues, renderer paths, hit tests, and bounds calculations.
  • Refactor several WebGPU utility modules (doc improvements, parameter renames, pre-allocation reuse) and remove multiple legacy services/shader helpers.
  • Update and add unit/e2e tests (notably for new stencil services, cache removal, cacheAsBitmap e2e coverage), while removing a large number of prior tests.

Reviewed changes

Copilot reviewed 166 out of 274 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
packages/webgpu/src/Mesh/service/MeshLerpService.test.ts Removes MeshLerpService unit tests
packages/webgpu/src/Mesh/service/MeshFillGenerateService.ts Improves JSDoc param descriptions
packages/webgpu/src/Mask/usecase/MaskBindUseCase.ts Removes MaskBindUseCase implementation
packages/webgpu/src/Mask/usecase/MaskBindUseCase.test.ts Removes MaskBindUseCase unit tests
packages/webgpu/src/Mask.ts Expands docs; removes mask attachment stack; adds/reset clarifications
packages/webgpu/src/Mask.test.ts Removes tests for deleted mask attachment stack
packages/webgpu/src/Gradient/GradientLUTCache.ts Adds documentation and LUT cache TTL docs
packages/webgpu/src/FrameBufferManager/usecase/FrameBufferManagerReleaseTemporaryAttachmentUseCase.ts Renames params; doc updates
packages/webgpu/src/FrameBufferManager/usecase/FrameBufferManagerCreateAttachmentUseCase.ts Renames params; doc updates; id counter rename
packages/webgpu/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.ts Removes pending-release flush service
packages/webgpu/src/FrameBufferManager/service/FrameBufferManagerFlushPendingReleasesService.test.ts Removes pending-release flush service tests
packages/webgpu/src/FrameBufferManager/service/FrameBufferManagerCreateStencilRenderPassDescriptorService.ts Refactors signature; adds pre-allocation docs
packages/webgpu/src/FrameBufferManager/service/FrameBufferManagerCreateRenderPassDescriptorService.ts Refactors signature; adds pre-allocation docs
packages/webgpu/src/FrameBufferManager.test.ts Removes resizeAttachment test coverage
packages/webgpu/src/Filter/GradientGlowFilter/FilterApplyGradientGlowFilterUseCase.ts Uses shared DEG_TO_RAD; renames params; cache-as-bitmap compatible transform branch
packages/webgpu/src/Filter/GlowFilterShader.ts Removes GlowFilterShader class
packages/webgpu/src/Filter/GlowFilterShader.test.ts Removes GlowFilterShader tests
packages/webgpu/src/Filter/GlowFilter/FilterApplyGlowFilterUseCase.ts Uses shared color util; renames params
packages/webgpu/src/Filter/FilterUtil.ts Adds shared filter utilities (DEG_TO_RAD and color conversions)
packages/webgpu/src/Filter/FilterGradientLUTCache.ts Adds device reference documentation
packages/webgpu/src/Filter/DropShadowFilterShader.ts Removes DropShadowFilterShader class
packages/webgpu/src/Filter/DropShadowFilterShader.test.ts Removes DropShadowFilterShader tests
packages/webgpu/src/Filter/DisplacementMapFilterShader.ts Removes displacement shader generator
packages/webgpu/src/Filter/ConvolutionFilterShader.ts Removes convolution shader generator
packages/webgpu/src/Filter/ConvolutionFilter/FilterApplyConvolutionFilterUseCase.ts Uses shared straight RGBA util; renames params
packages/webgpu/src/Filter/ColorMatrixFilterShader.ts Removes ColorMatrixFilterShader class
packages/webgpu/src/Filter/ColorMatrixFilterShader.test.ts Removes ColorMatrixFilterShader tests
packages/webgpu/src/Filter/ColorMatrixFilter/FilterApplyColorMatrixFilterUseCase.ts Renames params to snake_case in docs/signature
packages/webgpu/src/Filter/BlurFilterUseCase.ts Refactors constants and param naming; doc expansion
packages/webgpu/src/Filter/BlurFilterShader.ts Removes BlurFilterShader class
packages/webgpu/src/Filter/BlurFilterShader.test.ts Removes BlurFilterShader tests
packages/webgpu/src/Filter/BlurFilter/service/BlurFilterComputeShaderService.ts Removes compute blur helper service
packages/webgpu/src/Filter/BitmapFilterShader.test.ts Removes bitmap filter shader tests
packages/webgpu/src/Filter/BevelFilterShader.ts Removes bevel shader generator
packages/webgpu/src/Filter/BevelFilterShader.test.ts Removes bevel shader generator tests
packages/webgpu/src/Context/usecase/ContextGradientStrokeUseCase.ts Adds preallocation/docs for gradient stroke path
packages/webgpu/src/Context/usecase/ContextGradientFillUseCase.ts Adds preallocation/docs for gradient fill + stencil caches
packages/webgpu/src/Context/usecase/ContextDrawArraysInstancedUseCase.ts Extracts pipeline-name selection helper; adds docs
packages/webgpu/src/Context/usecase/ContextClipUseCase.ts Adds uniform preallocation docs
packages/webgpu/src/Context/usecase/ContextBitmapStrokeUseCase.ts Adds sampler cache + docs
packages/webgpu/src/Context/usecase/ContextBitmapFillUseCase.ts Adds sampler cache + stencil caches + docs
packages/webgpu/src/Context/service/ContextFillWithStencilService.ts Adds service docs
packages/webgpu/src/Context/service/ContextFillWithStencilMainService.ts Adds service docs
packages/webgpu/src/Context/service/ContextFillWithStencilMainService.test.ts Adds tests for main-canvas stencil/fill two-pass service
packages/webgpu/src/Context/service/ContextFillSimpleService.ts Adds service docs
packages/webgpu/src/Context/service/ContextComputeGradientMatrixService.ts Renames params; adds docs
packages/webgpu/src/Context/service/ContextComputeBitmapMatrixService.ts Adds docs for bitmap inverse-matrix computation
packages/webgpu/src/Context.test.ts Updates buffer manager mocked method (acquireVertexBuffer) and removes clearRect test
packages/webgpu/src/Compute/service/ComputeExecuteBlurService.ts Removes compute blur executor
packages/webgpu/src/Compute/ComputePipelineManager.test.ts Removes compute pipeline manager tests
packages/webgpu/src/BufferManager/usecase/BufferManagerReleaseStorageBufferUseCase.ts Removes storage buffer release usecase
packages/webgpu/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.ts Adds missing @return in docs
packages/webgpu/src/BufferManager/usecase/BufferManagerCleanupStorageBuffersUseCase.test.ts Adds unit tests for storage buffer cleanup
packages/webgpu/src/BufferManager/usecase/BufferManagerAcquireStorageBufferUseCase.test.ts Inlines release helper; removes release usecase tests
packages/webgpu/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.ts Adds missing @return in docs
packages/webgpu/src/BufferManager/service/BufferManagerUpdateIndirectBufferService.test.ts Adds unit tests for indirect buffer updates
packages/webgpu/src/BufferManager/service/BufferManagerReleaseVertexBufferService.ts Renames constant; keeps bucket-cap logic
packages/webgpu/src/BufferManager/service/BufferManagerReleaseUniformBufferService.ts Renames constant; keeps bucket-cap logic
packages/webgpu/src/Blend/usecase/BlendOperationUseCase.ts Removes blend operation usecase
packages/webgpu/src/Blend/usecase/BlendOperationUseCase.test.ts Removes blend operation tests
packages/webgpu/src/Blend/usecase/BlendApplyComplexBlendUseCase.ts Renames params; doc expansion; error log uses renamed param
packages/webgpu/src/Blend/service/BlendSetModeService.ts Removes blend mode setter service
packages/webgpu/src/Blend/service/BlendSetModeService.test.ts Removes blend mode setter tests
packages/webgpu/src/Blend/service/BlendScreenService.ts Removes screen blend service
packages/webgpu/src/Blend/service/BlendScreenService.test.ts Removes screen blend service tests
packages/webgpu/src/Blend/service/BlendResetService.ts Removes reset blend service
packages/webgpu/src/Blend/service/BlendResetService.test.ts Removes reset blend service tests
packages/webgpu/src/Blend/service/BlendOneZeroService.ts Removes one-zero blend service
packages/webgpu/src/Blend/service/BlendOneZeroService.test.ts Removes one-zero blend service tests
packages/webgpu/src/Blend/service/BlendGetStateService.ts Removes blend-state getter service wrapper
packages/webgpu/src/Blend/service/BlendGetStateService.test.ts Removes blend-state getter tests
packages/webgpu/src/Blend/service/BlendEraseService.ts Removes erase blend service
packages/webgpu/src/Blend/service/BlendEraseService.test.ts Removes erase blend service tests
packages/webgpu/src/Blend/service/BlendAlphaService.ts Removes alpha blend service
packages/webgpu/src/Blend/service/BlendAlphaService.test.ts Removes alpha blend service tests
packages/webgpu/src/Blend/service/BlendAddService.ts Removes add blend service
packages/webgpu/src/Blend/service/BlendAddService.test.ts Removes add blend service tests
packages/webgpu/src/Blend/BlendInstancedManager.ts Renames internal consts; expands docs; minor refactor
packages/webgpu/src/Blend.ts Removes funcCode state; documents blendMode and blend-state function
packages/webgpu/src/Blend.test.ts Removes tests for deleted funcCode API
packages/webgpu/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.ts Renames param; adds internal function docs; removes adaptive-threshold helper
packages/webgpu/src/BezierConverter/usecase/BezierConverterAdaptiveCubicToQuadUseCase.test.ts Removes tests for deleted adaptive-threshold helper
packages/webgpu/src/BezierConverter/BezierConverter.ts Adjusts exports/docs after threshold helper removal
packages/webgpu/src/AttachmentManager/usecase/AttachmentManagerReleaseAttachmentUseCase.ts Renames pool params; doc updates
packages/webgpu/src/AttachmentManager/usecase/AttachmentManagerGetAttachmentObjectUseCase.ts Renames pool/id params; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerReleaseTextureService.ts Renames params; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetTextureService.ts Renames params; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetStencilBufferService.ts Renames params; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerGetColorBufferService.ts Renames params; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateTextureObjectService.ts Renames id counter param; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateStencilBufferService.ts Renames id counter param; doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateRenderPassDescriptorService.ts Removes render pass descriptor factory service
packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateColorBufferService.ts Doc updates
packages/webgpu/src/AttachmentManager/service/AttachmentManagerCreateAttachmentObjectService.ts Renames id counter param; doc updates
packages/webgpu/src/AttachmentManager.ts Removes currentAttachment binding API and descriptor creator; adds docs
packages/webgpu/src/AttachmentManager.test.ts Removes tests for removed binding/descriptor methods
packages/webgpu/src/AtlasManager.test.ts Removes tests for removed atlas helpers; updates assertions
packages/webgl/src/Context/usecase/ContextContainerDrawCachedFilterUseCase.test.ts Adds tests for cached filter draw behavior
packages/webgl/src/Context/usecase/ContextContainerBeginLayerUseCase.test.ts Adds tests for container layer stack behavior
packages/text/src/interface/IHtmlNode.ts Adds HTML node union types for parser output
packages/text/src/TextParser/usecase/TextParserParseTagUseCase.test.ts Switches parseTag input to string (removes htmlparser2 usage)
packages/text/src/TextParser/usecase/TextParserParseHtmlTextUseCase.ts Removes htmlparser2 parsing; passes raw HTML to parseTag
packages/text/package.json Removes htmlparser2 dependency
packages/renderer/src/TextField/usecase/TextFieldRenderUseCase.ts Adds cacheAsBitmap flag handling and transform path
packages/renderer/src/Shape/usecase/ShapeRenderUseCase.ts Adds renderMode (vector/bitmap/cacheAsBitmap) handling
packages/renderer/src/Shape/usecase/ShapeRenderUseCase.test.ts Adds unit tests for shape render paths (not cacheAsBitmap)
packages/renderer/src/Shape/usecase/ShapeClipRenderUseCase.test.ts Adds unit tests for clip render usecase
packages/renderer/src/DisplayObjectContainer/usecase/DisplayObjectContainerClipRenderUseCase.test.ts Adds unit tests for clip traversal
packages/renderer/src/Command/service/CommandRemoveCacheService.test.ts Adds unit tests for cache removal command
packages/media/src/Video/usecase/VideoBuildFromCharacterUseCase.test.ts Adds unit tests for video build behavior
packages/media/src/Sound/service/SoundDecodeService.test.ts Adds unit tests for sound decode behavior
packages/display/src/TextField/usecase/TextFieldHitTestUseCase.ts Applies cacheAsBitmap scaling in hit tests
packages/display/src/TextField/usecase/TextFieldCalcBoundsMatrixUseCase.ts Applies cacheAsBitmap scaling in bounds calculations
packages/display/src/Shape/usecase/ShapeHitTestUseCase.ts Applies cacheAsBitmap scaling in hit tests
packages/display/src/Shape/usecase/ShapeGenerateRenderQueueUseCase.ts Pushes cacheAsBitmap render mode; scales matrix + caching params
packages/display/src/Shape/usecase/ShapeCalcBoundsMatrixUseCase.ts Applies cacheAsBitmap scaling in bounds calculations
packages/display/src/Loader/usecase/LoaderLoadJsonUseCase.ts Adds error handling for unzip worker
packages/display/src/DisplayObject/usecase/DisplayObjectHitTestPointUseCase.ts Applies cacheAsBitmap scaling to hit test matrix
packages/display/src/DisplayObject.ts Adds cacheAsBitmap API and changes scaleX/scaleY behavior
packages/display/src/DisplayObject.test.ts Adds unit tests for cacheAsBitmap API behavior
package.json Bumps version; updates devDependencies; removes root dependencies block
e2e/tests/textfield.spec.ts Adds e2e coverage for htmlText and cacheAsBitmap
e2e/tests/shape.spec.ts Adds e2e coverage for cacheAsBitmap
e2e/pages/mask/sprite-mask.html Stabilizes video masking e2e by waiting for complete/seeked

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread package.json
{
"name": "@next2d/player",
"version": "3.0.5",
"version": "3.1.0",

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PR title ('added cacheAsBitmap') doesn’t reflect the scope of changes (large-scale removals/refactors across WebGPU Blend/Compute/Shader utilities, dependency removal, and many test deletions). Please update the PR title/description to match the broader refactor, or split unrelated cleanups into separate PRs to keep reviewability and risk manageable.

Copilot uses AI. Check for mistakes.
Comment on lines 753 to 764
get scaleX (): number
{
return this.$scaleX === null
const base = this.$scaleX === null
? displayObjectGetScaleXUseCase(this)
: this.$scaleX;

if (this._$cacheAsBitmap) {
const m = this._$cacheAsBitmap.rawData;
return base * Math.sqrt(m[0] * m[0] + m[1] * m[1]);
}
return base;
}

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The scaleX/scaleY getters now implicitly incorporate cacheAsBitmap scale. This changes the public meaning of scaleX/scaleY from 'transform scale' to 'transform × cache scale', which can break existing callers (layout, physics, input handling) that expect scale to reflect only the object’s transform. Prefer keeping scaleX/scaleY as the true transform scale and applying cache scaling only within rendering/bounds/hit-test paths (as you already do elsewhere), or expose a separate derived getter (e.g. renderScaleX/renderScaleY) if needed.

Copilot uses AI. Check for mistakes.
Comment on lines +38 to +57
let rawMatrix = displayObjectGetRawMatrixUseCase(shape);

// cacheAsBitmap倍率をrawMatrixに適用
const cacheMatrix = shape.cacheAsBitmap;
let scaledMatrix: Float32Array | null = null;
if (cacheMatrix) {
const m = cacheMatrix.rawData;
const csx = Math.sqrt(m[0] * m[0] + m[1] * m[1]);
const csy = Math.sqrt(m[2] * m[2] + m[3] * m[3]);
if (rawMatrix) {
scaledMatrix = $getFloat32Array6(
rawMatrix[0] * csx, rawMatrix[1] * csx,
rawMatrix[2] * csy, rawMatrix[3] * csy,
rawMatrix[4], rawMatrix[5]
);
} else {
scaledMatrix = $getFloat32Array6(csx, 0, 0, csy, 0, 0);
}
rawMatrix = scaledMatrix;
}

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same cacheAsBitmap matrix-scaling block is duplicated across multiple hit-test and bounds usecases (Shape/TextField/DisplayObject). Consider extracting a shared helper (e.g. in DisplayObjectUtil) that takes (rawMatrix, cacheAsBitmapMatrix) and returns a pooled scaled matrix (plus a small wrapper to ensure pooling is always handled). This will reduce copy/paste divergence and make future changes (e.g. handling rotation/shear in cache matrix) safer.

Copilot uses AI. Check for mistakes.
Comment on lines +46 to +47
// text state (bit 0 = changed, bit 1 = cacheAsBitmap)
const changedFlag = render_queue[index++];

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

render_queue is a Float32Array, but this logic relies on bitwise ops (which coerce to 32-bit integers). To make the encoding contract explicit and robust, consider coercing once (e.g. const changedFlag = render_queue[index++] | 0;) and/or documenting that this slot must always be an integer (0..3). This avoids surprising behavior if a non-integer ever lands here.

Suggested change
// text state (bit 0 = changed, bit 1 = cacheAsBitmap)
const changedFlag = render_queue[index++];
// text state flag stored as integer bitmask in Float32Array (bit 0 = changed, bit 1 = cacheAsBitmap)
const changedFlag = render_queue[index++] | 0;

Copilot uses AI. Check for mistakes.
Comment on lines +36 to +38
const renderMode = render_queue[index++]; // 0=vector, 1=bitmap, 2=cacheAsBitmap
const isBitmap = renderMode === 1;
const isCacheAsBitmap = renderMode === 2;

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new renderMode === 2 (cacheAsBitmap) flow introduces a distinct transform path, but the added unit tests for ShapeRenderUseCase only cover vector/filtered cases and don’t exercise the cacheAsBitmap branch. Please add a unit test that sets renderMode to 2 and asserts the expected setTransform parameters (and any other side effects unique to this mode).

Copilot uses AI. Check for mistakes.
Comment on lines +192 to 205
if (isCacheAsBitmap) {

const tx = xMin * xScale;
const ty = yMin * yScale;

const cosX = Math.cos(radianX);
const sinX = Math.sin(radianX);
const cosY = Math.cos(radianY);
const sinY = Math.sin(radianY);
// cacheAsBitmap: Bitmapと同様の描画パスで、cacheScaleを補正
// baseBounds原点(xMin,yMin)のスクリーン座標をtranslationに反映
const screenX = matrix[0] * xMin + matrix[2] * yMin + matrix[4];
const screenY = matrix[1] * xMin + matrix[3] * yMin + matrix[5];

$context.setTransform(
cosX, sinX, -sinY, cosY,
tx * cosX - ty * sinY + matrix[4],
tx * sinX + ty * cosY + matrix[5]
matrix[0] / xScale, matrix[1] / xScale,
matrix[2] / yScale, matrix[3] / yScale,
screenX, screenY
);

} else {

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The TextFieldRenderUseCase now has a dedicated cacheAsBitmap transform branch that changes setTransform behavior, but there’s no corresponding unit test to validate it. Please add a unit test that encodes the flag (bit 1) and verifies setTransform is called with the expected scaled components and translation derived from (xMin, yMin).

Copilot uses AI. Check for mistakes.
Comment on lines +20 to +35
await new Promise<void>((resolve, reject): void =>
{
$unzipWorker.onmessage = (event: MessageEvent): void =>
{
if (event.data && event.data.error) {
reject(new Error(event.data.error));
return;
}
loaderBuildService(loader, event.data as IAnimationToolData);
resolve();
};

$unzipWorker.onerror = (event: ErrorEvent): void =>
{
reject(new Error(event.message));
};

Copilot AI Mar 27, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because $unzipWorker.onmessage/onerror are assigned per call, concurrent LoaderLoadJsonUseCase executions can overwrite handlers and resolve/reject the wrong promise (or leak handlers). If parallel loads are possible, prefer addEventListener with { once: true } (or explicit cleanup/reset of handlers in finally) and consider correlating responses with request IDs.

Copilot uses AI. Check for mistakes.
@ienaga ienaga closed this Mar 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants