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

Unified Diff: blimp/client/core/render_widget/blimp_render_widget.cc

Issue 2241623002: blimp: Move compositing, input and render widget feature to client/core. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
Index: blimp/client/core/render_widget/blimp_render_widget.cc
diff --git a/blimp/client/core/render_widget/blimp_render_widget.cc b/blimp/client/core/render_widget/blimp_render_widget.cc
new file mode 100644
index 0000000000000000000000000000000000000000..861b94e28ef8a429282a735ed8e02db218e2ea8b
--- /dev/null
+++ b/blimp/client/core/render_widget/blimp_render_widget.cc
@@ -0,0 +1,153 @@
+// Copyright 2016 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/core/render_widget/blimp_render_widget.h"
+
+#include "base/logging.h"
+#include "blimp/client/core/compositor/blob_image_serialization_processor.h"
+#include "blimp/client/core/compositor/compositor_deps_provider.h"
+#include "blimp/client/core/render_widget/blimp_render_widget_delegate.h"
+#include "cc/proto/compositor_message.pb.h"
+
+namespace blimp {
+namespace client {
+
+BlimpRenderWidget::BlimpRenderWidget(
+ int32_t render_widget_id,
+ CompositorDepsProvider* compositor_deps_provider,
+ BlimpRenderWidgetDelegate* delegate)
+ : render_widget_id_(render_widget_id),
+ compositor_deps_provider_(compositor_deps_provider),
+ delegate_(delegate) {
+ DCHECK(delegate_);
+
+ compositor_ = base::MakeUnique<BlimpCompositor>(
+ compositor_deps_provider->GetTaskGraphRunner(),
+ compositor_deps_provider_->GetGpuMemoryBufferManager(),
+ BlobImageSerializationProcessor::current(),
+ compositor_deps_provider_->GetLayerTreeSettings(),
+ compositor_deps_provider_->GetCompositorTaskRunner(), this);
+
+ if (compositor_deps_provider_->use_direct_rendering())
nyquist 2016/08/12 07:34:28 curlies throughout this file
Khushal 2016/08/13 00:03:22 Done.
+ direct_rendering_deps_ = base::MakeUnique<DirectRenderingDeps>(this);
+}
+
+BlimpRenderWidget::~BlimpRenderWidget() {}
+
+BlimpRenderWidget::DirectRenderingDeps::DirectRenderingDeps(
+ BlimpRenderWidget* render_widget)
+ : render_widget_(render_widget),
+ window_(gfx::kNullAcceleratedWidget),
+ visible_(false),
+ output_surface_request_pending_(false) {
+ DCHECK(render_widget_);
+}
+
+BlimpRenderWidget::DirectRenderingDeps::~DirectRenderingDeps() {}
+
+void BlimpRenderWidget::DirectRenderingDeps::SetAcceleratedWidget(
+ gfx::AcceleratedWidget widget) {
+ if (widget == gfx::kNullAcceleratedWidget &&
+ window_ == gfx::kNullAcceleratedWidget)
+ return;
nyquist 2016/08/12 07:34:28 braces
Khushal 2016/08/13 00:03:22 Done.
+
+ // If we did not have a widget, the compositor should not be visible.
+ DCHECK(window_ != gfx::kNullAcceleratedWidget ||
+ !render_widget_->compositor_->IsVisible());
+
+ // Release any references to the old widget.
+ UpdateVisibility(false);
+
+ window_ = widget;
+ UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget);
+}
+
+void BlimpRenderWidget::DirectRenderingDeps::SetVisible(bool visible) {
+ visible_ = visible;
+ UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget);
+}
+
+void BlimpRenderWidget::DirectRenderingDeps::RequestOutputSurface() {
+ DCHECK(!output_surface_request_pending_);
+ output_surface_request_pending_ = true;
+ HandlePendingOutputSurfaceRequest();
+}
+
+void BlimpRenderWidget::DirectRenderingDeps::
+ HandlePendingOutputSurfaceRequest() {
+ if (!output_surface_request_pending_)
+ return;
+
+ render_widget_->compositor_->SetOutputSurface(
+ render_widget_->compositor_deps_provider_
+ ->CreateDirectRenderingOutputSurface(window_));
+
+ output_surface_request_pending_ = false;
+}
+
+void BlimpRenderWidget::DirectRenderingDeps::UpdateVisibility(bool visible) {
+ if (visible) {
+ render_widget_->compositor_->SetVisible(true);
+ HandlePendingOutputSurfaceRequest();
+ } else {
+ render_widget_->compositor_->SetVisible(false);
+ render_widget_->compositor_->ReleaseOutputSurface();
+ }
+}
+
+int32_t BlimpRenderWidget::GetId() const {
+ return render_widget_id_;
+}
+
+void BlimpRenderWidget::SetAcceleratedWidget(gfx::AcceleratedWidget widget) {
+ DCHECK(direct_rendering_deps_);
+ direct_rendering_deps_->SetAcceleratedWidget(widget);
+}
+
+void BlimpRenderWidget::SetVisible(bool visible) {
+ if (direct_rendering_deps_)
+ direct_rendering_deps_->SetVisible(visible);
+ else
+ compositor_->SetVisible(visible);
+}
+
+// Move to the BlimpRenderWidgetView.
+bool BlimpRenderWidget::OnTouchEvent(const ui::MotionEvent& motion_event) {
+ if (compositor_->input_manager())
+ return compositor_->input_manager()->OnTouchEvent(motion_event);
+ return false;
+}
+
+void BlimpRenderWidget::OnCompositorMessageReceived(
+ std::unique_ptr<cc::proto::CompositorMessage> message) {
+ compositor_->OnCompositorMessageReceived(std::move(message));
+}
+
+void BlimpRenderWidget::DidCompleteSwapBuffers() {
+ delegate_->CompositorDidCompleteSwapBuffers();
+}
+
+void BlimpRenderWidget::DidCommitAndDrawFrame() {
+ // BlimpStats::GetInstance()->Add(BlimpStats::EventType::COMMIT, 1);
+}
+
+void BlimpRenderWidget::SendWebGestureEvent(
+ const blink::WebGestureEvent& gesture_event) {
+ delegate_->SendWebGestureEvent(this, gesture_event);
+}
+
+void BlimpRenderWidget::SendCompositorMessage(
+ const cc::proto::CompositorMessage& message) {
+ delegate_->SendCompositorMessage(this, message);
+}
+
+void BlimpRenderWidget::RequestOutputSurface() {
+ if (direct_rendering_deps_)
+ direct_rendering_deps_->RequestOutputSurface();
+
+ // TODO(khushalsagar): Add support for delegated rendering.
+}
+
+} // namespace client
+} // namespace blimp

Powered by Google App Engine
This is Rietveld 408576698