Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: blimp/client/compositor/blimp_compositor.cc

Issue 1636163002: Restructure contents of blimp/client. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « blimp/client/compositor/blimp_compositor.h ('k') | blimp/client/compositor/blimp_compositor_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(), &params);
-
- // 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
« no previous file with comments | « blimp/client/compositor/blimp_compositor.h ('k') | blimp/client/compositor/blimp_compositor_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698