Chromium Code Reviews| 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/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 597 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 608 browser_compositor_->compositor()->SetHostHasTransparentBackground( | 608 browser_compositor_->compositor()->SetHostHasTransparentBackground( |
| 609 !GetBackgroundOpaque()); | 609 !GetBackgroundOpaque()); |
| 610 browser_compositor_->accelerated_widget_mac()->SetNSView(this); | 610 browser_compositor_->accelerated_widget_mac()->SetNSView(this); |
| 611 browser_compositor_state_ = BrowserCompositorSuspended; | 611 browser_compositor_state_ = BrowserCompositorSuspended; |
| 612 } | 612 } |
| 613 | 613 |
| 614 // Show the DelegatedFrameHost to transition from Suspended -> Active. | 614 // Show the DelegatedFrameHost to transition from Suspended -> Active. |
| 615 if (browser_compositor_state_ == BrowserCompositorSuspended) { | 615 if (browser_compositor_state_ == BrowserCompositorSuspended) { |
| 616 delegated_frame_host_->SetCompositor(browser_compositor_->compositor()); | 616 delegated_frame_host_->SetCompositor(browser_compositor_->compositor()); |
| 617 delegated_frame_host_->WasShown(ui::LatencyInfo()); | 617 delegated_frame_host_->WasShown(ui::LatencyInfo()); |
| 618 // Unsuspend the browser compositor after showing the delegated frame host. | |
| 619 // If there is not a saved delegated frame, then the delegated frame host | |
| 620 // will keep the compositor locked until a delegated frame is swapped. | |
| 621 float scale_factor = ViewScaleFactor(); | |
| 622 browser_compositor_->compositor()->SetScaleAndSize( | |
| 623 scale_factor, | |
| 624 gfx::ConvertSizeToPixel(scale_factor, GetViewBounds().size())); | |
| 625 browser_compositor_->Unsuspend(); | |
| 618 browser_compositor_state_ = BrowserCompositorActive; | 626 browser_compositor_state_ = BrowserCompositorActive; |
| 619 } | 627 } |
| 620 } | 628 } |
| 621 | 629 |
| 622 void RenderWidgetHostViewMac::SuspendBrowserCompositorView() { | 630 void RenderWidgetHostViewMac::SuspendBrowserCompositorView() { |
| 623 TRACE_EVENT0("browser", | 631 TRACE_EVENT0("browser", |
| 624 "RenderWidgetHostViewMac::SuspendBrowserCompositorView"); | 632 "RenderWidgetHostViewMac::SuspendBrowserCompositorView"); |
| 625 | 633 |
| 626 // Hide the DelegatedFrameHost to transition from Active -> Suspended. | 634 // Hide the DelegatedFrameHost to transition from Active -> Suspended. |
| 627 if (browser_compositor_state_ == BrowserCompositorActive) { | 635 if (browser_compositor_state_ == BrowserCompositorActive) { |
| 636 // Ensure that any changes made to the ui::Compositor do not result in new | |
| 637 // frames being produced. | |
| 638 browser_compositor_->Suspend(); | |
| 628 // Marking the DelegatedFrameHost as removed from the window hierarchy is | 639 // Marking the DelegatedFrameHost as removed from the window hierarchy is |
| 629 // necessary to remove all connections to its old ui::Compositor. | 640 // necessary to remove all connections to its old ui::Compositor. |
| 630 delegated_frame_host_->WasHidden(); | 641 delegated_frame_host_->WasHidden(); |
| 631 delegated_frame_host_->ResetCompositor(); | 642 delegated_frame_host_->ResetCompositor(); |
| 632 browser_compositor_state_ = BrowserCompositorSuspended; | 643 browser_compositor_state_ = BrowserCompositorSuspended; |
| 633 } | 644 } |
| 634 } | 645 } |
| 635 | 646 |
| 636 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() { | 647 void RenderWidgetHostViewMac::DestroyBrowserCompositorView() { |
| 637 TRACE_EVENT0("browser", | 648 TRACE_EVENT0("browser", |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 827 RenderWidgetHost* RenderWidgetHostViewMac::GetRenderWidgetHost() const { | 838 RenderWidgetHost* RenderWidgetHostViewMac::GetRenderWidgetHost() const { |
| 828 return render_widget_host_; | 839 return render_widget_host_; |
| 829 } | 840 } |
| 830 | 841 |
| 831 void RenderWidgetHostViewMac::Show() { | 842 void RenderWidgetHostViewMac::Show() { |
| 832 ScopedCAActionDisabler disabler; | 843 ScopedCAActionDisabler disabler; |
| 833 [cocoa_view_ setHidden:NO]; | 844 [cocoa_view_ setHidden:NO]; |
| 834 if (!render_widget_host_->is_hidden()) | 845 if (!render_widget_host_->is_hidden()) |
| 835 return; | 846 return; |
| 836 | 847 |
| 848 EnsureBrowserCompositorView(); | |
|
danakj
2015/03/12 00:07:15
How come this is needed?
ccameron
2015/03/12 01:01:34
Oh -- I added the explanation to the CL descriptio
danakj
2015/03/12 01:08:50
Thanks :)
| |
| 837 WasUnOccluded(); | 849 WasUnOccluded(); |
| 838 | 850 |
| 839 // If there is not a frame being currently drawn, kick one, so that the below | 851 // If there is not a frame being currently drawn, kick one, so that the below |
| 840 // pause will have a frame to wait on. | 852 // pause will have a frame to wait on. |
| 841 render_widget_host_->ScheduleComposite(); | 853 render_widget_host_->ScheduleComposite(); |
| 842 PauseForPendingResizeOrRepaintsAndDraw(); | 854 PauseForPendingResizeOrRepaintsAndDraw(); |
| 843 } | 855 } |
| 844 | 856 |
| 845 void RenderWidgetHostViewMac::Hide() { | 857 void RenderWidgetHostViewMac::Hide() { |
| 846 ScopedCAActionDisabler disabler; | 858 ScopedCAActionDisabler disabler; |
| (...skipping 2586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3433 | 3445 |
| 3434 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding | 3446 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding |
| 3435 // regions that are not draggable. (See ControlRegionView in | 3447 // regions that are not draggable. (See ControlRegionView in |
| 3436 // native_app_window_cocoa.mm). This requires the render host view to be | 3448 // native_app_window_cocoa.mm). This requires the render host view to be |
| 3437 // draggable by default. | 3449 // draggable by default. |
| 3438 - (BOOL)mouseDownCanMoveWindow { | 3450 - (BOOL)mouseDownCanMoveWindow { |
| 3439 return YES; | 3451 return YES; |
| 3440 } | 3452 } |
| 3441 | 3453 |
| 3442 @end | 3454 @end |
| OLD | NEW |