blob: 09a9a0d600aa03b062ef46ba319469e32856da98 [file] [log] [blame]
// Copyright 2017 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 "content/common/render_widget_surface_properties.h"
namespace content {
// static
RenderWidgetSurfaceProperties
RenderWidgetSurfaceProperties::FromCompositorFrame(
const viz::CompositorFrame& frame) {
RenderWidgetSurfaceProperties properties;
properties.size = frame.size_in_pixels();
properties.device_scale_factor = frame.device_scale_factor();
properties.top_controls_height = frame.metadata.top_controls_height;
properties.top_controls_shown_ratio = frame.metadata.top_controls_shown_ratio;
#ifdef OS_ANDROID
properties.bottom_controls_height = frame.metadata.bottom_controls_height;
properties.bottom_controls_shown_ratio =
frame.metadata.bottom_controls_shown_ratio;
properties.selection = frame.metadata.selection;
properties.has_transparent_background =
frame.render_pass_list.back()->has_transparent_background;
#endif
return properties;
}
RenderWidgetSurfaceProperties::RenderWidgetSurfaceProperties() = default;
RenderWidgetSurfaceProperties::RenderWidgetSurfaceProperties(
const RenderWidgetSurfaceProperties& other) = default;
RenderWidgetSurfaceProperties::~RenderWidgetSurfaceProperties() = default;
RenderWidgetSurfaceProperties& RenderWidgetSurfaceProperties::operator=(
const RenderWidgetSurfaceProperties& other) = default;
bool RenderWidgetSurfaceProperties::operator==(
const RenderWidgetSurfaceProperties& other) const {
return other.device_scale_factor == device_scale_factor &&
other.top_controls_height == top_controls_height &&
other.top_controls_shown_ratio == top_controls_shown_ratio &&
#ifdef OS_ANDROID
other.bottom_controls_height == bottom_controls_height &&
other.bottom_controls_shown_ratio == bottom_controls_shown_ratio &&
other.selection == selection &&
other.has_transparent_background == has_transparent_background &&
#endif
other.size == size;
}
bool RenderWidgetSurfaceProperties::operator!=(
const RenderWidgetSurfaceProperties& other) const {
return !(*this == other);
}
std::string RenderWidgetSurfaceProperties::ToDiffString(
const RenderWidgetSurfaceProperties& other) const {
if (*this == other)
return std::string();
std::ostringstream stream;
stream << "RenderWidgetSurfaceProperties(";
uint32_t changed_properties = 0;
if (size != other.size) {
stream << "size(this: " << size.ToString()
<< ", other: " << other.size.ToString() << ")";
++changed_properties;
}
if (device_scale_factor != other.device_scale_factor) {
if (changed_properties > 0)
stream << ", ";
stream << "device_scale_factor(this: " << device_scale_factor
<< ", other: " << other.device_scale_factor << ")";
++changed_properties;
}
if (top_controls_height != other.top_controls_height) {
if (changed_properties > 0)
stream << ", ";
stream << "top_controls_height(this: " << top_controls_height
<< ", other: " << other.top_controls_height << ")";
++changed_properties;
}
if (top_controls_shown_ratio != other.top_controls_shown_ratio) {
if (changed_properties > 0)
stream << ", ";
stream << "top_controls_shown_ratio(this: " << top_controls_shown_ratio
<< ", other: " << other.top_controls_shown_ratio << ")";
++changed_properties;
}
#ifdef OS_ANDROID
if (bottom_controls_height != other.bottom_controls_height) {
if (changed_properties > 0)
stream << ", ";
stream << "bottom_controls_height(this: " << bottom_controls_height
<< ", other: " << other.bottom_controls_height << ")";
++changed_properties;
}
if (bottom_controls_shown_ratio != other.bottom_controls_shown_ratio) {
if (changed_properties > 0)
stream << ", ";
stream << "bottom_controls_shown_ratio(this: "
<< bottom_controls_shown_ratio
<< ", other: " << other.bottom_controls_shown_ratio << ")";
++changed_properties;
}
if (selection != other.selection) {
if (changed_properties > 0)
stream << ", ";
stream << "selection(this: " << selection.ToString()
<< ", other: " << other.selection.ToString() << ")";
++changed_properties;
}
if (has_transparent_background != other.has_transparent_background) {
if (changed_properties > 0)
stream << ", ";
stream << "has_transparent_background(this: " << has_transparent_background
<< ", other: " << other.has_transparent_background << ")";
++changed_properties;
}
#endif
stream << ")";
return stream.str();
}
} // namespace content