| Index: ui/accelerated_widget_mac/accelerated_widget_mac.mm
|
| diff --git a/ui/accelerated_widget_mac/accelerated_widget_mac.mm b/ui/accelerated_widget_mac/accelerated_widget_mac.mm
|
| index eb9ca2fd551c3230658f58157ee83787f5fdea91..06b272df09d0f299e61a02712f501ef09f79e020 100644
|
| --- a/ui/accelerated_widget_mac/accelerated_widget_mac.mm
|
| +++ b/ui/accelerated_widget_mac/accelerated_widget_mac.mm
|
| @@ -6,7 +6,6 @@
|
|
|
| #include <map>
|
|
|
| -#include "base/command_line.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/trace_event/trace_event.h"
|
| @@ -15,7 +14,6 @@
|
| #include "ui/accelerated_widget_mac/io_surface_ns_gl_surface.h"
|
| #include "ui/accelerated_widget_mac/surface_handle_types.h"
|
| #include "ui/base/cocoa/animation_utils.h"
|
| -#include "ui/base/ui_base_switches.h"
|
| #include "ui/gfx/geometry/dip_util.h"
|
| #include "ui/gl/scoped_cgl.h"
|
|
|
| @@ -96,8 +94,8 @@ void AcceleratedWidgetMac::ResetNSView() {
|
| [flipped_layer_ removeFromSuperlayer];
|
| DestroyIOSurfaceLayer(io_surface_layer_);
|
| DestroyCAContextLayer(ca_context_layer_);
|
| + DestroyIOSurfaceNSGLSurface();
|
| DestroySoftwareLayer();
|
| - io_surface_ns_gl_surface_.reset();
|
|
|
| last_swap_size_dip_ = gfx::Size();
|
| view_ = NULL;
|
| @@ -111,6 +109,8 @@ bool AcceleratedWidgetMac::HasFrameOfSize(
|
| int AcceleratedWidgetMac::GetRendererID() const {
|
| if (io_surface_layer_)
|
| return [io_surface_layer_ rendererID];
|
| + if (io_surface_ns_gl_surface_)
|
| + return io_surface_ns_gl_surface_->GetRendererID();
|
| return 0;
|
| }
|
|
|
| @@ -135,10 +135,6 @@ void AcceleratedWidgetMac::GotAcceleratedFrame(
|
| float scale_factor,
|
| const gfx::Rect& pixel_damage_rect,
|
| const base::Closure& drawn_callback) {
|
| - static bool use_ns_gl_surfaces =
|
| - base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kEnableNSGLSurfaces);
|
| -
|
| // Record the surface and latency info to use when acknowledging this frame.
|
| DCHECK(accelerated_frame_drawn_callback_.is_null());
|
| accelerated_frame_drawn_callback_ = drawn_callback;
|
| @@ -158,7 +154,8 @@ void AcceleratedWidgetMac::GotAcceleratedFrame(
|
| switch (GetSurfaceHandleType(surface_handle)) {
|
| case kSurfaceHandleTypeIOSurface: {
|
| IOSurfaceID io_surface_id = IOSurfaceIDFromSurfaceHandle(surface_handle);
|
| - if (use_ns_gl_surfaces) {
|
| + if (IOSurfaceNSGLSurface::CanUseNSGLSurfaceForView(
|
| + view_->AcceleratedWidgetGetNSView())) {
|
| GotAcceleratedIOSurfaceFrameNSGL(
|
| io_surface_id, pixel_size, scale_factor, pixel_damage_rect);
|
| } else {
|
| @@ -207,6 +204,7 @@ void AcceleratedWidgetMac::GotAcceleratedCAContextFrame(
|
|
|
| // Remove any different-type layers that this is replacing.
|
| DestroyIOSurfaceLayer(io_surface_layer_);
|
| + DestroyIOSurfaceNSGLSurface();
|
| DestroySoftwareLayer();
|
| }
|
|
|
| @@ -215,10 +213,13 @@ void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrameNSGL(
|
| const gfx::Size& pixel_size,
|
| float scale_factor,
|
| const gfx::Rect& pixel_damage_rect) {
|
| - if (!io_surface_ns_gl_surface_) {
|
| + if (!io_surface_ns_gl_surface_ ||
|
| + io_surface_ns_gl_surface_->NeedsToBeRecreated()) {
|
| io_surface_ns_gl_surface_.reset(
|
| IOSurfaceNSGLSurface::Create(
|
| - this, view_->AcceleratedWidgetGetNSView()));
|
| + this,
|
| + view_->AcceleratedWidgetGetNSView(),
|
| + needs_gl_finish_workaround_));
|
| }
|
|
|
| if (!io_surface_ns_gl_surface_) {
|
| @@ -229,6 +230,11 @@ void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrameNSGL(
|
|
|
| io_surface_ns_gl_surface_->GotFrame(
|
| io_surface_id, pixel_size, scale_factor, pixel_damage_rect);
|
| +
|
| + // Remove any different-type layers that this is replacing.
|
| + DestroyCAContextLayer(ca_context_layer_);
|
| + DestroyIOSurfaceLayer(io_surface_layer_);
|
| + DestroySoftwareLayer();
|
| }
|
|
|
| void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrame(
|
| @@ -299,8 +305,8 @@ void AcceleratedWidgetMac::GotAcceleratedIOSurfaceFrame(
|
|
|
| // Remove any different-type layers that this is replacing.
|
| DestroyCAContextLayer(ca_context_layer_);
|
| + DestroyIOSurfaceNSGLSurface();
|
| DestroySoftwareLayer();
|
| - io_surface_ns_gl_surface_.reset();
|
| }
|
|
|
| void AcceleratedWidgetMac::GotSoftwareFrame(float scale_factor,
|
| @@ -331,6 +337,7 @@ void AcceleratedWidgetMac::GotSoftwareFrame(float scale_factor,
|
| // Remove any different-type layers that this is replacing.
|
| DestroyCAContextLayer(ca_context_layer_);
|
| DestroyIOSurfaceLayer(io_surface_layer_);
|
| + DestroyIOSurfaceNSGLSurface();
|
| }
|
|
|
| void AcceleratedWidgetMac::DestroyCAContextLayer(
|
| @@ -352,6 +359,10 @@ void AcceleratedWidgetMac::DestroyIOSurfaceLayer(
|
| io_surface_layer_.reset();
|
| }
|
|
|
| +void AcceleratedWidgetMac::DestroyIOSurfaceNSGLSurface() {
|
| + io_surface_ns_gl_surface_.reset();
|
| +}
|
| +
|
| void AcceleratedWidgetMac::DestroySoftwareLayer() {
|
| if (!software_layer_)
|
| return;
|
|
|