blob: bb44354f55d6319eea6a3258b0041a6ba2ab0f2e [file] [log] [blame]
// 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