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 { ...@@ -59,7 +59,6 @@ class HardwareRendererViz::OnViz : public viz::DisplayClient {
void DrawAndSwapOnViz(const gfx::Size& viewport, void DrawAndSwapOnViz(const gfx::Size& viewport,
const gfx::Rect& clip, const gfx::Rect& clip,
const gfx::Transform& transform, const gfx::Transform& transform,
const gfx::Size& frame_size,
const viz::SurfaceId& child_id, const viz::SurfaceId& child_id,
float device_scale_factor, float device_scale_factor,
const gfx::ColorSpace& color_space, const gfx::ColorSpace& color_space,
...@@ -136,7 +135,6 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz( ...@@ -136,7 +135,6 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz(
const gfx::Size& viewport, const gfx::Size& viewport,
const gfx::Rect& clip, const gfx::Rect& clip,
const gfx::Transform& transform, const gfx::Transform& transform,
const gfx::Size& frame_size,
const viz::SurfaceId& child_id, const viz::SurfaceId& child_id,
float device_scale_factor, float device_scale_factor,
const gfx::ColorSpace& color_space, const gfx::ColorSpace& color_space,
...@@ -152,6 +150,8 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz( ...@@ -152,6 +150,8 @@ void HardwareRendererViz::OnViz::DrawAndSwapOnViz(
without_gpu_->SubmitChildCompositorFrame(child_frame); without_gpu_->SubmitChildCompositorFrame(child_frame);
} }
gfx::Size frame_size = without_gpu_->GetChildFrameSize();
if (!child_frame->copy_requests.empty()) { if (!child_frame->copy_requests.empty()) {
viz::FrameSinkManagerImpl* manager = GetFrameSinkManager(); viz::FrameSinkManagerImpl* manager = GetFrameSinkManager();
CopyOutputRequestQueue requests; CopyOutputRequestQueue requests;
...@@ -344,8 +344,8 @@ void HardwareRendererViz::DrawAndSwap(HardwareRendererDrawParams* params) { ...@@ -344,8 +344,8 @@ void HardwareRendererViz::DrawAndSwap(HardwareRendererDrawParams* params) {
VizCompositorThreadRunnerWebView::GetInstance()->ScheduleOnVizAndBlock( VizCompositorThreadRunnerWebView::GetInstance()->ScheduleOnVizAndBlock(
base::BindOnce(&HardwareRendererViz::OnViz::DrawAndSwapOnViz, base::BindOnce(&HardwareRendererViz::OnViz::DrawAndSwapOnViz,
base::Unretained(on_viz_.get()), viewport, clip, transform, base::Unretained(on_viz_.get()), viewport, clip, transform,
viewport, surface_id_, device_scale_factor_, surface_id_, device_scale_factor_, params->color_space,
params->color_space, child_frame_.get())); child_frame_.get()));
output_surface_provider_.gl_surface()->MaybeDidPresent( output_surface_provider_.gl_surface()->MaybeDidPresent(
gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta(), gfx::PresentationFeedback(base::TimeTicks::Now(), base::TimeDelta(),
......
...@@ -33,7 +33,6 @@ class HardwareRendererViz : public HardwareRenderer { ...@@ -33,7 +33,6 @@ class HardwareRendererViz : public HardwareRenderer {
bool IsUsingVulkan() const; bool IsUsingVulkan() const;
// Information about last delegated frame. // Information about last delegated frame.
gfx::Size surface_size_;
float device_scale_factor_ = 0; float device_scale_factor_ = 0;
viz::SurfaceId surface_id_; viz::SurfaceId surface_id_;
......
...@@ -59,12 +59,23 @@ class RootFrameSink::ChildCompositorFrameSink ...@@ -59,12 +59,23 @@ class RootFrameSink::ChildCompositorFrameSink
uint32_t layer_tree_frame_sink_id() { return layer_tree_frame_sink_id_; } uint32_t layer_tree_frame_sink_id() { return layer_tree_frame_sink_id_; }
viz::CompositorFrameSinkSupport* support() { return support_.get(); } 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: private:
RootFrameSink* const owner_; RootFrameSink* const owner_;
const uint32_t layer_tree_frame_sink_id_; const uint32_t layer_tree_frame_sink_id_;
const viz::FrameSinkId frame_sink_id_; const viz::FrameSinkId frame_sink_id_;
std::unique_ptr<viz::CompositorFrameSinkSupport> support_; std::unique_ptr<viz::CompositorFrameSinkSupport> support_;
gfx::Size size_;
}; };
RootFrameSink::RootFrameSink(RootFrameSinkClient* client) RootFrameSink::RootFrameSink(RootFrameSinkClient* client)
...@@ -197,7 +208,7 @@ void RootFrameSink::SubmitChildCompositorFrame(ChildFrame* child_frame) { ...@@ -197,7 +208,7 @@ void RootFrameSink::SubmitChildCompositorFrame(ChildFrame* child_frame) {
child_frame->frame_sink_id); child_frame->frame_sink_id);
} }
child_sink_support_->support()->SubmitCompositorFrame( child_sink_support_->SubmitCompositorFrame(
child_frame->local_surface_id, std::move(*child_frame->frame), child_frame->local_surface_id, std::move(*child_frame->frame),
std::move(child_frame->hit_test_region_list)); std::move(child_frame->hit_test_region_list));
child_frame->frame.reset(); child_frame->frame.reset();
...@@ -209,4 +220,12 @@ viz::FrameTimingDetailsMap RootFrameSink::TakeChildFrameTimingDetailsMap() { ...@@ -209,4 +220,12 @@ viz::FrameTimingDetailsMap RootFrameSink::TakeChildFrameTimingDetailsMap() {
return viz::FrameTimingDetailsMap(); 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 } // namespace android_webview
...@@ -60,6 +60,7 @@ class RootFrameSink : public base::RefCounted<RootFrameSink>, ...@@ -60,6 +60,7 @@ class RootFrameSink : public base::RefCounted<RootFrameSink>,
void SubmitChildCompositorFrame(ChildFrame* child_frame); void SubmitChildCompositorFrame(ChildFrame* child_frame);
viz::FrameTimingDetailsMap TakeChildFrameTimingDetailsMap(); viz::FrameTimingDetailsMap TakeChildFrameTimingDetailsMap();
gfx::Size GetChildFrameSize();
// viz::mojom::CompositorFrameSinkClient implementation. // viz::mojom::CompositorFrameSinkClient implementation.
void DidReceiveCompositorFrameAck( 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