Commit 66c0789b authored by Fady Samuel's avatar Fady Samuel Committed by Commit Bot

Surface Syncrhonization: Move HasAlwaysUpdateMetadataChanged out of RenderFrameMetadata

In a subsequent patch, the decision whether to ship a RenderFrameMetadata
to the browser process depends on on the scroll position relative to the edge
of the root layer. This complexity doesn't really belong in
cc::RenderFrameMetadata itself but rather its consumer. This CL moves the
code of whether to ship a RenderFrameMetadata out of the struct itself.

Bug: 672962
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I59b001088d3d83df7bd0dc9fe569e439af3fdeb9
Reviewed-on: https://chromium-review.googlesource.com/1115348Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Cr-Commit-Position: refs/heads/master@{#570478}
parent 07afaa1b
......@@ -17,32 +17,6 @@ RenderFrameMetadata::RenderFrameMetadata(RenderFrameMetadata&& other) = default;
RenderFrameMetadata::~RenderFrameMetadata() {}
// static
bool RenderFrameMetadata::HasAlwaysUpdateMetadataChanged(
const RenderFrameMetadata& rfm1,
const RenderFrameMetadata& rfm2) {
return rfm1.root_background_color != rfm2.root_background_color ||
rfm1.is_scroll_offset_at_top != rfm2.is_scroll_offset_at_top ||
rfm1.selection != rfm2.selection ||
rfm1.page_scale_factor != rfm2.page_scale_factor ||
#if defined(OS_ANDROID)
rfm1.top_controls_height != rfm2.top_controls_height ||
rfm1.top_controls_shown_ratio != rfm2.top_controls_shown_ratio ||
rfm1.bottom_controls_height != rfm2.bottom_controls_height ||
rfm1.bottom_controls_shown_ratio != rfm2.bottom_controls_shown_ratio ||
rfm1.min_page_scale_factor != rfm2.min_page_scale_factor ||
rfm1.max_page_scale_factor != rfm2.max_page_scale_factor ||
rfm1.root_overflow_y_hidden != rfm2.root_overflow_y_hidden ||
rfm1.scrollable_viewport_size != rfm2.scrollable_viewport_size ||
rfm1.root_layer_size != rfm2.root_layer_size ||
rfm1.has_transparent_background != rfm2.has_transparent_background ||
#endif
rfm1.is_mobile_optimized != rfm2.is_mobile_optimized ||
rfm1.device_scale_factor != rfm2.device_scale_factor ||
rfm1.viewport_size_in_pixels != rfm2.viewport_size_in_pixels ||
rfm1.local_surface_id != rfm2.local_surface_id;
}
RenderFrameMetadata& RenderFrameMetadata::operator=(
const RenderFrameMetadata&) = default;
......
......@@ -25,12 +25,6 @@ class CC_EXPORT RenderFrameMetadata {
RenderFrameMetadata(RenderFrameMetadata&& other);
~RenderFrameMetadata();
// Certain fields should always have their changes reported. This will return
// true when there is a difference between |rfm1| and |rfm2| for those fields.
// These fields have a low frequency rate of change.
static bool HasAlwaysUpdateMetadataChanged(const RenderFrameMetadata& rfm1,
const RenderFrameMetadata& rfm2);
RenderFrameMetadata& operator=(const RenderFrameMetadata&);
RenderFrameMetadata& operator=(RenderFrameMetadata&& other);
bool operator==(const RenderFrameMetadata& other) const;
......
......@@ -14,3 +14,4 @@ per-file render_view_impl.*=fsamuel@chromium.org
per-file render_widget.*=fsamuel@chromium.org
per-file child_frame_compositor.*=fsamuel@chromium.org
per-file child_frame_compositing_helper.*=fsamuel@chromium.org
per-file render_frame_metadata*=fsamuel@chromium.org
......@@ -4,6 +4,7 @@
#include "content/renderer/render_frame_metadata_observer_impl.h"
#include "build/build_config.h"
#include "components/viz/common/quads/compositor_frame_metadata.h"
namespace content {
......@@ -40,7 +41,7 @@ void RenderFrameMetadataObserverImpl::OnRenderFrameSubmission(
*last_render_frame_metadata_ != render_frame_metadata;
} else {
send_metadata = !last_render_frame_metadata_ ||
cc::RenderFrameMetadata::HasAlwaysUpdateMetadataChanged(
ShouldSendRenderFrameMetadata(
*last_render_frame_metadata_, render_frame_metadata);
}
}
......@@ -89,4 +90,30 @@ void RenderFrameMetadataObserverImpl::ReportAllFrameSubmissionsForTesting(
last_frame_token_, *last_render_frame_metadata_);
}
// static
bool RenderFrameMetadataObserverImpl::ShouldSendRenderFrameMetadata(
const cc::RenderFrameMetadata& rfm1,
const cc::RenderFrameMetadata& rfm2) {
return rfm1.root_background_color != rfm2.root_background_color ||
rfm1.is_scroll_offset_at_top != rfm2.is_scroll_offset_at_top ||
rfm1.selection != rfm2.selection ||
rfm1.page_scale_factor != rfm2.page_scale_factor ||
#if defined(OS_ANDROID)
rfm1.top_controls_height != rfm2.top_controls_height ||
rfm1.top_controls_shown_ratio != rfm2.top_controls_shown_ratio ||
rfm1.bottom_controls_height != rfm2.bottom_controls_height ||
rfm1.bottom_controls_shown_ratio != rfm2.bottom_controls_shown_ratio ||
rfm1.min_page_scale_factor != rfm2.min_page_scale_factor ||
rfm1.max_page_scale_factor != rfm2.max_page_scale_factor ||
rfm1.root_overflow_y_hidden != rfm2.root_overflow_y_hidden ||
rfm1.scrollable_viewport_size != rfm2.scrollable_viewport_size ||
rfm1.root_layer_size != rfm2.root_layer_size ||
rfm1.has_transparent_background != rfm2.has_transparent_background ||
#endif
rfm1.is_mobile_optimized != rfm2.is_mobile_optimized ||
rfm1.device_scale_factor != rfm2.device_scale_factor ||
rfm1.viewport_size_in_pixels != rfm2.viewport_size_in_pixels ||
rfm1.local_surface_id != rfm2.local_surface_id;
}
} // namespace content
......@@ -40,6 +40,13 @@ class RenderFrameMetadataObserverImpl
void ReportAllFrameSubmissionsForTesting(bool enabled) override;
private:
// Certain fields should always have their changes reported. This will return
// true when there is a difference between |rfm1| and |rfm2| for those fields.
// These fields have a low frequency rate of change.
static bool ShouldSendRenderFrameMetadata(
const cc::RenderFrameMetadata& rfm1,
const cc::RenderFrameMetadata& rfm2);
// When true this will notifiy |render_frame_metadata_observer_client_| of all
// frame submissions.
bool report_all_frame_submissions_for_testing_enabled_ = false;
......
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