[trace] cc and viz trace stack

Published: by Creative Commons Licence

  • Categories:
  • Tags:
LayerTreeHost的初始化
libcc.so!cc::Scheduler::PostPendingBeginFrameTask(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:293)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:869)
libcc.so!cc::Scheduler::Scheduler(cc::Scheduler * this, cc::SingleThreadProxy * client, const cc::SchedulerSettings & settings, int layer_tree_host_id, base::SingleThreadTaskRunner * task_runner, std::__Cr::unique_ptr<cc::CompositorTimingHistory, std::__Cr::default_delete<cc::CompositorTimingHistory> > compositor_timing_history) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:51)
libcc.so!cc::SingleThreadProxy::Start(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:86)
libcc.so!cc::LayerTreeHost::InitializeProxy(cc::LayerTreeHost * this, std::__Cr::unique_ptr<cc::Proxy, std::__Cr::default_delete<cc::Proxy> > proxy) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:187)
libcc.so!cc::LayerTreeHost::InitializeSingleThreaded(cc::LayerTreeHost * this, ui::Compositor * single_thread_client, scoped_refptr<base::SingleThreadTaskRunner> main_task_runner) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:160)
libcc.so!cc::LayerTreeHost::CreateSingleThreaded(ui::Compositor * single_thread_client, cc::LayerTreeHost::InitParams params) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:117)
libcompositor.so!ui::Compositor::Compositor(ui::Compositor * this, const viz::FrameSinkId & frame_sink_id, ui::InProcessContextFactory * context_factory, ui::InProcessContextFactory * context_factory_private, scoped_refptr<base::SingleThreadTaskRunner> task_runner, bool enable_pixel_canvas, bool use_external_begin_frame_control, bool force_software_compositor, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/compositor/compositor.cc:216)
libaura.so!std::__Cr::make_unique<ui::Compositor, viz::FrameSinkId const, ui::ContextFactory*&, ui::ContextFactoryPrivate*&, scoped_refptr<base::SingleThreadTaskRunner> const&, bool, bool&, bool&, char const*&>(const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args) (/media/keyou/dev2/chromium64/src/buildtools/third_party/libc++/trunk/include/memory:3043)
libaura.so!aura::WindowTreeHost::CreateCompositor(views::DesktopWindowTreeHostX11 * this, const viz::FrameSinkId & frame_sink_id, bool force_software_compositor, bool use_external_begin_frame_control, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/aura/window_tree_host.cc:430)
libviews.so!views::DesktopWindowTreeHostPlatform::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc:152)
libviews.so!views::DesktopWindowTreeHostLinux::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc:163)
libviews.so!views::DesktopWindowTreeHostX11::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc:96)
libviews.so!views::DesktopNativeWidgetAura::InitNativeWidget(views::DesktopNativeWidgetAura * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc:485)
libviews.so!views::Widget::Init(views::Widget * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/widget.cc:353)
main(int argc, char ** argv) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:222)

views控件的初始化
libcc.so!cc::Layer::Layer(cc::Layer * this) (/media/keyou/dev2/chromium64/src/cc/layers/layer.cc:141)
libcc.so!cc::PictureLayer::PictureLayer(cc::PictureLayer * this, ui::Layer * client) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:30)
libcc.so!cc::PictureLayer::Create(ui::Layer * client) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:27)
libcompositor.so!ui::Layer::CreateCcLayer(ui::Layer * this) (/media/keyou/dev2/chromium64/src/ui/compositor/layer.cc:1531)
libcompositor.so!ui::Layer::Layer(ui::Layer * this, ui::LayerType type) (/media/keyou/dev2/chromium64/src/ui/compositor/layer.cc:206)
libviews.so!std::__Cr::make_unique<ui::Layer, ui::LayerType&>(ui::LayerType & __args) (/media/keyou/dev2/chromium64/src/buildtools/third_party/libc++/trunk/include/memory:3043)
libviews.so!views::View::CreateLayer(views::MdTextButton * this, ui::LayerType layer_type) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2540)
libviews.so!views::View::SetPaintToLayer(views::MdTextButton * this, ui::LayerType layer_type) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:547)
libviews.so!views::MdTextButton::MdTextButton(views::MdTextButton * this, DemoViewsWidgetDelegateView * listener, int button_context) (/media/keyou/dev2/chromium64/src/ui/views/controls/button/md_text_button.cc:197)
libviews.so!views::MdTextButton::Create(DemoViewsWidgetDelegateView * listener, const base::string16 & text, int button_context) (/media/keyou/dev2/chromium64/src/ui/views/controls/button/md_text_button.cc:51)
DemoViewsWidgetDelegateView::InitShellWindow(DemoViewsWidgetDelegateView * this) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:95)
DemoViewsWidgetDelegateView::DemoViewsWidgetDelegateView(base::OnceCallback<void ()>)(DemoViewsWidgetDelegateView * this, base::OnceClosure on_close) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:84)
main(int argc, char ** argv) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:219)

widget的初始化
libcc.so!cc::Layer::Layer(cc::Layer * this) (/media/keyou/dev2/chromium64/src/cc/layers/layer.cc:141)
libcc.so!cc::Layer::Create() (/media/keyou/dev2/chromium64/src/cc/layers/layer.cc:116)
libcompositor.so!ui::Compositor::Compositor(ui::Compositor * this, const viz::FrameSinkId & frame_sink_id, ui::InProcessContextFactory * context_factory, ui::InProcessContextFactory * context_factory_private, scoped_refptr<base::SingleThreadTaskRunner> task_runner, bool enable_pixel_canvas, bool use_external_begin_frame_control, bool force_software_compositor, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/compositor/compositor.cc:92)
libaura.so!std::__Cr::make_unique<ui::Compositor, viz::FrameSinkId const, ui::ContextFactory*&, ui::ContextFactoryPrivate*&, scoped_refptr<base::SingleThreadTaskRunner> const&, bool, bool&, bool&, char const*&>(const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args) (/media/keyou/dev2/chromium64/src/buildtools/third_party/libc++/trunk/include/memory:3043)
libaura.so!aura::WindowTreeHost::CreateCompositor(views::DesktopWindowTreeHostX11 * this, const viz::FrameSinkId & frame_sink_id, bool force_software_compositor, bool use_external_begin_frame_control, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/aura/window_tree_host.cc:430)
libviews.so!views::DesktopWindowTreeHostPlatform::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc:152)
libviews.so!views::DesktopWindowTreeHostLinux::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc:163)
libviews.so!views::DesktopWindowTreeHostX11::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc:96)
libviews.so!views::DesktopNativeWidgetAura::InitNativeWidget(views::DesktopNativeWidgetAura * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc:485)
libviews.so!views::Widget::Init(views::Widget * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/widget.cc:353)
main(int argc, char ** argv) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:222)

