Commit 8195eec9 authored by Fady Samuel's avatar Fady Samuel Committed by Commit Bot

Surface synchronization: Allocate new LocalSurfaceId on top bar controls change

In order to synchronize top/bottom bar controls with web content we need to allocate
a new LocalSurfaceId on the impl thread whenever the renderer compositor wants to
reposition them. This CL does so.

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I1cf41134ecaefa9df963769725b1af86c7739435
Bug: : 672962
Reviewed-on: https://chromium-review.googlesource.com/1058311
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Reviewed-by: default avatarAntoine Labour <piman@chromium.org>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558781}
parent 4d62f4f6
...@@ -1896,10 +1896,33 @@ RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata() { ...@@ -1896,10 +1896,33 @@ RenderFrameMetadata LayerTreeHostImpl::MakeRenderFrameMetadata() {
metadata.device_scale_factor = active_tree_->painted_device_scale_factor() * metadata.device_scale_factor = active_tree_->painted_device_scale_factor() *
active_tree_->device_scale_factor(); active_tree_->device_scale_factor();
metadata.viewport_size_in_pixels = device_viewport_size(); metadata.viewport_size_in_pixels = device_viewport_size();
const viz::LocalSurfaceId& local_surface_id = metadata.top_controls_height =
browser_controls_offset_manager_->TopControlsHeight();
metadata.top_controls_shown_ratio =
browser_controls_offset_manager_->TopControlsShownRatio();
metadata.bottom_controls_height =
browser_controls_offset_manager_->BottomControlsHeight();
metadata.bottom_controls_shown_ratio =
browser_controls_offset_manager_->BottomControlsShownRatio();
bool allocate_new_local_surface_id =
last_draw_render_frame_metadata_ &&
(last_draw_render_frame_metadata_->top_controls_height !=
metadata.top_controls_height ||
last_draw_render_frame_metadata_->top_controls_shown_ratio !=
metadata.top_controls_shown_ratio ||
last_draw_render_frame_metadata_->bottom_controls_height !=
metadata.bottom_controls_height ||
last_draw_render_frame_metadata_->bottom_controls_shown_ratio !=
metadata.bottom_controls_shown_ratio);
viz::LocalSurfaceId local_surface_id =
child_local_surface_id_allocator_.GetCurrentLocalSurfaceId(); child_local_surface_id_allocator_.GetCurrentLocalSurfaceId();
if (local_surface_id.is_valid()) if (local_surface_id.is_valid()) {
if (allocate_new_local_surface_id)
local_surface_id = child_local_surface_id_allocator_.GenerateId();
metadata.local_surface_id = local_surface_id; metadata.local_surface_id = local_surface_id;
}
active_tree_->GetViewportSelection(&metadata.selection); active_tree_->GetViewportSelection(&metadata.selection);
metadata.is_mobile_optimized = IsMobileOptimized(active_tree_.get()); metadata.is_mobile_optimized = IsMobileOptimized(active_tree_.get());
...@@ -1980,9 +2003,9 @@ bool LayerTreeHostImpl::DrawLayers(FrameData* frame) { ...@@ -1980,9 +2003,9 @@ bool LayerTreeHostImpl::DrawLayers(FrameData* frame) {
active_tree()->FinishSwapPromises(&metadata, &frame_token_allocator_); active_tree()->FinishSwapPromises(&metadata, &frame_token_allocator_);
if (render_frame_metadata_observer_) { if (render_frame_metadata_observer_) {
RenderFrameMetadata render_frame_metadata = MakeRenderFrameMetadata(); last_draw_render_frame_metadata_ = MakeRenderFrameMetadata();
render_frame_metadata_observer_->OnRenderFrameSubmission( render_frame_metadata_observer_->OnRenderFrameSubmission(
std::move(render_frame_metadata)); *last_draw_render_frame_metadata_);
} }
metadata.latency_info.emplace_back(ui::SourceEventType::FRAME); metadata.latency_info.emplace_back(ui::SourceEventType::FRAME);
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "cc/trees/layer_tree_settings.h" #include "cc/trees/layer_tree_settings.h"
#include "cc/trees/managed_memory_policy.h" #include "cc/trees/managed_memory_policy.h"
#include "cc/trees/mutator_host_client.h" #include "cc/trees/mutator_host_client.h"
#include "cc/trees/render_frame_metadata.h"
#include "cc/trees/task_runner_provider.h" #include "cc/trees/task_runner_provider.h"
#include "cc/trees/ukm_manager.h" #include "cc/trees/ukm_manager.h"
#include "components/viz/common/frame_sinks/begin_frame_args.h" #include "components/viz/common/frame_sinks/begin_frame_args.h"
...@@ -76,7 +77,6 @@ class PendingTreeDurationHistogramTimer; ...@@ -76,7 +77,6 @@ class PendingTreeDurationHistogramTimer;
class PendingTreeRasterDurationHistogramTimer; class PendingTreeRasterDurationHistogramTimer;
class RasterTilePriorityQueue; class RasterTilePriorityQueue;
class RasterBufferProvider; class RasterBufferProvider;
class RenderFrameMetadata;
class RenderFrameMetadataObserver; class RenderFrameMetadataObserver;
class RenderingStatsInstrumentation; class RenderingStatsInstrumentation;
class ResourcePool; class ResourcePool;
...@@ -1056,6 +1056,7 @@ class CC_EXPORT LayerTreeHostImpl ...@@ -1056,6 +1056,7 @@ class CC_EXPORT LayerTreeHostImpl
uint32_t last_presentation_token_ = 0u; uint32_t last_presentation_token_ = 0u;
viz::LocalSurfaceId last_draw_local_surface_id_; viz::LocalSurfaceId last_draw_local_surface_id_;
base::Optional<RenderFrameMetadata> last_draw_render_frame_metadata_;
viz::ChildLocalSurfaceIdAllocator child_local_surface_id_allocator_; viz::ChildLocalSurfaceIdAllocator child_local_surface_id_allocator_;
const int default_color_space_id_; const int default_color_space_id_;
......
...@@ -25,7 +25,11 @@ bool RenderFrameMetadata::HasAlwaysUpdateMetadataChanged( ...@@ -25,7 +25,11 @@ bool RenderFrameMetadata::HasAlwaysUpdateMetadataChanged(
rfm1.is_mobile_optimized != rfm2.is_mobile_optimized || rfm1.is_mobile_optimized != rfm2.is_mobile_optimized ||
rfm1.device_scale_factor != rfm2.device_scale_factor || rfm1.device_scale_factor != rfm2.device_scale_factor ||
rfm1.viewport_size_in_pixels != rfm2.viewport_size_in_pixels || rfm1.viewport_size_in_pixels != rfm2.viewport_size_in_pixels ||
rfm1.local_surface_id != rfm2.local_surface_id; rfm1.local_surface_id != rfm2.local_surface_id ||
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;
} }
RenderFrameMetadata& RenderFrameMetadata::operator=( RenderFrameMetadata& RenderFrameMetadata::operator=(
...@@ -42,7 +46,11 @@ bool RenderFrameMetadata::operator==(const RenderFrameMetadata& other) const { ...@@ -42,7 +46,11 @@ bool RenderFrameMetadata::operator==(const RenderFrameMetadata& other) const {
is_mobile_optimized == other.is_mobile_optimized && is_mobile_optimized == other.is_mobile_optimized &&
device_scale_factor == other.device_scale_factor && device_scale_factor == other.device_scale_factor &&
viewport_size_in_pixels == other.viewport_size_in_pixels && viewport_size_in_pixels == other.viewport_size_in_pixels &&
local_surface_id == other.local_surface_id; local_surface_id == other.local_surface_id &&
top_controls_height == other.top_controls_height &&
top_controls_shown_ratio == other.top_controls_shown_ratio &&
bottom_controls_height == other.bottom_controls_height &&
bottom_controls_shown_ratio == other.bottom_controls_shown_ratio;
} }
bool RenderFrameMetadata::operator!=(const RenderFrameMetadata& other) const { bool RenderFrameMetadata::operator!=(const RenderFrameMetadata& other) const {
......
...@@ -66,6 +66,16 @@ class CC_EXPORT RenderFrameMetadata { ...@@ -66,6 +66,16 @@ class CC_EXPORT RenderFrameMetadata {
// The last viz::LocalSurfaceId used to submit a CompositorFrame. // The last viz::LocalSurfaceId used to submit a CompositorFrame.
base::Optional<viz::LocalSurfaceId> local_surface_id; base::Optional<viz::LocalSurfaceId> local_surface_id;
// Used to position the Android location top bar and page content, whose
// precise position is computed by the renderer compositor.
float top_controls_height = 0.f;
float top_controls_shown_ratio = 0.f;
// Used to position Android bottom bar, whose position is computed by the
// renderer compositor.
float bottom_controls_height = 0.f;
float bottom_controls_shown_ratio = 0.f;
}; };
} // namespace cc } // namespace cc
......
...@@ -42,6 +42,16 @@ struct RenderFrameMetadata { ...@@ -42,6 +42,16 @@ struct RenderFrameMetadata {
// The last viz::LocalSurfaceId used to submit a CompositorFrame. // The last viz::LocalSurfaceId used to submit a CompositorFrame.
viz.mojom.LocalSurfaceId? local_surface_id; viz.mojom.LocalSurfaceId? local_surface_id;
// Used to position the Android location top bar and page content, whose
// precise position is computed by the renderer compositor.
float top_controls_height;
float top_controls_shown_ratio;
// Used to position Android bottom bar, whose position is computed by the
// renderer compositor.
float bottom_controls_height;
float bottom_controls_shown_ratio;
}; };
// This interface is provided by the renderer. It can optionally enable // This interface is provided by the renderer. It can optionally enable
......
...@@ -19,6 +19,10 @@ bool StructTraits<content::mojom::RenderFrameMetadataDataView, ...@@ -19,6 +19,10 @@ bool StructTraits<content::mojom::RenderFrameMetadataDataView,
out->is_scroll_offset_at_top = data.is_scroll_offset_at_top(); out->is_scroll_offset_at_top = data.is_scroll_offset_at_top();
out->is_mobile_optimized = data.is_mobile_optimized(); out->is_mobile_optimized = data.is_mobile_optimized();
out->device_scale_factor = data.device_scale_factor(); out->device_scale_factor = data.device_scale_factor();
out->top_controls_height = data.top_controls_height();
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();
return data.ReadRootScrollOffset(&out->root_scroll_offset) && return data.ReadRootScrollOffset(&out->root_scroll_offset) &&
data.ReadSelection(&out->selection) && data.ReadSelection(&out->selection) &&
data.ReadViewportSizeInPixels(&out->viewport_size_in_pixels) && data.ReadViewportSizeInPixels(&out->viewport_size_in_pixels) &&
......
...@@ -52,6 +52,24 @@ struct StructTraits<content::mojom::RenderFrameMetadataDataView, ...@@ -52,6 +52,24 @@ struct StructTraits<content::mojom::RenderFrameMetadataDataView,
return metadata.local_surface_id; return metadata.local_surface_id;
} }
static float top_controls_height(const cc::RenderFrameMetadata& metadata) {
return metadata.top_controls_height;
}
static float top_controls_shown_ratio(
const cc::RenderFrameMetadata& metadata) {
return metadata.top_controls_shown_ratio;
}
static float bottom_controls_height(const cc::RenderFrameMetadata& metadata) {
return metadata.bottom_controls_height;
}
static float bottom_controls_shown_ratio(
const cc::RenderFrameMetadata& metadata) {
return metadata.bottom_controls_shown_ratio;
}
static bool Read(content::mojom::RenderFrameMetadataDataView data, static bool Read(content::mojom::RenderFrameMetadataDataView data,
cc::RenderFrameMetadata* out); cc::RenderFrameMetadata* out);
}; };
......
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