Index: services/gfx/compositor/compositor_engine.cc |
diff --git a/services/gfx/compositor/compositor_engine.cc b/services/gfx/compositor/compositor_engine.cc |
index 17a36c621b5fe0642519e59ebd7eab53efd5cc6f..9f3c4a76f4a21852370564c9b93316dda32ce472 100644 |
--- a/services/gfx/compositor/compositor_engine.cc |
+++ b/services/gfx/compositor/compositor_engine.cc |
@@ -104,6 +104,7 @@ void CompositorEngine::CreateRenderer( |
const mojo::String& label) { |
DCHECK(context_provider); |
uint32_t renderer_id = next_renderer_id_++; |
+ CHECK(renderer_id); |
// Create the state and bind implementation to it. |
RendererState* renderer_state = |
@@ -309,8 +310,8 @@ void CompositorEngine::InvalidateScene(SceneState* scene_state) { |
DVLOG(2) << "InvalidateScene: scene=" << scene_state; |
for (auto& renderer : renderers_) { |
- if (renderer->snapshot() && |
- renderer->snapshot()->InvalidateScene(scene_state->scene_def())) { |
+ if (renderer->current_snapshot() && |
+ renderer->current_snapshot()->HasDependency(scene_state->scene_def())) { |
ScheduleFrameForRenderer(renderer, Scheduler::SchedulingMode::kSnapshot); |
} |
} |
@@ -365,7 +366,8 @@ void CompositorEngine::SnapshotRenderer( |
if (VLOG_IS_ON(2)) { |
std::ostringstream block_log; |
SnapshotRendererInner(renderer_state, frame_info, &block_log); |
- if (!renderer_state->frame()) { |
+ if (!renderer_state->current_snapshot() || |
+ renderer_state->current_snapshot()->is_blocked()) { |
DVLOG(2) << "Rendering completely blocked: " << block_log.str(); |
} else if (!block_log.str().empty()) { |
DVLOG(2) << "Rendering partially blocked: " << block_log.str(); |
@@ -375,6 +377,13 @@ void CompositorEngine::SnapshotRenderer( |
} else { |
SnapshotRendererInner(renderer_state, frame_info, nullptr); |
} |
+ |
+ if (renderer_state->current_snapshot() && |
+ !renderer_state->current_snapshot()->is_blocked()) { |
+ renderer_state->output()->SubmitFrame( |
+ renderer_state->current_snapshot()->CreateFrame( |
+ renderer_state->root_scene_viewport(), frame_info)); |
+ } |
} |
void CompositorEngine::SnapshotRendererInner( |
@@ -390,11 +399,7 @@ void CompositorEngine::SnapshotRendererInner( |
SnapshotBuilder builder(block_log); |
renderer_state->SetSnapshot( |
- builder.Build(renderer_state->root_scene()->scene_def(), |
- renderer_state->root_scene_viewport(), frame_info)); |
- |
- if (renderer_state->frame()) |
- renderer_state->output()->SubmitFrame(renderer_state->frame()); |
+ builder.Build(renderer_state->root_scene()->scene_def())); |
} |
void CompositorEngine::ScheduleFrameForRenderer( |