-------------------------------

创建LayerTreeFrameSink,并初始化LayerTreeHostImpl
libcc.so!cc::LayerTreeFrameSink::BindToClient(viz::DirectLayerTreeFrameSink * this, cc::LayerTreeHostImpl * client) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_frame_sink.cc:74)
libservice.so!viz::DirectLayerTreeFrameSink::BindToClient(viz::DirectLayerTreeFrameSink * this, cc::LayerTreeHostImpl * client) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc:101)
libcc.so!cc::LayerTreeHostImpl::InitializeFrameSink(cc::LayerTreeHostImpl * this, viz::DirectLayerTreeFrameSink * layer_tree_frame_sink) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host_impl.cc:3488)
libcc.so!cc::SingleThreadProxy::SetLayerTreeFrameSink(cc::SingleThreadProxy * this, viz::DirectLayerTreeFrameSink * layer_tree_frame_sink) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:140)
libcc.so!cc::LayerTreeHost::SetLayerTreeFrameSink(cc::LayerTreeHost * this, std::__Cr::unique_ptr<cc::LayerTreeFrameSink, std::__Cr::default_delete<cc::LayerTreeFrameSink> > surface) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:487)
libcompositor.so!ui::Compositor::SetLayerTreeFrameSink(ui::Compositor * this, std::__Cr::unique_ptr<cc::LayerTreeFrameSink, std::__Cr::default_delete<cc::LayerTreeFrameSink> > layer_tree_frame_sink) (/media/keyou/dev2/chromium64/src/ui/compositor/compositor.cc:295)
ui::InProcessContextFactory::CreateLayerTreeFrameSink(ui::InProcessContextFactory * this, base::WeakPtr<ui::Compositor> compositor) (/media/keyou/dev2/chromium64/src/ui/compositor/test/in_process_context_factory.cc:306)
libcompositor.so!ui::Compositor::RequestNewLayerTreeFrameSink(ui::Compositor * this) (/media/keyou/dev2/chromium64/src/ui/compositor/compositor.cc:622)
libcc.so!cc::LayerTreeHost::RequestNewLayerTreeFrameSink(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:499)
libcc.so!cc::SingleThreadProxy::RequestNewLayerTreeFrameSink(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:120)

请求创建LayerTreeFrameSink
libcc.so!cc::SingleThreadProxy::ScheduleRequestNewLayerTreeFrameSink(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:657)
libcc.so!cc::SingleThreadProxy::ScheduledActionBeginLayerTreeFrameSinkCreation(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:928)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:852)
libcc.so!cc::Scheduler::SetVisible(cc::Scheduler * this, bool visible) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:82)
libcc.so!cc::SingleThreadProxy::SetVisible(cc::SingleThreadProxy * this, bool visible) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:111)
libcc.so!cc::LayerTreeHost::SetVisible(cc::LayerTreeHost * this, bool visible) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:669)
libcompositor.so!ui::Compositor::Compositor(ui::Compositor * this, const viz::FrameSinkId & frame_sink_id, ui::InProcessContextFactory * context_factory, ui::InProcessContextFactory * context_factory_private, scoped_refptr<base::SingleThreadTaskRunner> task_runner, bool enable_pixel_canvas, bool use_external_begin_frame_control, bool force_software_compositor, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/compositor/compositor.cc:232)
libaura.so!std::__Cr::make_unique<ui::Compositor, viz::FrameSinkId const, ui::ContextFactory*&, ui::ContextFactoryPrivate*&, scoped_refptr<base::SingleThreadTaskRunner> const&, bool, bool&, bool&, char const*&>(const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args, const char *& __args) (/media/keyou/dev2/chromium64/src/buildtools/third_party/libc++/trunk/include/memory:3043)
libaura.so!aura::WindowTreeHost::CreateCompositor(views::DesktopWindowTreeHostX11 * this, const viz::FrameSinkId & frame_sink_id, bool force_software_compositor, bool use_external_begin_frame_control, const char * trace_environment_name) (/media/keyou/dev2/chromium64/src/ui/aura/window_tree_host.cc:430)
libviews.so!views::DesktopWindowTreeHostPlatform::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_platform.cc:152)
libviews.so!views::DesktopWindowTreeHostLinux::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_linux.cc:163)
libviews.so!views::DesktopWindowTreeHostX11::Init(views::DesktopWindowTreeHostX11 * this, const views::Widget::InitParams & params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc:96)
libviews.so!views::DesktopNativeWidgetAura::InitNativeWidget(views::DesktopNativeWidgetAura * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc:485)
libviews.so!views::Widget::Init(views::Widget * this, views::Widget::InitParams params) (/media/keyou/dev2/chromium64/src/ui/views/widget/widget.cc:353)
main(int argc, char ** argv) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:222)

-----------------------------------

