Commit 5034502f authored by Vasiliy Telezhnikov's avatar Vasiliy Telezhnikov Committed by Commit Bot

aw: Track proper size for SurfaceQuad for viz

This CL fixes the size of SurfaceQuad that used to embed root renderer
content. Previously it was assumed to be viewport size, this CL changes
it to CompositorFrame size.

Bug: 805739
Change-Id: I035f5928bd2cb57c6cc6ffd301d8f6e363d28ca2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2096114Reviewed-by: default avatarBo <boliu@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748803}
parent 355b2e48
......@@ -59,7 +59,6 @@ class HardwareRendererViz::OnViz : public viz::DisplayClient {
void DrawAndSwapOnViz(const gfx::Size& viewport,
const gfx::Rect& clip,
const gfx::Transform& transform,
const gfx::Size& frame_size,
const viz::SurfaceId& child_id,
float device_scale_factor,
const gfx::ColorSpace& color_space,
......@@ -136,7 +135,6 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz(
const gfx::Size& viewport,
const gfx::Rect& clip,
const gfx::Transform& transform,
const gfx::Size& frame_size,
const viz::SurfaceId& child_id,
float device_scale_factor,
const gfx::ColorSpace& color_space,
......@@ -152,6 +150,8 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz(
without_gpu_->SubmitChildCompositorFrame(child_frame);
}
gfx::Size frame_size = without_gpu_->GetChildFrameSize();
if (!child_frame->copy_requests.empty()) {
viz::FrameSinkManagerImpl* manager = GetFrameSinkManager();
CopyOutputRequestQueue requests;
......@@ -344,8 +344,8 @@ void HardwareRendererViz::DrawAndSwap(HardwareRendererDrawParams* params) {
VizCompositorThreadRunnerWebView::GetInstance()->ScheduleOnVizAndBlock(
base::BindOnce(&HardwareRendererViz::OnViz::DrawAndSwapOnViz,
base::Unretained(on_viz_.get()), viewport, clip, transform,
viewport, surface_id_, device_scale_factor_,
params->color_space, child_frame_.get()));
surface_id_, device_scale_factor_, params->color_space,
child_frame_.get()));
output_surface_provider_.gl_surface()->MaybeDidPresent(
gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta(),
......
......@@ -33,7 +33,6 @@ class HardwareRendererViz : public HardwareRenderer {
bool IsUsingVulkan() const;
// Information about last delegated frame.
gfx::Size surface_size_;
float device_scale_factor_ = 0;
viz::SurfaceId surface_id_;
......
......@@ -59,12 +59,23 @@ class RootFrameSink::ChildCompositorFrameSink
uint32_t layer_tree_frame_sink_id() { return layer_tree_frame_sink_id_; }
viz::CompositorFrameSinkSupport* support() { return support_.get(); }
gfx::Size size() { return size_; }
void SubmitCompositorFrame(
const viz::LocalSurfaceId& local_surface_id,
viz::CompositorFrame frame,
base::Optional<viz::HitTestRegionList> hit_test_region_list) {
size_ = frame.size_in_pixels();
support()->SubmitCompositorFrame(local_surface_id, std::move(frame),
std::move(hit_test_region_list));
}
private:
RootFrameSink* const owner_;
const uint32_t layer_tree_frame_sink_id_;
const viz::FrameSinkId frame_sink_id_;
std::unique_ptr<viz::CompositorFrameSinkSupport> support_;
gfx::Size size_;
};
RootFrameSink::RootFrameSink(RootFrameSinkClient* client)
......@@ -197,7 +208,7 @@ void RootFrameSink::SubmitChildCompositorFrame(ChildFrame* child_frame) {
child_frame->frame_sink_id);
}
child_sink_support_->support()->SubmitCompositorFrame(
child_sink_support_->SubmitCompositorFrame(
child_frame->local_surface_id, std::move(*child_frame->frame),
std::move(child_frame->hit_test_region_list));
child_frame->frame.reset();
......@@ -209,4 +220,12 @@ viz::FrameTimingDetailsMap RootFrameSink::TakeChildFrameTimingDetailsMap() {
return viz::FrameTimingDetailsMap();
}
gfx::Size RootFrameSink::GetChildFrameSize() {
// TODO(vasilyt): This is not going to work with VizFrameSubmissionForWebView.
if (child_sink_support_) {
return child_sink_support_->size();
}
return gfx::Size();
}
} // namespace android_webview
......@@ -60,6 +60,7 @@ class RootFrameSink : public base::RefCounted<RootFrameSink>,
void SubmitChildCompositorFrame(ChildFrame* child_frame);
viz::FrameTimingDetailsMap TakeChildFrameTimingDetailsMap();
gfx::Size GetChildFrameSize();
// viz::mojom::CompositorFrameSinkClient implementation.
void DidReceiveCompositorFrameAck(
......
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