Commit d2a810ba authored by Fady Samuel's avatar Fady Samuel Committed by Commit Bot

Surface synchronization: Plumb has_transparent_background

This CL plumbs the has_transparent_background bit through RenderFrameMetadata
on android when surface synchronization is enabled. This enables the correct
background color to be displayed when surface sync is on on android.

Bug: 672962
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Id8ca61371cbe04a7ea58fbbf255bf80f6208e2b8
Reviewed-on: https://chromium-review.googlesource.com/1100065
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Reviewed-by: default avatarSaman Sami <samans@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#567080}
parent 7edf264a
......@@ -1917,7 +1917,8 @@ viz::CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() {
return metadata;
}
RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata() {
RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata(
FrameData* frame) {
RenderFrameMetadata metadata;
metadata.root_scroll_offset =
gfx::ScrollOffsetToVector2dF(active_tree_->TotalScrollOffset());
......@@ -1934,6 +1935,8 @@ RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata() {
metadata.root_overflow_y_hidden |=
!inner_viewport_scroll_node->user_scrollable_vertical;
}
metadata.has_transparent_background =
frame->render_passes.back()->has_transparent_background;
metadata.root_background_color = active_tree_->background_color();
metadata.is_scroll_offset_at_top = active_tree_->TotalScrollOffset().y() == 0;
......@@ -2052,7 +2055,7 @@ bool LayerTreeHostImpl::DrawLayers(FrameData* frame) {
DCHECK_EQ(metadata.frame_token + 1, next_frame_token_);
if (render_frame_metadata_observer_) {
last_draw_render_frame_metadata_ = MakeRenderFrameMetadata();
last_draw_render_frame_metadata_ = MakeRenderFrameMetadata(frame);
render_frame_metadata_observer_->OnRenderFrameSubmission(
*last_draw_render_frame_metadata_, &metadata);
}
......
......@@ -623,7 +623,7 @@ class CC_EXPORT LayerTreeHostImpl
void ScheduleMicroBenchmark(std::unique_ptr<MicroBenchmarkImpl> benchmark);
viz::CompositorFrameMetadata MakeCompositorFrameMetadata();
RenderFrameMetadata MakeRenderFrameMetadata();
RenderFrameMetadata MakeRenderFrameMetadata(FrameData* frame);
// Viewport rectangle and clip in device space. These rects are used to
// prioritize raster and determine what is submitted in a CompositorFrame.
......
......@@ -32,6 +32,7 @@ bool RenderFrameMetadata::HasAlwaysUpdateMetadataChanged(
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 ||
......@@ -60,6 +61,7 @@ bool RenderFrameMetadata::operator==(const RenderFrameMetadata& other) const {
root_overflow_y_hidden == other.root_overflow_y_hidden &&
scrollable_viewport_size == other.scrollable_viewport_size &&
root_layer_size == other.root_layer_size &&
has_transparent_background == other.has_transparent_background &&
is_mobile_optimized == other.is_mobile_optimized &&
device_scale_factor == other.device_scale_factor &&
viewport_size_in_pixels == other.viewport_size_in_pixels &&
......
......@@ -39,6 +39,10 @@ class CC_EXPORT RenderFrameMetadata {
// whether scroll_offset.y() == 0.
bool is_scroll_offset_at_top = true;
// Returns whether the root RenderPass of the CompositorFrame has a
// transparent background color.
bool has_transparent_background = false;
// The background color of a CompositorFrame. It can be used for filling the
// content area if the primary surface is unavailable and fallback is not
// specified.
......
......@@ -1233,7 +1233,6 @@ void RenderWidgetHostViewAndroid::OnFrameMetadataUpdated(
root_layer_size_dip, scrollable_viewport_size_dip, top_content_offset_dip,
top_shown_pix, controls_changed);
// TODO(fsamuel): Plumb the |is_transparent| flag through RenderFrameMetadata.
SetContentBackgroundColor(is_transparent ? SK_ColorTRANSPARENT
: metadata.root_background_color);
......@@ -1386,6 +1385,10 @@ void RenderWidgetHostViewAndroid::OnDidUpdateVisualPropertiesComplete(
metadata.top_controls_shown_ratio, metadata.bottom_controls_height,
metadata.bottom_controls_shown_ratio);
SetContentBackgroundColor(metadata.has_transparent_background
? SK_ColorTRANSPARENT
: metadata.root_background_color);
// All offsets and sizes except |top_shown_pix| are in CSS pixels.
gesture_listener_manager_->UpdateScrollInfo(
root_scroll_offset_dip, metadata.page_scale_factor,
......
......@@ -36,6 +36,9 @@ struct RenderFrameMetadata {
gfx.mojom.SizeF scrollable_viewport_size;
gfx.mojom.SizeF root_layer_size;
[EnableIf=is_android]
bool has_transparent_background;
// Determines whether the page is mobile optimized or not, which means at
// least one of the following has to be true:
// - page has a width=device-width or narrower viewport.
......
......@@ -4,6 +4,7 @@
#include "content/common/render_frame_metadata_struct_traits.h"
#include "build/build_config.h"
#include "services/viz/public/cpp/compositing/selection_struct_traits.h"
#include "ui/gfx/geometry/mojo/geometry_struct_traits.h"
#include "ui/gfx/mojo/selection_bound_struct_traits.h"
......@@ -27,6 +28,9 @@ bool StructTraits<content::mojom::RenderFrameMetadataDataView,
out->top_controls_shown_ratio = data.top_controls_shown_ratio();
out->bottom_controls_height = data.bottom_controls_height();
out->bottom_controls_shown_ratio = data.bottom_controls_shown_ratio();
#if defined(OS_ANDROID)
out->has_transparent_background = data.has_transparent_background();
#endif
return data.ReadRootScrollOffset(&out->root_scroll_offset) &&
data.ReadSelection(&out->selection) &&
data.ReadScrollableViewportSize(&out->scrollable_viewport_size) &&
......
......@@ -60,6 +60,11 @@ struct StructTraits<content::mojom::RenderFrameMetadataDataView,
return metadata.root_layer_size;
}
static bool has_transparent_background(
const cc::RenderFrameMetadata& metadata) {
return metadata.has_transparent_background;
}
static bool is_mobile_optimized(const cc::RenderFrameMetadata& metadata) {
return metadata.is_mobile_optimized;
}
......
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