SingleThreadTaskGraphRunner中执行Raster操作,这会将DisplayItemList中保存的绘制操作执行真实的绘制,绘制到内存中,注意这里采用的是OnCopyRasterBufferProvider
libcc_paint.so!cc::PaintOpBuffer::Playback(const cc::PaintOpBuffer * this, SkCanvas * canvas, const cc::PlaybackParams & params, const std::__Cr::vector<unsigned long, std::__Cr::allocator<unsigned long> > * offsets) (/media/keyou/dev2/chromium64/src/cc/paint/paint_op_buffer.cc:2431)
libcc_paint.so!cc::DisplayItemList::Raster(const cc::DisplayItemList * this, SkCanvas * canvas, cc::(anonymous namespace)::DispatchingImageProvider * image_provider) (/media/keyou/dev2/chromium64/src/cc/paint/display_item_list.cc:81)
libcc.so!cc::RasterSource::PlaybackToCanvas(const cc::RasterSource * this, SkCanvas * raster_canvas, cc::(anonymous namespace)::DispatchingImageProvider * image_provider) (/media/keyou/dev2/chromium64/src/cc/raster/raster_source.cc:171)
libcc.so!cc::RasterSource::PlaybackToCanvas(const cc::RasterSource * this, SkCanvas * raster_canvas, const gfx::Size & content_size, const gfx::Rect & canvas_bitmap_rect, const gfx::Rect & canvas_playback_rect, const gfx::AxisTransform2d & raster_transform, const cc::RasterSource::PlaybackSettings & settings) (/media/keyou/dev2/chromium64/src/cc/raster/raster_source.cc:161)
libcc.so!cc::RasterBufferProvider::PlaybackToMemory(void * memory, viz::ResourceFormat format, const gfx::Size & size, size_t stride, const cc::RasterSource * raster_source, const gfx::Rect & canvas_bitmap_rect, const gfx::Rect & canvas_playback_rect, const gfx::AxisTransform2d & transform, const gfx::ColorSpace & target_color_space, bool gpu_compositing, const cc::RasterSource::PlaybackSettings & playback_settings) (/media/keyou/dev2/chromium64/src/cc/raster/raster_buffer_provider.cc:107)
libcc.so!cc::OneCopyRasterBufferProvider::PlaybackToStagingBuffer(cc::OneCopyRasterBufferProvider * this, cc::StagingBuffer * staging_buffer, const cc::RasterSource * raster_source, const gfx::Rect & raster_full_rect, const gfx::Rect & raster_dirty_rect, const gfx::AxisTransform2d & transform, viz::ResourceFormat format, const gfx::ColorSpace & dst_color_space, const cc::RasterSource::PlaybackSettings & playback_settings, uint64_t previous_content_id, uint64_t new_content_id) (/media/keyou/dev2/chromium64/src/cc/raster/one_copy_raster_buffer_provider.cc:347)
libcc.so!cc::OneCopyRasterBufferProvider::PlaybackAndCopyOnWorkerThread(cc::OneCopyRasterBufferProvider * this, gpu::Mailbox * mailbox, GLenum mailbox_texture_target, bool mailbox_texture_is_overlay_candidate, const gpu::SyncToken & sync_token, const cc::RasterSource * raster_source, const gfx::Rect & raster_full_rect, const gfx::Rect & raster_dirty_rect, const gfx::AxisTransform2d & transform, const gfx::Size & resource_size, viz::ResourceFormat resource_format, const gfx::ColorSpace & color_space, const cc::RasterSource::PlaybackSettings & playback_settings, uint64_t previous_content_id, uint64_t new_content_id) (/media/keyou/dev2/chromium64/src/cc/raster/one_copy_raster_buffer_provider.cc:270)
libcc.so!cc::OneCopyRasterBufferProvider::RasterBufferImpl::Playback(cc::OneCopyRasterBufferProvider::RasterBufferImpl * this, const cc::RasterSource * raster_source, const gfx::Rect & raster_full_rect, const gfx::Rect & raster_dirty_rect, uint64_t new_content_id, const gfx::AxisTransform2d & transform, const cc::RasterSource::PlaybackSettings & playback_settings, const GURL & url) (/media/keyou/dev2/chromium64/src/cc/raster/one_copy_raster_buffer_provider.cc:118)
libcc.so!cc::(anonymous namespace)::RasterTaskImpl::RunOnWorkerThread(cc::(anonymous namespace)::RasterTaskImpl * this) (/media/keyou/dev2/chromium64/src/cc/tiles/tile_manager.cc:125)
libcc.so!cc::SingleThreadTaskGraphRunner::RunTaskWithLockAcquired(cc::TestTaskGraphRunner * this) (/media/keyou/dev2/chromium64/src/cc/raster/single_thread_task_graph_runner.cc:154)
libcc.so!cc::SingleThreadTaskGraphRunner::Run(cc::TestTaskGraphRunner * this) (/media/keyou/dev2/chromium64/src/cc/raster/single_thread_task_graph_runner.cc:117)
libbase.so!base::DelegateSimpleThread::Run(base::DelegateSimpleThread * this) (/media/keyou/dev2/chromium64/src/base/threading/simple_thread.cc:98)
libbase.so!base::SimpleThread::ThreadMain(base::DelegateSimpleThread * this) (/media/keyou/dev2/chromium64/src/base/threading/simple_thread.cc:75)
libbase.so!base::(anonymous namespace)::ThreadFunc(void * params) (/media/keyou/dev2/chromium64/src/base/threading/platform_thread_posix.cc:81)
libpthread.so.0!start_thread (Unknown Source:0)
libc.so.6!clone (Unknown Source:0)

