| Index: gpu/ipc/service/direct_composition_surface_win.cc
|
| diff --git a/gpu/ipc/service/direct_composition_surface_win.cc b/gpu/ipc/service/direct_composition_surface_win.cc
|
| index b0a2af8ef4f683d95531970e0d54ed202b115446..921f0a30459877412875226e4ef681d484665830 100644
|
| --- a/gpu/ipc/service/direct_composition_surface_win.cc
|
| +++ b/gpu/ipc/service/direct_composition_surface_win.cc
|
| @@ -689,6 +689,17 @@ void DCLayerTree::SwapChainPresenter::PresentToSwapChain(
|
| base::win::ScopedComPtr<ID3D11DeviceContext> context;
|
| d3d11_device_->GetImmediateContext(context.GetAddressOf());
|
| context->CopyResource(dest_texture.Get(), src_texture.Get());
|
| +
|
| + // Additionally wait for the GPU to finish executing its commands, or
|
| + // there still may be a black flicker when presenting expensive content
|
| + // (e.g. 4k video).
|
| + base::win::ScopedComPtr<IDXGIDevice2> dxgi_device2;
|
| + hr = d3d11_device_.CopyTo(dxgi_device2.GetAddressOf());
|
| + DCHECK(SUCCEEDED(hr));
|
| + base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC,
|
| + base::WaitableEvent::InitialState::NOT_SIGNALED);
|
| + dxgi_device2->EnqueueSetEvent(event.handle());
|
| + event.Wait();
|
| }
|
|
|
| swap_chain_->Present(1, 0);
|
|
|