Open
Bug 1241105
Opened 8 years ago
Updated 2 months ago
WebGL causes untracked memory allocations in ANGLE (detected by DMD in heap-unclassified)
Categories
(Core :: Graphics: CanvasWebGL, defect, P5)
Core
Graphics: CanvasWebGL
Tracking
()
NEW
People
(Reporter: jujjyl, Unassigned)
References
(Blocks 1 open bug)
Details
(Whiteboard: [MemShrink:P2][gfx-noted])
Attachments
(1 file)
6.24 MB,
text/plain
|
Details |
Looking at Unity3D WebGL usage in the DMD tool, there are a number of callstacks that perform memory allocations when binding WebGL objects that count towards heap-unclassified in about:memory: Unreported { ~19 blocks in heap block record 93 of 947 ~77,767 bytes (~77,767 requested / ~0 slop) Individual block sizes: ~4,093 x 19 0.03% of the heap (37.11% cumulative) 0.07% of unreported (91.98% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: rx::Renderer11::createBuffer (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3370) #05: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #06: gl::Context::bindElementArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:569) #07: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:132) #08: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #09: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #10: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #11: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #12: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #13: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #14: ??? (???:???) } } Unreported { ~19 blocks in heap block record 94 of 947 ~77,767 bytes (~77,767 requested / ~0 slop) Individual block sizes: ~4,093 x 19 0.03% of the heap (37.14% cumulative) 0.07% of unreported (92.04% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: rx::Renderer11::createBuffer (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3370) #05: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #06: gl::Context::bindArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:562) #07: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:129) #08: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #09: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #10: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #11: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #12: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #13: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #14: ??? (???:???) } } Unreported { ~18 blocks in heap block record 97 of 947 ~73,674 bytes (~73,674 requested / ~0 slop) Individual block sizes: ~4,093 x 18 0.03% of the heap (37.21% cumulative) 0.06% of unreported (92.23% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #05: gl::Context::bindArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:562) #06: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:129) #07: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #08: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #09: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #10: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #11: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #12: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #13: ??? (???:???) } } Unreported { ~17 blocks in heap block record 102 of 947 ~69,581 bytes (~69,581 requested / ~0 slop) Individual block sizes: ~4,093 x 17 0.02% of the heap (37.33% cumulative) 0.06% of unreported (92.53% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: rx::Renderer11::createImage (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3444) #05: rx::TextureD3D_2D::TextureD3D_2D (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\textured3d.cpp:623) #06: rx::Renderer11::createTexture (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3509) #07: gl::ResourceManager::checkTextureAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:398) #08: gl::Context::bindTexture (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:583) #09: gl::BindTexture (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:238) #10: glBindTexture (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:51) #11: mozilla::gl::GLContext::fBindTexture (d:\gecko-dev\gfx\gl\glcontext.h:896) #12: mozilla::WebGLTexture::BindTexture (d:\gecko-dev\dom\canvas\webgltexture.cpp:676) #13: mozilla::WebGLContext::BindTexture (d:\gecko-dev\dom\canvas\webglcontexttextures.cpp:235) #14: mozilla::dom::WebGLRenderingContextBinding::bindTexture (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10736) #15: ??? (???:???) } } Unreported { ~13 blocks in heap block record 112 of 947 ~53,209 bytes (~53,209 requested / ~0 slop) Individual block sizes: ~4,093 x 13 0.02% of the heap (37.54% cumulative) 0.05% of unreported (93.05% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #05: gl::Context::bindElementArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:569) #06: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:132) #07: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #08: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #09: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #10: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #11: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #12: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #13: ??? (???:???) } } Unreported { ~13 blocks in heap block record 114 of 947 ~53,209 bytes (~53,209 requested / ~0 slop) Individual block sizes: ~4,093 x 13 0.02% of the heap (37.58% cumulative) 0.05% of unreported (93.14% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: std::_Allocate<TType> (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory0:89) #05: std::allocator<TType>::allocate (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory0:646) #06: std::_Wrap_alloc<std::allocator<std::_Tree_node<std::pair<gl::IndexRangeCache::IndexRangeKey const ,gl::IndexRange>,void * __ptr64> > >::allocate (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory0:901) #07: std::_Tree_comp_alloc<std::_Tmap_traits<gl::IndexRangeCache::IndexRangeKey,gl::IndexRange,std::less<gl::IndexRangeCache::IndexRangeKey>,std::allocator<std::pair<gl::IndexRangeCache::IndexRangeKey const ,gl::IndexRange> >,0> >::_Buyheadnode (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree:825) #08: std::_Tree_comp_alloc<std::_Tmap_traits<gl::IndexRangeCache::IndexRangeKey,gl::IndexRange,std::less<gl::IndexRangeCache::IndexRangeKey>,std::allocator<std::pair<gl::IndexRangeCache::IndexRangeKey const ,gl::IndexRange> >,0> >::_Construct (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree:717) #09: std::_Tree_comp_alloc<std::_Tmap_traits<gl::IndexRangeCache::IndexRangeKey,gl::IndexRange,std::less<gl::IndexRangeCache::IndexRangeKey>,std::allocator<std::pair<gl::IndexRangeCache::IndexRangeKey const ,gl::IndexRange> >,0> >::_Tree_comp_alloc<std::_Tmap_ (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree:705) #10: std::_Tree<std::_Tmap_traits<gl::IndexRangeCache::IndexRangeKey,gl::IndexRange,std::less<gl::IndexRangeCache::IndexRangeKey>,std::allocator<std::pair<gl::IndexRangeCache::IndexRangeKey const ,gl::IndexRange> >,0> >::_Tree<std::_Tmap_traits<gl::IndexRangeC (c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree:1014) #11: std::map<enum DXGI_FORMAT,rx::d3d11::DXGIColorFormatInfo,std::less<enum DXGI_FORMAT>,std::allocator<std::pair<enum DXGI_FORMAT const ,rx::d3d11::DXGIColorFormatInfo> > >::map<enum DXGI_FORMAT,rx::d3d11::DXGIColorFormatInfo,std::less<enum DXGI_FORMAT>,std: (c:\program files (x86)\microsoft visual studio 14.0\vc\include\map:101) #12: gl::IndexRangeCache::IndexRangeCache[libGLESv2 +0x1d2456] #13: gl::Buffer::Buffer (d:\gecko-dev\gfx\angle\src\libangle\buffer.cpp:30) #14: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #15: gl::Context::bindElementArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:569) #16: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:132) #17: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #18: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #19: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #20: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #21: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #22: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #23: ??? (???:???) } } Unreported { ~12 blocks in heap block record 118 of 947 ~49,116 bytes (~49,116 requested / ~0 slop) Individual block sizes: ~4,093 x 12 0.02% of the heap (37.65% cumulative) 0.04% of unreported (93.31% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: rx::Renderer11::createBuffer (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3370) #05: gl::ResourceManager::checkBufferAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:371) #06: gl::Context::bindElementArrayBuffer (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:569) #07: gl::BindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:132) #08: glBindBuffer (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:36) #09: mozilla::gl::GLContext::fBindBuffer (d:\gecko-dev\gfx\gl\glcontext.h:874) #10: mozilla::WebGLContextUnchecked::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextunchecked.cpp:28) #11: mozilla::WebGLContext::BindBuffer (d:\gecko-dev\dom\canvas\webglcontextbuffers.cpp:57) #12: mozilla::dom::WebGLRenderingContextBinding::bindBuffer (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10592) #13: ??? (???:???) } } Unreported { ~8 blocks in heap block record 163 of 947 ~32,744 bytes (~32,744 requested / ~0 slop) Individual block sizes: ~4,093 x 8 0.01% of the heap (38.24% cumulative) 0.03% of unreported (94.77% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: moz_xmalloc (d:\gecko-dev\memory\mozalloc\mozalloc.cpp:83) #03: operator new[] (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozalloc.h:187) #04: rx::Renderer11::createImage (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3444) #05: rx::TextureD3D_2D::TextureD3D_2D (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\textured3d.cpp:623) #06: rx::Renderer11::createTexture (d:\gecko-dev\gfx\angle\src\libangle\renderer\d3d\d3d11\renderer11.cpp:3509) #07: gl::ResourceManager::checkTextureAllocation (d:\gecko-dev\gfx\angle\src\libangle\resourcemanager.cpp:398) #08: gl::Context::bindTexture (d:\gecko-dev\gfx\angle\src\libangle\context.cpp:583) #09: gl::BindTexture (d:\gecko-dev\gfx\angle\src\libglesv2\entry_points_gles_2_0.cpp:238) #10: glBindTexture (d:\gecko-dev\gfx\angle\src\libglesv2\libglesv2.cpp:51) #11: mozilla::gl::GLContext::fBindTexture (d:\gecko-dev\gfx\gl\glcontext.h:896) #12: mozilla::WebGLTexture::BindTexture (d:\gecko-dev\dom\canvas\webgltexture.cpp:676) #13: mozilla::WebGLContext::BindTexture (d:\gecko-dev\dom\canvas\webglcontexttextures.cpp:235) #14: mozilla::dom::WebGLRenderingContextBinding::bindTexture (d:\gecko-dev\obj-x86_64-pc-mingw32\dom\bindings\webglrenderingcontextbinding.cpp:10736) #15: mozilla::dom::GenericBindingMethod (d:\gecko-dev\dom\bindings\bindingutils.cpp:2714) #16: ??? (???:???) } } See the full logs in attachment. Is it possible to get these tracked under WebGL nodes in about:memory?
Updated•8 years ago
|
Blocks: DarkMatter
Updated•8 years ago
|
Whiteboard: [MemShrink]
Updated•8 years ago
|
Whiteboard: [MemShrink] → [MemShrink:P2]
Updated•8 years ago
|
Whiteboard: [MemShrink:P2] → [MemShrink:P2][gfx-noted]
Updated•7 years ago
|
Priority: -- → P3
Updated•2 years ago
|
Severity: normal → S3
Comment 1•2 months ago
|
||
These are all allocations within ANGLE.
That would be a lot of work to fix, I think.
We would have to add memory tracking to ANGLE, or at least tell ANGLE "use this allocator".
I'm tempted to WONTFIX this, but maybe that approach isn't impossible?
Severity: S3 → S4
Priority: P3 → P5
Summary: WebGL binding operations perform untracked memory allocations (detected by DMD in heap-unclassified) → WebGL causes untracked memory allocations in ANGLE (detected by DMD in heap-unclassified)
You need to log in
before you can comment on or make changes to this bug.
Description
•