添加清理Raster使用的内存的task
libgpu.so!gpu::Scheduler::ScheduleTaskHelper(gpu::Scheduler * this, gpu::Scheduler::Task task) (/media/keyou/dev2/chromium64/src/gpu/command_buffer/service/scheduler.cc:386)
libgpu.so!gpu::Scheduler::ScheduleTask(gpu::Scheduler * this, gpu::Scheduler::Task task) (/media/keyou/dev2/chromium64/src/gpu/command_buffer/service/scheduler.cc:376)
libgl_in_process_context.so!gpu::SchedulerSequence::ScheduleOrRetainTask(base::OnceCallback<void ()>, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> >)(gpu::SchedulerSequence * this, base::OnceClosure task, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> > sync_token_fences) (/media/keyou/dev2/chromium64/src/gpu/ipc/scheduler_sequence.cc:86)
libgl_in_process_context.so!gpu::SchedulerSequence::ScheduleTask(base::OnceCallback<void ()>, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> >)(gpu::SchedulerSequence * this, base::OnceClosure task, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> > sync_token_fences) (/media/keyou/dev2/chromium64/src/gpu/ipc/scheduler_sequence.cc:80)
libgl_in_process_context.so!gpu::InProcessCommandBuffer::ScheduleGpuTask(base::OnceCallback<void ()>, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> >)(gpu::InProcessCommandBuffer * this, base::OnceClosure task, std::__Cr::vector<gpu::SyncToken, std::__Cr::allocator<gpu::SyncToken> > sync_token_fences) (/media/keyou/dev2/chromium64/src/gpu/ipc/in_process_command_buffer.cc:958)
libgl_in_process_context.so!gpu::InProcessCommandBuffer::SharedImageInterface::DestroySharedImage(gpu::InProcessCommandBuffer::SharedImageInterface * this, const gpu::SyncToken & sync_token, const gpu::Mailbox & mailbox) (/media/keyou/dev2/chromium64/src/gpu/ipc/in_process_command_buffer.cc:279)
libcc.so!cc::StagingBuffer::DestroyGLResources(cc::StagingBuffer * this, gpu::raster::RasterImplementationGLES * ri, gpu::InProcessCommandBuffer::SharedImageInterface * sii) (/media/keyou/dev2/chromium64/src/cc/raster/staging_buffer_pool.cc:85)
libcc.so!cc::StagingBufferPool::ReleaseBuffersNotUsedSince(cc::StagingBufferPool * this, base::TimeTicks time) (/media/keyou/dev2/chromium64/src/cc/raster/staging_buffer_pool.cc:421)
libcc.so!cc::StagingBufferPool::ReduceMemoryUsage(cc::StagingBufferPool * this) (/media/keyou/dev2/chromium64/src/cc/raster/staging_buffer_pool.cc:374)
libcc.so!base::internal::FunctorTraits<void (cc::StagingBufferPool::*)(), void>::Invoke<void (cc::StagingBufferPool::*)(), base::WeakPtr<cc::StagingBufferPool> const&>(void (cc::StagingBufferPool::*)(cc::StagingBufferPool * const) method, const base::WeakPtr<cc::StagingBufferPool> & receiver_ptr) (/media/keyou/dev2/chromium64/src/base/bind_internal.h:498)
libcc.so!base::internal::InvokeHelper<true, void>::MakeItSo<void (cc::StagingBufferPool::* const&)(), base::WeakPtr<cc::StagingBufferPool> const&>(void (cc::StagingBufferPool::*&)(cc::StagingBufferPool * const) functor, const base::WeakPtr<cc::StagingBufferPool> & weak_ptr) (/media/keyou/dev2/chromium64/src/base/bind_internal.h:618)
libcc.so!base::internal::Invoker<base::internal::BindState<void (cc::StagingBufferPool::*)(), base::WeakPtr<cc::StagingBufferPool> >, void ()>::RunImpl<void (cc::StagingBufferPool::* const&)(), std::__Cr::tuple<base::WeakPtr<cc::StagingBufferPool> > const&, 0ul>(void (cc::StagingBufferPool::* const&)(), std::__Cr::tuple<base::WeakPtr<cc::StagingBufferPool> > const&, std::__Cr::integer_sequence<unsigned long, 0ul>)(void (cc::StagingBufferPool::*&)(cc::StagingBufferPool * const) functor, const std::__Cr::tuple<base::WeakPtr<cc::StagingBufferPool> > & bound) (/media/keyou/dev2/chromium64/src/base/bind_internal.h:671)
libcc.so!base::internal::Invoker<base::internal::BindState<void (cc::StagingBufferPool::*)(), base::WeakPtr<cc::StagingBufferPool> >, void ()>::Run(base::internal::BindStateBase*)(base::internal::BindStateBase * base) (/media/keyou/dev2/chromium64/src/base/bind_internal.h:653)
libbase.so!base::OnceCallback<void ()>::Run() &&(base::OnceCallback<void ()> * this) (/media/keyou/dev2/chromium64/src/base/callback.h:98)
libbase.so!base::TaskAnnotator::RunTask(base::TaskAnnotator * this, const char * trace_event_name, base::PendingTask * pending_task) (/media/keyou/dev2/chromium64/src/base/task/common/task_annotator.cc:142)
libbase.so!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl * this, base::sequence_manager::LazyNow * continuation_lazy_now, bool * ran_task) (/media/keyou/dev2/chromium64/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:365)
libbase.so!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork(base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl * this) (/media/keyou/dev2/chromium64/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:219)
libbase.so!non-virtual thunk to base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork() (Unknown Source:0)
libbase.so!base::MessagePumpGlib::Run(base::MessagePumpGlib * this, base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl * delegate) (/media/keyou/dev2/chromium64/src/base/message_loop/message_pump_glib.cc:441)
libbase.so!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl * this, bool application_tasks_allowed, base::TimeDelta timeout) (/media/keyou/dev2/chromium64/src/base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:463)

----------------------------------


--------------------------------

执行 commit:  LayerTreeHost 的数据commit LayerTreeHostImpl,Layer同步到LayerImpl
libcc.so!cc::PictureLayer::PushPropertiesTo(cc::PictureLayer * this, cc::PictureLayerImpl * base_layer) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:52)
libcc.so!cc::PushLayerPropertiesInternal<std::__Cr::__wrap_iter<cc::Layer**> >(std::__Cr::__wrap_iter<cc::Layer**> source_layers_begin, std::__Cr::__wrap_iter<cc::Layer**> source_layers_end, cc::LayerTreeHost * host_tree, cc::LayerTreeImpl * target_impl_tree) (/media/keyou/dev2/chromium64/src/cc/trees/tree_synchronizer.cc:172)
libcc.so!cc::TreeSynchronizer::PushLayerProperties(cc::LayerTreeHost * host_tree, cc::LayerTreeImpl * impl_tree) (/media/keyou/dev2/chromium64/src/cc/trees/tree_synchronizer.cc:206)
libcc.so!cc::LayerTreeHost::FinishCommitOnImplThread(cc::LayerTreeHost * this, cc::LayerTreeHostImpl * host_impl) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:343)
libcc.so!cc::SingleThreadProxy::DoCommit(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:196)
libcc.so!cc::SingleThreadProxy::ScheduledActionCommit(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:912)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:821)
libcc.so!cc::Scheduler::NotifyReadyToCommit(cc::Scheduler * this, std::__Cr::unique_ptr<cc::BeginMainFrameMetrics, std::__Cr::default_delete<cc::BeginMainFrameMetrics> > details) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:179)
libcc.so!cc::SingleThreadProxy::DoPainting(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:877)
libcc.so!cc::SingleThreadProxy::BeginMainFrame(cc::SingleThreadProxy * this, const viz::BeginFrameArgs & begin_frame_args) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:848)


