1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/ui_devtools/views/element_utility.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/strings/to_string.h"
#include "cc/trees/layer_tree_host.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_owner.h"
namespace ui_devtools {
void AppendLayerPropertiesMatchedStyle(
const ui::Layer* layer,
std::vector<UIElement::UIProperty>* ret) {
ret->emplace_back("layer-type",
std::string(LayerTypeToString(layer->type())));
ret->emplace_back("has-layer-mask",
base::ToString(layer->layer_mask_layer()));
ret->emplace_back("layer-is-visible", base::ToString(layer->IsVisible()));
ret->emplace_back("layer-opacity", base::NumberToString((layer->opacity())));
ret->emplace_back("layer-combined-opacity",
base::NumberToString(layer->GetCombinedOpacity()));
ret->emplace_back("background-blur",
base::NumberToString(layer->background_blur()));
ret->emplace_back("layer-blur", base::NumberToString(layer->layer_blur()));
ret->emplace_back("layer-saturation",
base::NumberToString(layer->layer_saturation()));
ret->emplace_back("layer-brightness",
base::NumberToString(layer->layer_brightness()));
ret->emplace_back("layer-grayscale",
base::NumberToString(layer->layer_grayscale()));
ret->emplace_back("layer-fills-bounds-opaquely",
base::ToString(layer->fills_bounds_opaquely()));
if (layer->type() == ui::LAYER_SOLID_COLOR) {
ret->emplace_back("layer-color",
base::StringPrintf("%X", layer->GetTargetColor()));
}
const auto offset = layer->GetSubpixelOffset();
if (!offset.IsZero())
ret->emplace_back("layer-subpixel-offset", offset.ToString());
const auto& rounded_corners = layer->rounded_corner_radii();
if (!rounded_corners.IsEmpty())
ret->emplace_back("layer-rounded-corners", rounded_corners.ToString());
const ui::Layer::ShapeRects* alpha_shape_bounds = layer->alpha_shape();
if (alpha_shape_bounds && alpha_shape_bounds->size()) {
gfx::Rect bounding_box = gfx::UnionRects(*alpha_shape_bounds);
ret->emplace_back("alpha-shape-bounding-box", bounding_box.ToString());
}
const cc::Layer* cc_layer = layer->cc_layer_for_testing();
if (cc_layer) {
// Property trees must be updated in order to get valid render surface
// reasons.
if (!cc_layer->layer_tree_host() ||
cc_layer->layer_tree_host()->property_trees()->needs_rebuild())
return;
cc::RenderSurfaceReason render_surface = cc_layer->GetRenderSurfaceReason();
if (render_surface != cc::RenderSurfaceReason::kNone) {
ret->emplace_back("render-surface-reason",
cc::RenderSurfaceReasonToString(render_surface));
}
}
}
} // namespace ui_devtools
|