Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: media/gpu/dxva_video_decode_accelerator_win.cc

Issue 2590723002: [dxvavda] Save information about outstanding buffers in hang minidumps. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/gpu/dxva_video_decode_accelerator_win.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/gpu/dxva_video_decode_accelerator_win.h" 5 #include "media/gpu/dxva_video_decode_accelerator_win.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #if !defined(OS_WIN) 9 #if !defined(OS_WIN)
10 #error This file should only be built on Windows. 10 #error This file should only be built on Windows.
(...skipping 1977 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 1988
1989 void DXVAVideoDecodeAccelerator::StopDecoderThread() { 1989 void DXVAVideoDecodeAccelerator::StopDecoderThread() {
1990 // Try to determine what, if any exception last happened before a hang. See 1990 // Try to determine what, if any exception last happened before a hang. See
1991 // http://crbug.com/613701 1991 // http://crbug.com/613701
1992 DWORD last_exception_code = g_last_exception_code; 1992 DWORD last_exception_code = g_last_exception_code;
1993 HRESULT last_unhandled_error = g_last_unhandled_error; 1993 HRESULT last_unhandled_error = g_last_unhandled_error;
1994 uint64_t last_exception_time = g_last_exception_time; 1994 uint64_t last_exception_time = g_last_exception_time;
1995 uint64_t last_process_output_time = g_last_process_output_time; 1995 uint64_t last_process_output_time = g_last_process_output_time;
1996 LARGE_INTEGER perf_frequency; 1996 LARGE_INTEGER perf_frequency;
1997 ::QueryPerformanceFrequency(&perf_frequency); 1997 ::QueryPerformanceFrequency(&perf_frequency);
1998 uint32_t output_array_size = output_array_size_;
1999 size_t sample_count;
2000 {
2001 base::AutoLock lock(decoder_lock_);
2002 sample_count = pending_output_samples_.size();
2003 }
2004
1998 base::debug::Alias(&last_exception_code); 2005 base::debug::Alias(&last_exception_code);
1999 base::debug::Alias(&last_unhandled_error); 2006 base::debug::Alias(&last_unhandled_error);
2000 base::debug::Alias(&last_exception_time); 2007 base::debug::Alias(&last_exception_time);
2001 base::debug::Alias(&last_process_output_time); 2008 base::debug::Alias(&last_process_output_time);
2002 base::debug::Alias(&perf_frequency.QuadPart); 2009 base::debug::Alias(&perf_frequency.QuadPart);
2010 base::debug::Alias(&output_array_size);
2011 base::debug::Alias(&sample_count);
2003 decoder_thread_.Stop(); 2012 decoder_thread_.Stop();
2004 } 2013 }
2005 2014
2006 void DXVAVideoDecodeAccelerator::NotifyInputBufferRead(int input_buffer_id) { 2015 void DXVAVideoDecodeAccelerator::NotifyInputBufferRead(int input_buffer_id) {
2007 DCHECK(main_thread_task_runner_->BelongsToCurrentThread()); 2016 DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
2008 if (client_) 2017 if (client_)
2009 client_->NotifyEndOfBitstreamBuffer(input_buffer_id); 2018 client_->NotifyEndOfBitstreamBuffer(input_buffer_id);
2010 } 2019 }
2011 2020
2012 void DXVAVideoDecodeAccelerator::NotifyFlushDone() { 2021 void DXVAVideoDecodeAccelerator::NotifyFlushDone() {
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after
2831 false); 2840 false);
2832 hr = dxgi_buffer->GetResource( 2841 hr = dxgi_buffer->GetResource(
2833 __uuidof(ID3D11Texture2D), 2842 __uuidof(ID3D11Texture2D),
2834 reinterpret_cast<void**>(d3d11_texture.Receive())); 2843 reinterpret_cast<void**>(d3d11_texture.Receive()));
2835 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D11Texture from output buffer", 2844 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D11Texture from output buffer",
2836 false); 2845 false);
2837 D3D11_TEXTURE2D_DESC d3d11_texture_desc; 2846 D3D11_TEXTURE2D_DESC d3d11_texture_desc;
2838 d3d11_texture->GetDesc(&d3d11_texture_desc); 2847 d3d11_texture->GetDesc(&d3d11_texture_desc);
2839 *width = d3d11_texture_desc.Width; 2848 *width = d3d11_texture_desc.Width;
2840 *height = d3d11_texture_desc.Height; 2849 *height = d3d11_texture_desc.Height;
2850 output_array_size_ = d3d11_texture_desc.ArraySize;
2841 } else { 2851 } else {
2842 base::win::ScopedComPtr<IDirect3DSurface9> surface; 2852 base::win::ScopedComPtr<IDirect3DSurface9> surface;
2843 hr = MFGetService(output_buffer.get(), MR_BUFFER_SERVICE, 2853 hr = MFGetService(output_buffer.get(), MR_BUFFER_SERVICE,
2844 IID_PPV_ARGS(surface.Receive())); 2854 IID_PPV_ARGS(surface.Receive()));
2845 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D surface from output sample", 2855 RETURN_ON_HR_FAILURE(hr, "Failed to get D3D surface from output sample",
2846 false); 2856 false);
2847 D3DSURFACE_DESC surface_desc; 2857 D3DSURFACE_DESC surface_desc;
2848 hr = surface->GetDesc(&surface_desc); 2858 hr = surface->GetDesc(&surface_desc);
2849 RETURN_ON_HR_FAILURE(hr, "Failed to get surface description", false); 2859 RETURN_ON_HR_FAILURE(hr, "Failed to get surface description", false);
2850 *width = surface_desc.Width; 2860 *width = surface_desc.Width;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2913 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers, 2923 base::Bind(&DXVAVideoDecodeAccelerator::DecodePendingInputBuffers,
2914 base::Unretained(this))); 2924 base::Unretained(this)));
2915 } 2925 }
2916 2926
2917 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const { 2927 uint32_t DXVAVideoDecodeAccelerator::GetTextureTarget() const {
2918 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_; 2928 bool provide_nv12_textures = share_nv12_textures_ || copy_nv12_textures_;
2919 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D; 2929 return provide_nv12_textures ? GL_TEXTURE_EXTERNAL_OES : GL_TEXTURE_2D;
2920 } 2930 }
2921 2931
2922 } // namespace media 2932 } // namespace media
OLDNEW
« no previous file with comments | « media/gpu/dxva_video_decode_accelerator_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698