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

Unified Diff: ui/accelerated_widget_mac/accelerated_widget_mac.mm

Issue 1164363005: Mac: Only allow NSOpenGLContext displaying on the main display (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add GPU switch Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/accelerated_widget_mac/accelerated_widget_mac.h ('k') | ui/accelerated_widget_mac/io_surface_layer.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « ui/accelerated_widget_mac/accelerated_widget_mac.h ('k') | ui/accelerated_widget_mac/io_surface_layer.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698