Chromium Code Reviews| Index: services/gfx/compositor/compositor_engine.cc |
| diff --git a/services/gfx/compositor/compositor_engine.cc b/services/gfx/compositor/compositor_engine.cc |
| index 8ad5b0f36e45dfd569a199045a8de32cfedc89d0..aaf569eb341dbff1d1d8fb66b056ba6c1139714b 100644 |
| --- a/services/gfx/compositor/compositor_engine.cc |
| +++ b/services/gfx/compositor/compositor_engine.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "base/time/time.h" |
| +#include "base/trace_event/trace_event.h" |
| #include "mojo/services/gfx/composition/cpp/formatting.h" |
| #include "mojo/skia/type_converters.h" |
| #include "services/gfx/compositor/backend/gpu_output.h" |
| @@ -350,11 +351,29 @@ SceneDef::Disposition CompositorEngine::PresentScene( |
| return disposition; |
| } |
| +void CompositorEngine::ComposeRenderer( |
| + RendererState* renderer_state, |
| + const mojo::gfx::composition::FrameInfo& frame_info) { |
| + DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
| + DVLOG(2) << "ComposeRenderer: renderer_state=" << renderer_state; |
| + |
| + TRACE_EVENT1("gfx", "CompositorEngine::ComposeRenderer", "renderer", |
| + renderer_state->FormattedLabel()); |
| + |
| + int64_t composition_time = MojoGetTimeTicksNow(); |
| + PresentRenderer(renderer_state, frame_info.presentation_time); |
| + SnapshotRenderer(renderer_state); |
| + PaintRenderer(renderer_state, frame_info, composition_time); |
| +} |
| + |
| void CompositorEngine::PresentRenderer(RendererState* renderer_state, |
| int64_t presentation_time) { |
| DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
| DVLOG(2) << "PresentRenderer: renderer_state=" << renderer_state; |
| + TRACE_EVENT1("gfx", "CompositorEngine::PresentRenderer", "renderer", |
| + renderer_state->FormattedLabel()); |
| + |
| // TODO(jeffbrown): Be more selective and do this work only for scenes |
| // associated with the renderer that actually have pending updates. |
| std::vector<SceneState*> dead_scenes; |
| @@ -369,12 +388,13 @@ void CompositorEngine::PresentRenderer(RendererState* renderer_state, |
| DestroyScene(scene_state); |
| } |
| -void CompositorEngine::SnapshotRenderer( |
| - RendererState* renderer_state, |
| - const mojo::gfx::composition::FrameInfo& frame_info) { |
| +void CompositorEngine::SnapshotRenderer(RendererState* renderer_state) { |
| DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
| DVLOG(2) << "SnapshotRenderer: renderer_state=" << renderer_state; |
| + TRACE_EVENT1("gfx", "CompositorEngine::SnapshotRenderer", "renderer", |
| + renderer_state->FormattedLabel()); |
| + |
| if (VLOG_IS_ON(2)) { |
| std::ostringstream block_log; |
| SnapshotRendererInner(renderer_state, &block_log); |
| @@ -391,19 +411,6 @@ void CompositorEngine::SnapshotRenderer( |
| } else { |
| SnapshotRendererInner(renderer_state, nullptr); |
| } |
| - |
| - if (renderer_state->visible_snapshot()) { |
| - DCHECK(!renderer_state->visible_snapshot()->is_blocked()); |
| - renderer_state->output()->SubmitFrame( |
| - renderer_state->visible_snapshot()->CreateFrame( |
| - renderer_state->root_scene_viewport(), frame_info)); |
| - } else { |
| - SkIRect viewport = renderer_state->root_scene_viewport().To<SkIRect>(); |
| - if (!viewport.isEmpty()) { |
| - renderer_state->output()->SubmitFrame( |
| - new RenderFrame(viewport, frame_info)); |
| - } |
| - } |
| } |
| void CompositorEngine::SnapshotRendererInner(RendererState* renderer_state, |
| @@ -420,6 +427,32 @@ void CompositorEngine::SnapshotRendererInner(RendererState* renderer_state, |
| renderer_state->root_scene_version(), block_log)); |
| } |
| +void CompositorEngine::PaintRenderer( |
| + RendererState* renderer_state, |
| + const mojo::gfx::composition::FrameInfo& frame_info, |
| + int64_t composition_time) { |
| + DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
| + DVLOG(2) << "PaintRenderer: renderer_state=" << renderer_state; |
| + |
| + TRACE_EVENT1("gfx", "CompositorEngine::PaintRenderer", "renderer", |
| + renderer_state->FormattedLabel()); |
| + |
| + RenderFrame::Metadata frame_metadata(frame_info, composition_time); |
| + |
| + if (renderer_state->visible_snapshot()) { |
|
mikejurka
2016/05/19 23:26:19
could you add a comment explaining this if/else br
jeffbrown
2016/05/20 01:09:48
ok
|
| + DCHECK(!renderer_state->visible_snapshot()->is_blocked()); |
| + renderer_state->output()->SubmitFrame( |
| + renderer_state->visible_snapshot()->Paint( |
| + frame_metadata, renderer_state->root_scene_viewport())); |
| + } else { |
| + SkIRect viewport = renderer_state->root_scene_viewport().To<SkIRect>(); |
| + if (!viewport.isEmpty()) { |
| + renderer_state->output()->SubmitFrame( |
| + new RenderFrame(frame_metadata, viewport)); |
| + } |
| + } |
| +} |
| + |
| void CompositorEngine::ScheduleFrameForRenderer( |
| RendererState* renderer_state, |
| Scheduler::SchedulingMode scheduling_mode) { |
| @@ -463,8 +496,7 @@ void CompositorEngine::OnOutputSnapshotRequest( |
| return; |
| DCHECK(IsRendererStateRegisteredDebug(renderer_state)); |
| - PresentRenderer(renderer_state, frame_info.presentation_time); |
| - SnapshotRenderer(renderer_state, frame_info); |
| + ComposeRenderer(renderer_state, frame_info); |
| } |
| void CompositorEngine::OnPresentScene( |