New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 749309 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Jul 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Windows
Pri: 1
Type: Bug-Regression



Sign in to add a comment

GetDxDiagnostics DCHECKs when it requests an STA because GpuMain is already in an MTA

Project Member Reported by cwallez@chromium.org, Jul 26 2017

Issue description

The D3D11 WebGL CTS on passthrough fails consistently on Wintel, I thought it was because of the RGBA->BGRA blit ANGLE change but it kept failing after the revert. First failing builds:

https://build.chromium.org/p/chromium.gpu.fyi/builders/Win10%20Debug%20%28Intel%20HD%20530%29/builds/1250
https://build.chromium.org/p/chromium.gpu.fyi/builders/Win10%20Release%20%28Intel%20HD%20530%29/builds/1135

The latter only has one suspicious CL: Always use DirectCompositionSurfaceWin when using DirectComposition https://chromium.googlesource.com/chromium/src/+/ac13d8266c1e18429a0584b780e7daa5bcf1542e

jbauman@ To avoid reverting your CL, can we skip DirectComposition when --use-passthrough-cmd-decoder is in the cmdline args?

+cc goefflang@ for passthrough cmd decoder fix.

Failures here manifest themselves on this stack
base!logging::LogMessage::~LogMessage+0x383
gpu!base::win::ScopedCOMInitializer::Initialize+0x125
gpu!base::win::ScopedCOMInitializer::ScopedCOMInitializer+0x1c
gpu!gpu::GetDxDiagnostics+0x12
content!ui::GpuService::UpdateGpuInfoPlatform+0x11e
content!ui::GpuService::RequestCompleteGpuInfo+0xd1
content!base::internal::FunctorTraits<void (__thiscall ui::GpuService::*)(b...
content!base::internal::InvokeHelper<1,void>::MakeItSo<void (__thiscall ui:...
content!base::internal::Invoker<base::internal::BindState<void (__thiscall ...
content!base::internal::Invoker<base::internal::BindState<void (__thiscall ...
base!base::Callback<void __cdecl(void),0,0>::Run+0x35
base!base::debug::TaskAnnotator::RunTask+0x1eb
base!base::MessageLoop::RunTask+0x1fc
base!base::MessageLoop::DeferOrRunPendingTask+0x32
base!base::MessageLoop::DoWork+0x112
base!base::MessagePumpDefault::Run+0x90
base!base::MessageLoop::Run+0xbf
base!base::RunLoop::Run+0xba
content!content::GpuMain+0x516
content!content::RunNamedProcessTypeMain+0x87
content!content::ContentMainRunnerImpl::Run+0x195

The suspicion here is that there are some NDEBUG and DCHECK mismatches, so this code was silently running when it should have DCHECKed. 

http://crrev.com/9666497883a375aae2ff5d8e1fb763810d09226b removed the NDEBUG check and let the DCHECK defines take over, which exposed the real issue.
 

Comment 1 by kbr@chromium.org, Jul 26 2017

Cc: robliao@chromium.org jmad...@chromium.org
Labels: -Type-Bug -Pri-3 Pri-1 Type-Bug-Regression
Not sure but I thought there was a different problem with the recent change to alias ScopedComPtr to ComPtr.

Unfortunately the blamelists for these bots are wrong. See Issue 741988 .

Cc: jbau...@chromium.org
Owner: robliao@chromium.org
Sending to Rob.. feel free to send it back if you get too busy.
Cc: kbr@chromium.org piman@chromium.org
 Issue 749744  has been merged into this issue.
Owner: jbau...@chromium.org
Assigning back to jbauman, as there is a fix in the CQ to not use DirectComposition on passthrough. Let's keep both bugs split because it isn't clear that the flakiness and the WebGL failures have the same root cause.
Owner: robliao@chromium.org
robliao@ pointed out that the same assert appears in the failing WebGL CTS runs, I hadn't realized. Re-merging bugs and re-assigning again, sorry for the confusion.
Description: Show this description
Summary: GetDxDiagnostics DCHECKs when it requests an STA because GpuMain is already in an MTA (was: webgl_conformance_d3d11_passthrough_tests fails on Intel when DirectComposition is enabled.)
Project Member

Comment 8 by bugdroid1@chromium.org, Jul 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/39210eaeceb4aaac746eca89a273c77a0e36c757

commit 39210eaeceb4aaac746eca89a273c77a0e36c757
Author: John Bauman <jbauman@chromium.org>
Date: Thu Jul 27 23:11:55 2017

Don't use DirectCompositionSurfaceWin with passthrough command buffer

The passthrough command buffer doesn't yet support SetDrawRectangle.

Bug:  749309 
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: If79279a8b278f0e39f04f710f42c0f1a27150169
Reviewed-on: https://chromium-review.googlesource.com/588005
Commit-Queue: John Bauman <jbauman@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490071}
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/in_process_command_buffer.cc
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/in_process_command_buffer.h
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/direct_composition_surface_win_unittest.cc
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/gpu_command_buffer_stub.cc
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/gpu_command_buffer_stub.h
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/gpu_vsync_provider_unittest_win.cc
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/image_transport_surface_delegate.h
[modify] https://crrev.com/39210eaeceb4aaac746eca89a273c77a0e36c757/gpu/ipc/service/image_transport_surface_win.cc

Project Member

Comment 9 by bugdroid1@chromium.org, Jul 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1214b5eb866cc5d40ed4aea19a499a036fee7858

commit 1214b5eb866cc5d40ed4aea19a499a036fee7858
Author: Robert Liao <robliao@chromium.org>
Date: Sat Jul 29 02:48:58 2017

Move the GetDxDiagnostics Call to an COM STA Task Runner

Previously, ui::GpuService::UpdateGpuInfoPlatform would just directly
call GetDxDiagnostics. This is incorrect as GetDxDiagnostics creates
a COM STA only object and ui::GpuService::UpdateGpuInfoPlatform runs
in a COM MTA. This went undetected because COM will implicitly create
an STA on demand if the current thread is an MTA or did not initialize
COM.

A confluence of factors exposed this incorrect code:
  * Initializing GpuMain as MTA as it was using COM without a UI Message Pump.
    http://crrev.com/98bb92d4f01372663087fca693c687b55a06c261
  * Cleaning up ScopedComInitializer to DCHECK on all DCHECK_IS_ON() builds
    instead of !NDEBUG and DCHECK_IS_ON().
    http://crrev.com/9666497883a375aae2ff5d8e1fb763810d09226b

This change routes the GetDxDiagnostics call into a COM STA Task
Runner before completing the RequestCompleteGpuInfo request on Windows.

To make this work with all platforms, the
RequestCompleteGpuInfoCallback is invoked asynchronously on the main
thread by UpdateGpuInfoPlatform.

BUG= 749309 

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: I69d5a784fa41896de8bb34d76ebd2f7931890f53
Reviewed-on: https://chromium-review.googlesource.com/590197
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Commit-Queue: Robert Liao <robliao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490596}
[modify] https://crrev.com/1214b5eb866cc5d40ed4aea19a499a036fee7858/gpu/config/gpu_dx_diagnostics_win.cc
[modify] https://crrev.com/1214b5eb866cc5d40ed4aea19a499a036fee7858/services/ui/gpu/gpu_service.cc
[modify] https://crrev.com/1214b5eb866cc5d40ed4aea19a499a036fee7858/services/ui/gpu/gpu_service.h

Status: Fixed (was: Assigned)
The bots seem to be reasonably satisfied with this change.

Sign in to add a comment