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

Issue 753640 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
OOO until 2019-01-24
Closed: Oct 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 2
Type: Feature


Sign in to add a comment

Add tests for multiple parallel snapshot requests

Project Member Reported by vmi...@chromium.org, Aug 9 2017

Issue description

We're missing tests that validate correct snapshot ordering in the case of having more than one outstanding snapshot from different renderers.

This is making it difficult to re-factor the snapshot related LatencyInfo code without risk of introducing regressions.
 

Comment 1 by kbr@chromium.org, Aug 9 2017

Components: Internals>GPU>Testing
Blocking: 753773

Comment 3 by kbr@chromium.org, Aug 19 2017

To clarify: this is intended to test RenderWidgetHostImpl::GetSnapshotFromBrowser, which inserts the BROWSER_SNAPSHOT_FRAME_NUMBER_COMPONENT component type into the LatencyInfo, which is what we're concerned about simplifying.

Comment 4 by kbr@chromium.org, Aug 30 2017

Cc: zmo@chromium.org vmi...@chromium.org
Have started writing these tests. Work in progress is here:
https://chromium-review.googlesource.com/636853

There is a layering violation which will need to be resolved before this can be put up for review.

Unfortunately, the multi-window test doesn't fail yet, even with this rebase of tdresser@'s patch applied:
https://chromium-review.googlesource.com/642517

Next step is to add another multi-window test which doesn't synchronize after updating all four windows.

Wasn't able to get even the single-window test to pass when passing false for the from_surface argument to RenderWidgetHostImpl::GetSnapshotFromBrowser. Not sure whether DevTools' wrapper for this API contains more synchronization, or whether our Telemetry-based tests are just slower.

Comment 5 by kbr@chromium.org, Sep 7 2017

Owner: tdres...@chromium.org
https://chromium-review.googlesource.com/636853 has been updated with a new test, SnapshotBrowserTest.AsyncMultiWindowTest, which attempts to pipeline the screenshot requests. It sets each window to a random color and requests a snapshot for each, but only periodically drains the event queue, so that the snapshot requests are queued up a bit.

There's a condition "if ((i % 2) == 0)" determining when to drain the event queue. If this is changed to "i % 1" then the test passes.

It looks like there's already a bug in the maintenance of LatencyInfo as it flows through the graphics pipeline and is used to resolve screenshot requests. Either that, or I'm misunderstanding the invariants and the test's wrong.

Could I please ask for a second set of eyes on the test? Tim, can I please assign this to you to get that second opinion? Please feel free to assign this bug back to me once you have. Thanks.

Note that the test can't land in its current form because it contains a layering violation. We'd have to expose RenderWidgetHostImpl::GetSnapshotFromBrowser in the content/ API.

Thanks for your work here!

Yup I'll take a look - it might not be until post BlinkOn though...


Comment 7 by kbr@chromium.org, Sep 15 2017

Blocking: 731202

Comment 8 by kbr@chromium.org, Sep 15 2017

Labels: OS-Linux OS-Mac OS-Windows
Owner: kbr@chromium.org
Status: Started (was: Assigned)
Giving this more thought, the bug was in the test. It has to assume that the last color each window was set to may be seen again in a subsequent snapshot request.

After fixing that, the AsyncMultiWindowTest passes -- but, more importantly, it hangs when https://chromium-review.googlesource.com/642517 is applied! So it catches the bug that CL would have introduced.

Taking this back and putting up https://chromium-review.googlesource.com/636853 for review, fixing the layering violations in the test.

Comment 9 by kbr@chromium.org, Sep 16 2017

Blocking: 754872
Cc: m...@chromium.org
While updating the test, and after updating my workspace, the following crash was seen in the AsyncMultiWindowTest:

