| Index: cc/surfaces/surface.cc
|
| diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc
|
| index eed066f7b9b9aa1529a239a365e3983b4228b713..3db1e824a5fd03cd94fdf0c4a8889af80e2b39aa 100644
|
| --- a/cc/surfaces/surface.cc
|
| +++ b/cc/surfaces/surface.cc
|
| @@ -12,10 +12,9 @@
|
| #include "base/stl_util.h"
|
| #include "cc/output/compositor_frame.h"
|
| #include "cc/output/copy_output_request.h"
|
| +#include "cc/surfaces/compositor_frame_sink_support.h"
|
| #include "cc/surfaces/local_surface_id_allocator.h"
|
| #include "cc/surfaces/pending_frame_observer.h"
|
| -#include "cc/surfaces/surface_factory.h"
|
| -#include "cc/surfaces/surface_factory_client.h"
|
| #include "cc/surfaces/surface_manager.h"
|
| #include "cc/surfaces/surface_resource_holder_client.h"
|
|
|
| @@ -25,10 +24,12 @@ namespace cc {
|
| // completely damaged the first time they're drawn from.
|
| static const int kFrameIndexStart = 2;
|
|
|
| -Surface::Surface(const SurfaceId& id, base::WeakPtr<SurfaceFactory> factory)
|
| +Surface::Surface(
|
| + const SurfaceId& id,
|
| + base::WeakPtr<CompositorFrameSinkSupport> compositor_frame_sink_support)
|
| : surface_id_(id),
|
| previous_frame_surface_id_(id),
|
| - factory_(factory),
|
| + compositor_frame_sink_support_(std::move(compositor_frame_sink_support)),
|
| frame_index_(kFrameIndexStart),
|
| destroyed_(false) {}
|
|
|
| @@ -57,13 +58,13 @@ void Surface::Close() {
|
| }
|
|
|
| void Surface::QueueFrame(CompositorFrame frame,
|
| - const DrawCallback& callback,
|
| + const base::Closure& callback,
|
| const WillDrawCallback& will_draw_callback) {
|
| if (closed_) {
|
| - if (factory_ && factory_->resource_holder_client()) {
|
| + if (compositor_frame_sink_support_) {
|
| ReturnedResourceArray resources;
|
| TransferableResource::ReturnResources(frame.resource_list, &resources);
|
| - factory_->resource_holder_client()->ReturnResources(resources);
|
| + compositor_frame_sink_support_->ReturnResources(resources);
|
| }
|
| callback.Run();
|
| return;
|
| @@ -79,7 +80,7 @@ void Surface::QueueFrame(CompositorFrame frame,
|
|
|
| // Receive and track the resources referenced from the CompositorFrame
|
| // regardless of whether it's pending or active.
|
| - factory_->ReceiveFromChild(frame.resource_list);
|
| + compositor_frame_sink_support_->ReceiveFromChild(frame.resource_list);
|
|
|
| bool is_pending_frame = !blocking_surfaces_.empty();
|
|
|
| @@ -98,7 +99,9 @@ void Surface::QueueFrame(CompositorFrame frame,
|
| bool is_fallback_surface =
|
| frame_sink_ids_for_dependencies.count(surface_id.frame_sink_id()) > 0;
|
| if (is_fallback_surface) {
|
| - Surface* surface = factory_->manager()->GetSurfaceForId(surface_id);
|
| + Surface* surface =
|
| + compositor_frame_sink_support_->surface_manager()->GetSurfaceForId(
|
| + surface_id);
|
| DCHECK(surface);
|
| surface->Close();
|
| }
|
| @@ -107,7 +110,8 @@ void Surface::QueueFrame(CompositorFrame frame,
|
| FrameData(std::move(frame), callback, will_draw_callback);
|
| // Ask the surface manager to inform |this| when its dependencies are
|
| // resolved.
|
| - factory_->manager()->RequestSurfaceResolution(this);
|
| + compositor_frame_sink_support_->surface_manager()->RequestSurfaceResolution(
|
| + this);
|
| } else {
|
| // If there are no blockers, then immediately activate the frame.
|
| ActivateFrame(FrameData(std::move(frame), callback, will_draw_callback));
|
| @@ -175,7 +179,7 @@ void Surface::ActivatePendingFrameForDeadline() {
|
| }
|
|
|
| Surface::FrameData::FrameData(CompositorFrame&& frame,
|
| - const DrawCallback& draw_callback,
|
| + const base::Closure& draw_callback,
|
| const WillDrawCallback& will_draw_callback)
|
| : frame(std::move(frame)),
|
| draw_callback(draw_callback),
|
| @@ -197,7 +201,7 @@ void Surface::ActivatePendingFrame() {
|
| // deadline has hit and the frame was forcibly activated by the display
|
| // compositor.
|
| void Surface::ActivateFrame(FrameData frame_data) {
|
| - DCHECK(factory_);
|
| + DCHECK(compositor_frame_sink_support_);
|
|
|
| // Save root pass copy requests.
|
| std::vector<std::unique_ptr<CopyOutputRequest>> old_copy_requests;
|
| @@ -231,7 +235,8 @@ void Surface::UpdateBlockingSurfaces(bool has_previous_pending_frame,
|
| const CompositorFrame& current_frame) {
|
| // If there is no SurfaceDependencyTracker installed then the |current_frame|
|
| // does not block on anything.
|
| - if (!factory_->manager()->dependency_tracker()) {
|
| + if (!compositor_frame_sink_support_->surface_manager()
|
| + ->dependency_tracker()) {
|
| blocking_surfaces_.clear();
|
| return;
|
| }
|
| @@ -240,7 +245,9 @@ void Surface::UpdateBlockingSurfaces(bool has_previous_pending_frame,
|
|
|
| for (const SurfaceId& surface_id :
|
| current_frame.metadata.activation_dependencies) {
|
| - Surface* surface = factory_->manager()->GetSurfaceForId(surface_id);
|
| + Surface* surface =
|
| + compositor_frame_sink_support_->surface_manager()->GetSurfaceForId(
|
| + surface_id);
|
| // If a referenced surface does not have a corresponding active frame in the
|
| // display compositor, then it blocks this frame.
|
| if (!surface || !surface->HasActiveFrame())
|
| @@ -308,8 +315,8 @@ void Surface::TakeLatencyInfo(std::vector<ui::LatencyInfo>* latency_info) {
|
|
|
| void Surface::RunDrawCallback() {
|
| if (active_frame_data_ && !active_frame_data_->draw_callback.is_null()) {
|
| - DrawCallback callback = active_frame_data_->draw_callback;
|
| - active_frame_data_->draw_callback = DrawCallback();
|
| + base::Closure callback = active_frame_data_->draw_callback;
|
| + active_frame_data_->draw_callback = base::Closure();
|
| callback.Run();
|
| }
|
| }
|
| @@ -338,7 +345,7 @@ void Surface::SatisfyDestructionDependencies(
|
|
|
| void Surface::UnrefFrameResourcesAndRunDrawCallback(
|
| base::Optional<FrameData> frame_data) {
|
| - if (!frame_data || !factory_)
|
| + if (!frame_data || !compositor_frame_sink_support_)
|
| return;
|
|
|
| ReturnedResourceArray resources;
|
| @@ -347,7 +354,7 @@ void Surface::UnrefFrameResourcesAndRunDrawCallback(
|
| // No point in returning same sync token to sender.
|
| for (auto& resource : resources)
|
| resource.sync_token.Clear();
|
| - factory_->UnrefResources(resources);
|
| + compositor_frame_sink_support_->UnrefResources(resources);
|
|
|
| if (!frame_data->draw_callback.is_null())
|
| frame_data->draw_callback.Run();
|
|
|