Index: blimp/client/compositor/blimp_compositor.cc |
diff --git a/blimp/client/compositor/blimp_compositor.cc b/blimp/client/compositor/blimp_compositor.cc |
deleted file mode 100644 |
index 6fdbe346f2a9d4dea28d9c5086b670c152df5dbd..0000000000000000000000000000000000000000 |
--- a/blimp/client/compositor/blimp_compositor.cc |
+++ /dev/null |
@@ -1,323 +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/compositor/blimp_compositor.h" |
- |
-#include "base/bind_helpers.h" |
-#include "base/command_line.h" |
-#include "base/lazy_instance.h" |
-#include "base/numerics/safe_conversions.h" |
-#include "base/single_thread_task_runner.h" |
-#include "base/thread_task_runner_handle.h" |
-#include "base/threading/thread.h" |
-#include "base/threading/thread_local.h" |
-#include "base/threading/thread_restrictions.h" |
-#include "blimp/client/compositor/blimp_context_provider.h" |
-#include "blimp/client/compositor/blimp_layer_tree_settings.h" |
-#include "blimp/client/compositor/blimp_output_surface.h" |
-#include "blimp/client/compositor/test/dummy_layer_driver.h" |
-#include "blimp/client/session/render_widget_feature.h" |
-#include "blimp/common/compositor/blimp_task_graph_runner.h" |
-#include "cc/layers/layer.h" |
-#include "cc/layers/layer_settings.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 { |
-namespace { |
- |
-base::LazyInstance<blimp::BlimpTaskGraphRunner> g_task_graph_runner = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-const int kDummyTabId = 0; |
- |
-// TODO(dtrainor): Replace this when Layer content comes from the server (see |
-// crbug.com/527200 for details). |
-base::LazyInstance<DummyLayerDriver> g_dummy_layer_driver = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-} // namespace |
- |
-BlimpCompositor::BlimpCompositor(float dp_to_px, |
- RenderWidgetFeature* render_widget_feature) |
- : device_scale_factor_(dp_to_px), |
- window_(gfx::kNullAcceleratedWidget), |
- host_should_be_visible_(false), |
- output_surface_request_pending_(false), |
- remote_proto_channel_receiver_(nullptr), |
- render_widget_feature_(render_widget_feature) { |
- render_widget_feature_->SetDelegate(kDummyTabId, this); |
-} |
- |
-BlimpCompositor::~BlimpCompositor() { |
- render_widget_feature_->RemoveDelegate(kDummyTabId); |
- SetVisible(false); |
- |
- // Destroy |host_| first, as it has a reference to the |settings_| and runs |
- // tasks on |compositor_thread_|. |
- host_.reset(); |
- settings_.reset(); |
- |
- // We must destroy |host_| before the |input_manager_|. |
- input_manager_.reset(); |
- |
- if (compositor_thread_) |
- compositor_thread_->Stop(); |
-} |
- |
-void BlimpCompositor::SetVisible(bool visible) { |
- // For testing. Remove once we bind to the network layer. |
- if (!host_) |
- CreateLayerTreeHost(nullptr); |
- |
- host_should_be_visible_ = visible; |
- if (!host_ || host_->visible() == visible) |
- return; |
- |
- if (visible) { |
- // If visible, show the compositor. 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 not visible, hide the compositor and have it drop it's output surface. |
- DCHECK(host_->visible()); |
- host_->SetVisible(false); |
- if (!host_->output_surface_lost()) |
- host_->ReleaseOutputSurface(); |
- } |
-} |
- |
-void BlimpCompositor::SetSize(const gfx::Size& size) { |
- viewport_size_ = size; |
- if (host_) |
- host_->SetViewportSize(viewport_size_); |
-} |
- |
-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. |
- SetVisible(host_should_be_visible_); |
-} |
- |
-void BlimpCompositor::ReleaseAcceleratedWidget() { |
- if (window_ == gfx::kNullAcceleratedWidget) |
- return; |
- |
- // Hide the compositor and drop the output surface if necessary. |
- SetVisible(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() {} |
- |
-void BlimpCompositor::DidCompleteSwapBuffers() {} |
- |
-void BlimpCompositor::DidCompletePageScaleAnimation() {} |
- |
-void BlimpCompositor::RecordFrameTimingEvents( |
- scoped_ptr<cc::FrameTimingTracker::CompositeTimingSet> composite_events, |
- scoped_ptr<cc::FrameTimingTracker::MainFrameTimingSet> main_frame_events) {} |
- |
-void BlimpCompositor::SetProtoReceiver(ProtoReceiver* receiver) { |
- remote_proto_channel_receiver_ = receiver; |
-} |
- |
-void BlimpCompositor::SendCompositorProto( |
- const cc::proto::CompositorMessage& proto) { |
- render_widget_feature_->SendCompositorMessage(kDummyTabId, proto); |
-} |
- |
-void BlimpCompositor::OnRenderWidgetInitialized() { |
- DVLOG(1) << "OnRenderWidgetInitialized"; |
- |
- // Tear down the output surface connection with the old LayerTreeHost |
- // instance. |
- SetVisible(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_); |
- |
- // TODO(khushalsagar): re-initialize compositor and input state for the new |
- // render widget. |
- SetVisible(true); |
-} |
- |
-void BlimpCompositor::OnCompositorMessageReceived( |
- scoped_ptr<cc::proto::CompositorMessage> message) { |
- // TODO(dtrainor, khushalsagar): Look into the CompositorMessage. If it is |
- // initialize or shutdown, create or destroy |host_|. |
- |
- // We should have a receiver if we're getting compositor messages that aren't |
- // initialize. |
- DCHECK(remote_proto_channel_receiver_); |
- remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); |
-} |
- |
-void BlimpCompositor::GenerateLayerTreeSettings( |
- cc::LayerTreeSettings* settings) { |
- PopulateCommonLayerTreeSettings(settings); |
-} |
- |
-void BlimpCompositor::SendWebInputEvent( |
- const blink::WebInputEvent& input_event) { |
- render_widget_feature_->SendInputEvent(kDummyTabId, input_event); |
-} |
- |
-void BlimpCompositor::CreateLayerTreeHost( |
- scoped_ptr<cc::proto::CompositorMessage> message) { |
- if (!settings_) { |
- settings_.reset(new cc::LayerTreeSettings); |
- GenerateLayerTreeSettings(settings_.get()); |
- } |
- |
- // Create the LayerTreeHost |
- cc::LayerTreeHost::InitParams params; |
- params.client = this; |
- params.task_graph_runner = g_task_graph_runner.Pointer(); |
- params.main_task_runner = base::ThreadTaskRunnerHandle::Get(); |
- params.settings = settings_.get(); |
- |
- // TODO(dtrainor): Swap this out with the remote client proxy when |
- // implemented. |
- host_ = |
- cc::LayerTreeHost::CreateThreaded(GetCompositorTaskRunner(), ¶ms); |
- |
- // If we're supposed to be visible and we have a valid gfx::AcceleratedWidget |
- // make our compositor visible. |
- if (host_should_be_visible_ && window_ != gfx::kNullAcceleratedWidget) |
- host_->SetVisible(true); |
- |
- host_->SetViewportSize(viewport_size_); |
- host_->SetDeviceScaleFactor(device_scale_factor_); |
- |
- // For testing, set the dummy Layer. |
- scoped_refptr<cc::Layer> root( |
- cc::Layer::Create(BlimpCompositor::LayerSettings())); |
- host_->SetRootLayer(root); |
- g_dummy_layer_driver.Pointer()->SetParentLayer(root); |
- |
- // TODO(khushalsagar): Create this after successful initialization of the |
- // remote client compositor when implemented. |
- DCHECK(!input_manager_); |
- input_manager_ = |
- BlimpInputManager::Create(this, |
- base::ThreadTaskRunnerHandle::Get(), |
- GetCompositorTaskRunner(), |
- host_->GetInputHandler()); |
-} |
- |
-scoped_refptr<base::SingleThreadTaskRunner> |
-BlimpCompositor::GetCompositorTaskRunner() { |
- if (compositor_thread_) |
- return compositor_thread_->task_runner(); |
- |
- base::Thread::Options thread_options; |
-#if defined(OS_ANDROID) |
- thread_options.priority = base::ThreadPriority::DISPLAY; |
-#endif |
- compositor_thread_.reset(new base::Thread("Compositor")); |
- compositor_thread_->StartWithOptions(thread_options); |
- |
- scoped_refptr<base::SingleThreadTaskRunner> task_runner = |
- compositor_thread_->task_runner(); |
- task_runner->PostTask( |
- FROM_HERE, |
- base::Bind(base::IgnoreResult(&base::ThreadRestrictions::SetIOAllowed), |
- false)); |
- // TODO(dtrainor): Determine whether or not we can disallow waiting. |
- |
- return task_runner; |
-} |
- |
-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_); |
- |
- host_->SetOutputSurface( |
- make_scoped_ptr(new BlimpOutputSurface(context_provider))); |
- output_surface_request_pending_ = false; |
-} |
- |
-cc::LayerSettings BlimpCompositor::LayerSettings() { |
- cc::LayerSettings settings; |
- settings.use_compositor_animation_timelines = true; |
- return settings; |
-} |
- |
-} // namespace client |
-} // namespace blimp |