绘制views
DemoViewsWidgetDelegateView::OnPaint(DemoViewsWidgetDelegateView * this, gfx::Canvas * canvas) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:124)
libviews.so!views::View::Paint(DemoViewsWidgetDelegateView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:999)
libviews.so!views::View::RecursivePaintHelper(views::ClientView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::ClientView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::ClientView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::RecursivePaintHelper(views::NonClientView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::NonClientView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::NonClientView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::RecursivePaintHelper(views::internal::RootView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::internal::RootView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::internal::RootView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::PaintFromPaintRoot(views::internal::RootView * this, const ui::PaintContext & parent_context) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2101)
libviews.so!views::Widget::OnNativeWidgetPaint(views::Widget * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/views/widget/widget.cc:1232)
libviews.so!views::DesktopNativeWidgetAura::OnPaint(views::DesktopNativeWidgetAura * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc:1077)
libaura.so!aura::Window::Paint(aura::Window * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/aura/window.cc:916)
libaura.so!aura::Window::OnPaintLayer(aura::Window * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/aura/window.cc:1297)
libcompositor.so!ui::Layer::PaintContentsToDisplayList(ui::Layer * this, cc::ContentLayerClient::PaintingControlSetting painting_control) (/media/keyou/dev2/chromium64/src/ui/compositor/layer.cc:1258)
libcompositor.so!non-virtual thunk to ui::Layer::PaintContentsToDisplayList(cc::ContentLayerClient::PaintingControlSetting) (Unknown Source:0)
libcc.so!cc::PictureLayer::Update(cc::PictureLayer * this) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:140)
libcc.so!cc::LayerTreeHost::PaintContent(cc::LayerTreeHost * this, const cc::LayerList & update_layer_list) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:1403)
libcc.so!cc::LayerTreeHost::DoUpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:834)
libcc.so!cc::LayerTreeHost::UpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:703)
libcc.so!cc::SingleThreadProxy::DoPainting(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:871)
libcc.so!cc::SingleThreadProxy::BeginMainFrame(cc::SingleThreadProxy * this, const viz::BeginFrameArgs & begin_frame_args) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:848)

BFS驱动supoort,support转发给LayerTreeFrameSink,LayerTreeFrameSink将该事件通过ExternalBegainFrameSource转发给Scheduler,Scheduler根据情况Post异步BeginMainFrame请求
libcc.so!cc::SingleThreadProxy::ScheduledActionSendBeginMainFrame(cc::SingleThreadProxy * this, const viz::BeginFrameArgs & begin_frame_args) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:769)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:803)
libcc.so!cc::Scheduler::BeginImplFrame(cc::Scheduler * this, const viz::BeginFrameArgs & args, base::TimeTicks now) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:629)
libcc.so!cc::Scheduler::BeginImplFrameWithDeadline(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:552)
libcc.so!cc::Scheduler::OnBeginFrameDerivedImpl(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:385)
libviz_common.so!viz::BeginFrameObserverBase::OnBeginFrame(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:93)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(cc::Scheduler * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::ExternalBeginFrameSource::OnBeginFrame(viz::ExternalBeginFrameSource * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:465)
libservice.so!viz::DirectLayerTreeFrameSink::OnBeginFrame(viz::DirectLayerTreeFrameSink * this, const viz::BeginFrameArgs & args, const viz::FrameTimingDetailsMap & timing_details) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc:321)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::OnTimerTick(viz::DelayBasedBeginFrameSource * this) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:349)
libviz_common.so!viz::DelayBasedTimeSource::OnTimerTick(viz::DelayBasedTimeSource * this) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/delay_based_time_source.cc:77)

----------------------------------

提交CFsupport
libservice.so!viz::CompositorFrameSinkSupport::SubmitCompositorFrame(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:357)
libservice.so!viz::DirectLayerTreeFrameSink::SubmitCompositorFrame(viz::DirectLayerTreeFrameSink * this, viz::CompositorFrame frame, bool hit_test_data_changed, bool show_hit_test_borders) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc:184)
libcc.so!cc::LayerTreeHostImpl::DrawLayers(cc::LayerTreeHostImpl * this, cc::LayerTreeHostImpl::FrameData * frame) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host_impl.cc:2294)
libcc.so!cc::SingleThreadProxy::DoComposite(cc::SingleThreadProxy * this, cc::LayerTreeHostImpl::FrameData * frame) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:691)
libcc.so!cc::SingleThreadProxy::ScheduledActionDrawIfPossible(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:902)
libcc.so!cc::Scheduler::DrawIfPossible(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:732)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:838)
libcc.so!cc::Scheduler::OnBeginImplFrameDeadline(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:720)

发起OnBeginImplFrameDeadline请求,注意 ScheduleBeginImplFrameDeadline 是在每次 ProcessScheduledActions 时都会检测的
libcc.so!cc::Scheduler::ScheduleBeginImplFrameDeadline(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:702)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:867)
libcc.so!cc::Scheduler::OnBeginFrameDerivedImpl(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:379)
libviz_common.so!viz::BeginFrameObserverBase::OnBeginFrame(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:93)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(cc::Scheduler * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::ExternalBeginFrameSource::OnBeginFrame(viz::ExternalBeginFrameSource * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:465)
libservice.so!viz::DirectLayerTreeFrameSink::OnBeginFrame(viz::DirectLayerTreeFrameSink * this, const viz::BeginFrameArgs & args, const viz::FrameTimingDetailsMap & timing_details) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/direct_layer_tree_frame_sink.cc:321)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::OnTimerTick(viz::DelayBasedBeginFrameSource * this) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:349)
libviz_common.so!viz::DelayBasedTimeSource::OnTimerTick(viz::DelayBasedTimeSource * this) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/delay_based_time_source.cc:77)

======================================================
demo_cc_offscreen

 cc::Scheduler  support 加入 BFS  Observer,并触发第一个 OnBeginFrame
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:782)
libcc.so!cc::Scheduler::OnBeginFrameDerivedImpl(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:379)
libviz_common.so!viz::BeginFrameObserverBase::OnBeginFrame(cc::Scheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:93)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(cc::Scheduler * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::ExternalBeginFrameSource::OnBeginFrame(viz::ExternalBeginFrameSource * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:465)
demo::OffscreenLayerTreeFrameSink::OnBeginFrame(demo::OffscreenLayerTreeFrameSink * this, const viz::BeginFrameArgs & args, const base::flat_map<unsigned int, viz::FrameTimingDetails, std::__Cr::less<void> > & details) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:274)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:319)
libservice.so!viz::CompositorFrameSinkSupport::UpdateNeedsBeginFramesInternal(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:704)
libservice.so!viz::CompositorFrameSinkSupport::SetNeedsBeginFrame(viz::CompositorFrameSinkSupport * this, bool needs_begin_frame) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:316)
demo::OffscreenLayerTreeFrameSink::OnNeedsBeginFrames(demo::OffscreenLayerTreeFrameSink * this, bool needs_begin_frames) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:257)
libviz_common.so!viz::ExternalBeginFrameSource::AddObserver(viz::ExternalBeginFrameSource * this, cc::Scheduler * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:398)
libcc.so!cc::Scheduler::StartOrStopBeginFrames(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:266)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:870)
libcc.so!cc::Scheduler::DidCreateAndInitializeLayerTreeFrameSink(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:223)
libcc.so!cc::SingleThreadProxy::SetLayerTreeFrameSink(cc::SingleThreadProxy * this, demo::OffscreenLayerTreeFrameSink * layer_tree_frame_sink) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:147)
libcc.so!cc::LayerTreeHost::SetLayerTreeFrameSink(cc::LayerTreeHost * this, std::__Cr::unique_ptr<cc::LayerTreeFrameSink, std::__Cr::default_delete<cc::LayerTreeFrameSink> > surface) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:487)
demo::Compositor::RequestNewLayerTreeFrameSink(demo::Compositor * this) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:388)
libcc.so!cc::LayerTreeHost::RequestNewLayerTreeFrameSink(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:499)
libcc.so!cc::SingleThreadProxy::RequestNewLayerTreeFrameSink(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:120)

