vlc | branch: master | Steve Lhomme <[email protected]> | Mon Feb 3 14:12:21 2020 +0100| [eb8044cff0143849419cc3c89d38464ab460f3e5] | committer: Steve Lhomme
d3d11_player: assert on leaks That could be used for testing leak regressions > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=eb8044cff0143849419cc3c89d38464ab460f3e5 --- doc/libvlc/d3d11_player.cpp | 56 ++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/doc/libvlc/d3d11_player.cpp b/doc/libvlc/d3d11_player.cpp index 70b947050e..25a1de5bce 100644 --- a/doc/libvlc/d3d11_player.cpp +++ b/doc/libvlc/d3d11_player.cpp @@ -13,6 +13,7 @@ #include <windows.h> #include <d3d11.h> #include <d3dcompiler.h> +#include <assert.h> #include <d3d11_1.h> #include <dxgi1_2.h> @@ -31,6 +32,8 @@ #define BORDER_TOP ( 0.95f) #define BORDER_BOTTOM (-0.90f) +#define check_leak(x) assert(x) + struct render_context { HWND hWnd; @@ -274,6 +277,7 @@ static void init_direct3d(struct render_context *ctx) static void release_textures(struct render_context *ctx) { + ULONG ref; if (ctx->resized.sharedHandled) { CloseHandle(ctx->resized.sharedHandled); @@ -281,22 +285,26 @@ static void release_textures(struct render_context *ctx) } if (ctx->resized.textureVLC) { - ctx->resized.textureVLC->Release(); + ref = ctx->resized.textureVLC->Release(); + check_leak(ref == 0); ctx->resized.textureVLC = NULL; } if (ctx->resized.textureShaderInput) { - ctx->resized.textureShaderInput->Release(); + ref = ctx->resized.textureShaderInput->Release(); + check_leak(ref == 0); ctx->resized.textureShaderInput = NULL; } if (ctx->resized.textureRenderTarget) { - ctx->resized.textureRenderTarget->Release(); + ref = ctx->resized.textureRenderTarget->Release(); + check_leak(ref == 0); ctx->resized.textureRenderTarget = NULL; } if (ctx->resized.texture) { - ctx->resized.texture->Release(); + ref = ctx->resized.texture->Release(); + check_leak(ref == 0); ctx->resized.texture = NULL; } } @@ -325,23 +333,35 @@ static void list_dxgi_leaks(void) static void release_direct3d(struct render_context *ctx) { - ctx->d3deviceVLC->Release(); + ULONG ref; release_textures(ctx); - ctx->d3dctxVLC->Release(); - ctx->d3deviceVLC->Release(); - - ctx->samplerState->Release(); - ctx->pShadersInputLayout->Release(); - ctx->pVS->Release(); - ctx->pPS->Release(); - ctx->pIndexBuffer->Release(); - ctx->pVertexBuffer->Release(); - ctx->swapchain->Release(); - ctx->swapchainRenderTarget->Release(); - ctx->d3dctx->Release(); - ctx->d3device->Release(); + ref = ctx->d3dctxVLC->Release(); + check_leak(ref == 0); + ref = ctx->d3deviceVLC->Release(); + check_leak(ref == 0); + + ref = ctx->samplerState->Release(); + check_leak(ref == 0); + ref = ctx->pShadersInputLayout->Release(); + check_leak(ref == 0); + ref = ctx->pVS->Release(); + check_leak(ref == 0); + ref = ctx->pPS->Release(); + check_leak(ref == 0); + ref = ctx->pIndexBuffer->Release(); + check_leak(ref == 0); + ref = ctx->pVertexBuffer->Release(); + check_leak(ref == 0); + ref = ctx->swapchain->Release(); + check_leak(ref == 0); + ref = ctx->swapchainRenderTarget->Release(); + check_leak(ref == 0); + ref = ctx->d3dctx->Release(); + check_leak(ref == 0); + ref = ctx->d3device->Release(); + check_leak(ref == 0); list_dxgi_leaks(); } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
