Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1176)

Unified Diff: services/gfx/compositor/compositor_engine.cc

Issue 1778793002: Mozart: Make Snapshot immutable. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-2
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | services/gfx/compositor/graph/node_def.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « no previous file | services/gfx/compositor/graph/node_def.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698