Index: ui/android/delegated_frame_host_android.cc |
diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_frame_host_android.cc |
index 46b1df3fada90a333b6db132ad82383b5ac93d0f..19483cd513aecd20a767d24bec0c6fb7f2858efd 100644 |
--- a/ui/android/delegated_frame_host_android.cc |
+++ b/ui/android/delegated_frame_host_android.cc |
@@ -11,7 +11,6 @@ |
#include "cc/layers/surface_layer.h" |
#include "cc/output/compositor_frame.h" |
#include "cc/output/copy_output_result.h" |
-#include "cc/surfaces/local_surface_id_allocator.h" |
#include "cc/surfaces/surface.h" |
#include "cc/surfaces/surface_id.h" |
#include "cc/surfaces/surface_manager.h" |
@@ -27,13 +26,12 @@ namespace { |
scoped_refptr<cc::SurfaceLayer> CreateSurfaceLayer( |
cc::SurfaceManager* surface_manager, |
- cc::SurfaceId surface_id, |
- const gfx::Size surface_size, |
+ cc::SurfaceInfo surface_info, |
bool surface_opaque) { |
// manager must outlive compositors using it. |
auto layer = cc::SurfaceLayer::Create(surface_manager->reference_factory()); |
- layer->SetPrimarySurfaceInfo(cc::SurfaceInfo(surface_id, 1.f, surface_size)); |
- layer->SetBounds(surface_size); |
+ layer->SetPrimarySurfaceInfo(surface_info); |
+ layer->SetBounds(surface_info.size_in_pixels()); |
layer->SetIsDrawable(true); |
layer->SetContentsOpaque(surface_opaque); |
@@ -63,7 +61,6 @@ DelegatedFrameHostAndroid::DelegatedFrameHostAndroid( |
DCHECK(view_); |
DCHECK(client_); |
- local_surface_id_allocator_.reset(new cc::LocalSurfaceIdAllocator()); |
surface_manager_->RegisterFrameSinkId(frame_sink_id_); |
CreateNewCompositorFrameSinkSupport(); |
} |
@@ -75,55 +72,24 @@ DelegatedFrameHostAndroid::~DelegatedFrameHostAndroid() { |
surface_manager_->InvalidateFrameSinkId(frame_sink_id_); |
} |
-DelegatedFrameHostAndroid::FrameData::FrameData() = default; |
- |
-DelegatedFrameHostAndroid::FrameData::~FrameData() = default; |
- |
void DelegatedFrameHostAndroid::SubmitCompositorFrame( |
+ const cc::LocalSurfaceId& local_surface_id, |
cc::CompositorFrame frame) { |
- cc::RenderPass* root_pass = frame.render_pass_list.back().get(); |
- gfx::Size surface_size = root_pass->output_rect.size(); |
- |
- if (!current_frame_ || surface_size != current_frame_->surface_size || |
- current_frame_->top_controls_height != |
- frame.metadata.top_controls_height || |
- current_frame_->top_controls_shown_ratio != |
- frame.metadata.top_controls_shown_ratio || |
- current_frame_->bottom_controls_height != |
- frame.metadata.bottom_controls_height || |
- current_frame_->bottom_controls_shown_ratio != |
- frame.metadata.bottom_controls_shown_ratio || |
- current_frame_->viewport_selection != frame.metadata.selection || |
- current_frame_->has_transparent_background != |
- root_pass->has_transparent_background) { |
+ if (local_surface_id != surface_info_.id().local_surface_id()) { |
DestroyDelegatedContent(); |
DCHECK(!content_layer_); |
- DCHECK(!current_frame_); |
- |
- current_frame_ = base::MakeUnique<FrameData>(); |
- current_frame_->local_surface_id = |
- local_surface_id_allocator_->GenerateId(); |
- current_frame_->surface_size = surface_size; |
- current_frame_->top_controls_height = frame.metadata.top_controls_height; |
- current_frame_->top_controls_shown_ratio = |
- frame.metadata.top_controls_shown_ratio; |
- current_frame_->bottom_controls_height = |
- frame.metadata.bottom_controls_height; |
- current_frame_->bottom_controls_shown_ratio = |
- frame.metadata.bottom_controls_shown_ratio; |
- current_frame_->has_transparent_background = |
- root_pass->has_transparent_background; |
- current_frame_->viewport_selection = frame.metadata.selection; |
- |
- content_layer_ = CreateSurfaceLayer( |
- surface_manager_, |
- cc::SurfaceId(frame_sink_id_, current_frame_->local_surface_id), |
- current_frame_->surface_size, |
- !current_frame_->has_transparent_background); |
+ |
+ cc::RenderPass* root_pass = frame.render_pass_list.back().get(); |
+ gfx::Size frame_size = root_pass->output_rect.size(); |
+ surface_info_ = cc::SurfaceInfo( |
+ cc::SurfaceId(frame_sink_id_, local_surface_id), 1.f, frame_size); |
+ has_transparent_background_ = root_pass->has_transparent_background; |
+ |
+ content_layer_ = CreateSurfaceLayer(surface_manager_, surface_info_, |
+ !has_transparent_background_); |
view_->GetLayer()->AddChild(content_layer_); |
} |
- support_->SubmitCompositorFrame(current_frame_->local_surface_id, |
- std::move(frame)); |
+ support_->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
} |
cc::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const { |
@@ -134,14 +100,11 @@ void DelegatedFrameHostAndroid::RequestCopyOfSurface( |
WindowAndroidCompositor* compositor, |
const gfx::Rect& src_subrect_in_pixel, |
cc::CopyOutputRequest::CopyOutputRequestCallback result_callback) { |
- DCHECK(current_frame_); |
+ DCHECK(surface_info_.is_valid()); |
DCHECK(!result_callback.is_null()); |
scoped_refptr<cc::Layer> readback_layer = CreateSurfaceLayer( |
- surface_manager_, |
- cc::SurfaceId(frame_sink_id_, current_frame_->local_surface_id), |
- current_frame_->surface_size, |
- !current_frame_->has_transparent_background); |
+ surface_manager_, surface_info_, !has_transparent_background_); |
readback_layer->SetHideLayerAndSubtree(true); |
compositor->AttachLayerForReadback(readback_layer); |
std::unique_ptr<cc::CopyOutputRequest> copy_output_request = |
@@ -155,7 +118,7 @@ void DelegatedFrameHostAndroid::RequestCopyOfSurface( |
} |
void DelegatedFrameHostAndroid::DestroyDelegatedContent() { |
- if (!current_frame_) |
+ if (!surface_info_.is_valid()) |
return; |
DCHECK(content_layer_); |
@@ -163,11 +126,11 @@ void DelegatedFrameHostAndroid::DestroyDelegatedContent() { |
content_layer_->RemoveFromParent(); |
content_layer_ = nullptr; |
support_->EvictFrame(); |
- current_frame_.reset(); |
+ surface_info_ = cc::SurfaceInfo(); |
} |
bool DelegatedFrameHostAndroid::HasDelegatedContent() const { |
- return current_frame_.get() != nullptr; |
+ return surface_info_.is_valid(); |
} |
void DelegatedFrameHostAndroid::CompositorFrameSinkChanged() { |
@@ -228,7 +191,7 @@ void DelegatedFrameHostAndroid::CreateNewCompositorFrameSinkSupport() { |
} |
cc::SurfaceId DelegatedFrameHostAndroid::SurfaceId() const { |
- return cc::SurfaceId(frame_sink_id_, current_frame_->local_surface_id); |
+ return surface_info_.id(); |
} |
} // namespace ui |