[ RUN      ] SnapshotBrowserTest.AsyncMultiWindowTest
[77021:3843:0916/135326.778132:WARNING:notification_platform_bridge_mac.mm(521)] AlertNotificationService: XPC connection invalidated.
[77021:54019:0916/135328.049470:WARNING:simple_synchronous_entry.cc(1105)] Could not open platform files for entry.
[77021:92419:0916/135328.463309:WARNING:embedded_test_server.cc(229)] Request not handled. Returning 404: /favicon.ico
BrowserTestBase received signal: Segmentation fault: 11. Backtrace:
0   libbase.dylib                       0x000000011266371c base::debug::StackTrace::StackTrace(unsigned long) + 28
1   browser_tests                       0x000000010b6badf8 content::(anonymous namespace)::DumpStackTraceSignalHandler(int) + 200
2   libsystem_platform.dylib            0x00007fffae7dfb3a _sigtramp + 26
3   libbase.dylib                       0x000000011264b095 base::internal::LockImpl::Unlock() + 21
4   libcontent.dylib                    0x0000000119b3d883 content::RenderWidgetHostImpl::OnSnapshotFromSurfaceReceived(int, int, SkBitmap const&, content::ReadbackResponse) + 323
5   libcontent.dylib                    0x0000000119b417a1 void base::internal::Invoker<base::internal::BindState<void (content::RenderWidgetHostImpl::*)(int, int, SkBitmap const&, content::ReadbackResponse), base::WeakPtr<content::RenderWidgetHostImpl>, int, int>, void (SkBitmap const&, content::ReadbackResponse)>::RunImpl<void (content::RenderWidgetHostImpl::* const&)(int, int, SkBitmap const&, content::ReadbackResponse), std::__1::tuple<base::WeakPtr<content::RenderWidgetHostImpl>, int, int> const&, 0ul, 1ul, 2ul>(void (content::RenderWidgetHostImpl::* const&&&)(int, int, SkBitmap const&, content::ReadbackResponse), std::__1::tuple<base::WeakPtr<content::RenderWidgetHostImpl>, int, int> const&&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, SkBitmap const&, content::ReadbackResponse&&) + 209
6   libcontent.dylib                    0x0000000119d2bddc content::BrowserCompositorMac::CopyCompleted(base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, SkBitmap const&, content::ReadbackResponse) + 28
7   libcontent.dylib                    0x0000000119d2ce36 base::internal::Invoker<base::internal::BindState<void (*)(base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, SkBitmap const&, content::ReadbackResponse), base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> >, void (SkBitmap const&, content::ReadbackResponse)>::Run(base::internal::BindStateBase*, SkBitmap const&, content::ReadbackResponse&&) + 70
8   libcontent.dylib                    0x00000001197c9874 content::CopyFromCompositingSurfaceHasResult(gfx::Size const&, SkColorType, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::CopyOutputResult, std::__1::default_delete<viz::CopyOutputResult> >) + 100
9   libcontent.dylib                    0x0000000119b4c293 base::internal::Invoker<base::internal::BindState<void (*)(gfx::Size const&, SkColorType, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::CopyOutputResult, std::__1::default_delete<viz::CopyOutputResult> >), gfx::Size, SkColorType, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> >, void (std::__1::unique_ptr<viz::CopyOutputResult, std::__1::default_delete<viz::CopyOutputResult> >)>::RunOnce(base::internal::BindStateBase*, std::__1::unique_ptr<viz::CopyOutputResult, std::__1::default_delete<viz::CopyOutputResult> >&&) + 51
10  libviz_common.dylib                 0x000000011685575d viz::CopyOutputRequest::SendResult(std::__1::unique_ptr<viz::CopyOutputResult, std::__1::default_delete<viz::CopyOutputResult> >) + 381
11  libviz_common.dylib                 0x0000000116855579 viz::CopyOutputRequest::~CopyOutputRequest() + 73
12  libcc.dylib                         0x000000011652b17d cc::Layer::Inputs::~Inputs() + 77
13  libcc.dylib                         0x000000011652b72a cc::Layer::~Layer() + 458
14  libcc.dylib                         0x000000011654c4f1 cc::SurfaceLayer::~SurfaceLayer() + 161
15  libcc.dylib                         0x000000011654c51e cc::SurfaceLayer::~SurfaceLayer() + 14
16  libcompositor.dylib                 0x00000001182112f1 ui::Layer::~Layer() + 865
17  libcompositor.dylib                 0x000000011821197e ui::Layer::~Layer() + 14
18  libcontent.dylib                    0x0000000119d2b601 content::BrowserCompositorMac::~BrowserCompositorMac() + 177
19  libcontent.dylib                    0x0000000119d2bcae content::BrowserCompositorMac::~BrowserCompositorMac() + 14
20  libcontent.dylib                    0x0000000119b4f6a9 content::RenderWidgetHostViewMac::Destroy() + 281
21  libcontent.dylib                    0x0000000119b3144d content::RenderWidgetHostImpl::Destroy(bool) + 285
22  libcontent.dylib                    0x0000000119b32395 content::RenderWidgetHostImpl::ShutdownAndDestroyWidget(bool) + 165
23  libcontent.dylib                    0x0000000119b2e08b content::RenderViewHostImpl::ShutdownAndDestroy() + 123
24  libcontent.dylib                    0x00000001198c0843 content::FrameTree::ReleaseRenderViewHostRef(content::RenderViewHostImpl*) + 419
25  libcontent.dylib                    0x00000001198f03aa content::RenderFrameHostImpl::~RenderFrameHostImpl() + 1018
26  libcontent.dylib                    0x00000001198f0c8e content::RenderFrameHostImpl::~RenderFrameHostImpl() + 14
27  libcontent.dylib                    0x0000000119915542 content::RenderFrameHostManager::~RenderFrameHostManager() + 562
28  libcontent.dylib                    0x00000001198c2b12 content::FrameTreeNode::~FrameTreeNode() + 1234
29  libcontent.dylib                    0x00000001198bf6ae content::FrameTree::~FrameTree() + 30
30  libcontent.dylib                    0x0000000119c749d2 content::WebContentsImpl::~WebContentsImpl() + 3602
31  libcontent.dylib                    0x0000000119c750fe content::WebContentsImpl::~WebContentsImpl() + 14
32  browser_tests                       0x000000010c53e37c TabStripModel::InternalCloseTab(content::WebContents*, int, bool) + 252
33  browser_tests                       0x000000010c53b710 TabStripModel::InternalCloseTabs(std::__1::vector<int, std::__1::allocator<int> > const&, unsigned int) + 1760
34  browser_tests                       0x000000010c53b009 TabStripModel::CloseAllTabs() + 153
35  browser_tests                       0x000000010c6d15f2 -[BrowserWindowController windowShouldClose:] + 178
36  browser_tests                       0x000000010c6ce9ca BrowserWindowCocoa::Close() + 170
37  browser_tests                       0x000000010b40ed90 BrowserCloseManager::CloseBrowsers() + 240
38  browser_tests                       0x000000010b40efbe BrowserCloseManager::TryToCloseBrowsers() + 286
39  browser_tests                       0x000000010b10884a chrome::CloseAllBrowsers() + 58
40  browser_tests                       0x000000010b026595 -[AppController tryToTerminateApplication:] + 213
41  browser_tests                       0x000000010b108c85 chrome::AttemptExit() + 213
42  libbase.dylib                       0x000000011266405c base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) + 188
43  libbase.dylib                       0x00000001126a48f9 base::internal::IncomingTaskQueue::RunTask(base::PendingTask*) + 121
44  libbase.dylib                       0x00000001126a77f2 base::MessageLoop::RunTask(base::PendingTask*) + 434
45  libbase.dylib                       0x00000001126a804c base::MessageLoop::DoWork() + 700
46  libbase.dylib                       0x00000001126ac4ba base::MessagePumpCFRunLoopBase::RunWork() + 42
47  libbase.dylib                       0x000000011268ff6a base::mac::CallWithEHFrame(void () block_pointer) + 10
48  libbase.dylib                       0x00000001126abdaf base::MessagePumpCFRunLoopBase::RunWorkSource(void*) + 63
49  CoreFoundation                      0x00007fff98e70321 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
50  CoreFoundation                      0x00007fff98e5121d __CFRunLoopDoSources0 + 557
51  CoreFoundation                      0x00007fff98e50716 __CFRunLoopRun + 934
52  CoreFoundation                      0x00007fff98e50114 CFRunLoopRunSpecific + 420
53  HIToolbox                           0x00007fff983b0ebc RunCurrentEventLoopInMode + 240
54  HIToolbox                           0x00007fff983b0cf1 ReceiveNextEventCommon + 432
55  HIToolbox                           0x00007fff983b0b26 _BlockUntilNextEventMatchingListInModeWithFilter + 71
56  AppKit                              0x00007fff96949a54 _DPSNextEvent + 1120
57  AppKit                              0x00007fff970c57ee -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
58  browser_tests                       0x000000010b077b40 __71-[BrowserCrApplication nextEventMatchingMask:untilDate:inMode:dequeue:]_block_invoke + 64
59  libbase.dylib                       0x000000011268ff6a base::mac::CallWithEHFrame(void () block_pointer) + 10
60  browser_tests                       0x000000010b077a84 -[BrowserCrApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 164
61  AppKit                              0x00007fff9693e3db -[NSApplication run] + 926

This is probably a new crash introduced by https://chromium-review.googlesource.com/637003 . I'm going to try stop calling CopyOutputRequest callbacks from RenderWidgetHostImpl if the RenderWidgetHostImpl is in the process of destruction. Blocking  Issue 754872  on getting these tests in place.

Comment 10 by m...@chromium.org, Sep 18 2017

kbr: Thanks for the heads-up. Looks like the result callback (bound when CopyOutputRequest was created) is being run, but is trying to access something that isn't there anymore. There seems to be a chain of callbacks, but each is bound using a weak pointer to prevent this. Curious to find out what this was...

FWIW, a ton of the CopyFromCompositingSurface() and surface_utils.cc code is going away (any month now). I'm in the process of moving tab capture into VIZ, where I will need to add support for scaling to the CopyOutputRequests. So, a lot of complex client-side code can be greatly simplified as a result.

Comment 11 by kbr@chromium.org, Sep 20 2017

Cc: hubbe@chromium.org
I'm having difficulty with the new test in https://chromium-review.googlesource.com/636853 on Linux and Windows. It's a browser_test and the window's coming up black -- nothing rendered. I don't know the browser_tests harness well and don't know how to properly yield control back to the main loop in the middle of a test so that things like the browser's UI are redrawn. Could anyone offer some advice on that CL? Thanks.

Comment 12 by kbr@chromium.org, Sep 29 2017

Note: I received feedback offline about ensuring that rendering is enabled on Linux when running this test. Just getting back to it and haven't had a chance to do this yet.

In switching the test over to a content_browsertest the following crash was seen:

[ RUN      ] SnapshotBrowserTest.AsyncMultiWindowTest

(...snip...)
BrowserTestBase received signal: Segmentation fault: 11. Backtrace:
0   libbase.dylib                       0x000000010d28517c base::debug::StackTrace::StackTrace(unsigned long) + 28
1   content_browsertests                0x000000010b04f388 content::(anonymous namespace)::DumpStackTraceSignalHandler(int) + 200
2   libsystem_platform.dylib            0x00007fffae7dfb3a _sigtramp + 26
3   ???                                 0x0000000100000000 0x0 + 4294967296
4   libcontent.dylib                    0x000000010f14a191 void base::internal::Invoker<base::internal::BindState<void (content::RenderWidgetHostImpl::*)(int, int, SkBitmap const&, content::ReadbackResponse), base::WeakPtr<content::RenderWidgetHostImpl>, int, int>, void (SkBitmap const&, content::ReadbackResponse)>::RunImpl<void (content::RenderWidgetHostImpl::* const&)(int, int, SkBitmap const&, content::ReadbackResponse), std::__1::tuple<base::WeakPtr<content::RenderWidgetHostImpl>, int, int> const&, 0ul, 1ul, 2ul>(void (content::RenderWidgetHostImpl::* const&&&)(int, int, SkBitmap const&, content::ReadbackResponse), std::__1::tuple<base::WeakPtr<content::RenderWidgetHostImpl>, int, int> const&&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, SkBitmap const&, content::ReadbackResponse&&) + 209
5   libcontent.dylib                    0x000000010f33611c content::BrowserCompositorMac::CopyCompleted(base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, SkBitmap const&, content::ReadbackResponse) + 28
6   libcontent.dylib                    0x000000010f337176 base::internal::Invoker<base::internal::BindState<void (*)(base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, SkBitmap const&, content::ReadbackResponse), base::WeakPtr<content::BrowserCompositorMac>, base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> >, void (SkBitmap const&, content::ReadbackResponse)>::Run(base::internal::BindStateBase*, SkBitmap const&, content::ReadbackResponse&&) + 70
7   libcontent.dylib                    0x000000010edcc142 (anonymous namespace)::CopyFromCompositingSurfaceFinished(base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> >, std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> >, bool) + 114
8   libcontent.dylib                    0x000000010edcc400 void base::internal::Invoker<base::internal::BindState<void (*)(base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> >, std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> >, bool), base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)>, base::internal::PassedWrapper<std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> > >, base::internal::PassedWrapper<std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> > > >, void (bool)>::RunImpl<void (* const&)(base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> >, std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> >, bool), std::__1::tuple<base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)>, base::internal::PassedWrapper<std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> > >, base::internal::PassedWrapper<std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> > > > const&, 0ul, 1ul, 2ul>(void (* const&&&)(base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)> const&, std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> >, std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> >, bool), std::__1::tuple<base::RepeatingCallback<void (SkBitmap const&, content::ReadbackResponse)>, base::internal::PassedWrapper<std::__1::unique_ptr<viz::SingleReleaseCallback, std::__1::default_delete<viz::SingleReleaseCallback> > >, base::internal::PassedWrapper<std::__1::unique_ptr<SkBitmap, std::__1::default_delete<SkBitmap> > > > const&&&, std::__1::integer_sequence<unsigned long, 0ul, 1ul, 2ul>, bool&&) + 192
9   libviz_common.dylib                 0x00000001123d4c91 viz::GLHelper::CopyTextureToImpl::CancelRequests() + 161
10  libviz_common.dylib                 0x00000001123d4df5 viz::GLHelper::~GLHelper() + 101
11  libcontent.dylib                    0x000000010f32d097 content::GpuProcessTransportFactory::RemoveCompositor(ui::Compositor*) + 599
12  libcompositor.dylib                 0x000000010c97a65f ui::Compositor::~Compositor() + 719
13  libcontent.dylib                    0x000000010f334e16 content::RecyclableCompositorMac::~RecyclableCompositorMac() + 86
14  libcontent.dylib                    0x000000010f334eae content::RecyclableCompositorMac::~RecyclableCompositorMac() + 14
15  libcontent.dylib                    0x000000010f335f15 base::circular_deque<std::__1::unique_ptr<content::RecyclableCompositorMac, std::__1::default_delete<content::RecyclableCompositorMac> > >::clear() + 85
16  libcontent.dylib                    0x000000010f3359bf content::BrowserCompositorMac::~BrowserCompositorMac() + 303
17  libcontent.dylib                    0x000000010f335fee content::BrowserCompositorMac::~BrowserCompositorMac() + 14
18  libcontent.dylib                    0x000000010f1582d9 content::RenderWidgetHostViewMac::Destroy() + 281
19  libcontent.dylib                    0x000000010f144263 content::RenderWidgetHostImpl::RendererExited(base::TerminationStatus, int) + 259
20  libcontent.dylib                    0x000000010f134c1e non-virtual thunk to content::RenderViewHostImpl::RenderProcessExited(content::RenderProcessHost*, base::TerminationStatus, int) + 62
21  libcontent.dylib                    0x000000010f11d6ea content::RenderProcessHostImpl::ProcessDied(bool, content::RenderProcessHost::RendererClosedDetails*) + 682
22  libcontent.dylib                    0x000000010f11d398 content::RenderProcessHostImpl::FastShutdownIfPossible(unsigned long, bool) + 312
23  content_browsertests                0x000000010b03bbb5 content::ContentBrowserTest::PostRunTestOnMainThread() + 101
24  content_browsertests                0x000000010b04f0b3 content::BrowserTestBase::ProxyRunTestOnMainThreadLoop() + 435
25  content_browsertests                0x000000010b0e0529 content::ShellBrowserMainParts::PreMainMessageLoopRun() + 185
26  libcontent.dylib                    0x000000010ed6d6a3 content::BrowserMainLoop::PreMainMessageLoopRun() + 67
27  libcontent.dylib                    0x000000010f257627 content::StartupTaskRunner::RunAllTasksNow() + 39
28  libcontent.dylib                    0x000000010ed6bbbf content::BrowserMainLoop::CreateStartupTasks() + 687
29  libcontent.dylib                    0x000000010ed7038a content::BrowserMainRunnerImpl::Initialize(content::MainFunctionParams const&) + 650
30  content_browsertests                0x000000010b0dff50 ShellBrowserMain(content::MainFunctionParams const&, std::__1::unique_ptr<content::BrowserMainRunner, std::__1::default_delete<content::BrowserMainRunner> > const&) + 32
31  content_browsertests                0x000000010b0a2298 content::ShellMainDelegate::RunProcess(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&) + 168
32  libcontent.dylib                    0x000000010f7acebc content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) + 780
33  libcontent.dylib                    0x000000010f7ad7cf content::ContentMainRunnerImpl::Run() + 575
34  libembedder.dylib                   0x0000000113933725 service_manager::Main(service_manager::MainParams const&) + 2581
35  libcontent.dylib                    0x000000010f7acb84 content::ContentMain(content::ContentMainParams const&) + 68
36  content_browsertests                0x000000010b04ed23 content::BrowserTestBase::SetUp() + 2307
37  content_browsertests                0x000000010b03b9a6 content::ContentBrowserTest::SetUp() + 742
38  content_browsertests                0x000000010af8a8e1 testing::Test::Run() + 97
39  content_browsertests                0x000000010af8b350 testing::TestInfo::Run() + 288
40  content_browsertests                0x000000010af8b8b7 testing::TestCase::Run() + 263
41  content_browsertests                0x000000010af91b67 testing::internal::UnitTestImpl::RunAllTests() + 871
42  content_browsertests                0x000000010af917d3 testing::UnitTest::Run() + 163
43  content_browsertests                0x000000010b088b27 base::TestSuite::Run() + 167
44  content_browsertests                0x000000010b040a1a content::ContentTestLauncherDelegate::RunTestSuite(int, char**) + 42
45  content_browsertests                0x000000010b06e7ef content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) + 415
46  content_browsertests                0x000000010b0409c2 main + 66
47  libdyld.dylib                       0x00007fffae5d0235 start + 1


