React-Stockcharts uses a huge amount of render-texture-hosts memory
Categories
(Core :: Graphics: Canvas2D, defect)
Tracking
()
Tracking | Status | |
---|---|---|
firefox115 | --- | fixed |
People
(Reporter: jnicol, Assigned: sotaro)
References
(Blocks 2 open bugs)
Details
(Whiteboard: [sp3])
Attachments
(2 files)
(deleted),
patch
|
Details | Diff | Splinter Review | |
(deleted),
text/x-phabricator-request
|
Details |
https://speedometer-preview.netlify.app/?suite=React-Stockcharts&iterationCount=10
I've noticed this on Android but it's possible it affects Linux and Macos too, as they also use
accelerated canvas.
Running ten iterations of react-stockcharts (as in the above URL) uses 805MB of render-texture-hosts. Switching away from the tab does not free this memory, however closing the tab does.
Sotaro, any idea why we are holding on to so many render texture hosts?
Assignee | ||
Comment 1•2 years ago
|
||
(In reply to Jamie Nicol [:jnicol] from comment #0)
https://speedometer-preview.netlify.app/?suite=React-Stockcharts&iterationCount=10
URL did not work for me. Error message was 'No suites selected. "React-Stockcharts" does not exists'.
Does the URL work for you?
Reporter | ||
Comment 2•2 years ago
|
||
Not any more, no. The test was removed from speedometer yesterday. I'll find a different link for it.
Reporter | ||
Comment 3•2 years ago
|
||
Sotaro, can you try this url instead: https://stockcharts--speedometer-preview.netlify.app/?suite=React-Stockcharts
Assignee | ||
Updated•2 years ago
|
Assignee | ||
Comment 4•2 years ago
|
||
Assignee | ||
Comment 5•2 years ago
|
||
For each iteration, a DrawTargetWebGL was created and a new FrameBuffer was created and they were alive until the test end. At the end of the test, DrawTargetWebGLs and FrameBuffers were deleted, but their destruction did not trigger RemoteTextureOwnerClient::UnregisterTextureOwner(). Then TextureHosts of RemoteTextureOwners remained alive.
Assignee | ||
Updated•2 years ago
|
Assignee | ||
Updated•2 years ago
|
Assignee | ||
Comment 6•2 years ago
|
||
RemoteTextureOwnerClient::RegisterTextureOwner() is called in WebGLContext::PushRemoteTexture(). It uses function's argument webgl::SwapChainOptions.
RemoteTextureOwnerClient::UnregisterTextureOwner() is called when its owner swap chain is destructed.
Delete frame buffer happens at HostWebGLContext::DeleteFramebuffer().
Delete frame buffer is requested by ClientWebGLContext::DeleteFramebuffer().
Assignee | ||
Comment 7•2 years ago
|
||
Even when ClientWebGLContext::DeleteFramebuffer() was called, HostWebGLContext::DeleteFramebuffer() was not called when the problem happened. From it, pending commands were not flushed at ClientWebGLContext.
Assignee | ||
Comment 8•2 years ago
|
||
Updated•2 years ago
|
Updated•2 years ago
|
Updated•2 years ago
|
Comment 10•2 years ago
|
||
bugherder |
Description
•