| Index: content/browser/renderer_host/render_widget_host_view_mac.mm
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| index fb8db750f25db301108bafa1a0d1ab8870b39ea2..23e26f485f4f915a86ed5a23ed502fb9908c5d55 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| @@ -289,6 +289,7 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
|
| last_frame_was_accelerated_(false),
|
| text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
|
| can_compose_inline_(true),
|
| + allow_overlapping_views_(false),
|
| is_loading_(false),
|
| is_hidden_(false),
|
| weak_factory_(this),
|
| @@ -316,6 +317,10 @@ void RenderWidgetHostViewMac::SetDelegate(
|
| [cocoa_view_ setRWHVDelegate:delegate];
|
| }
|
|
|
| +void RenderWidgetHostViewMac::SetAllowOverlappingViews(bool overlapping) {
|
| + allow_overlapping_views_ = overlapping;
|
| +}
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
| // RenderWidgetHostViewMac, RenderWidgetHostView implementation:
|
|
|
| @@ -1046,8 +1051,12 @@ bool RenderWidgetHostViewMac::CompositorSwapBuffers(uint64 surface_handle,
|
| return true;
|
| }
|
|
|
| - if (!compositing_iosurface_.get())
|
| - compositing_iosurface_.reset(CompositingIOSurfaceMac::Create());
|
| + if (!compositing_iosurface_.get()) {
|
| + CompositingIOSurfaceMac::SurfaceOrder order = allow_overlapping_views_ ?
|
| + CompositingIOSurfaceMac::SURFACE_ORDER_BELOW_WINDOW :
|
| + CompositingIOSurfaceMac::SURFACE_ORDER_ABOVE_WINDOW;
|
| + compositing_iosurface_.reset(CompositingIOSurfaceMac::Create(order));
|
| + }
|
|
|
| if (!compositing_iosurface_.get())
|
| return true;
|
| @@ -2308,15 +2317,16 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
|
|
|
| if (renderWidgetHostView_->last_frame_was_accelerated_ &&
|
| renderWidgetHostView_->compositing_iosurface_.get()) {
|
| - {
|
| + if (renderWidgetHostView_->allow_overlapping_views_) {
|
| + // If overlapping views need to be allowed, punch a hole in the window
|
| + // to expose the GL underlay.
|
| TRACE_EVENT2("gpu", "NSRectFill clear", "w", damagedRect.width(),
|
| "h", damagedRect.height());
|
| - // Draw transparency to expose the GL underlay. NSRectFill is extremely
|
| - // slow (15ms for a window on a fast MacPro), so this is only done when
|
| - // it's a real invalidation from window damage (not when a BuffersSwapped
|
| - // was received). Note that even a 1x1 NSRectFill can take many
|
| - // milliseconds sometimes (!) so this is skipped completely for drawRects
|
| - // that are triggered by BuffersSwapped messages.
|
| + // NSRectFill is extremely slow (15ms for a window on a fast MacPro), so
|
| + // this is only done when it's a real invalidation from window damage (not
|
| + // when a BuffersSwapped was received). Note that even a 1x1 NSRectFill
|
| + // can take many milliseconds sometimes (!) so this is skipped completely
|
| + // for drawRects that are triggered by BuffersSwapped messages.
|
| [[NSColor clearColor] set];
|
| NSRectFill(dirtyRect);
|
| }
|
|
|