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

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

Issue 1873573003: Mozart: Ensure time always runs forward. (Closed) Base URL: git@github.com:domokit/mojo.git@moz-3
Patch Set: fix build error on Android Created 4 years, 8 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 | « services/gfx/compositor/compositor_engine.h ('k') | services/gfx/compositor/graph/nodes.h » ('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 fa5d0e5c3155d9d0f6657d89941029cffa576228..f54beea3be89a8cfa1b2a4ac81c988e8b5848db8 100644
--- a/services/gfx/compositor/compositor_engine.cc
+++ b/services/gfx/compositor/compositor_engine.cc
@@ -55,9 +55,10 @@ mojo::gfx::composition::SceneTokenPtr CompositorEngine::CreateScene(
scene_impl->set_connection_error_handler(error_handler);
// Add to registry.
- scenes_by_token_.insert({scene_state->scene_token()->value, scene_state});
+ scenes_by_token_.emplace(scene_state->scene_token().value, scene_state);
+ universe_.AddScene(scene_state->scene_def()->label());
DVLOG(1) << "CreateScene: scene=" << scene_state;
- return scene_state->scene_token()->Clone();
+ return scene_state->scene_token().Clone();
}
void CompositorEngine::OnSceneConnectionError(SceneState* scene_state) {
@@ -71,11 +72,11 @@ void CompositorEngine::DestroyScene(SceneState* scene_state) {
DCHECK(IsSceneStateRegisteredDebug(scene_state));
DVLOG(1) << "DestroyScene: scene=" << scene_state;
- // Unlink from other scenes.
+ // Notify other scenes which may depend on this one.
for (auto& pair : scenes_by_token_) {
SceneState* other_scene_state = pair.second;
- other_scene_state->scene_def()->UnlinkReferencedScene(
- scene_state->scene_def(),
+ other_scene_state->scene_def()->NotifySceneUnavailable(
+ scene_state->scene_token(),
base::Bind(&CompositorEngine::SendResourceUnavailable,
base::Unretained(this),
base::Unretained(other_scene_state)));
@@ -91,11 +92,12 @@ void CompositorEngine::DestroyScene(SceneState* scene_state) {
}
}
- // Destroy.
+ // Consider all dependent rendering to be invalidated.
+ universe_.RemoveScene(scene_state->scene_token());
InvalidateScene(scene_state);
// Remove from registry.
- scenes_by_token_.erase(scene_state->scene_token()->value);
+ scenes_by_token_.erase(scene_state->scene_token().value);
delete scene_state;
}
@@ -287,11 +289,9 @@ void CompositorEngine::HitTest(
callback.Run(result.Pass());
}
-base::WeakPtr<SceneDef> CompositorEngine::ResolveSceneReference(
+bool CompositorEngine::ResolveSceneReference(
const mojo::gfx::composition::SceneToken& scene_token) {
- SceneState* scene_state = FindScene(scene_token.value);
- return scene_state ? scene_state->scene_def()->GetWeakPtr()
- : base::WeakPtr<SceneDef>();
+ return FindScene(scene_token.value) != nullptr;
}
void CompositorEngine::SendResourceUnavailable(SceneState* scene_state,
@@ -317,7 +317,8 @@ void CompositorEngine::InvalidateScene(SceneState* scene_state) {
for (auto& renderer : renderers_) {
if (renderer->current_snapshot() &&
- renderer->current_snapshot()->HasDependency(scene_state->scene_def())) {
+ renderer->current_snapshot()->HasDependency(
+ scene_state->scene_token())) {
ScheduleFrameForRenderer(renderer, Scheduler::SchedulingMode::kSnapshot);
}
}
@@ -331,8 +332,9 @@ SceneDef::Disposition CompositorEngine::PresentScene(
std::ostringstream errs;
SceneDef::Disposition disposition = scene_state->scene_def()->Present(
- presentation_time, base::Bind(&CompositorEngine::ResolveSceneReference,
- base::Unretained(this)),
+ presentation_time, &universe_,
+ base::Bind(&CompositorEngine::ResolveSceneReference,
+ base::Unretained(this)),
base::Bind(&CompositorEngine::SendResourceUnavailable,
base::Unretained(this), base::Unretained(scene_state)),
errs);
@@ -374,9 +376,11 @@ void CompositorEngine::SnapshotRenderer(
SnapshotRendererInner(renderer_state, &block_log);
if (!renderer_state->current_snapshot() ||
renderer_state->current_snapshot()->is_blocked()) {
- DVLOG(2) << "Rendering completely blocked: " << block_log.str();
+ DVLOG(2) << "Rendering completely blocked:" << std::endl
+ << block_log.str();
} else if (!block_log.str().empty()) {
- DVLOG(2) << "Rendering partially blocked: " << block_log.str();
+ DVLOG(2) << "Rendering partially blocked:" << std::endl
+ << block_log.str();
} else {
DVLOG(2) << "Rendering unblocked";
}
@@ -404,9 +408,9 @@ void CompositorEngine::SnapshotRendererInner(RendererState* renderer_state,
return;
}
- SnapshotBuilder builder(block_log);
renderer_state->SetSnapshot(
- builder.Build(renderer_state->root_scene()->scene_def()));
+ universe_.SnapshotScene(renderer_state->root_scene()->scene_token(),
+ renderer_state->root_scene_version(), block_log));
}
void CompositorEngine::ScheduleFrameForRenderer(
« no previous file with comments | « services/gfx/compositor/compositor_engine.h ('k') | services/gfx/compositor/graph/nodes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698