OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 | 475 |
476 // RenderWidget --------------------------------------------------------------- | 476 // RenderWidget --------------------------------------------------------------- |
477 | 477 |
478 RenderWidget::RenderWidget(CompositorDependencies* compositor_deps, | 478 RenderWidget::RenderWidget(CompositorDependencies* compositor_deps, |
479 blink::WebPopupType popup_type, | 479 blink::WebPopupType popup_type, |
480 const blink::WebScreenInfo& screen_info, | 480 const blink::WebScreenInfo& screen_info, |
481 bool swapped_out, | 481 bool swapped_out, |
482 bool hidden, | 482 bool hidden, |
483 bool never_visible) | 483 bool never_visible) |
484 : routing_id_(MSG_ROUTING_NONE), | 484 : routing_id_(MSG_ROUTING_NONE), |
485 surface_id_(0), | |
486 compositor_deps_(compositor_deps), | 485 compositor_deps_(compositor_deps), |
487 webwidget_(nullptr), | 486 webwidget_(nullptr), |
488 opener_id_(MSG_ROUTING_NONE), | 487 opener_id_(MSG_ROUTING_NONE), |
489 init_complete_(false), | 488 init_complete_(false), |
490 top_controls_shrink_blink_size_(false), | 489 top_controls_shrink_blink_size_(false), |
491 top_controls_height_(0.f), | 490 top_controls_height_(0.f), |
492 next_paint_flags_(0), | 491 next_paint_flags_(0), |
493 auto_resize_mode_(false), | 492 auto_resize_mode_(false), |
494 need_update_rect_for_auto_resize_(false), | 493 need_update_rect_for_auto_resize_(false), |
495 did_show_(false), | 494 did_show_(false), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
552 compositor_deps, popup_type, screen_info, false, false, false)); | 551 compositor_deps, popup_type, screen_info, false, false, false)); |
553 if (widget->Init(opener_id)) { // adds reference on success. | 552 if (widget->Init(opener_id)) { // adds reference on success. |
554 return widget.get(); | 553 return widget.get(); |
555 } | 554 } |
556 return NULL; | 555 return NULL; |
557 } | 556 } |
558 | 557 |
559 // static | 558 // static |
560 RenderWidget* RenderWidget::CreateForFrame( | 559 RenderWidget* RenderWidget::CreateForFrame( |
561 int routing_id, | 560 int routing_id, |
562 int surface_id, | |
563 bool hidden, | 561 bool hidden, |
564 const blink::WebScreenInfo& screen_info, | 562 const blink::WebScreenInfo& screen_info, |
565 CompositorDependencies* compositor_deps, | 563 CompositorDependencies* compositor_deps, |
566 blink::WebLocalFrame* frame) { | 564 blink::WebLocalFrame* frame) { |
567 CHECK_NE(routing_id, MSG_ROUTING_NONE); | 565 CHECK_NE(routing_id, MSG_ROUTING_NONE); |
568 scoped_refptr<RenderWidget> widget( | 566 scoped_refptr<RenderWidget> widget( |
569 new RenderWidget(compositor_deps, blink::WebPopupTypeNone, screen_info, | 567 new RenderWidget(compositor_deps, blink::WebPopupTypeNone, screen_info, |
570 false, hidden, false)); | 568 false, hidden, false)); |
571 widget->routing_id_ = routing_id; | 569 widget->routing_id_ = routing_id; |
572 widget->surface_id_ = surface_id; | |
573 widget->for_oopif_ = true; | 570 widget->for_oopif_ = true; |
574 // DoInit increments the reference count on |widget|, keeping it alive after | 571 // DoInit increments the reference count on |widget|, keeping it alive after |
575 // this function returns. | 572 // this function returns. |
576 if (widget->DoInit(MSG_ROUTING_NONE, | 573 if (widget->DoInit(MSG_ROUTING_NONE, |
577 RenderWidget::CreateWebFrameWidget(widget.get(), frame), | 574 RenderWidget::CreateWebFrameWidget(widget.get(), frame), |
578 nullptr)) { | 575 nullptr)) { |
579 widget->CompleteInit(); | 576 widget->CompleteInit(); |
580 return widget.get(); | 577 return widget.get(); |
581 } | 578 } |
582 return nullptr; | 579 return nullptr; |
(...skipping 17 matching lines...) Expand all Loading... |
600 NOTREACHED(); | 597 NOTREACHED(); |
601 } | 598 } |
602 return NULL; | 599 return NULL; |
603 } | 600 } |
604 | 601 |
605 void RenderWidget::CloseForFrame() { | 602 void RenderWidget::CloseForFrame() { |
606 OnClose(); | 603 OnClose(); |
607 } | 604 } |
608 | 605 |
609 bool RenderWidget::Init(int32 opener_id) { | 606 bool RenderWidget::Init(int32 opener_id) { |
610 return DoInit(opener_id, RenderWidget::CreateWebWidget(this), | 607 return DoInit( |
611 new ViewHostMsg_CreateWidget(opener_id, popup_type_, | 608 opener_id, RenderWidget::CreateWebWidget(this), |
612 &routing_id_, &surface_id_)); | 609 new ViewHostMsg_CreateWidget(opener_id, popup_type_, &routing_id_)); |
613 } | 610 } |
614 | 611 |
615 bool RenderWidget::DoInit(int32 opener_id, | 612 bool RenderWidget::DoInit(int32 opener_id, |
616 WebWidget* web_widget, | 613 WebWidget* web_widget, |
617 IPC::SyncMessage* create_widget_message) { | 614 IPC::SyncMessage* create_widget_message) { |
618 DCHECK(!webwidget_); | 615 DCHECK(!webwidget_); |
619 | 616 |
620 if (opener_id != MSG_ROUTING_NONE) | 617 if (opener_id != MSG_ROUTING_NONE) |
621 opener_id_ = opener_id; | 618 opener_id_ = opener_id; |
622 | 619 |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 } | 989 } |
993 | 990 |
994 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { | 991 scoped_ptr<cc::OutputSurface> RenderWidget::CreateOutputSurface(bool fallback) { |
995 // For widgets that are never visible, we don't start the compositor, so we | 992 // For widgets that are never visible, we don't start the compositor, so we |
996 // never get a request for a cc::OutputSurface. | 993 // never get a request for a cc::OutputSurface. |
997 DCHECK(!never_visible_); | 994 DCHECK(!never_visible_); |
998 | 995 |
999 #if defined(OS_ANDROID) | 996 #if defined(OS_ANDROID) |
1000 if (SynchronousCompositorFactory* factory = | 997 if (SynchronousCompositorFactory* factory = |
1001 SynchronousCompositorFactory::GetInstance()) { | 998 SynchronousCompositorFactory::GetInstance()) { |
1002 return factory->CreateOutputSurface(routing_id(), surface_id(), | 999 return factory->CreateOutputSurface(routing_id(), |
1003 frame_swap_message_queue_); | 1000 frame_swap_message_queue_); |
1004 } | 1001 } |
1005 #endif | 1002 #endif |
1006 | 1003 |
1007 const base::CommandLine& command_line = | 1004 const base::CommandLine& command_line = |
1008 *base::CommandLine::ForCurrentProcess(); | 1005 *base::CommandLine::ForCurrentProcess(); |
1009 bool use_software = fallback; | 1006 bool use_software = fallback; |
1010 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) | 1007 if (command_line.HasSwitch(switches::kDisableGpuCompositing)) |
1011 use_software = true; | 1008 use_software = true; |
1012 | 1009 |
(...skipping 1369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2382 // to avoid unnecessarily stalling the compositor thread. | 2379 // to avoid unnecessarily stalling the compositor thread. |
2383 limits.mapped_memory_reclaim_limit = | 2380 limits.mapped_memory_reclaim_limit = |
2384 max_transfer_buffer_usage_mb * kBytesPerMegabyte; | 2381 max_transfer_buffer_usage_mb * kBytesPerMegabyte; |
2385 #endif | 2382 #endif |
2386 if (compositor) { | 2383 if (compositor) { |
2387 limits.command_buffer_size = 64 * 1024; | 2384 limits.command_buffer_size = 64 * 1024; |
2388 limits.start_transfer_buffer_size = 64 * 1024; | 2385 limits.start_transfer_buffer_size = 64 * 1024; |
2389 limits.min_transfer_buffer_size = 64 * 1024; | 2386 limits.min_transfer_buffer_size = 64 * 1024; |
2390 } | 2387 } |
2391 | 2388 |
| 2389 // TODO(piman): we still need to create a View command buffer until |
| 2390 // crbug.com/526196 is fixed. The surface_id doesn't matter, it just needs to |
| 2391 // be !0. |
| 2392 const int32 kDummySurfaceId = 1; |
2392 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context( | 2393 scoped_ptr<WebGraphicsContext3DCommandBufferImpl> context( |
2393 new WebGraphicsContext3DCommandBufferImpl(surface_id(), | 2394 new WebGraphicsContext3DCommandBufferImpl( |
2394 GetURLForGraphicsContext3D(), | 2395 kDummySurfaceId, GetURLForGraphicsContext3D(), |
2395 gpu_channel_host.get(), | 2396 gpu_channel_host.get(), attributes, lose_context_when_out_of_memory, |
2396 attributes, | 2397 limits, NULL)); |
2397 lose_context_when_out_of_memory, | |
2398 limits, | |
2399 NULL)); | |
2400 return context.Pass(); | 2398 return context.Pass(); |
2401 } | 2399 } |
2402 | 2400 |
2403 void RenderWidget::RegisterRenderFrameProxy(RenderFrameProxy* proxy) { | 2401 void RenderWidget::RegisterRenderFrameProxy(RenderFrameProxy* proxy) { |
2404 render_frame_proxies_.AddObserver(proxy); | 2402 render_frame_proxies_.AddObserver(proxy); |
2405 } | 2403 } |
2406 | 2404 |
2407 void RenderWidget::UnregisterRenderFrameProxy(RenderFrameProxy* proxy) { | 2405 void RenderWidget::UnregisterRenderFrameProxy(RenderFrameProxy* proxy) { |
2408 render_frame_proxies_.RemoveObserver(proxy); | 2406 render_frame_proxies_.RemoveObserver(proxy); |
2409 } | 2407 } |
(...skipping 10 matching lines...) Expand all Loading... |
2420 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { | 2418 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { |
2421 video_hole_frames_.AddObserver(frame); | 2419 video_hole_frames_.AddObserver(frame); |
2422 } | 2420 } |
2423 | 2421 |
2424 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { | 2422 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { |
2425 video_hole_frames_.RemoveObserver(frame); | 2423 video_hole_frames_.RemoveObserver(frame); |
2426 } | 2424 } |
2427 #endif // defined(VIDEO_HOLE) | 2425 #endif // defined(VIDEO_HOLE) |
2428 | 2426 |
2429 } // namespace content | 2427 } // namespace content |
OLD | NEW |