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))); |
} |
} |