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

Unified Diff: services/gfx/compositor/graph/snapshot.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 | « services/gfx/compositor/graph/snapshot.h ('k') | services/gfx/compositor/renderer_state.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/gfx/compositor/graph/snapshot.cc
diff --git a/services/gfx/compositor/graph/snapshot.cc b/services/gfx/compositor/graph/snapshot.cc
index ab4a4478ed2d2302cc30cce06bdf70ab306621fb..66f44e987422516606efa5d2465250f974517fa9 100644
--- a/services/gfx/compositor/graph/snapshot.cc
+++ b/services/gfx/compositor/graph/snapshot.cc
@@ -17,33 +17,32 @@ Snapshot::Snapshot() {}
Snapshot::~Snapshot() {}
-bool Snapshot::Invalidate() {
- if (valid_) {
- valid_ = false;
- dependencies_.clear();
- ClearContent();
- return true;
- }
- return false;
+bool Snapshot::HasDependency(const SceneDef* scene) const {
+ return dependencies_.find(scene->label().token()) != dependencies_.end();
}
-bool Snapshot::InvalidateScene(const SceneDef* scene_def) {
- DCHECK(scene_def);
- return valid_ &&
- dependencies_.find(scene_def->label().token()) !=
- dependencies_.end() &&
- Invalidate();
-}
+std::shared_ptr<RenderFrame> Snapshot::CreateFrame(
+ const mojo::Rect& viewport,
+ const mojo::gfx::composition::FrameInfo& frame_info) const {
+ DCHECK(!is_blocked());
+
+ SkRect sk_viewport =
+ SkRect::MakeXYWH(viewport.x, viewport.y, viewport.width, viewport.height);
+ SkPictureRecorder recorder;
+ recorder.beginRecording(sk_viewport);
+
+ const NodeDef* root_node = root_scene_content_->GetRootNodeIfExists();
+ DCHECK(root_node); // otherwise would have failed to snapshot
+ root_node->RecordPicture(root_scene_content_.get(), this,
+ recorder.getRecordingCanvas());
-void Snapshot::ClearContent() {
- root_scene_content_ = nullptr;
- resolved_scene_contents_.clear();
- node_dispositions_.clear();
- frame_.reset();
+ return RenderFrame::Create(skia::AdoptRef(recorder.endRecordingAsPicture()),
+ sk_viewport, frame_info);
}
-bool Snapshot::IsBlocked(const NodeDef* node) const {
- DCHECK(valid_);
+bool Snapshot::IsNodeBlocked(const NodeDef* node) const {
+ DCHECK(!is_blocked());
+
auto it = node_dispositions_.find(node);
DCHECK(it != node_dispositions_.end());
DCHECK(it->second == Disposition::kSuccess ||
@@ -53,7 +52,8 @@ bool Snapshot::IsBlocked(const NodeDef* node) const {
const SceneContent* Snapshot::GetResolvedSceneContent(
const SceneNodeDef* scene_node) const {
- DCHECK(valid_);
+ DCHECK(!is_blocked());
+
auto it = resolved_scene_contents_.find(scene_node);
DCHECK(it != resolved_scene_contents_.end());
return it->second.get();
@@ -195,33 +195,18 @@ Snapshot::Disposition SnapshotBuilder::SnapshotRenderer(const SceneDef* scene) {
return SnapshotRootAndDetectCycles(root, content);
}
-std::unique_ptr<Snapshot> SnapshotBuilder::Build(
- const SceneDef* root_scene,
- const mojo::Rect& viewport,
- const mojo::gfx::composition::FrameInfo& frame_info) {
+scoped_refptr<const Snapshot> SnapshotBuilder::Build(
+ const SceneDef* root_scene) {
DCHECK(snapshot_);
DCHECK(root_scene);
- Snapshot::Disposition disposition = SnapshotRenderer(root_scene);
+ snapshot_->disposition_ = SnapshotRenderer(root_scene);
DCHECK(!cycle_); // must have properly unwound any cycles by now
- if (disposition == Snapshot::Disposition::kSuccess) {
- SkRect sk_viewport = SkRect::MakeXYWH(viewport.x, viewport.y,
- viewport.width, viewport.height);
- SkPictureRecorder recorder;
- recorder.beginRecording(sk_viewport);
-
- const NodeDef* root_node =
- snapshot_->root_scene_content_->GetRootNodeIfExists();
- DCHECK(root_node); // otherwise would have failed to snapshot
- root_node->RecordPicture(snapshot_->root_scene_content_.get(),
- snapshot_.get(), recorder.getRecordingCanvas());
-
- snapshot_->frame_ =
- RenderFrame::Create(skia::AdoptRef(recorder.endRecordingAsPicture()),
- sk_viewport, frame_info);
- } else {
- snapshot_->ClearContent();
+ if (snapshot_->is_blocked()) {
+ snapshot_->root_scene_content_ = nullptr;
+ snapshot_->resolved_scene_contents_.clear();
+ snapshot_->node_dispositions_.clear();
}
return std::move(snapshot_);
}
« no previous file with comments | « services/gfx/compositor/graph/snapshot.h ('k') | services/gfx/compositor/renderer_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698