So the bypass I added to RenderWidgetHostImpl::OnSnapshotFromSurfaceReceived earlier isn't taking effect any more. I'll look into short-circuiting this new code path. Hoping to get this test landed shortly.

Project Member

Comment 13 by bugdroid1@chromium.org, Oct 2 2017

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

commit 05091caf5309b8ea216485a08aecc64fef75a528
Author: Kenneth Russell <kbr@chromium.org>
Date: Mon Oct 02 19:52:47 2017

Browser test verifying snapshots are properly synchronized.

This test is needed to prevent regressions in the handling of snapshot
requests as they propagate through Chrome's compositing pipeline.
These are currently transmitted in LatencyInfo, though there are
attempts underway to simplify them.

The new AsyncMultiWindowTest, in particular, catches a regression that
would otherwise have been introduced recently, and which is difficult
to provoke via the public DevTools API, due to the synchronous nature
of that API.

Bug:  753640 
Change-Id: Ieacf1e4e9c48d70e716b34d5c9ed73bc04ac5a70
Reviewed-on: https://chromium-review.googlesource.com/636853
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: John Abd-El-Malek <jam@chromium.org>
Cr-Commit-Position: refs/heads/master@{#505740}
[add] https://crrev.com/05091caf5309b8ea216485a08aecc64fef75a528/content/browser/snapshot_browsertest.cc
[modify] https://crrev.com/05091caf5309b8ea216485a08aecc64fef75a528/content/test/BUILD.gn

Comment 14 by kbr@chromium.org, Oct 2 2017

Status: Fixed (was: Started)
For the record:

1) The rendering problem on Linux was solved by calling content::BrowserTestBase::EnablePixelOutput() in the test.

2) The problem with the crashes upon teardown due to snapshot callbacks being called after compositor teardown was fixed in the AsyncMultiWindowTest itself by waiting to exit the test until all snapshots had been acquired.

Comment 15 by kbr@chromium.org, Oct 3 2017

Blocking: 771119

Comment 16 by kbr@chromium.org, Oct 7 2017

Blocking: 772650

Comment 17 by kbr@chromium.org, Oct 7 2017

Blocking: 772379

Sign in to add a comment