Let's figure out how window and display is initialized and communicate between browsers and gpu.
browser main:
WindowTreeHostPlatform::WindowTreeHostPlatform() create compositor
#1 0x579cec2edc93 ui::DrmWindowHost::Initialize()
#2 0x579cec2f0a89 ui::(anonymous namespace)::OzonePlatformGbm::CreatePlatformWindow()
#3 0x579cef317765 aura::WindowTreeHostPlatform::WindowTreeHostPlatform()
#4 0x579cf0035d4e ash::AshWindowTreeHostPlatform::AshWindowTreeHostPlatform()
#5 0x579cf0035cf6 ash::AshWindowTreeHost::Create()
#6 0x579cf002eb0c ash::WindowTreeHostManager::AddWindowTreeHostForDisplay()
#7 0x579cf002ea5c ash::WindowTreeHostManager::CreatePrimaryHost()
#8 0x579cf005521c ash::Shell::Init()
#9 0x579cf00548bb ash::Shell::CreateInstance()
#10 0x579cf04af66b AshInit::AshInit()
#11 0x579cf0332ac0 ChromeBrowserMainExtraPartsAsh::PreProfileInit()
#12 0x579cedcc415a ChromeBrowserMainParts::PreProfileInit()
#13 0x579cedcc51ed ChromeBrowserMainPartsLinux::PreProfileInit()
#14 0x579ced0fac95 chromeos::ChromeBrowserMainPartsChromeos::PreProfileInit()
#15 0x579cedcc3460 ChromeBrowserMainParts::PreMainMessageLoopRunImpl()
#16 0x579cedcc2dea ChromeBrowserMainParts::PreMainMessageLoopRun()
#17 0x579ced0fa73b chromeos::ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun()
#18 0x579cec857cde content::BrowserMainLoop::PreMainMessageLoopRun()
#19 0x579cecbbec87 content::StartupTaskRunner::RunAllTasksNow()
#20 0x579cec856209 content::BrowserMainLoop::CreateStartupTasks()
#21 0x579cec85a08b content::BrowserMainRunnerImpl::Initialize()
#22 0x579cec853754 content::BrowserMain()
#23 0x579cedc9830c content::ContentMainRunnerImpl::Run()
#24 0x579cedcba6bf service_manager::Main()
#25 0x579cedc971d1 content::ContentMain()
#26 0x579cec1805f5 ChromeMain
#27 0x7fd06bec9736 __libc_start_main
#28 0x579cec180439 _start
browser io: gpu process launched and post OnChannelEstablished()
#1 0x5c6ddd175d84 ui::DrmGpuPlatformSupportHost::OnGpuProcessLaunched()
#2 0x5c6ddd8331ff content::GpuProcessHost::Init()
#3 0x5c6ddd832c6b content::GpuProcessHost::Get()
#4 0x5c6ddd822443 content::BrowserGpuChannelHostFactory::EstablishRequest::EstablishOnIO()
#5 0x5c6ddee443f9 base::debug::TaskAnnotator::RunTask()
#6 0x5c6ddee5f7a7 base::MessageLoop::RunTask()
#7 0x5c6ddee5ffa6 base::MessageLoop::DoWork()
#8 0x5c6ddee61929 base::MessagePumpLibevent::Run()
#9 0x5c6ddee8256a base::RunLoop::Run()
#10 0x5c6ddd6efd08 content::BrowserThreadImpl::IOThreadRun()
#11 0x5c6ddd6efee4 content::BrowserThreadImpl::Run()
#12 0x5c6ddeeaa0ea base::Thread::ThreadMain()
#13 0x5c6ddeea507d base::(anonymous namespace)::ThreadFunc()
#14 0x7deb470612b8 <unknown>
#15 0x7deb45fa6fad clone
Browser main: send msg
send gfx::AcceleratedWidget to GPU
#1 0x5c3a3d50abbf ui::DrmGpuPlatformSupportHost::GpuCreateWindow()
#2 0x5c3a3d50e4c1 ui::DrmWindowHost::OnGpuThreadReady()
#3 0x5c3a3d508b21 ui::DrmGpuPlatformSupportHost::OnChannelEstablished()
#4 0x5c3a3f1d6b79 base::debug::TaskAnnotator::RunTask()
#5 0x5c3a3f1f1f27 base::MessageLoop::RunTask()
#6 0x5c3a3f1f2726 base::MessageLoop::DoWork()
#7 0x5c3a3f1f40a9 base::MessagePumpLibevent::Run()
#8 0x5c3a3f214cea base::RunLoop::Run()
#9 0x5c3a3eee4da8 ChromeBrowserMainParts::MainMessageLoopRun()
#10 0x5c3a3da780a4 content::BrowserMainLoop::RunMainMessageLoopParts()
#11 0x5c3a3da7a4d2 content::BrowserMainRunnerImpl::Run()
#12 0x5c3a3da739bc content::BrowserMain()
#13 0x5c3a3eeb855c content::ContentMainRunnerImpl::Run()
#14 0x5c3a3eeda90f service_manager::Main()
#15 0x5c3a3eeb7421 content::ContentMain()
#16 0x5c3a3d3a05f5 ChromeMain
#17 0x7c8875b13736 __libc_start_main
#18 0x5c3a3d3a0439 _start
(optional) browser main: request frame sink
#1 0x5b80ec851a69 content::GpuProcessTransportFactory::CreateLayerTreeFrameSink()
#2 0x5b80eef06be4 ui::Compositor::RequestNewLayerTreeFrameSink()
#3 0x5b80edb9e2b9 base::debug::TaskAnnotator::RunTask()
...
#1 0x576241ec5740 ui::DrmThreadMessageProxy::OnCreateWindow()
#2 0x576241ec55b0 _ZN3IPC8MessageTI29OzoneGpuMsg_CreateWindow_MetaSt5tupleIJiEEvE8DispatchIN2ui21DrmThreadMessageProxyES7_vMS7_FviEEEbPKNS_7MessageEPT_PT0_PT1_T2_
#3 0x576241ec53b2 ui::DrmThreadMessageProxy::OnMessageReceived()
#4 0x57624477a8bd IPC::MessageFilterRouter::TryFilters()
#5 0x57624476e27d IPC::ChannelProxy::Context::TryFilters()
#6 0x576244777ce7 IPC::SyncChannel::SyncContext::OnMessageReceived()
#7 0x57624476bd54 IPC::ChannelMojo::OnMessageReceived()
#8 0x576244770d1a IPC::internal::MessagePipeReader::Receive()
#9 0x57624477db8f IPC::mojom::ChannelStubDispatch::Accept()
#10 0x576244781738 mojo::InterfaceEndpointClient::HandleValidatedMessage()
#11 0x5762447738c4 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept()
#12 0x5762447809c2 mojo::Connector::ReadSingleMessage()
#13 0x576244781141 mojo::Connector::ReadAllAvailableMessages()
#14 0x576242226c12 mojo::SimpleWatcher::DiscardReadyState()
#15 0x57624477cf74 mojo::SimpleWatcher::OnHandleReady()
#16 0x57624477d1ef mojo::SimpleWatcher::Context::Notify()
#17 0x57624477c511 mojo::SimpleWatcher::Context::CallNotify()
#18 0x5762450365ac mojo::edk::Watch::InvokeCallback()
#19 0x576245033081 mojo::edk::RequestContext::~RequestContext()
#20 0x57624503c387 mojo::edk::NodeChannel::OnChannelMessage()
#21 0x57624503a91e mojo::edk::Channel::OnReadComplete()
#22 0x57624503d4dd mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking()
#23 0x576243bcdcc9 base::MessagePumpLibevent::OnLibeventNotification()
#24 0x576243c5827c event_base_loop
#25 0x576243bce013 base::MessagePumpLibevent::Run()
#26 0x576243beec7a base::RunLoop::Run()
#27 0x576243c167fa base::Thread::ThreadMain()
#28 0x576243c1178d base::(anonymous namespace)::ThreadFunc()
#29 0x7bda9f1f62b8 <unknown>
#30 0x7bda9e13bfad clone
#1 0x566919632b34 ui::DrmWindow::Initialize()
#2 0x56691962a6c5 ui::DrmThread::CreateWindow()
#3 0x56691b317929 base::debug::TaskAnnotator::RunTask()
#4 0x56691b332cd7 base::MessageLoop::RunTask()
#5 0x56691b3334d6 base::MessageLoop::DoWork()
#6 0x56691b334e59 base::MessagePumpLibevent::Run()
#7 0x56691b355a9a base::RunLoop::Run()
#8 0x56691b37d61a base::Thread::ThreadMain()
#9 0x56691b3785ad base::(anonymous namespace)::ThreadFunc()
#10 0x7cfdb079a2b8 <unknown>
#11 0x7cfdaf6dffad clone
#1 0x5c82c0b1075d ash::RootWindowController::CreateForSecondaryDisplay()
#2 0x5c82c0b005f5 ash::WindowTreeHostManager::OnDisplayAdded()
#3 0x5c82c0a8fab4 display::DisplayManager::NotifyDisplayAdded()
#4 0x5c82c0a8c1ae display::DisplayManager::UpdateDisplaysWith()
#5 0x5c82c0a8989c display::DisplayManager::OnNativeDisplaysChanged()
#6 0x5c82c0a7d268 display::DisplayChangeObserver::OnDisplayModeChanged()
#7 0x5c82c0a81e34 display::DisplayConfigurator::NotifyDisplayStateObservers()
#8 0x5c82c0a80662 display::DisplayConfigurator::OnConfigured()
#9 0x5c82c0a8721b display::UpdateDisplayConfigurationTask::OnStateEntered()
#10 0x5c82c0a9c9c8 display::ConfigureDisplaysTask::Run()
#11 0x5c82c0a9cccc display::ConfigureDisplaysTask::OnConfigured()
#12 0x5c82bcfcbb26 _ZN4base8internal7InvokerINS0_9BindStateINS_17RepeatingCallbackIFvbEEEJbEEEFvvEE3RunEPNS0_13BindStateBaseE
#13 0x5c82bec22ef9 base::debug::TaskAnnotator::RunTask()
#14 0x5c82bec3e2a7 base::MessageLoop::RunTask()
#15 0x5c82bec3eaa6 base::MessageLoop::DoWork()
#16 0x5c82bec40429 base::MessagePumpLibevent::Run()
#17 0x5c82bec6106a base::RunLoop::Run()
#18 0x5c82be931678 ChromeBrowserMainParts::MainMessageLoopRun()
#19 0x5c82bd525394 content::BrowserMainLoop::RunMainMessageLoopParts()
#20 0x5c82bd5277c2 content::BrowserMainRunnerImpl::Run()
#21 0x5c82bd520cac content::BrowserMain()
#22 0x5c82be904e2c content::ContentMainRunnerImpl::Run()
#23 0x5c82be9271df service_manager::Main()
#24 0x5c82be903cf1 content::ContentMain()
#25 0x5c82bce675e5 ChromeMain
Browser main:
content::GpuProcessTransportFactory::EstablishedGpuChannel() creates lots of objects.
e.g. context_provider, output_surface, vsync_callback, display
#1 0x57ab96a4e159 viz::Display::Initialize()
#2 0x57ab96a80760 viz::DirectLayerTreeFrameSink::BindToClient()
#3 0x57ab9632075e cc::LayerTreeHostImpl::InitializeRenderer()
#4 0x57ab96397fc8 cc::SingleThreadProxy::SetLayerTreeFrameSink()
#5 0x57ab9638ee0b cc::LayerTreeHost::SetLayerTreeFrameSink()
#6 0x57ab96a29db2 ui::Compositor::SetLayerTreeFrameSink()
#7 0x57ab94376c82 content::GpuProcessTransportFactory::EstablishedGpuChannel()
#8 0x57ab94378fab <void (content::GpuProcessTransportFactory::*)(base::WeakPtr<ui::Compositor>, bool, int, scoped_refptr<gpu::GpuChannelHost>), void>
#9 0x57ab94378ef7 <void (content::GpuProcessTransportFactory::*)(base::WeakPtr<ui::Compositor>, bool, int, scoped_refptr<gpu::GpuChannelHost>),
#10 0x57ab940a0fc9 content::BrowserGpuChannelHostFactory::EstablishGpuChannel()
#11 0x57ab94375aa5 content::GpuProcessTransportFactory::CreateLayerTreeFrameSink()
#12 0x57ab96a2aac4 ui::Compositor::RequestNewLayerTreeFrameSink()
#13 0x57ab956c2199 base::debug::TaskAnnotator::RunTask()
#14 0x57ab956dd547 base::MessageLoop::RunTask()
#15 0x57ab956ddd46 base::MessageLoop::DoWork()
#16 0x57ab956df6c9 base::MessagePumpLibevent::Run()
#17 0x57ab9570030a base::RunLoop::Run()
#18 0x57ab953d03c8 ChromeBrowserMainParts::MainMessageLoopRun()
#19 0x57ab93f636c4 content::BrowserMainLoop::RunMainMessageLoopParts()
#20 0x57ab93f65af2 content::BrowserMainRunnerImpl::Run()
#21 0x57ab93f5efdc content::BrowserMain()
#22 0x57ab953a3b7c content::ContentMainRunnerImpl::Run()
#23 0x57ab953c5f2f service_manager::Main()
#24 0x57ab953a2a41 content::ContentMain()
#25 0x57ab9388b5f5 ChromeMain
#26 0x7ab02bc5e736 __libc_start_main
#27 0x57ab9388b439 _start
Initialize Display and set HardwareDisplayController
#1 0x59381291a309 ui::DrmGpuPlatformSupportHost::GpuRefreshNativeDisplays()
#2 0x5938129162e6 ui::DrmDisplayHostManager::UpdateDisplays()
#3 0x5938165e6f12 display::UpdateDisplayConfigurationTask::Run()
#4 0x5938165e07be display::DisplayConfigurator::RunPendingConfiguration()
#5 0x59381464f893 base::Timer::RunScheduledTask()
#6 0x5938145e7199 base::debug::TaskAnnotator::RunTask()
#7 0x593814602547 base::MessageLoop::RunTask()
#8 0x593814602f5d base::MessageLoop::DoDelayedWork()
#9 0x59381460459d base::MessagePumpLibevent::Run()
#10 0x59381462530a base::RunLoop::Run()
#11 0x5938142f53c8 ChromeBrowserMainParts::MainMessageLoopRun()
#12 0x593812e886c4 content::BrowserMainLoop::RunMainMessageLoopParts()
#13 0x593812e8aaf2 content::BrowserMainRunnerImpl::Run()
#14 0x593812e83fdc content::BrowserMain()
#15 0x5938142c8b7c content::ContentMainRunnerImpl::Run()
#16 0x5938142eaf2f service_manager::Main()
#17 0x5938142c7a41 content::ContentMain()
#18 0x5938127b05f5 ChromeMain
#19 0x7ce475cef736 __libc_start_main
#20 0x5938127b0439 _start
GPU proxy thread: display
DrmThreadMessageProxy::OnRefreshNativeDisplays() calls DrmThread::RefreshNativeDisplays(), which calls DrmGpuDisplayManager::GetDisplays(), which creates DrmDisplay!!
#1 0x599d1901074b ui::DrmThreadMessageProxy::OnRefreshNativeDisplays()
#3 0x599d1900f406 ui::DrmThreadMessageProxy::OnMessageReceived()
#4 0x599d1b8c4e9d IPC::MessageFilterRouter::TryFilters()
#5 0x599d1b8b885d IPC::ChannelProxy::Context::TryFilters()
#6 0x599d1b8c22c7 IPC::SyncChannel::SyncContext::OnMessageReceived()
#7 0x599d1b8b6334 IPC::ChannelMojo::OnMessageReceived()
#8 0x599d1b8bb2fa IPC::internal::MessagePipeReader::Receive()
#9 0x599d1b8c816f IPC::mojom::ChannelStubDispatch::Accept()
#10 0x599d1b8cbd18 mojo::InterfaceEndpointClient::HandleValidatedMessage()
#11 0x599d1b8bdea4 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept()
#12 0x599d1b8cafa2 mojo::Connector::ReadSingleMessage()
#13 0x599d1b8cb721 mojo::Connector::ReadAllAvailableMessages()
#14 0x599d193711f2 mojo::SimpleWatcher::DiscardReadyState()
#15 0x599d1b8c7554 mojo::SimpleWatcher::OnHandleReady()
#16 0x599d1b8c77cf mojo::SimpleWatcher::Context::Notify()
#17 0x599d1b8c6af1 mojo::SimpleWatcher::Context::CallNotify()
#18 0x599d1c180b8c mojo::edk::Watch::InvokeCallback()
#19 0x599d1c17d661 mojo::edk::RequestContext::~RequestContext()
#20 0x599d1c186967 mojo::edk::NodeChannel::OnChannelMessage()
#21 0x599d1c184efe mojo::edk::Channel::OnReadComplete()
#22 0x599d1c187abd mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking()
#23 0x599d1ad182a9 base::MessagePumpLibevent::OnLibeventNotification()
#24 0x599d1ada285c event_base_loop
#25 0x599d1ad185f3 base::MessagePumpLibevent::Run()
#26 0x599d1ad3925a base::RunLoop::Run()
#27 0x599d1ad60dda base::Thread::ThreadMain()
#28 0x599d1ad5bd6d base::(anonymous namespace)::ThreadFunc()
#29 0x7ec3088e52b8 <unknown>
#30 0x7ec30782afad clone
GPU proxy thread: notify display changed to browser
#1 0x56c9c143ae40 ui::DrmThreadMessageProxy::OnRefreshNativeDisplaysCallback()
#2 0x56c9c143be03 _ZN4base8internal7InvokerINS0_9BindStateIMN2ui21DrmThreadMessageProxyEKFvSt6vectorISt10unique_ptrIN7display15DisplaySnapshotESt14default_deleteIS8_EESaISB_EEEJNS_7WeakPtrIS4_EEEEEFvSD_EE7RunOnceEPNS0_13BindStateBaseEOSD_
#3 0x56c9c143c0a2 _ZN4base8internal13FunctorTraitsINS_12OnceCallbackIFvSt6vectorISt10unique_ptrIN7display15DisplaySnapshotESt14default_deleteIS6_EESaIS9_EEEEEvE6InvokeISD_JSB_EEEvOT_DpOT0_
#4 0x56c9c3122fd9 base::debug::TaskAnnotator::RunTask()
#5 0x56c9c313e387 base::MessageLoop::RunTask()
#6 0x56c9c313eb86 base::MessageLoop::DoWork()
#7 0x56c9c3140509 base::MessagePumpLibevent::Run()
...
Browser main thread: notified
#1 0x592e868696f5 ui::DrmDisplayHostManager::GpuHasUpdatedNativeDisplays()
#2 0x592e8686b719 ui::DrmGpuPlatformSupportHost::OnUpdateNativeDisplays()
#3 0x592e8686b4ba ui::DrmGpuPlatformSupportHost::OnMessageReceivedForDrmDisplayHostManager()
#4 0x592e8686b425 ui::DrmGpuPlatformSupportHost::OnMessageReceived()
#5 0x592e88538ee9 base::debug::TaskAnnotator::RunTask()
#6 0x592e88554297 base::MessageLoop::RunTask()
#7 0x592e88554a96 base::MessageLoop::DoWork()
#8 0x592e88556419 base::MessagePumpLibevent::Run()
#9 0x592e8857705a base::RunLoop::Run()
#10 0x592e88247118 ChromeBrowserMainParts::MainMessageLoopRun()
#11 0x592e86dda414 content::BrowserMainLoop::RunMainMessageLoopParts()
#12 0x592e86ddc842 content::BrowserMainRunnerImpl::Run()
#13 0x592e86dd5d2c content::BrowserMain()
#14 0x592e8821a8cc content::ContentMainRunnerImpl::Run()
#15 0x592e8823cc7f service_manager::Main()
#16 0x592e88219791 content::ContentMain()
#17 0x592e867025f5 ChromeMain
#18 0x79eb1a903736 __libc_start_main
#19 0x592e86702439 _start
Browser main thread: notify
#1 0x5babbb7b26ba ui::DrmGpuPlatformSupportHost::GpuConfigureNativeDisplay()
#2 0x5babbb7ac7a5 ui::DrmDisplayHost::Configure()
#3 0x5babbf494b71 display::ConfigureDisplaysTask::Run()
#4 0x5babbf47f07f display::UpdateDisplayConfigurationTask::EnterState()
#5 0x5babbf47eddf display::UpdateDisplayConfigurationTask::OnDisplaysUpdated()
#6 0x5babbb7ae287 ui::DrmDisplayHostManager::RunUpdateDisplaysCallback()
#7 0x5babbd47ecd9 base::debug::TaskAnnotator::RunTask()
...
GPU drm thread
ui::ScreenManager::UpdateControllerToWindowMapping() executes actual modeset.
#1 0x58e5323b9a68 ui::DrmWindow::SetController()
#2 0x58e5323c7aa2 ui::ScreenManager::UpdateControllerToWindowMapping()
#3 0x58e5323c7b7d ui::ScreenManager::ConfigureDisplayController()
#4 0x58e5323ac74b ui::DrmDisplay::Configure()
#5 0x58e5323ae475 ui::DrmGpuDisplayManager::ConfigureDisplay()
#6 0x58e5323b0d1d ui::DrmThread::ConfigureNativeDisplay()
#7 0x58e5323b7443 base::internal::BindState<void (ui::DrmThread::*)(long, std::unique_ptr<display::DisplayMode, std::default_delete<display::DisplayMode> >, gfx::Point const&, base::OnceCallback<void (long, bool)>),...
#8 0x58e53409dc79 base::debug::TaskAnnotator::RunTask()
...
#1 0x58fc38f39df7 ui::DrmWindowProxy::SchedulePageFlip()
#2 0x58fc38f3ea9b ui::GbmSurfaceless::SubmitFrame()
#3 0x58fc38f3e999 ui::GbmSurfaceless::SwapCompleted()
#4 0x58fc38f3a547 _ZN4base8internal7InvokerINS0_9BindStateINS_12OnceCallbackIFvN3gfx10SwapResultEEEEJS5_EEEFvvEE7RunOnceEPNS0_13BindStateBaseE
#5 0x58fc3ac1db39 base::debug::TaskAnnotator::RunTask()
#6 0x58fc3ac38ee7 base::MessageLoop::RunTask()
#7 0x58fc3ac396e6 base::MessageLoop::DoWork()
#8 0x58fc3ac3a8aa base::MessagePumpDefault::Run()
#9 0x58fc3ac5bcaa base::RunLoop::Run()
#10 0x58fc3da004a3 content::GpuMain()
#11 0x58fc3a8ff51c content::ContentMainRunnerImpl::Run()
#12 0x58fc3a9218cf service_manager::Main()
#13 0x58fc3a8fe3e1 content::ContentMain()
#14 0x58fc38de75f5 ChromeMain
#15 0x78c4105e3736 __libc_start_main
#16 0x58fc38de7439 _start
GPU process:
PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable() callback
#1 0x58fc38f3a123 ui::DrmWindowProxy::GetVSyncParameters()
#2 0x58fc3b94afdd gpu::PassThroughImageTransportSurface::SendVSyncUpdateIfAvailable()
#3 0x58fc3b94a57c gpu::PassThroughImageTransportSurface::StartSwapBuffers()
#4 0x58fc3b94ab6d gpu::PassThroughImageTransportSurface::PostSubBufferAsync()
#5 0x58fc3e09f04e gpu::gles2::GLES2DecoderImpl::HandlePostSubBufferCHROMIUM()
#6 0x58fc3e0b1b67 gpu::gles2::GLES2DecoderImpl::DoCommandsImpl<>()
#7 0x58fc3e07fbd8 gpu::CommandBufferService::Flush()
#8 0x58fc3e1e99f1 gpu::GpuCommandBufferStub::OnAsyncFlush()
#9 0x58fc3e1e97db _ZN3IPC8MessageTI35GpuCommandBufferMsg_AsyncFlush_MetaSt5tupleIJijSt6vectorIN2ui11LatencyInfoESaIS5_EEEEvE8DispatchIN3gpu20GpuCommandBufferStubESC_vMSC_FvijRKS7_EEEbPKNS_7MessageEPT_PT0_PT1_T2_
#10 0x58fc3e1e84d3 gpu::GpuCommandBufferStub::OnMessageReceived()
#11 0x58fc3e1e3d60 gpu::GpuChannel::HandleMessageHelper()
#12 0x58fc3e1dd8fe gpu::GpuChannel::HandleMessage()
#13 0x58fc3e107c90 gpu::Scheduler::RunNextTask()
#14 0x58fc3ac1db39 base::debug::TaskAnnotator::RunTask()
...
GPU process: callback called like
void GpuCommandBufferStub::UpdateVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) {
Send(new GpuCommandBufferMsg_UpdateVSyncParameters(route_id_, timebase,
interval));
}
[16817:16817:0112/040212.105806:ERROR:gpu_command_buffer_stub.cc(384)] timebase:32344298644 bogo-microseconds interval:0.016666 s
[16817:16817:0112/040212.110003:ERROR:gpu_command_buffer_stub.cc(384)] timebase:32344299646 bogo-microseconds interval:0.011111 s
Browser: frame source got vsync
#1 0x55fc9b069180 viz::DelayBasedBeginFrameSource::OnUpdateVSyncParameters()
#2 0x55fc9b6f604a ui::Compositor::SetDisplayVSyncParameters()
#3 0x55fc98673274 gpu::CommandBufferProxyImpl::OnUpdateVSyncParameters()
#4 0x55fc98673135 _ZN3IPC8MessageTI46GpuCommandBufferMsg_UpdateVSyncParameters_MetaNSt3__15tupleIJN4base9TimeTicksENS4_9TimeDeltaEEEEvE8DispatchIN3gpu22CommandBufferProxyImplESB_vMSB_FvS5_S6_EEEbPKNS_7MessageEPT_PT0_PT1_T2_
#5 0x55fc98672624 gpu::CommandBufferProxyImpl::OnMessageReceived()
#6 0x55fc98678c9c _ZN4base8internal7InvokerINS0_9BindStateINS0_18IgnoreResultHelperIMN3IPC8ListenerEFbRKNS4_7MessageEEEEJNS_7WeakPtrIS5_EES6_EEEFvvEE3RunEPNS0_13BindStateBaseE
#7 0x55fc9a34b3b9 base::debug::TaskAnnotator::RunTask()
...
#19 0x55fc984ee655 ChromeMain
Browser: vsync observer is notified. e.g. DelegatedFrameHost, Exo
#1 0x5a97fdc73f20 content::DelegatedFrameHost::OnUpdateVSyncParameters()
#2 0x5a980037a3e3 ui::CompositorVSyncManager::NotifyObservers()
#3 0x5a98003791fd ui::Compositor::SetDisplayVSyncParameters()
...
how viz::Surface, cc::SurfaceLayer, OutputSurface, Overlay are associated
cc::SurfaceLayer got viz::SurfaceInfo
DelegatedFrameHost access Layer via render_widget_host_view_->window_->layer()
0 0x5b2868e33f2c base::debug::StackTrace::StackTrace()
#1 0x5b286c287343 cc::SurfaceLayer::SetPrimarySurfaceInfo()
#2 0x5b286a19fe80 ui::Layer::SetShowPrimarySurface()
#3 0x5b2867af0c2d content::DelegatedFrameHost::OnFirstSurfaceActivation()
#4 0x5b286a1be497 viz::HostFrameSinkManager::OnFirstSurfaceActivation()
#5 0x5b286a202923 viz::SurfaceManager::FirstSurfaceActivation()
#6 0x5b286a1fdcc0 viz::Surface::ActivateFrame()
#7 0x5b286a1fd534 viz::Surface::QueueFrame()
#8 0x5b286a1efe1d viz::CompositorFrameSinkSupport::SubmitCompositorFrame()
#9 0x5b2867af0965 content::DelegatedFrameHost::SubmitCompositorFrame()
#10 0x5b2867991b70 content::RenderWidgetHostViewAura::SubmitCompositorFrame()
#11 0x5b286798b64d content::RenderWidgetHostImpl::SubmitCompositorFrame()
#12 0x5b286745e865 viz::mojom::CompositorFrameSinkStubDispatch::Accept()
#13 0x5b2869a05358 mojo::InterfaceEndpointClient::HandleValidatedMessage()
#14 0x5b2869a0c117 mojo::internal::MultiplexRouter::ProcessIncomingMessage()
#15 0x5b2869a0b8ed mojo::internal::MultiplexRouter::Accept()
#16 0x5b2869a045e2 mojo::Connector::ReadSingleMessage()
#17 0x5b2869a04d61 mojo::Connector::ReadAllAvailableMessages()
#18 0x5b28674aa832 mojo::SimpleWatcher::DiscardReadyState()
#19 0x5b2869a00b94 mojo::SimpleWatcher::OnHandleReady()
#20 0x5b2868e34729 base::debug::TaskAnnotator::RunTask()
...
#34 0x5b2866ffe439 _start
#1 0x57f857bbdc59 viz::BufferQueue::BindFramebuffer()
#2 0x57f857ba3c8b viz::GLRenderer::BindFramebufferToOutputSurface()
#3 0x57f857bde395 viz::DirectRenderer::UseRenderPass()
#4 0x57f857bdda53 viz::DirectRenderer::DrawRenderPass()
#5 0x57f857bdd65b viz::DirectRenderer::DrawRenderPassAndExecuteCopyRequests()
#6 0x57f857bdd24f viz::DirectRenderer::DrawFrame()
#7 0x57f857b93355 viz::Display::DrawAndSwap()
#8 0x57f857b95264 viz::DisplayScheduler::DrawAndSwap()
#9 0x57f857b9437a viz::DisplayScheduler::OnBeginFrameDeadline()
#10 0x57f8567c4589 base::debug::TaskAnnotator::RunTask()
...
#24 0x57f854967499 _start
ScheduleBeginFrameDeadline() for various reasons.
[12032:12032:0209/102305.569078:ERROR:display_scheduler.cc(421)] ScheduleBeginFrameDeadline mode:kImmediate
#1 0x57307491bc89 viz::DisplayScheduler::ScheduleBeginFrameDeadline()
#2 0x57307491a4fd viz::DisplayScheduler::ProcessSurfaceDamage()
#3 0x57307491b2c4 viz::DisplayScheduler::OnSurfaceDamaged()
#4 0x57307495c5c4 viz::SurfaceManager::SurfaceModified()
#5 0x57307495c665 viz::SurfaceManager::SurfaceActivated()
#6 0x573074956744 viz::Surface::ActivateFrame()
#7 0x57307495605f viz::Surface::QueueFrame()
#8 0x57307494865f viz::CompositorFrameSinkSupport::SubmitCompositorFrame()
#9 0x57307494b48f viz::DirectLayerTreeFrameSink::SubmitCompositorFrame()
#10 0x5730741e8a7c cc::LayerTreeHostImpl::DrawLayers()
#11 0x5730742644a5 cc::SingleThreadProxy::DoComposite()
#12 0x573074264fb3 cc::SingleThreadProxy::ScheduledActionDrawIfPossible()
#13 0x573074272f44 cc::Scheduler::DrawIfPossible()
#14 0x573074270673 cc::Scheduler::ProcessScheduledActions()
#15 0x573074270380 cc::Scheduler::OnBeginImplFrameDeadline()
#16 0x573074272128 cc::Scheduler::BeginImplFrameWithDeadline()
#17 0x573074271d7a cc::Scheduler::OnBeginFrameDerivedImpl()
#18 0x57307427c1f3 viz::BeginFrameObserverBase::OnBeginFrame()
#19 0x57307427e428 viz::ExternalBeginFrameSource::OnBeginFrame()
#20 0x57307427d98c viz::DelayBasedBeginFrameSource::OnTimerTick()
#21 0x57307357b7d9 base::debug::TaskAnnotator::RunTask()
...
#33 0x57307174b995 ChromeMain
[12032:12032:0209/102309.411530:ERROR:display_scheduler.cc(421)] ScheduleBeginFrameDeadline mode:kLate
#1 0x57307491bc89 viz::DisplayScheduler::ScheduleBeginFrameDeadline()
#2 0x57307491a4fd viz::DisplayScheduler::ProcessSurfaceDamage()
#3 0x57307491b2c4 viz::DisplayScheduler::OnSurfaceDamaged()
#4 0x57307495c5c4 viz::SurfaceManager::SurfaceModified()
#5 0x5730749480b9 viz::CompositorFrameSinkSupport::DidNotProduceFrame()
#6 0x573074272ad5 cc::Scheduler::FinishImplFrame()
#7 0x573074270388 cc::Scheduler::OnBeginImplFrameDeadline()
#8 0x57307357b7d9 base::debug::TaskAnnotator::RunTask()
...
#20 0x57307174b995 ChromeMain
[12032:12032:0209/102309.623276:ERROR:display_scheduler.cc(421)] ScheduleBeginFrameDeadline mode:kLate
#1 0x57307491bc89 viz::DisplayScheduler::ScheduleBeginFrameDeadline()
#2 0x57307491af1e viz::DisplayScheduler::OnBeginFrameDerivedImpl()
#3 0x57307427c1f3 viz::BeginFrameObserverBase::OnBeginFrame()
#4 0x57307427d98c viz::DelayBasedBeginFrameSource::OnTimerTick()
#5 0x57307357b7d9 base::debug::TaskAnnotator::RunTask()
...
#17 0x57307174b995 ChromeMain
OnBeginFrameDeadline notify drawn to clients and overlay
#1 0x5ac508028fef viz::Surface::RunDrawCallback()
#2 0x5ac507fea7cc viz::Display::DrawAndSwap()
#3 0x5ac507feca84 viz::DisplayScheduler::DrawAndSwap()
#4 0x5ac507febb9a viz::DisplayScheduler::OnBeginFrameDeadline()
#5 0x5ac506c4d7d9 base::debug::TaskAnnotator::RunTask()
...
#17 0x5ac504e1d995 ChromeMain
#1 0x5ab9dba247c9 viz::OverlayStrategyFullscreen::Attempt()
#2 0x5ab9dba2406f viz::OverlayProcessor::ProcessForOverlays()
#3 0x5ab9dba20181 viz::DirectRenderer::DrawFrame()
#4 0x5ab9db9d6b74 viz::Display::DrawAndSwap()
#5 0x5ab9db9d8a84 viz::DisplayScheduler::DrawAndSwap()
#6 0x5ac507febb9a viz::DisplayScheduler::OnBeginFrameDeadline()
...
NOTE: in M61, OnBeginFrameDeadline() isn't called very consistently. We expect it's called right before page flip but it's very random now
in my 90Hz monitor which has 11ms interval,
// sometimes deadline is called ~1.5ms before commit. that's good
[11957:11957:0209/141806.394806:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141806.396256:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420
[11957:11957:0209/141806.405940:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141806.406611:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420
[11957:11957:0209/141806.416965:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141806.417803:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420
[11957:11957:0209/141806.428120:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
// sometimes deadline is called ~10ms before commit. that's baaad. deadline force the frame to display next frame lol
[11957:11957:0209/141910.375762:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141910.385293:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420
[11957:11957:0209/141910.385933:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141910.396480:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420
[11957:11957:0209/141910.397745:ERROR:display_scheduler.cc(473)] OnBeginFrameDeadline
[11996:12009:0209/141910.407497:ERROR:hardware_display_plane_manager_atomic.cc(92)] Commit this:0x37c3a7bb3420