| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/ui_devtools/viz/surface_element.h" |
| |
| #include "components/ui_devtools/Protocol.h" |
| #include "components/ui_devtools/ui_element_delegate.h" |
| #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" |
| #include "components/viz/service/surfaces/surface.h" |
| #include "components/viz/service/surfaces/surface_manager.h" |
| |
| namespace ui_devtools { |
| |
| SurfaceElement::SurfaceElement(const viz::SurfaceId& surface_id, |
| viz::FrameSinkManagerImpl* frame_sink_manager, |
| UIElementDelegate* ui_element_delegate, |
| UIElement* parent) |
| : VizElement(UIElementType::SURFACE, ui_element_delegate, parent), |
| surface_id_(surface_id), |
| frame_sink_manager_(frame_sink_manager) { |
| viz::Surface* surface = |
| frame_sink_manager_->surface_manager()->GetSurfaceForId(surface_id_); |
| if (surface) { |
| surface_bounds_ = gfx::Rect(surface->size_in_pixels()); |
| } else { |
| // The root surface id doesn't have an associated surface. |
| DCHECK_EQ(surface_id_, |
| frame_sink_manager_->surface_manager()->GetRootSurfaceId()); |
| } |
| // DOMAgentViz handles all of the Surface events, so it owns all of the |
| // SurfaceElements. |
| set_owns_children(false); |
| } |
| |
| SurfaceElement::~SurfaceElement() = default; |
| |
| std::vector<std::pair<std::string, std::string>> |
| SurfaceElement::GetCustomProperties() const { |
| return {}; |
| } |
| |
| void SurfaceElement::GetBounds(gfx::Rect* bounds) const { |
| // We cannot really know real bounds on the surface unless we do |
| // aggregation. Here we just return size of the surface. |
| *bounds = surface_bounds_; |
| } |
| |
| void SurfaceElement::SetBounds(const gfx::Rect& bounds) { |
| NOTREACHED(); |
| } |
| |
| void SurfaceElement::GetVisible(bool* visible) const { |
| // Currently not real data. |
| *visible = true; |
| } |
| |
| void SurfaceElement::SetVisible(bool visible) {} |
| |
| std::unique_ptr<protocol::Array<std::string>> SurfaceElement::GetAttributes() |
| const { |
| auto attributes = protocol::Array<std::string>::create(); |
| attributes->addItem("SurfaceId"); |
| attributes->addItem(surface_id_.ToString()); |
| attributes->addItem("FrameSink Debug Label"); |
| attributes->addItem( |
| frame_sink_manager_->GetFrameSinkDebugLabel(surface_id_.frame_sink_id()) |
| .as_string()); |
| return attributes; |
| } |
| |
| std::pair<gfx::NativeWindow, gfx::Rect> |
| SurfaceElement::GetNodeWindowAndScreenBounds() const { |
| return {}; |
| } |
| |
| // static |
| const viz::SurfaceId& SurfaceElement::From(const UIElement* element) { |
| DCHECK_EQ(UIElementType::SURFACE, element->type()); |
| return static_cast<const SurfaceElement*>(element)->surface_id_; |
| } |
| |
| } // namespace ui_devtools |