Closed Bug 1241880 Opened 10 years ago Closed 9 years ago

Twice reported memory blocks in DMD regarding Web Audio

Categories

(Core :: Web Audio, defect, P3)

defect

Tracking

()

RESOLVED FIXED

People

(Reporter: jujjyl, Unassigned)

Details

STR: 1. Build Firefox with DMD enabled 2. Visit http://beta.unity3d.com/jonas/DT2/ 3. Open either level in the game 4. Esc out from fullscreen, and keep the tab open, but open a new about:memory tab 5. Tap the Free memory: GC/CC/Minimize memory usage buttons 6. Take a DMD capture. Observed: The DMD log shows the following memory blocks as being reported twice: Twice-reported { 10 blocks in heap block record 1 of 3 1,490,944 bytes (1,464,504 requested / 26,440 slop) Individual block sizes: 258,048; 221,184; 167,936; 151,552; 135,168; 131,072; 126,976; 114,688; 110,592; 73,728 0.21% of the heap (0.21% cumulative) 55.49% of twice-reported (55.49% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: js_malloc (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\js\utility.h:222) #03: js_pod_malloc<float> (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\js\utility.h:408) #04: mozilla::ThreadSharedFloatArrayBufferList::Create (d:\gecko-dev\dom\media\webaudio\audionodeengine.cpp:24) #05: mozilla::MediaDecodeTask::FinishDecode (d:\gecko-dev\dom\media\webaudio\mediabufferdecoder.cpp:370) #06: mozilla::MediaDecodeTask::SampleNotDecoded (d:\gecko-dev\dom\media\webaudio\mediabufferdecoder.cpp:332) #07: mozilla::MozPromise<enum mozilla::TrackInfo::TrackType,enum mozilla::MediaDataDecoder::DecoderFailureReason,1>::InvokeCallbackMethod<mozilla::H264Converter,void (__cdecl mozilla::H264Converter::*)(enum mozilla::TrackInfo::TrackType) __ptr64,enum mozilla:: (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:436) #08: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::MethodThenValue<mozilla::MediaDecodeTask,void (__cdecl mozilla::MediaDecodeTask::*)(mozilla::MediaData * __ptr64) __ptr64,void (__cdecl mozilla::MediaDec (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:487) #09: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::ThenValueBase::DoResolveOrReject (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:385) #10: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::ThenValueBase::ResolveOrRejectRunnable::Run (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:319) #11: mozilla::AutoTaskDispatcher::TaskGroupRunnable::Run (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\taskdispatcher.h:183) #12: mozilla::TaskQueue::Runner::Run (d:\gecko-dev\xpcom\threads\taskqueue.cpp:171) #13: nsThreadPool::Run (d:\gecko-dev\xpcom\threads\nsthreadpool.cpp:223) #14: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #15: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #16: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:326) #17: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #18: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #19: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #20: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #21: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #22: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) #23: crt_at_quick_exit[ucrtbase +0x6be1d] #24: BaseThreadInitThunk[KERNEL32 +0x18102] } Reported at { #01: mozilla::dmd::DMDFuncs::Report (d:\gecko-dev\memory\replace\dmd\dmd.cpp:1642) #02: mozilla::dmd::Report (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\dmd.h:110) #03: mozilla::AudioQueueMemoryFunctor::MallocSizeOf (d:\gecko-dev\dom\media\mediadecoderreader.cpp:54) #04: mozilla::ThreadSharedFloatArrayBufferList::Storage::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:67) #05: mozilla::ThreadSharedFloatArrayBufferList::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:119) #06: mozilla::ThreadSharedFloatArrayBufferList::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:127) #07: mozilla::dom::AudioBuffer::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffer.cpp:298) #08: mozilla::dom::AudioBufferSourceNode::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:619) #09: mozilla::dom::AudioBufferSourceNode::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:630) #10: mozilla::AudioNodeEngine::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:398) #11: mozilla::AudioNodeStream::SizeOfAudioNodesIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodestream.cpp:126) #12: mozilla::MediaStreamGraphImpl::MaybeProduceMemoryReport (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1214) #13: mozilla::MediaStreamGraphImpl::OneIteration (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1255) #14: mozilla::ThreadedDriver::RunThread (d:\gecko-dev\dom\media\graphdriver.cpp:335) #15: mozilla::MediaStreamGraphInitThreadRunnable::Run (d:\gecko-dev\dom\media\graphdriver.cpp:230) #16: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #17: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #18: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:326) #19: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #20: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #21: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #22: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #23: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #24: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) } Reported again at { #01: mozilla::dmd::DMDFuncs::Report (d:\gecko-dev\memory\replace\dmd\dmd.cpp:1642) #02: mozilla::dmd::Report (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\dmd.h:110) #03: mozilla::AudioQueueMemoryFunctor::MallocSizeOf (d:\gecko-dev\dom\media\mediadecoderreader.cpp:54) #04: mozilla::ThreadSharedFloatArrayBufferList::Storage::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:67) #05: mozilla::ThreadSharedFloatArrayBufferList::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:119) #06: mozilla::ThreadSharedFloatArrayBufferList::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:127) #07: mozilla::dom::AudioBuffer::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffer.cpp:298) #08: mozilla::dom::AudioBufferSourceNode::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:619) #09: mozilla::dom::AudioBufferSourceNode::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:630) #10: mozilla::AudioNodeEngine::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:398) #11: mozilla::AudioNodeStream::SizeOfAudioNodesIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodestream.cpp:126) #12: mozilla::MediaStreamGraphImpl::MaybeProduceMemoryReport (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1214) #13: mozilla::MediaStreamGraphImpl::OneIteration (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1255) #14: mozilla::ThreadedDriver::RunThread (d:\gecko-dev\dom\media\graphdriver.cpp:335) #15: mozilla::MediaStreamGraphInitThreadRunnable::Run (d:\gecko-dev\dom\media\graphdriver.cpp:230) #16: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #17: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #18: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:326) #19: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #20: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #21: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #22: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #23: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #24: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) } } Twice-reported { 2 blocks in heap block record 2 of 3 651,264 bytes (649,472 requested / 1,792 slop) Individual block sizes: 487,424; 163,840 0.09% of the heap (0.30% cumulative) 24.24% of twice-reported (79.73% cumulative) Allocated at { #01: malloc_impl (d:\gecko-dev\memory\build\replace_malloc.c:153) #02: js_malloc (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\js\utility.h:222) #03: js_pod_malloc<float> (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\js\utility.h:408) #04: mozilla::ThreadSharedFloatArrayBufferList::Create (d:\gecko-dev\dom\media\webaudio\audionodeengine.cpp:24) #05: mozilla::MediaDecodeTask::FinishDecode (d:\gecko-dev\dom\media\webaudio\mediabufferdecoder.cpp:370) #06: mozilla::MediaDecodeTask::SampleNotDecoded (d:\gecko-dev\dom\media\webaudio\mediabufferdecoder.cpp:332) #07: mozilla::MozPromise<enum mozilla::TrackInfo::TrackType,enum mozilla::MediaDataDecoder::DecoderFailureReason,1>::InvokeCallbackMethod<mozilla::H264Converter,void (__cdecl mozilla::H264Converter::*)(enum mozilla::TrackInfo::TrackType) __ptr64,enum mozilla:: (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:436) #08: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::MethodThenValue<mozilla::MediaDecodeTask,void (__cdecl mozilla::MediaDecodeTask::*)(mozilla::MediaData * __ptr64) __ptr64,void (__cdecl mozilla::MediaDec (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:487) #09: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::ThenValueBase::DoResolveOrReject (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:385) #10: mozilla::MozPromise<RefPtr<mozilla::MediaData>,enum mozilla::MediaDecoderReader::NotDecodedReason,1>::ThenValueBase::ResolveOrRejectRunnable::Run (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\mozpromise.h:319) #11: mozilla::AutoTaskDispatcher::TaskGroupRunnable::Run (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\mozilla\taskdispatcher.h:183) #12: mozilla::TaskQueue::Runner::Run (d:\gecko-dev\xpcom\threads\taskqueue.cpp:171) #13: nsThreadPool::Run (d:\gecko-dev\xpcom\threads\nsthreadpool.cpp:223) #14: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #15: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #16: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:356) #17: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #18: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #19: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #20: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #21: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #22: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) #23: crt_at_quick_exit[ucrtbase +0x6be1d] #24: BaseThreadInitThunk[KERNEL32 +0x18102] } Reported at { #01: mozilla::dmd::DMDFuncs::Report (d:\gecko-dev\memory\replace\dmd\dmd.cpp:1642) #02: mozilla::dmd::Report (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\dmd.h:110) #03: mozilla::AudioQueueMemoryFunctor::MallocSizeOf (d:\gecko-dev\dom\media\mediadecoderreader.cpp:54) #04: mozilla::ThreadSharedFloatArrayBufferList::Storage::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:67) #05: mozilla::ThreadSharedFloatArrayBufferList::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:119) #06: mozilla::ThreadSharedFloatArrayBufferList::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:127) #07: mozilla::dom::AudioBuffer::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffer.cpp:298) #08: mozilla::dom::AudioBufferSourceNode::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:619) #09: mozilla::dom::AudioBufferSourceNode::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:630) #10: mozilla::AudioNodeEngine::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:398) #11: mozilla::AudioNodeStream::SizeOfAudioNodesIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodestream.cpp:126) #12: mozilla::MediaStreamGraphImpl::MaybeProduceMemoryReport (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1214) #13: mozilla::MediaStreamGraphImpl::OneIteration (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1255) #14: mozilla::ThreadedDriver::RunThread (d:\gecko-dev\dom\media\graphdriver.cpp:335) #15: mozilla::MediaStreamGraphInitThreadRunnable::Run (d:\gecko-dev\dom\media\graphdriver.cpp:230) #16: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #17: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #18: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:326) #19: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #20: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #21: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #22: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #23: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #24: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) } Reported again at { #01: mozilla::dmd::DMDFuncs::Report (d:\gecko-dev\memory\replace\dmd\dmd.cpp:1642) #02: mozilla::dmd::Report (d:\gecko-dev\obj-x86_64-pc-mingw32\dist\include\dmd.h:110) #03: mozilla::AudioQueueMemoryFunctor::MallocSizeOf (d:\gecko-dev\dom\media\mediadecoderreader.cpp:54) #04: mozilla::ThreadSharedFloatArrayBufferList::Storage::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:67) #05: mozilla::ThreadSharedFloatArrayBufferList::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:119) #06: mozilla::ThreadSharedFloatArrayBufferList::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:127) #07: mozilla::dom::AudioBuffer::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffer.cpp:298) #08: mozilla::dom::AudioBufferSourceNode::SizeOfExcludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:619) #09: mozilla::dom::AudioBufferSourceNode::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audiobuffersourcenode.cpp:630) #10: mozilla::AudioNodeEngine::SizeOfIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodeengine.h:398) #11: mozilla::AudioNodeStream::SizeOfAudioNodesIncludingThis (d:\gecko-dev\dom\media\webaudio\audionodestream.cpp:126) #12: mozilla::MediaStreamGraphImpl::MaybeProduceMemoryReport (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1214) #13: mozilla::MediaStreamGraphImpl::OneIteration (d:\gecko-dev\dom\media\mediastreamgraph.cpp:1255) #14: mozilla::ThreadedDriver::RunThread (d:\gecko-dev\dom\media\graphdriver.cpp:335) #15: mozilla::MediaStreamGraphInitThreadRunnable::Run (d:\gecko-dev\dom\media\graphdriver.cpp:230) #16: nsThread::ProcessNextEvent (d:\gecko-dev\xpcom\threads\nsthread.cpp:989) #17: NS_ProcessNextEvent (d:\gecko-dev\xpcom\glue\nsthreadutils.cpp:297) #18: mozilla::ipc::MessagePumpForNonMainThreads::Run (d:\gecko-dev\ipc\glue\messagepump.cpp:326) #19: MessageLoop::RunInternal (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:235) #20: MessageLoop::RunHandler (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:228) #21: MessageLoop::Run (d:\gecko-dev\ipc\chromium\src\base\message_loop.cc:202) #22: nsThread::ThreadFunc (d:\gecko-dev\xpcom\threads\nsthread.cpp:403) #23: _PR_NativeRunThread (d:\gecko-dev\nsprpub\pr\src\threads\combined\pruthr.c:419) #24: pr_root (d:\gecko-dev\nsprpub\pr\src\md\windows\w95thred.c:91) } }
Priority: -- → P3
I guess two different AudioBufferSourceNodes are sharing the same AudioBuffer. I don't know what mechanism is typically used to report ref-counted objects. Perhaps diving the size by the refcount could produce sane usage info, but I don't know how to report that.
I fixed that in bug 1241096 by explicitly keeping track of AudioBuffer objects independently.
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.