Commit 132c0075 authored by Zhenyao Mo's avatar Zhenyao Mo Committed by Commit Bot

Check if swap chain first present hang is caused by EnqueueSetEvent failure.

Currently we have a DCHECK for the returned result. If it ends up
failing, then the event wait is forever.

BUG=1060785,1077725
R=sunnyps@chromium.org

Change-Id: I574831aef3cecab6989f4bd0ec5ce79512472f40
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2463529
Commit-Queue: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: default avatarSunny Sachanandani <sunnyps@chromium.org>
Cr-Commit-Position: refs/heads/master@{#815745}
parent ca37f3ce
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <d3d11_1.h> #include <d3d11_1.h>
#include <dcomptypes.h> #include <dcomptypes.h>
#include "base/debug/alias.h"
#include "base/debug/dump_without_crashing.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
...@@ -199,8 +201,12 @@ bool DirectCompositionChildSurfaceWin::ReleaseDrawTexture(bool will_discard) { ...@@ -199,8 +201,12 @@ bool DirectCompositionChildSurfaceWin::ReleaseDrawTexture(bool will_discard) {
base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED); base::WaitableEvent::InitialState::NOT_SIGNALED);
hr = dxgi_device2->EnqueueSetEvent(event.handle()); hr = dxgi_device2->EnqueueSetEvent(event.handle());
DCHECK(SUCCEEDED(hr)); if (SUCCEEDED(hr)) {
event.Wait(); event.Wait();
} else {
base::debug::Alias(&hr);
base::debug::DumpWithoutCrashing();
}
} }
} }
} }
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include <d3d11_1.h> #include <d3d11_1.h>
#include <d3d11_4.h> #include <d3d11_4.h>
#include "base/debug/alias.h"
#include "base/debug/dump_without_crashing.h"
#include "base/feature_list.h" #include "base/feature_list.h"
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
...@@ -889,8 +891,12 @@ bool SwapChainPresenter::PresentToSwapChain( ...@@ -889,8 +891,12 @@ bool SwapChainPresenter::PresentToSwapChain(
base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
base::WaitableEvent::InitialState::NOT_SIGNALED); base::WaitableEvent::InitialState::NOT_SIGNALED);
hr = dxgi_device2->EnqueueSetEvent(event.handle()); hr = dxgi_device2->EnqueueSetEvent(event.handle());
DCHECK(SUCCEEDED(hr)); if (SUCCEEDED(hr)) {
event.Wait(); event.Wait();
} else {
base::debug::Alias(&hr);
base::debug::DumpWithoutCrashing();
}
} }
const bool use_swap_chain_tearing = const bool use_swap_chain_tearing =
DirectCompositionSurfaceWin::AllowTearing(); DirectCompositionSurfaceWin::AllowTearing();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment