OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "content/browser/renderer_host/delegated_frame_host_client_aura.h" |
| 6 |
| 7 #include "content/browser/renderer_host/compositor_resize_lock_aura.h" |
| 8 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 9 #include "content/browser/renderer_host/render_widget_host_view_aura.h" |
| 10 #include "content/common/view_messages.h" |
| 11 #include "ui/aura/window.h" |
| 12 #include "ui/compositor/layer.h" |
| 13 |
| 14 namespace content { |
| 15 namespace { |
| 16 |
| 17 // When accelerated compositing is enabled and a widget resize is pending, |
| 18 // we delay further resizes of the UI. The following constant is the maximum |
| 19 // length of time that we should delay further UI resizes while waiting for a |
| 20 // resized frame from a renderer. |
| 21 const int kResizeLockTimeoutMs = 67; |
| 22 |
| 23 } // namespace |
| 24 |
| 25 DelegatedFrameHostClientAura::DelegatedFrameHostClientAura( |
| 26 RenderWidgetHostViewAura* render_widget_host_view) |
| 27 : render_widget_host_view_(render_widget_host_view) {} |
| 28 |
| 29 DelegatedFrameHostClientAura::~DelegatedFrameHostClientAura() {} |
| 30 |
| 31 ui::Layer* DelegatedFrameHostClientAura::DelegatedFrameHostGetLayer() const { |
| 32 return render_widget_host_view_->window_->layer(); |
| 33 } |
| 34 |
| 35 bool DelegatedFrameHostClientAura::DelegatedFrameHostIsVisible() const { |
| 36 return !render_widget_host_view_->host_->is_hidden(); |
| 37 } |
| 38 |
| 39 SkColor DelegatedFrameHostClientAura::DelegatedFrameHostGetGutterColor( |
| 40 SkColor color) const { |
| 41 // When making an element on the page fullscreen the element's background |
| 42 // may not match the page's, so use black as the gutter color to avoid |
| 43 // flashes of brighter colors during the transition. |
| 44 if (render_widget_host_view_->host_->delegate() && |
| 45 render_widget_host_view_->host_->delegate() |
| 46 ->IsFullscreenForCurrentTab()) { |
| 47 return SK_ColorBLACK; |
| 48 } |
| 49 return color; |
| 50 } |
| 51 |
| 52 gfx::Size DelegatedFrameHostClientAura::DelegatedFrameHostDesiredSizeInDIP() |
| 53 const { |
| 54 return render_widget_host_view_->window_->bounds().size(); |
| 55 } |
| 56 |
| 57 bool DelegatedFrameHostClientAura::DelegatedFrameCanCreateResizeLock() const { |
| 58 #if !defined(OS_CHROMEOS) |
| 59 // On Windows and Linux, holding pointer moves will not help throttling |
| 60 // resizes. |
| 61 // TODO(piman): on Windows we need to block (nested message loop?) the |
| 62 // WM_SIZE event. On Linux we need to throttle at the WM level using |
| 63 // _NET_WM_SYNC_REQUEST. |
| 64 return false; |
| 65 #else |
| 66 if (render_widget_host_view_->host_->auto_resize_enabled()) |
| 67 return false; |
| 68 return true; |
| 69 #endif |
| 70 } |
| 71 |
| 72 std::unique_ptr<ResizeLock> |
| 73 DelegatedFrameHostClientAura::DelegatedFrameHostCreateResizeLock( |
| 74 bool defer_compositor_lock) { |
| 75 gfx::Size desired_size = render_widget_host_view_->window_->bounds().size(); |
| 76 return std::unique_ptr<ResizeLock>(new CompositorResizeLock( |
| 77 render_widget_host_view_->window_->GetHost(), desired_size, |
| 78 defer_compositor_lock, |
| 79 base::TimeDelta::FromMilliseconds(kResizeLockTimeoutMs))); |
| 80 } |
| 81 |
| 82 void DelegatedFrameHostClientAura::DelegatedFrameHostResizeLockWasReleased() { |
| 83 render_widget_host_view_->host_->WasResized(); |
| 84 } |
| 85 |
| 86 void DelegatedFrameHostClientAura:: |
| 87 DelegatedFrameHostSendReclaimCompositorResources( |
| 88 int compositor_frame_sink_id, |
| 89 bool is_swap_ack, |
| 90 const cc::ReturnedResourceArray& resources) { |
| 91 render_widget_host_view_->host_->Send(new ViewMsg_ReclaimCompositorResources( |
| 92 render_widget_host_view_->host_->GetRoutingID(), compositor_frame_sink_id, |
| 93 is_swap_ack, resources)); |
| 94 } |
| 95 |
| 96 void DelegatedFrameHostClientAura::SetBeginFrameSource( |
| 97 cc::BeginFrameSource* source) { |
| 98 if (render_widget_host_view_->begin_frame_source_ && |
| 99 render_widget_host_view_->added_frame_observer_) { |
| 100 render_widget_host_view_->begin_frame_source_->RemoveObserver( |
| 101 render_widget_host_view_); |
| 102 render_widget_host_view_->added_frame_observer_ = false; |
| 103 } |
| 104 render_widget_host_view_->begin_frame_source_ = source; |
| 105 render_widget_host_view_->UpdateNeedsBeginFramesInternal(); |
| 106 } |
| 107 |
| 108 bool DelegatedFrameHostClientAura::IsAutoResizeEnabled() const { |
| 109 return render_widget_host_view_->host_->auto_resize_enabled(); |
| 110 } |
| 111 |
| 112 } // namespace content |
OLD | NEW |