Display显示完一帧后执行回调,并通知Scheduler
libcc.so!cc::Scheduler::DidReceiveCompositorFrameAck(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:159)
libcc.so!cc::SingleThreadProxy::DidReceiveCompositorFrameAckOnImplThread(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:495)
libcc.so!cc::LayerTreeHostImpl::DidReceiveCompositorFrameAck(cc::LayerTreeHostImpl * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host_impl.cc:2010)
demo::OffscreenLayerTreeFrameSink::DidReceiveCompositorFrameAckInternal(demo::OffscreenLayerTreeFrameSink * this, const std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > & resources) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:297)
+
demo::OffscreenLayerTreeFrameSink::DidReceiveCompositorFrameAck(demo::OffscreenLayerTreeFrameSink * this, const std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > & resources) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:287)
libservice.so!viz::CompositorFrameSinkSupport::DidReceiveCompositorFrameAck(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:589)
libservice.so!viz::CompositorFrameSinkSupport::OnSurfaceProcessed(viz::CompositorFrameSinkSupport * this, viz::Surface * surface) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:187)
libservice.so!viz::Surface::SendAckToClient(viz::Surface * this) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface.cc:611)
libservice.so!viz::Display::RunDrawCallbacks(viz::Display * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:1014)
libservice.so!viz::Display::DrawAndSwap(viz::Display * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:526)
libservice.so!viz::DisplayScheduler::DrawAndSwap(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:215)
libservice.so!viz::DisplayScheduler::AttemptDrawAndSwap(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:488)
libservice.so!viz::DisplayScheduler::OnBeginFrameDeadline(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:504)

每次Schduler的调度都会检查

Scheduler触发了MainFrame请求后,主线程执行绘制操作
demo::Layer::PaintContentsToDisplayList(demo::Layer * this, cc::ContentLayerClient::PaintingControlSetting painting_control) (/media/keyou/dev2/chromium64/src/demo/demo_cc/demo_cc_offscreen.cc:131)
libcc.so!cc::PictureLayer::Update(cc::PictureLayer * this) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:140)
libcc.so!cc::LayerTreeHost::PaintContent(cc::LayerTreeHost * this, const cc::LayerList & update_layer_list) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:1403)
libcc.so!cc::LayerTreeHost::DoUpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:834)
libcc.so!cc::LayerTreeHost::UpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:703)
libcc.so!cc::SingleThreadProxy::DoPainting(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:871)
libcc.so!cc::SingleThreadProxy::BeginMainFrame(cc::SingleThreadProxy * this, const viz::BeginFrameArgs & begin_frame_args) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:848)


Layer有更改的时候重新激活Scheduler,这最终会触发SEND_BEGIN_MAIN_FRAME事件
libcc.so!cc::Scheduler::StartOrStopBeginFrames(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:265)
libcc.so!cc::Scheduler::ProcessScheduledActions(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:870)
libcc.so!cc::Scheduler::SetNeedsBeginMainFrame(cc::Scheduler * this) (/media/keyou/dev2/chromium64/src/cc/scheduler/scheduler.cc:128)
libcc.so!cc::SingleThreadProxy::SetNeedsCommit(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:242)
libcc.so!cc::LayerTreeHost::SetNeedsCommit(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:601)
libcc.so!cc::Layer::SetNeedsCommit(cc::PictureLayer * this) (/media/keyou/dev2/chromium64/src/cc/layers/layer.cc:212)
+++
SEND_BEGIN_MAIN_FRAME事件会导致以下代码被执行
DemoViewsWidgetDelegateView::OnPaint(DemoViewsWidgetDelegateView * this, gfx::Canvas * canvas) (/media/keyou/dev2/chromium64/src/demo/demo_views/demo_views.cc:124)
libviews.so!views::View::Paint(DemoViewsWidgetDelegateView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:999)
libviews.so!views::View::RecursivePaintHelper(views::ClientView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::ClientView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::ClientView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::RecursivePaintHelper(views::NonClientView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::NonClientView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::NonClientView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::RecursivePaintHelper(views::internal::RootView * this, void (views::View::*)(views::View * const, const views::PaintInfo &) func, const views::PaintInfo & info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2094)
libviews.so!views::View::PaintChildren(views::internal::RootView * this, const views::PaintInfo & paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1649)
libviews.so!views::View::Paint(views::internal::RootView * this, const views::PaintInfo & parent_paint_info) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:1003)
libviews.so!views::View::PaintFromPaintRoot(views::internal::RootView * this, const ui::PaintContext & parent_context) (/media/keyou/dev2/chromium64/src/ui/views/view.cc:2101)
libviews.so!views::Widget::OnNativeWidgetPaint(views::Widget * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/views/widget/widget.cc:1232)
libviews.so!views::DesktopNativeWidgetAura::OnPaint(views::DesktopNativeWidgetAura * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc:1077)
libaura.so!aura::Window::Paint(aura::Window * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/aura/window.cc:916)
libaura.so!aura::Window::OnPaintLayer(aura::Window * this, const ui::PaintContext & context) (/media/keyou/dev2/chromium64/src/ui/aura/window.cc:1297)
libcompositor.so!ui::Layer::PaintContentsToDisplayList(ui::Layer * this, cc::ContentLayerClient::PaintingControlSetting painting_control) (/media/keyou/dev2/chromium64/src/ui/compositor/layer.cc:1258)
libcompositor.so!non-virtual thunk to ui::Layer::PaintContentsToDisplayList(cc::ContentLayerClient::PaintingControlSetting) (Unknown Source:0)
libcc.so!cc::PictureLayer::Update(cc::PictureLayer * this) (/media/keyou/dev2/chromium64/src/cc/layers/picture_layer.cc:140)
libcc.so!cc::LayerTreeHost::PaintContent(cc::LayerTreeHost * this, const cc::LayerList & update_layer_list) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:1402)
libcc.so!cc::LayerTreeHost::DoUpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:834)
libcc.so!cc::LayerTreeHost::UpdateLayers(cc::LayerTreeHost * this) (/media/keyou/dev2/chromium64/src/cc/trees/layer_tree_host.cc:703)
libcc.so!cc::SingleThreadProxy::DoPainting(cc::SingleThreadProxy * this) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:871)
libcc.so!cc::SingleThreadProxy::BeginMainFrame(cc::SingleThreadProxy * this, const viz::BeginFrameArgs & begin_frame_args) (/media/keyou/dev2/chromium64/src/cc/trees/single_thread_proxy.cc:848)

