Commit 571c7ef4 authored by yiyix's avatar yiyix Committed by Commit Bot

VizDevTools: Remove the duplicated information in DomAgentViz

|registered_frame_sink_ids_to_is_connected_| and |frame_sink_elements_|
saves the same information about the FrameSinkId, that is if a
FrameSinkId is register and/or created. This cl removes the variable
|registered_frame_sink_ids_to_is_connected_|.

Bug:816802

Change-Id: Iad9c9e9819ffd44ca8aff7c7b82ad0b5852d6e8d
Reviewed-on: https://chromium-review.googlesource.com/1186195Reviewed-by: default avatarSadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: default avatarkylechar <kylechar@chromium.org>
Commit-Queue: Yi Xu <yiyix@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585859}
parent d2535c4f
......@@ -4,6 +4,7 @@
#include "components/ui_devtools/viz_views/dom_agent_viz.h"
#include "base/stl_util.h"
#include "components/ui_devtools/root_element.h"
#include "components/ui_devtools/ui_element.h"
#include "components/ui_devtools/viz_views/frame_sink_element.h"
......@@ -71,7 +72,6 @@ void DOMAgentViz::OnRegisteredFrameSinkId(
element_root()->children().empty() ? nullptr
: element_root()->children().back());
}
registered_frame_sink_ids_to_is_connected_[frame_sink_id] = false;
}
void DOMAgentViz::OnInvalidatedFrameSinkId(
......@@ -80,7 +80,6 @@ void DOMAgentViz::OnInvalidatedFrameSinkId(
DCHECK(it != frame_sink_elements_.end());
FrameSinkElement* element = it->second;
registered_frame_sink_ids_to_is_connected_.erase(frame_sink_id);
element->SetRegistered(false);
// If a FrameSink is destroyed and invalidated we should remove it from the
......@@ -98,8 +97,6 @@ void DOMAgentViz::OnCreatedCompositorFrameSink(
// should update its |is_client_connected_| and |is_root_| properties.
frame_sink_element->second->SetClientConnected(true);
frame_sink_element->second->SetRoot(is_root);
registered_frame_sink_ids_to_is_connected_[frame_sink_id] = true;
}
void DOMAgentViz::OnDestroyedCompositorFrameSink(
......@@ -110,13 +107,6 @@ void DOMAgentViz::OnDestroyedCompositorFrameSink(
FrameSinkElement* element = it->second;
element->SetClientConnected(false);
// If the FrameSink is still registered, update its status on is_connected.
if (base::ContainsKey(registered_frame_sink_ids_to_is_connected_,
frame_sink_id)) {
registered_frame_sink_ids_to_is_connected_[frame_sink_id] = false;
return;
}
// If a FrameSink is invalidated and destroyed we should remove it from the
// tree.
RemoveFrameSinkSubtree(element);
......@@ -175,11 +165,12 @@ std::unique_ptr<DOM::Node> DOMAgentViz::BuildTreeForFrameSink(
// subtree. So we iterate through |frame_sink_element|'s children and
// recursively build the subtree for them.
for (auto& child : frame_sink_manager_->GetChildrenByParent(frame_sink_id)) {
bool is_registered = base::ContainsKey(
registered_frame_sink_ids_to_is_connected_, frame_sink_id);
bool is_registered = base::ContainsValue(
frame_sink_manager_->GetRegisteredFrameSinkIds(), frame_sink_id);
bool is_client_connected =
is_registered &&
registered_frame_sink_ids_to_is_connected_.find(frame_sink_id)->second;
base::ContainsValue(frame_sink_manager_->GetCreatedFrameSinkIds(),
frame_sink_id);
FrameSinkElement* f_s_element = new FrameSinkElement(
child, frame_sink_manager_, this, frame_sink_element,
......@@ -210,13 +201,14 @@ std::vector<UIElement*> DOMAgentViz::CreateChildrenForRoot() {
std::vector<UIElement*> children;
// Add created RootFrameSinks and detached FrameSinks.
for (auto& frame_sink_id : registered_frame_sink_ids_to_is_connected_) {
if (frame_sink_id.second) {
for (auto& frame_sink_id : frame_sink_manager_->GetRegisteredFrameSinkIds()) {
if (base::ContainsValue(frame_sink_manager_->GetCreatedFrameSinkIds(),
frame_sink_id)) {
const viz::CompositorFrameSinkSupport* support =
frame_sink_manager_->GetFrameSinkForId(frame_sink_id.first);
frame_sink_manager_->GetFrameSinkForId(frame_sink_id);
// Do nothing if it's a non-detached non-root FrameSink.
if (support && !support->is_root() &&
attached_frame_sinks_.find(frame_sink_id.first) !=
attached_frame_sinks_.find(frame_sink_id) !=
attached_frame_sinks_.end()) {
continue;
}
......@@ -224,8 +216,7 @@ std::vector<UIElement*> DOMAgentViz::CreateChildrenForRoot() {
bool is_root = support && support->is_root();
UIElement* frame_sink_element = new FrameSinkElement(
frame_sink_id.first, frame_sink_manager_, this, element_root(),
is_root,
frame_sink_id, frame_sink_manager_, this, element_root(), is_root,
/*is_registered=*/true, /*is_client_connected=*/true);
children.push_back(frame_sink_element);
......@@ -237,7 +228,7 @@ std::vector<UIElement*> DOMAgentViz::CreateChildrenForRoot() {
// consider them unembedded as well.
} else {
UIElement* frame_sink_element = new FrameSinkElement(
frame_sink_id.first, frame_sink_manager_, this, element_root(),
frame_sink_id, frame_sink_manager_, this, element_root(),
/*is_root=*/false, /*is_registered=*/true,
/*is_client_connected=*/false);
......@@ -252,10 +243,13 @@ std::unique_ptr<DOM::Node> DOMAgentViz::BuildTreeForUIElement(
UIElement* ui_element) {
if (ui_element->type() == UIElementType::FRAMESINK) {
viz::FrameSinkId frame_sink_id = FrameSinkElement::From(ui_element);
bool is_registered = base::ContainsKey(
registered_frame_sink_ids_to_is_connected_, frame_sink_id);
bool is_registered = base::ContainsValue(
frame_sink_manager_->GetRegisteredFrameSinkIds(), frame_sink_id);
bool is_client_connected =
registered_frame_sink_ids_to_is_connected_.find(frame_sink_id)->second;
is_registered &&
base::ContainsValue(frame_sink_manager_->GetCreatedFrameSinkIds(),
frame_sink_id);
FrameSinkElement* frame_sink_element = new FrameSinkElement(
frame_sink_id, frame_sink_manager_, this, nullptr,
/*is_root=*/false, is_registered, is_client_connected);
......@@ -276,29 +270,21 @@ void DOMAgentViz::DestroyChildSubtree(UIElement* parent, UIElement* child) {
void DOMAgentViz::Clear() {
attached_frame_sinks_.clear();
frame_sink_elements_.clear();
registered_frame_sink_ids_to_is_connected_.clear();
}
void DOMAgentViz::InitFrameSinkSets() {
for (auto& entry : frame_sink_manager_->GetRegisteredFrameSinkIds())
registered_frame_sink_ids_to_is_connected_[entry] = false;
for (auto& entry : frame_sink_manager_->GetCreatedFrameSinkIds()) {
DCHECK(
base::ContainsKey(registered_frame_sink_ids_to_is_connected_, entry));
registered_frame_sink_ids_to_is_connected_[entry] = true;
}
// Init the |attached_frame_sinks_| set. All RootFrameSinks and accessible
// from roots are attached. All the others are detached.
for (auto& frame_sink_id : registered_frame_sink_ids_to_is_connected_) {
if (frame_sink_id.second) {
for (auto& frame_sink_id : frame_sink_manager_->GetRegisteredFrameSinkIds()) {
if (base::ContainsValue(frame_sink_manager_->GetCreatedFrameSinkIds(),
frame_sink_id)) {
const viz::CompositorFrameSinkSupport* support =
frame_sink_manager_->GetFrameSinkForId(frame_sink_id.first);
frame_sink_manager_->GetFrameSinkForId(frame_sink_id);
// Start only from roots.
if (!support || !support->is_root())
continue;
SetAttachedFrameSink(frame_sink_id.first);
SetAttachedFrameSink(frame_sink_id);
}
}
}
......
......@@ -78,20 +78,6 @@ class DOMAgentViz : public viz::FrameSinkObserver, public DOMAgent {
// |frame_sink_elements_|.
void RemoveFrameSinkElement(UIElement* element);
// These sets are used to create and update the DOM tree. We add/remove
// registered FrameSinks to |registered_frame_sink_ids_to_is_connected_| when
// FrameSink is registered/invalidated and initialize the bool to false to
// indicate that the FrameSink is not created yet. Then when a |frame_sink| is
// created/destroyed, we update |registered_frame_sink_ids_to_is_connected_|
// of |frame_sink| true or false accordingly. When we get events
// registered/unregistered hierarchy we don't change these sets because we
// detach a subtree from one node and attach it to another node and the list
// of registered/created FrameSinkIds doesn't change.
// TODO(yiyix): Removes this map because it saves duplicated information as
// |frame_sink_elements_|.
base::flat_map<viz::FrameSinkId, bool>
registered_frame_sink_ids_to_is_connected_;
// This is used to track created FrameSinkElements in a FrameSink tree. Every
// time we register/invalidate a FrameSinkId, create/destroy a FrameSink,
// register/unregister hierarchy we change this set, because these actions
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment