Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(356)

Unified Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 2096493002: Make cc::CompositorFrames movable [Part 1 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Dana's nits Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/renderer_host/render_widget_host_view_android.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index a1ab3b85928599c176b4cb225134e8bb0e328a1e..0a02371dbabe3a326bde2fe762bc2e9c24647ab0 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -289,7 +289,7 @@ gfx::RectF GetSelectionRect(const ui::TouchSelectionController& controller) {
RenderWidgetHostViewAndroid::LastFrameInfo::LastFrameInfo(
uint32_t output_id,
- std::unique_ptr<cc::CompositorFrame> output_frame)
+ cc::CompositorFrame output_frame)
: output_surface_id(output_id), frame(std::move(output_frame)) {}
RenderWidgetHostViewAndroid::LastFrameInfo::~LastFrameInfo() {}
@@ -995,7 +995,7 @@ void RenderWidgetHostViewAndroid::CheckOutputSurfaceChanged(
}
void RenderWidgetHostViewAndroid::SubmitCompositorFrame(
- std::unique_ptr<cc::CompositorFrame> frame) {
+ cc::CompositorFrame frame) {
cc::SurfaceManager* manager = CompositorImpl::GetSurfaceManager();
if (!surface_factory_) {
surface_factory_ = base::WrapUnique(new cc::SurfaceFactory(manager, this));
@@ -1003,8 +1003,8 @@ void RenderWidgetHostViewAndroid::SubmitCompositorFrame(
if (surface_id_.is_null() ||
texture_size_in_layer_ != current_surface_size_ ||
location_bar_content_translation_ !=
- frame->metadata.location_bar_content_translation ||
- current_viewport_selection_ != frame->metadata.selection) {
+ frame.metadata.location_bar_content_translation ||
+ current_viewport_selection_ != frame.metadata.selection) {
RemoveLayers();
if (!surface_id_.is_null())
surface_factory_->Destroy(surface_id_);
@@ -1016,21 +1016,23 @@ void RenderWidgetHostViewAndroid::SubmitCompositorFrame(
current_surface_size_ = texture_size_in_layer_;
location_bar_content_translation_ =
- frame->metadata.location_bar_content_translation;
- current_viewport_selection_ = frame->metadata.selection;
+ frame.metadata.location_bar_content_translation;
+ current_viewport_selection_ = frame.metadata.selection;
AttachLayers();
}
cc::SurfaceFactory::DrawCallback ack_callback =
base::Bind(&RenderWidgetHostViewAndroid::RunAckCallbacks,
weak_ptr_factory_.GetWeakPtr());
- surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame),
+ std::unique_ptr<cc::CompositorFrame> frame_copy(new cc::CompositorFrame);
+ *frame_copy = std::move(frame);
+ surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame_copy),
ack_callback);
}
void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
uint32_t output_surface_id,
- std::unique_ptr<cc::CompositorFrame> frame) {
+ cc::CompositorFrame frame) {
CheckOutputSurfaceChanged(output_surface_id);
bool has_content = !texture_size_in_layer_.IsEmpty();
@@ -1040,7 +1042,7 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
// physical pixels and set our browser CC device_scale_factor to 1, so this
// suppresses the transform. This line may need to be removed when fixing
// http://crbug.com/384134 or http://crbug.com/310763
- frame->delegated_frame_data->device_scale_factor = 1.0f;
+ frame.delegated_frame_data->device_scale_factor = 1.0f;
base::Closure ack_callback =
base::Bind(&RenderWidgetHostViewAndroid::SendDelegatedFrameAck,
@@ -1067,9 +1069,9 @@ void RenderWidgetHostViewAndroid::SwapDelegatedFrame(
void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
uint32_t output_surface_id,
- std::unique_ptr<cc::CompositorFrame> frame) {
- last_scroll_offset_ = frame->metadata.root_scroll_offset;
- if (!frame->delegated_frame_data) {
+ cc::CompositorFrame frame) {
+ last_scroll_offset_ = frame.metadata.root_scroll_offset;
+ if (!frame.delegated_frame_data) {
LOG(ERROR) << "Non-delegated renderer path no longer supported";
return;
}
@@ -1082,32 +1084,32 @@ void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
if (!CompositorImpl::GetSurfaceManager() && layer_.get() &&
layer_->layer_tree_host()) {
- for (size_t i = 0; i < frame->metadata.latency_info.size(); i++) {
+ for (size_t i = 0; i < frame.metadata.latency_info.size(); i++) {
std::unique_ptr<cc::SwapPromise> swap_promise(
- new cc::LatencyInfoSwapPromise(frame->metadata.latency_info[i]));
+ new cc::LatencyInfoSwapPromise(frame.metadata.latency_info[i]));
layer_->layer_tree_host()->QueueSwapPromise(std::move(swap_promise));
}
}
- DCHECK(!frame->delegated_frame_data->render_pass_list.empty());
+ DCHECK(!frame.delegated_frame_data->render_pass_list.empty());
cc::RenderPass* root_pass =
- frame->delegated_frame_data->render_pass_list.back().get();
+ frame.delegated_frame_data->render_pass_list.back().get();
texture_size_in_layer_ = root_pass->output_rect.size();
- cc::CompositorFrameMetadata metadata = frame->metadata;
+ cc::CompositorFrameMetadata metadata = frame.metadata.Clone();
SwapDelegatedFrame(output_surface_id, std::move(frame));
frame_evictor_->SwappedFrame(!host_->is_hidden());
// As the metadata update may trigger view invalidation, always call it after
// any potential compositor scheduling.
- OnFrameMetadataUpdated(metadata);
+ OnFrameMetadataUpdated(std::move(metadata));
}
void RenderWidgetHostViewAndroid::OnSwapCompositorFrame(
uint32_t output_surface_id,
- std::unique_ptr<cc::CompositorFrame> frame) {
+ cc::CompositorFrame frame) {
InternalSwapCompositorFrame(output_surface_id, std::move(frame));
}
@@ -1115,9 +1117,8 @@ void RenderWidgetHostViewAndroid::ClearCompositorFrame() {
DestroyDelegatedContent();
}
-void RenderWidgetHostViewAndroid::RetainFrame(
- uint32_t output_surface_id,
- std::unique_ptr<cc::CompositorFrame> frame) {
+void RenderWidgetHostViewAndroid::RetainFrame(uint32_t output_surface_id,
+ cc::CompositorFrame frame) {
DCHECK(locks_on_frame_count_);
// Store the incoming frame so that it can be swapped when all the locks have
@@ -1138,13 +1139,13 @@ void RenderWidgetHostViewAndroid::RetainFrame(
}
void RenderWidgetHostViewAndroid::SynchronousFrameMetadata(
- const cc::CompositorFrameMetadata& frame_metadata) {
+ cc::CompositorFrameMetadata frame_metadata) {
if (!content_view_core_)
return;
// This is a subset of OnSwapCompositorFrame() used in the synchronous
// compositor flow.
- OnFrameMetadataUpdated(frame_metadata);
+ OnFrameMetadataUpdated(frame_metadata.Clone());
// DevTools ScreenCast support for Android WebView.
WebContents* web_contents = content_view_core_->GetWebContents();
@@ -1157,7 +1158,7 @@ void RenderWidgetHostViewAndroid::SynchronousFrameMetadata(
base::Bind(
&RenderFrameDevToolsAgentHost::SynchronousSwapCompositorFrame,
static_cast<RenderFrameDevToolsAgentHost*>(dtah.get()),
- frame_metadata));
+ base::Passed(&frame_metadata)));
}
}

Powered by Google App Engine
This is Rietveld 408576698