====================================================== 
demo_viz_offscreen

BeginFrameSource是用来根据条件(定时,手动等)产生OnBeginFrame事件,然后把该事件通知给BeginFrameObserver. CompositorFrameSinkSupportDisplayScheduler都是该事件的监听者,support监听到该事件后通知CompositorFrameSinkClient提交CFds监听到该事件后通知Display进行渲染。

CompositorFrameSinkSupport加入BFSobserver列表
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:299)
libservice.so!viz::CompositorFrameSinkSupport::UpdateNeedsBeginFramesInternal(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:704)
libservice.so!viz::CompositorFrameSinkSupport::SetNeedsBeginFrame(viz::CompositorFrameSinkSupport * this, bool needs_begin_frame) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:316)
demo::OffscreenRenderer::InitializeOnThread(demo::OffscreenRenderer * this) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:163)

首次手动触发ClientOnBeginFrame的逻辑,首次是由supportSetNeedsBeginFrame()触发。
demo::OffscreenRenderer::OnBeginFrame(demo::OffscreenRenderer * this, const viz::BeginFrameArgs & args, const base::flat_map<unsigned int, viz::FrameTimingDetails, std::__Cr::less<void> > & details) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:215)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:319)
libservice.so!viz::CompositorFrameSinkSupport::UpdateNeedsBeginFramesInternal(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:704)
libservice.so!viz::CompositorFrameSinkSupport::SetNeedsBeginFrame(viz::CompositorFrameSinkSupport * this, bool needs_begin_frame) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:316)
demo::OffscreenRenderer::InitializeOnThread(demo::OffscreenRenderer * this) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:163)

DisplayScheduer加入BFSobserver的逻辑:
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::DisplayScheduler * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:299)
libservice.so!viz::DisplayScheduler::StartObservingBeginFrames(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:282)
libservice.so!viz::DisplayScheduler::MaybeStartObservingBeginFrames(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:277)
libservice.so!viz::DisplayScheduler::SetRootFrameMissing(viz::DisplayScheduler * this, bool missing) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:79)
libservice.so!viz::Display::UpdateRootFrameMissing(viz::Display * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:445)
libservice.so!viz::Display::SurfaceDamaged(viz::Display * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:800)
libservice.so!viz::DisplayScheduler::OnSurfaceDamaged(viz::DisplayScheduler * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:331)
libservice.so!viz::SurfaceManager::SurfaceModified(viz::SurfaceManager * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface_manager.cc:464)
libservice.so!viz::SurfaceManager::SurfaceActivated(viz::SurfaceManager * this, viz::Surface * surface, base::Optional<base::TimeDelta> duration) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface_manager.cc:480)
libservice.so!viz::Surface::ActivateFrame(viz::Surface * this, viz::Surface::FrameData frame_data, base::Optional<base::TimeDelta> duration) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface.cc:446)
libservice.so!viz::Surface::QueueFrame(viz::Surface * this, viz::CompositorFrame frame, uint64_t frame_index, base::ScopedClosureRunner frame_rejected_callback) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface.cc:240)
libservice.so!viz::CompositorFrameSinkSupport::MaybeSubmitCompositorFrameInternal(viz::LocalSurfaceId const&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>, unsigned long, base::OnceCallback<void (std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > const&)>)(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time, viz::mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback callback) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:534)
libservice.so!viz::CompositorFrameSinkSupport::MaybeSubmitCompositorFrame(viz::LocalSurfaceId const&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>, unsigned long, base::OnceCallback<void (std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > const&)>)(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time, viz::mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback callback) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:717)
libservice.so!viz::CompositorFrameSinkSupport::SubmitCompositorFrame(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:357)
demo::OffscreenRenderer::OnBeginFrame(demo::OffscreenRenderer * this, const viz::BeginFrameArgs & args, const base::flat_map<unsigned int, viz::FrameTimingDetails, std::__Cr::less<void> > & details) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:220)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:319)
libservice.so!viz::CompositorFrameSinkSupport::UpdateNeedsBeginFramesInternal(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:704)
libservice.so!viz::CompositorFrameSinkSupport::SetNeedsBeginFrame(viz::CompositorFrameSinkSupport * this, bool needs_begin_frame) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:316)
demo::OffscreenRenderer::InitializeOnThread(demo::OffscreenRenderer * this) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:163)

