Add tests for multiple parallel snapshot requests |
||||||||||||
Issue descriptionWe'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.
,
Aug 9 2017
,
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.
,
Aug 30 2017
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.
,
Sep 7 2017
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.
,
Sep 7 2017
Thanks for your work here! Yup I'll take a look - it might not be until post BlinkOn though...
,
Sep 15 2017
,
Sep 15 2017
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.
,
Sep 16 2017
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.
,
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.
,
Sep 20 2017
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.
,
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.
,
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
,
Oct 2 2017
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.
,
Oct 3 2017
,
Oct 7 2017
,
Oct 7 2017
|
||||||||||||
►
Sign in to add a comment |
||||||||||||
Comment 1 by kbr@chromium.org
, Aug 9 2017