Graphics
Intel® graphics drivers and software, compatibility, troubleshooting, performance, and optimization
22667 Discussions

Private bytes memory leak in Intel WDDM User Mode driver (igdvidproc32) for GMA3650

DLown
Beginner
3,351 Views

I have a .NET test app testing our C++/CLI library that calls the Media Foundation API to play videos in a loop using the IMFSequencerSource. The library is called by a very simple .NET WPF app with a System.Windows.Forms.PictureBox within a WindowsFormHost element supplying the window handle for video rendering.

I am profiling this little app using RedGate's Memory Profiler. My first snapshot shows igdvidproc32 using only 324KB. After 6hrs of video looping it has jumped to 57MB and after 12hrs is now 144MB.

Other units running nVidia ION (ASUS AT5IONT-I) and Intel GMA950 (nexcom) show no such large increases in private bytes, even over longer periods like 24hrs.

Is it possible this is a coding error on our part? How can I tell? I can provide the example app and code demonstrating the leak to Intel engineers on request and the RedGate Memory Profiler results.

Attached are performance counters from the Intel GMA3650 unit from an earlier test:

0 Kudos
3 Replies
DLown
Beginner
1,999 Views

Hi, yes I installed the latest driver version 8.0.4.1.1096 as part of my testing.

0 Kudos
DLown
Beginner
1,999 Views

Running DebugDiag on this sample program shows after an 8 hour test:

\igdvidproc32.dll is responsible for 92.09 MBytes worth of outstanding allocations. The following are the top 2 memory consuming functions:

igdvidproc32+1066: 92.09 MBytes worth of outstanding allocations.

Top 22 modules by allocation count

igdvidproc32 1,724,075 allocation(s)

mfplat 1,650 allocation(s)

ntdll 236 allocation(s)

Function details

Function igdvidproc32+1066

Source Line

Allocation type C/C++ runtime allocation(s)

Allocation Count 1724075 allocation(s)

Allocation Size 92.09 MBytes

Leak Probability 100%

Call stack sample 1

Address 0x00003912

Allocation Time 00:05:02 since tracking started

Allocation Size 56 Bytes

igdvidproc32+1066 igdvidproc32!VidProcOpenAdapter+53ff

gdi32!NtGdiDdDDICreateSynchronizationObject+c

gdi32!D3DKMTCreateSynchronizationObject+59 gdi32!NtGdiDdDDICreateSynchronizationObject

igdumd32+438dc

igdumd32!OpenAdapter+383d

d3d9!VideoProcessBltLH+19e

d3d9!CVideoProcessDevice::VideoProcessBlt+12c

dxva2!CVideoProcessorDevice::VideoProcessBlt+34f

evr!CMFVideoMixer9::ProcessVideo+87e

evr!CMFVideoMixer::MFTProcessOutput+2d8

evr!CMFVideoMixer9::MFTProcessOutput+2a evr!CMFVideoMixer::MFTProcessOutput

evr!CMFVideoPresenter::ProcessOutput+25e

evr!CMFVideoPresenter::ProcessOutputLoop+16

evr!CMFVideoPresenter::ProcessMessage+b7 evr!CMFVideoPresenter::ProcessOutputLoop

mf!MFCreateVideoRenderer+dfd

mf!MFCreateMediaSession+59d3

mf!MFCreateMediaSession+70c4

mfplat!CCompletionPort::InvokeCallback+12

mfplat!CWorkQueue::CThread::ThreadMain+a5

mfplat!CWorkQueue::CThread::ThreadFunc+d

msvcrt!_endthreadex+44

msvcrt!_endthreadex+ce

kernel32!BaseThreadInitThunk+e

ntdll!__RtlUserThreadStart+70

ntdll!_RtlUserThreadStart+1b ntdll!__RtlUserThreadStart

msvcrt!_endthreadex+6f

I've isolated the leak to this function call in my code:

HRESULT CPlayer::CallCurrentImage() {

DWORD dwBitmapSize = 0;

BYTE* pDataBuffer = NULL;

LONGLONG llTimeStamp = 0;

BITMAPINFOHEADER bmpInfo = { 0 };

bmpInfo.biSize = sizeof(BITMAPINFOHEADER);

HRESULT hr = m_pVideoDisplay->GetCurrentImage(&bmpInfo, &pDataBuffer, &dwBitmapSize, &llTimeStamp);

CoTaskMemFree(pDataBuffer);

return hr;

}

This code frees memory as noted in https://msdn.microsoft.com/en-us/library/windows/desktop/ms695342%28v=vs.85%29.aspx IMFVideoDisplayControl::GetCurrentImage method (Windows). The leak is present with this function call, and not present without it.I have to conclude the Intel driver contains a leak and this is causing my software (video display) to crash if run for extended periods.

0 Kudos
Reply