Index: blimp/client/feature/compositor/blimp_compositor.cc |
diff --git a/blimp/client/feature/compositor/blimp_compositor.cc b/blimp/client/feature/compositor/blimp_compositor.cc |
deleted file mode 100644 |
index edc742c04ae92b94e213ff05cb0ced659bf1f49e..0000000000000000000000000000000000000000 |
--- a/blimp/client/feature/compositor/blimp_compositor.cc |
+++ /dev/null |
@@ -1,268 +0,0 @@ |
-// Copyright 2015 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "blimp/client/feature/compositor/blimp_compositor.h" |
- |
-#include "base/bind_helpers.h" |
-#include "base/command_line.h" |
-#include "base/memory/ptr_util.h" |
-#include "base/numerics/safe_conversions.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/threading/thread.h" |
-#include "base/threading/thread_local.h" |
-#include "base/threading/thread_restrictions.h" |
-#include "base/threading/thread_task_runner_handle.h" |
-#include "blimp/client/feature/compositor/blimp_context_provider.h" |
-#include "blimp/client/feature/compositor/blimp_output_surface.h" |
-#include "cc/animation/animation_host.h" |
-#include "cc/layers/layer.h" |
-#include "cc/output/output_surface.h" |
-#include "cc/proto/compositor_message.pb.h" |
-#include "cc/trees/layer_tree_host.h" |
-#include "net/base/net_errors.h" |
-#include "ui/gl/gl_surface.h" |
- |
-namespace blimp { |
-namespace client { |
- |
-BlimpCompositor::BlimpCompositor(int render_widget_id, |
- BlimpCompositorClient* client) |
- : render_widget_id_(render_widget_id), |
- client_(client), |
- window_(gfx::kNullAcceleratedWidget), |
- host_should_be_visible_(false), |
- output_surface_request_pending_(false), |
- remote_proto_channel_receiver_(nullptr) {} |
- |
-BlimpCompositor::~BlimpCompositor() { |
- if (host_) |
- DestroyLayerTreeHost(); |
-} |
- |
-void BlimpCompositor::SetVisible(bool visible) { |
- host_should_be_visible_ = visible; |
- SetVisibleInternal(host_should_be_visible_); |
-} |
- |
-void BlimpCompositor::SetAcceleratedWidget(gfx::AcceleratedWidget widget) { |
- if (widget == window_) |
- return; |
- |
- DCHECK(window_ == gfx::kNullAcceleratedWidget); |
- window_ = widget; |
- |
- // The compositor should not be visible if there is no output surface. |
- DCHECK(!host_ || !host_->visible()); |
- |
- // This will properly set visibility and will build the output surface if |
- // necessary. |
- SetVisibleInternal(host_should_be_visible_); |
-} |
- |
-void BlimpCompositor::ReleaseAcceleratedWidget() { |
- if (window_ == gfx::kNullAcceleratedWidget) |
- return; |
- |
- // Hide the compositor and drop the output surface if necessary. |
- SetVisibleInternal(false); |
- |
- window_ = gfx::kNullAcceleratedWidget; |
-} |
- |
-bool BlimpCompositor::OnTouchEvent(const ui::MotionEvent& motion_event) { |
- if (input_manager_) |
- return input_manager_->OnTouchEvent(motion_event); |
- return false; |
-} |
- |
-void BlimpCompositor::WillBeginMainFrame() {} |
- |
-void BlimpCompositor::DidBeginMainFrame() {} |
- |
-void BlimpCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {} |
- |
-void BlimpCompositor::BeginMainFrameNotExpectedSoon() {} |
- |
-void BlimpCompositor::UpdateLayerTreeHost() {} |
- |
-void BlimpCompositor::ApplyViewportDeltas( |
- const gfx::Vector2dF& inner_delta, |
- const gfx::Vector2dF& outer_delta, |
- const gfx::Vector2dF& elastic_overscroll_delta, |
- float page_scale, |
- float top_controls_delta) {} |
- |
-void BlimpCompositor::RequestNewOutputSurface() { |
- output_surface_request_pending_ = true; |
- HandlePendingOutputSurfaceRequest(); |
-} |
- |
-void BlimpCompositor::DidInitializeOutputSurface() { |
-} |
- |
-void BlimpCompositor::DidFailToInitializeOutputSurface() {} |
- |
-void BlimpCompositor::WillCommit() {} |
- |
-void BlimpCompositor::DidCommit() {} |
- |
-void BlimpCompositor::DidCommitAndDrawFrame() { |
- client_->DidCommitAndDrawFrame(); |
-} |
- |
-void BlimpCompositor::DidCompleteSwapBuffers() { |
- client_->DidCompleteSwapBuffers(); |
-} |
- |
-void BlimpCompositor::DidCompletePageScaleAnimation() {} |
- |
-void BlimpCompositor::SetProtoReceiver(ProtoReceiver* receiver) { |
- remote_proto_channel_receiver_ = receiver; |
-} |
- |
-void BlimpCompositor::SendCompositorProto( |
- const cc::proto::CompositorMessage& proto) { |
- client_->SendCompositorMessage(render_widget_id_, proto); |
-} |
- |
-void BlimpCompositor::OnCompositorMessageReceived( |
- std::unique_ptr<cc::proto::CompositorMessage> message) { |
- DCHECK(message->has_to_impl()); |
- const cc::proto::CompositorMessageToImpl& to_impl_proto = |
- message->to_impl(); |
- |
- DCHECK(to_impl_proto.has_message_type()); |
- switch (to_impl_proto.message_type()) { |
- case cc::proto::CompositorMessageToImpl::UNKNOWN: |
- NOTIMPLEMENTED() << "Ignoring message of UNKNOWN type"; |
- break; |
- case cc::proto::CompositorMessageToImpl::INITIALIZE_IMPL: |
- DCHECK(!host_); |
- DCHECK(to_impl_proto.has_initialize_impl_message()); |
- |
- // Create the remote client LayerTreeHost for the compositor. |
- CreateLayerTreeHost(to_impl_proto.initialize_impl_message()); |
- break; |
- case cc::proto::CompositorMessageToImpl::CLOSE_IMPL: |
- DCHECK(host_); |
- |
- // Destroy the remote client LayerTreeHost for the compositor. |
- DestroyLayerTreeHost(); |
- break; |
- default: |
- // We should have a receiver if we're getting compositor messages that |
- // are not INITIALIZE_IMPL or CLOSE_IMPL. |
- DCHECK(remote_proto_channel_receiver_); |
- remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); |
- } |
-} |
- |
-void BlimpCompositor::SendWebGestureEvent( |
- const blink::WebGestureEvent& gesture_event) { |
- client_->SendWebGestureEvent(render_widget_id_, gesture_event); |
-} |
- |
-void BlimpCompositor::SetVisibleInternal(bool visible) { |
- if (!host_) |
- return; |
- |
- VLOG(1) << "Setting visibility to: " << visible |
- << " for render widget: " << render_widget_id_; |
- |
- if (visible && window_ != gfx::kNullAcceleratedWidget) { |
- // If we're supposed to be visible and we have a valid |
- // gfx::AcceleratedWidget make our compositor visible. If the compositor |
- // had an outstanding output surface request, trigger the request again so |
- // we build the output surface. |
- host_->SetVisible(true); |
- if (output_surface_request_pending_) |
- HandlePendingOutputSurfaceRequest(); |
- } else if (!visible) { |
- // If not visible, hide the compositor and have it drop it's output |
- // surface. |
- host_->SetVisible(false); |
- if (!host_->output_surface_lost()) { |
- host_->ReleaseOutputSurface(); |
- } |
- } |
-} |
- |
-void BlimpCompositor::CreateLayerTreeHost( |
- const cc::proto::InitializeImpl& initialize_message) { |
- DCHECK(!host_); |
- VLOG(1) << "Creating LayerTreeHost for render widget: " << render_widget_id_; |
- |
- // Create the LayerTreeHost |
- cc::LayerTreeHost::InitParams params; |
- params.client = this; |
- params.task_graph_runner = client_->GetTaskGraphRunner(); |
- params.gpu_memory_buffer_manager = client_->GetGpuMemoryBufferManager(); |
- params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); |
- params.image_serialization_processor = |
- client_->GetImageSerializationProcessor(); |
- params.settings = client_->GetLayerTreeSettings(); |
- params.animation_host = cc::AnimationHost::CreateMainInstance(); |
- |
- scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = |
- client_->GetCompositorTaskRunner(); |
- |
- host_ = |
- cc::LayerTreeHost::CreateRemoteClient(this /* remote_proto_channel */, |
- compositor_task_runner, ¶ms); |
- |
- // Now that we have a host, set the visiblity on it correctly. |
- SetVisibleInternal(host_should_be_visible_); |
- |
- DCHECK(!input_manager_); |
- input_manager_ = |
- BlimpInputManager::Create(this, |
- base::ThreadTaskRunnerHandle::Get(), |
- compositor_task_runner, |
- host_->GetInputHandler()); |
-} |
- |
-void BlimpCompositor::DestroyLayerTreeHost() { |
- DCHECK(host_); |
- VLOG(1) << "Destroying LayerTreeHost for render widget: " |
- << render_widget_id_; |
- // Tear down the output surface connection with the old LayerTreeHost |
- // instance. |
- SetVisibleInternal(false); |
- |
- // Destroy the old LayerTreeHost state. |
- host_.reset(); |
- |
- // Destroy the old input manager state. |
- // It is important to destroy the LayerTreeHost before destroying the input |
- // manager as it has a reference to the cc::InputHandlerClient owned by the |
- // BlimpInputManager. |
- input_manager_.reset(); |
- |
- // Reset other state. |
- output_surface_request_pending_ = false; |
- |
- // Make sure we don't have a receiver at this point. |
- DCHECK(!remote_proto_channel_receiver_); |
-} |
- |
-void BlimpCompositor::HandlePendingOutputSurfaceRequest() { |
- DCHECK(output_surface_request_pending_); |
- |
- // We might have had a request from a LayerTreeHost that was then |
- // hidden (and hidden means we don't have a native surface). |
- // Also make sure we only handle this once. |
- if (!host_->visible() || window_ == gfx::kNullAcceleratedWidget) |
- return; |
- |
- scoped_refptr<BlimpContextProvider> context_provider = |
- BlimpContextProvider::Create(window_, |
- client_->GetGpuMemoryBufferManager()); |
- |
- host_->SetOutputSurface( |
- base::WrapUnique(new BlimpOutputSurface(context_provider))); |
- output_surface_request_pending_ = false; |
-} |
- |
-} // namespace client |
-} // namespace blimp |