首次进行渲染的逻辑,可以看到当首次收到提交的CF,会将DisplayerScheduler加入BFSobserver,并执行绘制及显示的逻辑.
--------
执行最终的显示
demo::OffscreenSoftwareOutputDevice::OnSwapBuffers(base::OnceCallback<void (gfx::Size const&)>)(demo::OffscreenSoftwareOutputDevice * this, viz::SoftwareOutputDevice::SwapBuffersCallback swap_ack_callback) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:90)
libservice.so!viz::SoftwareOutputSurface::SwapBuffers(viz::SoftwareOutputSurface * this, viz::OutputSurfaceFrame frame) (/media/keyou/dev2/chromium64/src/components/viz/service/display_embedder/software_output_surface.cc:74)
libservice.so!viz::SoftwareRenderer::SwapBuffers(viz::SoftwareRenderer * this, viz::DirectRenderer::SwapFrameData swap_frame_data) (/media/keyou/dev2/chromium64/src/components/viz/service/display/software_renderer.cc:105)
--------
执行绘制/光栅化
libservice.so!viz::SoftwareRenderer::DrawSolidColorQuad(viz::SoftwareRenderer * this, const viz::SolidColorDrawQuad * quad) (/media/keyou/dev2/chromium64/src/components/viz/service/display/software_renderer.cc:399)
libservice.so!viz::SoftwareRenderer::DoDrawQuad(viz::SoftwareRenderer * this, const viz::SolidColorDrawQuad * quad, const gfx::QuadF * draw_region) (/media/keyou/dev2/chromium64/src/components/viz/service/display/software_renderer.cc:299)
libservice.so!viz::DirectRenderer::DrawRenderPass(viz::SoftwareRenderer * this, const viz::RenderPass * render_pass) (/media/keyou/dev2/chromium64/src/components/viz/service/display/direct_renderer.cc:694)
libservice.so!viz::DirectRenderer::DrawRenderPassAndExecuteCopyRequests(viz::SoftwareRenderer * this, viz::RenderPass * render_pass) (/media/keyou/dev2/chromium64/src/components/viz/service/display/direct_renderer.cc:555)
libservice.so!viz::DirectRenderer::DrawFrame(viz::SoftwareRenderer * this, viz::RenderPassList * render_passes_in_draw_order, float device_scale_factor, const gfx::Size & device_viewport_size, float sdr_white_level) (/media/keyou/dev2/chromium64/src/components/viz/service/display/direct_renderer.cc:409)
--------
libservice.so!viz::Display::DrawAndSwap(viz::Display * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:458)
libservice.so!viz::DisplayScheduler::DrawAndSwap(viz::DisplayScheduler * this) (/media/keyUpdateou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:215)
libservice.so!viz::DisplayScheduler::AttemptDrawAndSwap(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:488)
libservice.so!viz::DisplayScheduler::OnBeginFrameDeadline(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:504)
PostTask
libservice.so!viz::DisplayScheduler::ScheduleBeginFrameDeadline(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:475)
libservice.so!viz::DisplayScheduler::OnBeginFrameDerivedImpl(viz::DisplayScheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:264)
libviz_common.so!viz::BeginFrameObserverBase::OnBeginFrame(viz::DisplayScheduler * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:93)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::DisplayScheduler * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::DisplayScheduler * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::DisplayScheduler * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:319)
libservice.so!viz::DisplayScheduler::StartObservingBeginFrames(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:282)
libservice.so!viz::DisplayScheduler::MaybeStartObservingBeginFrames(viz::DisplayScheduler * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:277)
libservice.so!viz::DisplayScheduler::SetRootFrameMissing(viz::DisplayScheduler * this, bool missing) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:79)
libservice.so!viz::Display::UpdateRootFrameMissing(viz::Display * this) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:445)
libservice.so!viz::Display::SurfaceDamaged(viz::Display * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display.cc:800)
libservice.so!viz::DisplayScheduler::OnSurfaceDamaged(viz::DisplayScheduler * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/display/display_scheduler.cc:331)
libservice.so!viz::SurfaceManager::SurfaceModified(viz::SurfaceManager * this, const viz::SurfaceId & surface_id, const viz::BeginFrameAck & ack) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface_manager.cc:464)
libservice.so!viz::SurfaceManager::SurfaceActivated(viz::SurfaceManager * this, viz::Surface * surface, base::Optional<base::TimeDelta> duration) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface_manager.cc:480)
libservice.so!viz::Surface::ActivateFrame(viz::Surface * this, viz::Surface::FrameData frame_data, base::Optional<base::TimeDelta> duration) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface.cc:446)
libservice.so!viz::Surface::QueueFrame(viz::Surface * this, viz::CompositorFrame frame, uint64_t frame_index, base::ScopedClosureRunner frame_rejected_callback) (/media/keyou/dev2/chromium64/src/components/viz/service/surfaces/surface.cc:240)
libservice.so!viz::CompositorFrameSinkSupport::MaybeSubmitCompositorFrameInternal(viz::LocalSurfaceId const&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>, unsigned long, base::OnceCallback<void (std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > const&)>)(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time, viz::mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback callback) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:534)
libservice.so!viz::CompositorFrameSinkSupport::MaybeSubmitCompositorFrame(viz::LocalSurfaceId const&, viz::CompositorFrame, base::Optional<viz::HitTestRegionList>, unsigned long, base::OnceCallback<void (std::__Cr::vector<viz::ReturnedResource, std::__Cr::allocator<viz::ReturnedResource> > const&)>)(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time, viz::mojom::CompositorFrameSink::SubmitCompositorFrameSyncCallback callback) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:717)
libservice.so!viz::CompositorFrameSinkSupport::SubmitCompositorFrame(viz::CompositorFrameSinkSupport * this, const viz::LocalSurfaceId & local_surface_id, viz::CompositorFrame frame, base::Optional<viz::HitTestRegionList> hit_test_region_list, uint64_t submit_time) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:357)
demo::OffscreenRenderer::OnBeginFrame(demo::OffscreenRenderer * this, const viz::BeginFrameArgs & args, const base::flat_map<unsigned int, viz::FrameTimingDetails, std::__Cr::less<void> > & details) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:220)
libservice.so!viz::CompositorFrameSinkSupport::OnBeginFrame(viz::CompositorFrameSinkSupport * this, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:670)
libviz_common.so!viz::(anonymous namespace)::FilterAndIssueBeginFrame(viz::CompositorFrameSinkSupport * observer, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:47)
libviz_common.so!viz::DelayBasedBeginFrameSource::IssueBeginFrameToObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs, const viz::BeginFrameArgs & args) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:365)
libviz_common.so!viz::DelayBasedBeginFrameSource::AddObserver(viz::DelayBasedBeginFrameSource * this, viz::CompositorFrameSinkSupport * obs) (/media/keyou/dev2/chromium64/src/components/viz/common/frame_sinks/begin_frame_source.cc:319)
libservice.so!viz::CompositorFrameSinkSupport::UpdateNeedsBeginFramesInternal(viz::CompositorFrameSinkSupport * this) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:704)
libservice.so!viz::CompositorFrameSinkSupport::SetNeedsBeginFrame(viz::CompositorFrameSinkSupport * this, bool needs_begin_frame) (/media/keyou/dev2/chromium64/src/components/viz/service/frame_sinks/compositor_frame_sink_support.cc:316)
demo::OffscreenRenderer::InitializeOnThread(demo::OffscreenRenderer * this) (/media/keyou/dev2/chromium64/src/demo/demo_viz/demo_viz_offscreen.cc:163)