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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 853883007: Add occlusion support to WebContentsImpl and RenderWidgetHostView (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove mac comment Created 5 years, 11 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
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/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 10
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 /////////////////////////////////////////////////////////////////////////////// 590 ///////////////////////////////////////////////////////////////////////////////
591 // RenderWidgetHostViewMac, RenderWidgetHostView implementation: 591 // RenderWidgetHostViewMac, RenderWidgetHostView implementation:
592 592
593 void RenderWidgetHostViewMac::EnsureBrowserCompositorView() { 593 void RenderWidgetHostViewMac::EnsureBrowserCompositorView() {
594 TRACE_EVENT0("browser", 594 TRACE_EVENT0("browser",
595 "RenderWidgetHostViewMac::EnsureBrowserCompositorView"); 595 "RenderWidgetHostViewMac::EnsureBrowserCompositorView");
596 596
597 // Create the view, to transition from Destroyed -> Suspended. 597 // Create the view, to transition from Destroyed -> Suspended.
598 if (browser_compositor_state_ == BrowserCompositorDestroyed) { 598 if (browser_compositor_state_ == BrowserCompositorDestroyed) {
599 browser_compositor_ = BrowserCompositorMac::Create(); 599 browser_compositor_ = BrowserCompositorMac::Create();
600 browser_compositor_->compositor()->SetRootLayer(
601 root_layer_.get());
602 browser_compositor_->accelerated_widget_mac()->SetNSView(this); 600 browser_compositor_->accelerated_widget_mac()->SetNSView(this);
603 browser_compositor_state_ = BrowserCompositorSuspended; 601 browser_compositor_state_ = BrowserCompositorSuspended;
604 } 602 }
605 603
606 // Show the DelegatedFrameHost to transition from Suspended -> Active. 604 // Show the DelegatedFrameHost to transition from Suspended -> Active.
607 if (browser_compositor_state_ == BrowserCompositorSuspended) { 605 if (browser_compositor_state_ == BrowserCompositorSuspended) {
608 delegated_frame_host_->AddedToWindow(); 606 delegated_frame_host_->AddedToWindow();
609 delegated_frame_host_->WasShown(ui::LatencyInfo()); 607 delegated_frame_host_->WasShown(ui::LatencyInfo());
608 browser_compositor_->compositor()->SetRootLayer(
609 root_layer_.get());
610 browser_compositor_state_ = BrowserCompositorActive; 610 browser_compositor_state_ = BrowserCompositorActive;
611 } 611 }
612 } 612 }
613 613
614 void RenderWidgetHostViewMac::SuspendBrowserCompositorView() { 614 void RenderWidgetHostViewMac::SuspendBrowserCompositorView() {
615 TRACE_EVENT0("browser", 615 TRACE_EVENT0("browser",
616 "RenderWidgetHostViewMac::SuspendBrowserCompositorView"); 616 "RenderWidgetHostViewMac::SuspendBrowserCompositorView");
617 617
618 // Hide the DelegatedFrameHost to transition from Active -> Suspended. 618 // Hide the DelegatedFrameHost to transition from Active -> Suspended.
619 if (browser_compositor_state_ == BrowserCompositorActive) { 619 if (browser_compositor_state_ == BrowserCompositorActive) {
620 // Disconnect the root layer, which will prevent the compositor from
621 // producing more frames.
622 browser_compositor_->compositor()->SetRootLayer(nullptr);
620 // Marking the DelegatedFrameHost as removed from the window hierarchy is 623 // Marking the DelegatedFrameHost as removed from the window hierarchy is
621 // necessary to remove all connections to its old ui::Compositor. 624 // necessary to remove all connections to its old ui::Compositor.
622 delegated_frame_host_->WasHidden(); 625 delegated_frame_host_->WasHidden();
623 delegated_frame_host_->RemovingFromWindow(); 626 delegated_frame_host_->RemovingFromWindow();
624 browser_compositor_state_ = BrowserCompositorSuspended; 627 browser_compositor_state_ = BrowserCompositorSuspended;
625 } 628 }
626 } 629 }
627 630
628 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() { 631 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() {
629 TRACE_EVENT0("browser", 632 TRACE_EVENT0("browser",
630 "RenderWidgetHostViewMac::DestroyBrowserCompositorView"); 633 "RenderWidgetHostViewMac::DestroyBrowserCompositorView");
631 634
632 // Transition from Active -> Suspended if need be. 635 // Transition from Active -> Suspended if need be.
633 SuspendBrowserCompositorView(); 636 SuspendBrowserCompositorView();
634 637
635 // Destroy the BrowserCompositorView to transition Suspended -> Destroyed. 638 // Destroy the BrowserCompositorView to transition Suspended -> Destroyed.
636 if (browser_compositor_state_ == BrowserCompositorSuspended) { 639 if (browser_compositor_state_ == BrowserCompositorSuspended) {
637 browser_compositor_->accelerated_widget_mac()->ResetNSView(); 640 browser_compositor_->accelerated_widget_mac()->ResetNSView();
638 browser_compositor_->compositor()->SetScaleAndSize(1.0, gfx::Size(0, 0)); 641 browser_compositor_->compositor()->SetScaleAndSize(1.0, gfx::Size(0, 0));
639 browser_compositor_->compositor()->SetRootLayer(NULL);
640 BrowserCompositorMac::Recycle(browser_compositor_.Pass()); 642 BrowserCompositorMac::Recycle(browser_compositor_.Pass());
641 browser_compositor_state_ = BrowserCompositorDestroyed; 643 browser_compositor_state_ = BrowserCompositorDestroyed;
642 } 644 }
643 } 645 }
644 646
645 void RenderWidgetHostViewMac::DestroySuspendedBrowserCompositorViewIfNeeded() { 647 void RenderWidgetHostViewMac::DestroySuspendedBrowserCompositorViewIfNeeded() {
646 if (browser_compositor_state_ != BrowserCompositorSuspended) 648 if (browser_compositor_state_ != BrowserCompositorSuspended)
647 return; 649 return;
648 650
649 // If this view is in a window that is visible, keep around the suspended 651 // If this view is in a window that is visible, keep around the suspended
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 render_widget_host_->NotifyScreenInfoChanged(); 818 render_widget_host_->NotifyScreenInfoChanged();
817 } 819 }
818 820
819 RenderWidgetHost* RenderWidgetHostViewMac::GetRenderWidgetHost() const { 821 RenderWidgetHost* RenderWidgetHostViewMac::GetRenderWidgetHost() const {
820 return render_widget_host_; 822 return render_widget_host_;
821 } 823 }
822 824
823 825
824 void RenderWidgetHostViewMac::Show() { 826 void RenderWidgetHostViewMac::Show() {
825 [cocoa_view_ setHidden:NO]; 827 [cocoa_view_ setHidden:NO];
826
827 if (!render_widget_host_->is_hidden()) 828 if (!render_widget_host_->is_hidden())
828 return; 829 return;
829 830
830 ui::LatencyInfo renderer_latency_info; 831 WasUnOccluded();
831 renderer_latency_info.AddLatencyNumber(
832 ui::TAB_SHOW_COMPONENT,
833 render_widget_host_->GetLatencyComponentId(),
834 0);
835 render_widget_host_->WasShown(renderer_latency_info);
836 832
837 // If there is not a frame being currently drawn, kick one, so that the below 833 // If there is not a frame being currently drawn, kick one, so that the below
838 // pause will have a frame to wait on. 834 // pause will have a frame to wait on.
839 render_widget_host_->ScheduleComposite(); 835 render_widget_host_->ScheduleComposite();
840 PauseForPendingResizeOrRepaintsAndDraw(); 836 PauseForPendingResizeOrRepaintsAndDraw();
841 } 837 }
842 838
843 void RenderWidgetHostViewMac::Hide() { 839 void RenderWidgetHostViewMac::Hide() {
844 [cocoa_view_ setHidden:YES]; 840 [cocoa_view_ setHidden:YES];
841 WasOccluded();
842 DestroySuspendedBrowserCompositorViewIfNeeded();
843 }
845 844
845 void RenderWidgetHostViewMac::WasUnOccluded() {
846 if (!render_widget_host_->is_hidden())
847 return;
848
849 ui::LatencyInfo renderer_latency_info;
850 renderer_latency_info.AddLatencyNumber(
851 ui::TAB_SHOW_COMPONENT,
852 render_widget_host_->GetLatencyComponentId(),
853 0);
854 render_widget_host_->WasShown(renderer_latency_info);
855 }
856
857 void RenderWidgetHostViewMac::WasOccluded() {
846 if (render_widget_host_->is_hidden()) 858 if (render_widget_host_->is_hidden())
847 return; 859 return;
848 860
849 // If we have a renderer, then inform it that we are being hidden so it can
850 // reduce its resource utilization.
851 render_widget_host_->WasHidden(); 861 render_widget_host_->WasHidden();
852
853 SuspendBrowserCompositorView(); 862 SuspendBrowserCompositorView();
854 DestroySuspendedBrowserCompositorViewIfNeeded();
855 } 863 }
856 864
857 void RenderWidgetHostViewMac::SetSize(const gfx::Size& size) { 865 void RenderWidgetHostViewMac::SetSize(const gfx::Size& size) {
858 gfx::Rect rect = GetViewBounds(); 866 gfx::Rect rect = GetViewBounds();
859 rect.set_size(size); 867 rect.set_size(size);
860 SetBounds(rect); 868 SetBounds(rect);
861 } 869 }
862 870
863 void RenderWidgetHostViewMac::SetBounds(const gfx::Rect& rect) { 871 void RenderWidgetHostViewMac::SetBounds(const gfx::Rect& rect) {
864 // |rect.size()| is view coordinates, |rect.origin| is screen coordinates, 872 // |rect.size()| is view coordinates, |rect.origin| is screen coordinates,
(...skipping 2499 matching lines...) Expand 10 before | Expand all | Expand 10 after
3364 3372
3365 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3373 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3366 // regions that are not draggable. (See ControlRegionView in 3374 // regions that are not draggable. (See ControlRegionView in
3367 // native_app_window_cocoa.mm). This requires the render host view to be 3375 // native_app_window_cocoa.mm). This requires the render host view to be
3368 // draggable by default. 3376 // draggable by default.
3369 - (BOOL)mouseDownCanMoveWindow { 3377 - (BOOL)mouseDownCanMoveWindow {
3370 return YES; 3378 return YES;
3371 } 3379 }
3372 3380
3373 @end 3381 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | content/browser/web_contents/web_contents_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698