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)
|
16.51 KB,
patch
|
Details | Diff | Splinter Review | |
|
48 bytes,
text/x-phabricator-request
|
Details | Review |
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•3 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•3 years ago
|
||
Not any more, no. The test was removed from speedometer yesterday. I'll find a different link for it.
| Reporter | ||
Comment 3•3 years ago
•
|
||
Sotaro, can you try this url instead: https://stockcharts--speedometer-preview.netlify.app/?suite=React-Stockcharts
| Assignee | ||
Updated•3 years ago
|
| Assignee | ||
Comment 4•3 years ago
|
||
| Assignee | ||
Comment 5•3 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•3 years ago
|
| Assignee | ||
Updated•3 years ago
|
| Assignee | ||
Comment 6•3 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•3 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•3 years ago
|
||
Updated•3 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Comment 10•3 years ago
|
||
| bugherder | ||
Description
•