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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "blimp/client/core/render_widget/blimp_render_widget.h"
6
7 #include "base/logging.h"
8 #include "blimp/client/core/compositor/blob_image_serialization_processor.h"
9 #include "blimp/client/core/compositor/compositor_deps_provider.h"
10 #include "blimp/client/core/render_widget/blimp_render_widget_delegate.h"
11 #include "cc/proto/compositor_message.pb.h"
12
13 namespace blimp {
14 namespace client {
15
16 BlimpRenderWidget::BlimpRenderWidget(
17 int32_t render_widget_id,
18 CompositorDepsProvider* compositor_deps_provider,
19 BlimpRenderWidgetDelegate* delegate)
20 : render_widget_id_(render_widget_id),
21 compositor_deps_provider_(compositor_deps_provider),
22 delegate_(delegate) {
23 DCHECK(delegate_);
24
25 compositor_ = base::MakeUnique<BlimpCompositor>(
26 compositor_deps_provider->GetTaskGraphRunner(),
27 compositor_deps_provider_->GetGpuMemoryBufferManager(),
28 BlobImageSerializationProcessor::current(),
29 compositor_deps_provider_->GetLayerTreeSettings(),
30 compositor_deps_provider_->GetCompositorTaskRunner(), this);
31
32 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.
33 direct_rendering_deps_ = base::MakeUnique<DirectRenderingDeps>(this);
34 }
35
36 BlimpRenderWidget::~BlimpRenderWidget() {}
37
38 BlimpRenderWidget::DirectRenderingDeps::DirectRenderingDeps(
39 BlimpRenderWidget* render_widget)
40 : render_widget_(render_widget),
41 window_(gfx::kNullAcceleratedWidget),
42 visible_(false),
43 output_surface_request_pending_(false) {
44 DCHECK(render_widget_);
45 }
46
47 BlimpRenderWidget::DirectRenderingDeps::~DirectRenderingDeps() {}
48
49 void BlimpRenderWidget::DirectRenderingDeps::SetAcceleratedWidget(
50 gfx::AcceleratedWidget widget) {
51 if (widget == gfx::kNullAcceleratedWidget &&
52 window_ == gfx::kNullAcceleratedWidget)
53 return;
nyquist 2016/08/12 07:34:28 braces
Khushal 2016/08/13 00:03:22 Done.
54
55 // If we did not have a widget, the compositor should not be visible.
56 DCHECK(window_ != gfx::kNullAcceleratedWidget ||
57 !render_widget_->compositor_->IsVisible());
58
59 // Release any references to the old widget.
60 UpdateVisibility(false);
61
62 window_ = widget;
63 UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget);
64 }
65
66 void BlimpRenderWidget::DirectRenderingDeps::SetVisible(bool visible) {
67 visible_ = visible;
68 UpdateVisibility(visible_ && window_ != gfx::kNullAcceleratedWidget);
69 }
70
71 void BlimpRenderWidget::DirectRenderingDeps::RequestOutputSurface() {
72 DCHECK(!output_surface_request_pending_);
73 output_surface_request_pending_ = true;
74 HandlePendingOutputSurfaceRequest();
75 }
76
77 void BlimpRenderWidget::DirectRenderingDeps::
78 HandlePendingOutputSurfaceRequest() {
79 if (!output_surface_request_pending_)
80 return;
81
82 render_widget_->compositor_->SetOutputSurface(
83 render_widget_->compositor_deps_provider_
84 ->CreateDirectRenderingOutputSurface(window_));
85
86 output_surface_request_pending_ = false;
87 }
88
89 void BlimpRenderWidget::DirectRenderingDeps::UpdateVisibility(bool visible) {
90 if (visible) {
91 render_widget_->compositor_->SetVisible(true);
92 HandlePendingOutputSurfaceRequest();
93 } else {
94 render_widget_->compositor_->SetVisible(false);
95 render_widget_->compositor_->ReleaseOutputSurface();
96 }
97 }
98
99 int32_t BlimpRenderWidget::GetId() const {
100 return render_widget_id_;
101 }
102
103 void BlimpRenderWidget::SetAcceleratedWidget(gfx::AcceleratedWidget widget) {
104 DCHECK(direct_rendering_deps_);
105 direct_rendering_deps_->SetAcceleratedWidget(widget);
106 }
107
108 void BlimpRenderWidget::SetVisible(bool visible) {
109 if (direct_rendering_deps_)
110 direct_rendering_deps_->SetVisible(visible);
111 else
112 compositor_->SetVisible(visible);
113 }
114
115 // Move to the BlimpRenderWidgetView.
116 bool BlimpRenderWidget::OnTouchEvent(const ui::MotionEvent& motion_event) {
117 if (compositor_->input_manager())
118 return compositor_->input_manager()->OnTouchEvent(motion_event);
119 return false;
120 }
121
122 void BlimpRenderWidget::OnCompositorMessageReceived(
123 std::unique_ptr<cc::proto::CompositorMessage> message) {
124 compositor_->OnCompositorMessageReceived(std::move(message));
125 }
126
127 void BlimpRenderWidget::DidCompleteSwapBuffers() {
128 delegate_->CompositorDidCompleteSwapBuffers();
129 }
130
131 void BlimpRenderWidget::DidCommitAndDrawFrame() {
132 // BlimpStats::GetInstance()->Add(BlimpStats::EventType::COMMIT, 1);
133 }
134
135 void BlimpRenderWidget::SendWebGestureEvent(
136 const blink::WebGestureEvent& gesture_event) {
137 delegate_->SendWebGestureEvent(this, gesture_event);
138 }
139
140 void BlimpRenderWidget::SendCompositorMessage(
141 const cc::proto::CompositorMessage& message) {
142 delegate_->SendCompositorMessage(this, message);
143 }
144
145 void BlimpRenderWidget::RequestOutputSurface() {
146 if (direct_rendering_deps_)
147 direct_rendering_deps_->RequestOutputSurface();
148
149 // TODO(khushalsagar): Add support for delegated rendering.
150 }
151
152 } // namespace client
153 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698