OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/frame_host/render_widget_host_view_guest.h" |
| 6 |
| 7 #include <utility> |
| 8 |
5 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
6 #include "base/command_line.h" | 10 #include "base/command_line.h" |
7 #include "base/logging.h" | 11 #include "base/logging.h" |
8 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
9 #include "build/build_config.h" | 13 #include "build/build_config.h" |
10 #include "cc/surfaces/surface.h" | 14 #include "cc/surfaces/surface.h" |
11 #include "cc/surfaces/surface_factory.h" | 15 #include "cc/surfaces/surface_factory.h" |
12 #include "cc/surfaces/surface_manager.h" | 16 #include "cc/surfaces/surface_manager.h" |
13 #include "cc/surfaces/surface_sequence.h" | 17 #include "cc/surfaces/surface_sequence.h" |
14 #include "content/browser/browser_plugin/browser_plugin_guest.h" | 18 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
15 #include "content/browser/compositor/surface_utils.h" | 19 #include "content/browser/compositor/surface_utils.h" |
16 #include "content/browser/frame_host/render_widget_host_view_guest.h" | |
17 #include "content/browser/renderer_host/render_view_host_impl.h" | 20 #include "content/browser/renderer_host/render_view_host_impl.h" |
18 #include "content/browser/renderer_host/render_widget_host_delegate.h" | 21 #include "content/browser/renderer_host/render_widget_host_delegate.h" |
19 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" | 22 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" |
20 #include "content/common/browser_plugin/browser_plugin_messages.h" | 23 #include "content/common/browser_plugin/browser_plugin_messages.h" |
21 #include "content/common/frame_messages.h" | 24 #include "content/common/frame_messages.h" |
22 #include "content/common/gpu/gpu_messages.h" | 25 #include "content/common/gpu/gpu_messages.h" |
23 #include "content/common/input/web_touch_event_traits.h" | 26 #include "content/common/input/web_touch_event_traits.h" |
24 #include "content/common/view_messages.h" | 27 #include "content/common/view_messages.h" |
25 #include "content/common/webplugin_geometry.h" | 28 #include "content/common/webplugin_geometry.h" |
26 #include "content/public/common/content_switches.h" | 29 #include "content/public/common/content_switches.h" |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 if (!guest_ || !guest_->attached()) { | 237 if (!guest_ || !guest_->attached()) { |
235 // We shouldn't hang on to a surface while we are detached. | 238 // We shouldn't hang on to a surface while we are detached. |
236 ClearCompositorSurfaceIfNecessary(); | 239 ClearCompositorSurfaceIfNecessary(); |
237 return; | 240 return; |
238 } | 241 } |
239 | 242 |
240 last_scroll_offset_ = frame->metadata.root_scroll_offset; | 243 last_scroll_offset_ = frame->metadata.root_scroll_offset; |
241 // When not using surfaces, the frame just gets proxied to | 244 // When not using surfaces, the frame just gets proxied to |
242 // the embedder's renderer to be composited. | 245 // the embedder's renderer to be composited. |
243 if (!frame->delegated_frame_data || !use_surfaces_) { | 246 if (!frame->delegated_frame_data || !use_surfaces_) { |
244 guest_->SwapCompositorFrame(output_surface_id, | 247 guest_->SwapCompositorFrame(output_surface_id, host_->GetProcess()->GetID(), |
245 host_->GetProcess()->GetID(), | 248 host_->GetRoutingID(), std::move(frame)); |
246 host_->GetRoutingID(), | |
247 frame.Pass()); | |
248 return; | 249 return; |
249 } | 250 } |
250 | 251 |
251 cc::RenderPass* root_pass = | 252 cc::RenderPass* root_pass = |
252 frame->delegated_frame_data->render_pass_list.back().get(); | 253 frame->delegated_frame_data->render_pass_list.back().get(); |
253 | 254 |
254 gfx::Size frame_size = root_pass->output_rect.size(); | 255 gfx::Size frame_size = root_pass->output_rect.size(); |
255 float scale_factor = frame->metadata.device_scale_factor; | 256 float scale_factor = frame->metadata.device_scale_factor; |
256 | 257 |
257 // Check whether we need to recreate the cc::Surface, which means the child | 258 // Check whether we need to recreate the cc::Surface, which means the child |
(...skipping 30 matching lines...) Expand all Loading... |
288 guest_->SetChildFrameSurface(surface_id_, frame_size, scale_factor, | 289 guest_->SetChildFrameSurface(surface_id_, frame_size, scale_factor, |
289 sequence); | 290 sequence); |
290 } | 291 } |
291 | 292 |
292 cc::SurfaceFactory::DrawCallback ack_callback = base::Bind( | 293 cc::SurfaceFactory::DrawCallback ack_callback = base::Bind( |
293 &RenderWidgetHostViewChildFrame::SurfaceDrawn, | 294 &RenderWidgetHostViewChildFrame::SurfaceDrawn, |
294 RenderWidgetHostViewChildFrame::AsWeakPtr(), output_surface_id); | 295 RenderWidgetHostViewChildFrame::AsWeakPtr(), output_surface_id); |
295 ack_pending_count_++; | 296 ack_pending_count_++; |
296 // If this value grows very large, something is going wrong. | 297 // If this value grows very large, something is going wrong. |
297 DCHECK(ack_pending_count_ < 1000); | 298 DCHECK(ack_pending_count_ < 1000); |
298 surface_factory_->SubmitCompositorFrame(surface_id_, frame.Pass(), | 299 surface_factory_->SubmitCompositorFrame(surface_id_, std::move(frame), |
299 ack_callback); | 300 ack_callback); |
300 } | 301 } |
301 | 302 |
302 bool RenderWidgetHostViewGuest::OnMessageReceived(const IPC::Message& msg) { | 303 bool RenderWidgetHostViewGuest::OnMessageReceived(const IPC::Message& msg) { |
303 if (!platform_view_) { | 304 if (!platform_view_) { |
304 // In theory, we can get here if there's a delay between DestroyGuestView() | 305 // In theory, we can get here if there's a delay between DestroyGuestView() |
305 // being called and when our destructor is invoked. | 306 // being called and when our destructor is invoked. |
306 return false; | 307 return false; |
307 } | 308 } |
308 | 309 |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 if (gesture_event.type == blink::WebInputEvent::GestureScrollUpdate && | 703 if (gesture_event.type == blink::WebInputEvent::GestureScrollUpdate && |
703 gesture_event.data.scrollUpdate.inertial) { | 704 gesture_event.data.scrollUpdate.inertial) { |
704 return; | 705 return; |
705 } | 706 } |
706 host_->ForwardGestureEvent(gesture_event); | 707 host_->ForwardGestureEvent(gesture_event); |
707 return; | 708 return; |
708 } | 709 } |
709 } | 710 } |
710 | 711 |
711 } // namespace content | 712 } // namespace content |
OLD | NEW |