Chromium Code Reviews| 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_child_frame.h" | 5 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" |
| 6 | 6 |
| 7 #include "cc/surfaces/surface.h" | 7 #include "cc/surfaces/surface.h" |
| 8 #include "cc/surfaces/surface_factory.h" | 8 #include "cc/surfaces/surface_factory.h" |
| 9 #include "cc/surfaces/surface_manager.h" | 9 #include "cc/surfaces/surface_manager.h" |
| 10 #include "cc/surfaces/surface_sequence.h" | 10 #include "cc/surfaces/surface_sequence.h" |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 | 26 |
| 27 namespace content { | 27 namespace content { |
| 28 | 28 |
| 29 RenderWidgetHostViewChildFrame::RenderWidgetHostViewChildFrame( | 29 RenderWidgetHostViewChildFrame::RenderWidgetHostViewChildFrame( |
| 30 RenderWidgetHost* widget_host) | 30 RenderWidgetHost* widget_host) |
| 31 : host_(RenderWidgetHostImpl::From(widget_host)), | 31 : host_(RenderWidgetHostImpl::From(widget_host)), |
| 32 use_surfaces_(UseSurfacesEnabled()), | 32 use_surfaces_(UseSurfacesEnabled()), |
| 33 next_surface_sequence_(1u), | 33 next_surface_sequence_(1u), |
| 34 last_output_surface_id_(0), | 34 last_output_surface_id_(0), |
| 35 current_surface_scale_factor_(1.f), | 35 current_surface_scale_factor_(1.f), |
| 36 has_started_rendering_(false), | |
| 36 ack_pending_count_(0), | 37 ack_pending_count_(0), |
| 37 frame_connector_(nullptr), | 38 frame_connector_(nullptr), |
| 38 weak_factory_(this) { | 39 weak_factory_(this) { |
| 39 if (use_surfaces_) { | 40 if (use_surfaces_) |
| 40 id_allocator_ = CreateSurfaceIdAllocator(); | 41 id_allocator_ = CreateSurfaceIdAllocator(); |
| 41 if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { | |
| 42 host_->delegate()->GetInputEventRouter()->AddSurfaceIdNamespaceOwner( | |
| 43 GetSurfaceIdNamespace(), this); | |
| 44 } | |
| 45 } | |
| 46 | 42 |
| 47 host_->SetView(this); | 43 host_->SetView(this); |
| 48 } | 44 } |
| 49 | 45 |
| 50 RenderWidgetHostViewChildFrame::~RenderWidgetHostViewChildFrame() { | 46 RenderWidgetHostViewChildFrame::~RenderWidgetHostViewChildFrame() { |
| 51 if (!surface_id_.is_null()) | 47 if (!surface_id_.is_null()) |
| 52 surface_factory_->Destroy(surface_id_); | 48 surface_factory_->Destroy(surface_id_); |
| 53 } | 49 } |
| 54 | 50 |
| 55 void RenderWidgetHostViewChildFrame::InitAsChild( | 51 void RenderWidgetHostViewChildFrame::InitAsChild( |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 260 // the embedder's renderer to be composited. | 256 // the embedder's renderer to be composited. |
| 261 if (!frame->delegated_frame_data || !use_surfaces_) { | 257 if (!frame->delegated_frame_data || !use_surfaces_) { |
| 262 frame_connector_->ChildFrameCompositorFrameSwapped( | 258 frame_connector_->ChildFrameCompositorFrameSwapped( |
| 263 output_surface_id, | 259 output_surface_id, |
| 264 host_->GetProcess()->GetID(), | 260 host_->GetProcess()->GetID(), |
| 265 host_->GetRoutingID(), | 261 host_->GetRoutingID(), |
| 266 frame.Pass()); | 262 frame.Pass()); |
| 267 return; | 263 return; |
| 268 } | 264 } |
| 269 | 265 |
| 266 if (!has_started_rendering_) { | |
| 267 if (host_->delegate() && host_->delegate()->GetInputEventRouter()) { | |
| 268 host_->delegate()->GetInputEventRouter()->AddSurfaceIdNamespaceOwner( | |
|
tdresser
2015/11/02 15:38:24
It isn't clear to me why this was postponed - is i
kenrb
2015/11/02 16:04:22
I don't really like this, but I understand why it
wjmaclean
2015/11/02 19:23:10
I suppose one alternative would be to leave this r
tdresser
2015/11/02 21:10:19
This seems reasonable to me.
| |
| 269 GetSurfaceIdNamespace(), this); | |
| 270 } | |
| 271 has_started_rendering_ = true; | |
| 272 } | |
| 273 | |
| 270 cc::RenderPass* root_pass = | 274 cc::RenderPass* root_pass = |
| 271 frame->delegated_frame_data->render_pass_list.back(); | 275 frame->delegated_frame_data->render_pass_list.back(); |
| 272 | 276 |
| 273 gfx::Size frame_size = root_pass->output_rect.size(); | 277 gfx::Size frame_size = root_pass->output_rect.size(); |
| 274 float scale_factor = frame->metadata.device_scale_factor; | 278 float scale_factor = frame->metadata.device_scale_factor; |
| 275 | 279 |
| 276 // Check whether we need to recreate the cc::Surface, which means the child | 280 // Check whether we need to recreate the cc::Surface, which means the child |
| 277 // frame renderer has changed its output surface, or size, or scale factor. | 281 // frame renderer has changed its output surface, or size, or scale factor. |
| 278 if (output_surface_id != last_output_surface_id_ && surface_factory_) { | 282 if (output_surface_id != last_output_surface_id_ && surface_factory_) { |
| 279 surface_factory_->Destroy(surface_id_); | 283 surface_factory_->Destroy(surface_id_); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 476 BrowserAccessibilityManager::GetEmptyDocument(), delegate); | 480 BrowserAccessibilityManager::GetEmptyDocument(), delegate); |
| 477 } | 481 } |
| 478 | 482 |
| 479 void RenderWidgetHostViewChildFrame::ClearCompositorSurfaceIfNecessary() { | 483 void RenderWidgetHostViewChildFrame::ClearCompositorSurfaceIfNecessary() { |
| 480 if (surface_factory_ && !surface_id_.is_null()) | 484 if (surface_factory_ && !surface_id_.is_null()) |
| 481 surface_factory_->Destroy(surface_id_); | 485 surface_factory_->Destroy(surface_id_); |
| 482 surface_id_ = cc::SurfaceId(); | 486 surface_id_ = cc::SurfaceId(); |
| 483 } | 487 } |
| 484 | 488 |
| 485 } // namespace content | 489 } // namespace content |
| OLD | NEW |