OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "blimp/client/compositor/blimp_compositor.h" | 5 #include "blimp/client/compositor/blimp_compositor.h" |
6 | 6 |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
10 #include "base/numerics/safe_conversions.h" | 10 #include "base/numerics/safe_conversions.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 } | 64 } |
65 | 65 |
66 BlimpCompositor::~BlimpCompositor() { | 66 BlimpCompositor::~BlimpCompositor() { |
67 render_widget_processor_.RemoveDelegate(kDummyTabId); | 67 render_widget_processor_.RemoveDelegate(kDummyTabId); |
68 SetVisible(false); | 68 SetVisible(false); |
69 | 69 |
70 // Destroy |host_| first, as it has a reference to the |settings_| and runs | 70 // Destroy |host_| first, as it has a reference to the |settings_| and runs |
71 // tasks on |compositor_thread_|. | 71 // tasks on |compositor_thread_|. |
72 host_.reset(); | 72 host_.reset(); |
73 settings_.reset(); | 73 settings_.reset(); |
74 | |
75 // We must destroy |host_| before the |input_manager_|. | |
76 input_manager_.reset(); | |
77 | |
74 if (compositor_thread_) | 78 if (compositor_thread_) |
75 compositor_thread_->Stop(); | 79 compositor_thread_->Stop(); |
76 } | 80 } |
77 | 81 |
78 void BlimpCompositor::SetVisible(bool visible) { | 82 void BlimpCompositor::SetVisible(bool visible) { |
79 // For testing. Remove once we bind to the network layer. | 83 // For testing. Remove once we bind to the network layer. |
80 if (!host_) | 84 if (!host_) |
81 CreateLayerTreeHost(nullptr); | 85 CreateLayerTreeHost(nullptr); |
82 | 86 |
83 host_should_be_visible_ = visible; | 87 host_should_be_visible_ = visible; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
124 void BlimpCompositor::ReleaseAcceleratedWidget() { | 128 void BlimpCompositor::ReleaseAcceleratedWidget() { |
125 if (window_ == gfx::kNullAcceleratedWidget) | 129 if (window_ == gfx::kNullAcceleratedWidget) |
126 return; | 130 return; |
127 | 131 |
128 // Hide the compositor and drop the output surface if necessary. | 132 // Hide the compositor and drop the output surface if necessary. |
129 SetVisible(false); | 133 SetVisible(false); |
130 | 134 |
131 window_ = gfx::kNullAcceleratedWidget; | 135 window_ = gfx::kNullAcceleratedWidget; |
132 } | 136 } |
133 | 137 |
138 bool BlimpCompositor::OnTouchEvent(const ui::MotionEvent& motion_event) { | |
139 if (input_manager_) | |
140 return input_manager_->OnTouchEvent(motion_event); | |
141 return false; | |
142 } | |
143 | |
134 void BlimpCompositor::WillBeginMainFrame() {} | 144 void BlimpCompositor::WillBeginMainFrame() {} |
135 | 145 |
136 void BlimpCompositor::DidBeginMainFrame() {} | 146 void BlimpCompositor::DidBeginMainFrame() {} |
137 | 147 |
138 void BlimpCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {} | 148 void BlimpCompositor::BeginMainFrame(const cc::BeginFrameArgs& args) {} |
139 | 149 |
140 void BlimpCompositor::BeginMainFrameNotExpectedSoon() {} | 150 void BlimpCompositor::BeginMainFrameNotExpectedSoon() {} |
141 | 151 |
142 void BlimpCompositor::UpdateLayerTreeHost() {} | 152 void BlimpCompositor::UpdateLayerTreeHost() {} |
143 | 153 |
144 void BlimpCompositor::ApplyViewportDeltas( | 154 void BlimpCompositor::ApplyViewportDeltas( |
145 const gfx::Vector2dF& inner_delta, | 155 const gfx::Vector2dF& inner_delta, |
146 const gfx::Vector2dF& outer_delta, | 156 const gfx::Vector2dF& outer_delta, |
147 const gfx::Vector2dF& elastic_overscroll_delta, | 157 const gfx::Vector2dF& elastic_overscroll_delta, |
148 float page_scale, | 158 float page_scale, |
149 float top_controls_delta) {} | 159 float top_controls_delta) {} |
150 | 160 |
151 void BlimpCompositor::RequestNewOutputSurface() { | 161 void BlimpCompositor::RequestNewOutputSurface() { |
152 output_surface_request_pending_ = true; | 162 output_surface_request_pending_ = true; |
153 HandlePendingOutputSurfaceRequest(); | 163 HandlePendingOutputSurfaceRequest(); |
154 } | 164 } |
155 | 165 |
156 void BlimpCompositor::DidInitializeOutputSurface() { | 166 void BlimpCompositor::DidInitializeOutputSurface() { |
David Trainor- moved to gerrit
2015/12/03 16:14:04
revert?
Khushal
2015/12/04 21:54:51
Was this meant for another line?
| |
157 } | 167 } |
158 | 168 |
159 void BlimpCompositor::DidFailToInitializeOutputSurface() {} | 169 void BlimpCompositor::DidFailToInitializeOutputSurface() {} |
160 | 170 |
161 void BlimpCompositor::WillCommit() {} | 171 void BlimpCompositor::WillCommit() {} |
162 | 172 |
163 void BlimpCompositor::DidCommit() {} | 173 void BlimpCompositor::DidCommit() {} |
164 | 174 |
165 void BlimpCompositor::DidCommitAndDrawFrame() {} | 175 void BlimpCompositor::DidCommitAndDrawFrame() {} |
166 | 176 |
(...skipping 15 matching lines...) Expand all Loading... | |
182 } | 192 } |
183 | 193 |
184 void BlimpCompositor::OnRenderWidgetInitialized() { | 194 void BlimpCompositor::OnRenderWidgetInitialized() { |
185 // Tear down the output surface connection with the old LayerTreeHost | 195 // Tear down the output surface connection with the old LayerTreeHost |
186 // instance. | 196 // instance. |
187 SetVisible(false); | 197 SetVisible(false); |
188 | 198 |
189 // Destroy the old LayerTreeHost state. | 199 // Destroy the old LayerTreeHost state. |
190 host_.reset(); | 200 host_.reset(); |
191 | 201 |
202 // Destroy the old input manager state. | |
203 // It is important to destroy the LayerTreeHost before destroying the input | |
204 // manager as it has a reference to the cc::InputHandlerClient owned by the | |
205 // BlimpInputManager. | |
206 input_manager_.reset(); | |
207 | |
192 // Reset other state. | 208 // Reset other state. |
193 output_surface_request_pending_ = false; | 209 output_surface_request_pending_ = false; |
194 | 210 |
195 // Make sure we don't have a receiver at this point. | 211 // Make sure we don't have a receiver at this point. |
196 DCHECK(!remote_proto_channel_receiver_); | 212 DCHECK(!remote_proto_channel_receiver_); |
197 } | 213 } |
198 | 214 |
199 void BlimpCompositor::OnCompositorMessageReceived( | 215 void BlimpCompositor::OnCompositorMessageReceived( |
200 scoped_ptr<cc::proto::CompositorMessage> message) { | 216 scoped_ptr<cc::proto::CompositorMessage> message) { |
201 // TODO(dtrainor, khushalsagar): Look into the CompositorMessage. If it is | 217 // TODO(dtrainor, khushalsagar): Look into the CompositorMessage. If it is |
202 // initialize or shutdown, create or destroy |host_|. | 218 // initialize or shutdown, create or destroy |host_|. |
203 | 219 |
204 // We should have a receiver if we're getting compositor messages that aren't | 220 // We should have a receiver if we're getting compositor messages that aren't |
205 // initialize. | 221 // initialize. |
206 DCHECK(remote_proto_channel_receiver_); | 222 DCHECK(remote_proto_channel_receiver_); |
207 remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); | 223 remote_proto_channel_receiver_->OnProtoReceived(std::move(message)); |
208 } | 224 } |
209 | 225 |
210 void BlimpCompositor::GenerateLayerTreeSettings( | 226 void BlimpCompositor::GenerateLayerTreeSettings( |
211 cc::LayerTreeSettings* settings) { | 227 cc::LayerTreeSettings* settings) { |
212 PopulateCommonLayerTreeSettings(settings); | 228 PopulateCommonLayerTreeSettings(settings); |
213 } | 229 } |
214 | 230 |
231 void BlimpCompositor::SendWebInputEvent( | |
232 const blink::WebInputEvent& input_event) { | |
233 render_widget_processor_.SendInputEvent(kDummyTabId, input_event); | |
234 } | |
235 | |
215 void BlimpCompositor::CreateLayerTreeHost( | 236 void BlimpCompositor::CreateLayerTreeHost( |
216 scoped_ptr<cc::proto::CompositorMessage> message) { | 237 scoped_ptr<cc::proto::CompositorMessage> message) { |
217 if (!settings_) { | 238 if (!settings_) { |
218 settings_.reset(new cc::LayerTreeSettings); | 239 settings_.reset(new cc::LayerTreeSettings); |
219 GenerateLayerTreeSettings(settings_.get()); | 240 GenerateLayerTreeSettings(settings_.get()); |
220 } | 241 } |
221 | 242 |
222 // Create the LayerTreeHost | 243 // Create the LayerTreeHost |
223 cc::LayerTreeHost::InitParams params; | 244 cc::LayerTreeHost::InitParams params; |
224 params.client = this; | 245 params.client = this; |
(...skipping 12 matching lines...) Expand all Loading... | |
237 host_->SetVisible(true); | 258 host_->SetVisible(true); |
238 | 259 |
239 host_->SetViewportSize(viewport_size_); | 260 host_->SetViewportSize(viewport_size_); |
240 host_->SetDeviceScaleFactor(device_scale_factor_); | 261 host_->SetDeviceScaleFactor(device_scale_factor_); |
241 | 262 |
242 // For testing, set the dummy Layer. | 263 // For testing, set the dummy Layer. |
243 scoped_refptr<cc::Layer> root( | 264 scoped_refptr<cc::Layer> root( |
244 cc::Layer::Create(BlimpCompositor::LayerSettings())); | 265 cc::Layer::Create(BlimpCompositor::LayerSettings())); |
245 host_->SetRootLayer(root); | 266 host_->SetRootLayer(root); |
246 g_dummy_layer_driver.Pointer()->SetParentLayer(root); | 267 g_dummy_layer_driver.Pointer()->SetParentLayer(root); |
268 | |
269 // TODO(khushalsagar): Create this after successful initialization of the | |
270 // remote client compositor when implemented. | |
271 DCHECK(!input_manager_); | |
272 input_manager_ = | |
273 BlimpInputManager::Create(this, | |
274 base::ThreadTaskRunnerHandle::Get(), | |
275 GetCompositorTaskRunner(), | |
276 host_->GetInputHandler()); | |
247 } | 277 } |
248 | 278 |
249 scoped_refptr<base::SingleThreadTaskRunner> | 279 scoped_refptr<base::SingleThreadTaskRunner> |
250 BlimpCompositor::GetCompositorTaskRunner() { | 280 BlimpCompositor::GetCompositorTaskRunner() { |
251 if (compositor_thread_) | 281 if (compositor_thread_) |
252 return compositor_thread_->task_runner(); | 282 return compositor_thread_->task_runner(); |
253 | 283 |
254 base::Thread::Options thread_options; | 284 base::Thread::Options thread_options; |
255 #if defined(OS_ANDROID) | 285 #if defined(OS_ANDROID) |
256 thread_options.priority = base::ThreadPriority::DISPLAY; | 286 thread_options.priority = base::ThreadPriority::DISPLAY; |
(...skipping 29 matching lines...) Expand all Loading... | |
286 output_surface_request_pending_ = false; | 316 output_surface_request_pending_ = false; |
287 } | 317 } |
288 | 318 |
289 cc::LayerSettings BlimpCompositor::LayerSettings() { | 319 cc::LayerSettings BlimpCompositor::LayerSettings() { |
290 cc::LayerSettings settings; | 320 cc::LayerSettings settings; |
291 settings.use_compositor_animation_timelines = true; | 321 settings.use_compositor_animation_timelines = true; |
292 return settings; | 322 return settings; |
293 } | 323 } |
294 | 324 |
295 } // namespace blimp | 325 } // namespace blimp |
OLD | NEW |