summaryrefslogtreecommitdiff
path: root/chromium/ui/accelerated_widget_mac
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-08-01 12:59:39 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2016-08-04 12:40:43 +0000
commit28b1110370900897ab652cb420c371fab8857ad4 (patch)
tree41b32127d23b0df4f2add2a27e12dc87bddb260e /chromium/ui/accelerated_widget_mac
parent399c965b6064c440ddcf4015f5f8e9d131c7a0a6 (diff)
downloadqtwebengine-chromium-28b1110370900897ab652cb420c371fab8857ad4.tar.gz
BASELINE: Update Chromium to 53.0.2785.41
Also adds a few extra files for extensions. Change-Id: Iccdd55d98660903331cf8b7b29188da781830af4 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/ui/accelerated_widget_mac')
-rw-r--r--chromium/ui/accelerated_widget_mac/BUILD.gn1
-rw-r--r--chromium/ui/accelerated_widget_mac/accelerated_widget_mac.h70
-rw-r--r--chromium/ui/accelerated_widget_mac/accelerated_widget_mac.mm229
-rw-r--r--chromium/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm19
-rw-r--r--chromium/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm5
-rw-r--r--chromium/ui/accelerated_widget_mac/display_link_mac.cc13
-rw-r--r--chromium/ui/accelerated_widget_mac/window_resize_helper_mac.cc7
-rw-r--r--chromium/ui/accelerated_widget_mac/window_resize_helper_mac.h4
8 files changed, 131 insertions, 217 deletions
diff --git a/chromium/ui/accelerated_widget_mac/BUILD.gn b/chromium/ui/accelerated_widget_mac/BUILD.gn
index da516cd1b54..4e5a22ec31f 100644
--- a/chromium/ui/accelerated_widget_mac/BUILD.gn
+++ b/chromium/ui/accelerated_widget_mac/BUILD.gn
@@ -39,6 +39,7 @@ component("accelerated_widget_mac") {
]
libs = [
+ "ApplicationServices.framework", # Temporary hack around https://crbug.com/620127. Remove after https://crbug.com/622481 is fixed.
"AVFoundation.framework",
"CoreGraphics.framework",
"Foundation.framework",
diff --git a/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.h b/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.h
index cf26ad6febc..ac4b03dea17 100644
--- a/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.h
+++ b/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.h
@@ -5,10 +5,12 @@
#ifndef UI_ACCELERATED_WIDGET_MAC_ACCELERATED_WIDGET_MAC_H_
#define UI_ACCELERATED_WIDGET_MAC_ACCELERATED_WIDGET_MAC_H_
+#import <Cocoa/Cocoa.h>
#include <IOSurface/IOSurface.h>
#include <vector>
#include "base/mac/scoped_cftyperef.h"
+#import "base/mac/scoped_nsobject.h"
#include "base/macros.h"
#include "base/time/time.h"
#include "ui/accelerated_widget_mac/accelerated_widget_mac_export.h"
@@ -17,11 +19,6 @@
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/native_widget_types.h"
-#if defined(__OBJC__)
-#import <Cocoa/Cocoa.h>
-#import "base/mac/scoped_nsobject.h"
-#endif // __OBJC__
-
class SkCanvas;
namespace cc {
@@ -30,7 +27,6 @@ class SoftwareFrameData;
namespace ui {
-class AcceleratedWidgetMac;
class FullscreenLowPowerCoordinator;
// A class through which an AcceleratedWidget may be bound to draw the contents
@@ -44,8 +40,6 @@ class AcceleratedWidgetMacNSView {
virtual void AcceleratedWidgetSwapCompleted() = 0;
};
-#if defined(__OBJC__)
-
// AcceleratedWidgetMac owns a tree of CALayers. The widget may be passed
// to a ui::Compositor, which will cause, through its output surface, calls to
// GotAcceleratedFrame and GotSoftwareFrame. The CALayers may be installed
@@ -66,6 +60,10 @@ class ACCELERATED_WIDGET_MAC_EXPORT AcceleratedWidgetMac {
void ResetFullscreenLowPowerCoordinator();
CALayer* GetFullscreenLowPowerLayer() const;
+ // Returns true if the widget might be in fullscreen low power mode. This
+ // will return a conservative answer.
+ bool MightBeInFullscreenLowPowerMode() const;
+
// Return true if the last frame swapped has a size in DIP of |dip_size|.
bool HasFrameOfSize(const gfx::Size& dip_size) const;
@@ -73,33 +71,18 @@ class ACCELERATED_WIDGET_MAC_EXPORT AcceleratedWidgetMac {
void GetVSyncParameters(
base::TimeTicks* timebase, base::TimeDelta* interval) const;
- void GotFrame(CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
- const gfx::Size& pixel_size,
- float scale_factor);
-
- private:
- void GotCAContextFrame(CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- const gfx::Size& pixel_size,
- float scale_factor);
-
+ static AcceleratedWidgetMac* Get(gfx::AcceleratedWidget widget);
+ void GotCALayerFrame(
+ base::scoped_nsobject<CALayer> content_layer,
+ bool fullscreen_low_power_layer_valid,
+ base::scoped_nsobject<CALayer> fullscreen_low_power_layer,
+ const gfx::Size& pixel_size,
+ float scale_factor);
void GotIOSurfaceFrame(base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
const gfx::Size& pixel_size,
float scale_factor);
- // Remove a layer from the heirarchy and destroy it. Because the accelerated
- // layer types may be replaced by a layer of the same type, the layer to
- // destroy is parameterized, and, if it is the current layer, the current
- // layer is reset.
- void DestroyCAContextLayer(
- base::scoped_nsobject<CALayerHost> ca_context_layer);
- void DestroyLocalLayer();
- void EnsureLocalLayer();
-
+ private:
// The AcceleratedWidgetMacNSView that is using this as its internals.
AcceleratedWidgetMacNSView* view_;
@@ -118,13 +101,14 @@ class ACCELERATED_WIDGET_MAC_EXPORT AcceleratedWidgetMac {
// |background_layer_| of RenderWidgetHostViewCocoa) leads to unpredictable
// behavior.
base::scoped_nsobject<CALayer> flipped_layer_;
+ base::scoped_nsobject<CALayer> fslp_flipped_layer_;
- // The accelerated CoreAnimation layers hosted by the GPU process.
- base::scoped_nsobject<CALayerHost> ca_context_layer_;
- base::scoped_nsobject<CALayerHost> fullscreen_low_power_layer_;
+ // A CALayer with content provided by the output surface.
+ base::scoped_nsobject<CALayer> content_layer_;
+ base::scoped_nsobject<CALayer> fullscreen_low_power_layer_;
- // The locally drawn layer, which has its contents set to an IOSurface.
- base::scoped_nsobject<CALayer> local_layer_;
+ // A CALayer that has its content set to an IOSurface.
+ base::scoped_nsobject<CALayer> io_surface_layer_;
// The size in DIP of the last swap received from |compositor_|.
gfx::Size last_swap_size_dip_;
@@ -132,20 +116,6 @@ class ACCELERATED_WIDGET_MAC_EXPORT AcceleratedWidgetMac {
DISALLOW_COPY_AND_ASSIGN(AcceleratedWidgetMac);
};
-#endif // __OBJC__
-
-ACCELERATED_WIDGET_MAC_EXPORT
-void AcceleratedWidgetMacGotFrame(
- gfx::AcceleratedWidget widget,
- CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
- const gfx::Size& pixel_size,
- float scale_factor,
- base::TimeTicks* vsync_timebase,
- base::TimeDelta* vsync_interval);
-
} // namespace ui
#endif // UI_ACCELERATED_WIDGET_MAC_ACCELERATED_WIDGET_MAC_H_
diff --git a/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.mm b/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.mm
index bc496e1587a..14f119ef986 100644
--- a/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.mm
+++ b/chromium/ui/accelerated_widget_mac/accelerated_widget_mac.mm
@@ -29,17 +29,6 @@ typedef std::map<gfx::AcceleratedWidget,AcceleratedWidgetMac*>
WidgetToHelperMap;
base::LazyInstance<WidgetToHelperMap> g_widget_to_helper_map;
-AcceleratedWidgetMac* GetHelperFromAcceleratedWidget(
- gfx::AcceleratedWidget widget) {
- WidgetToHelperMap::const_iterator found =
- g_widget_to_helper_map.Pointer()->find(widget);
- // This can end up being accessed after the underlying widget has been
- // destroyed, but while the ui::Compositor is still being destroyed.
- // Return NULL in these cases.
- if (found == g_widget_to_helper_map.Pointer()->end())
- return NULL;
- return found->second;
-}
} // namespace
@@ -59,6 +48,12 @@ AcceleratedWidgetMac::AcceleratedWidgetMac() : view_(nullptr) {
[flipped_layer_
setAutoresizingMask:kCALayerWidthSizable|kCALayerHeightSizable];
+ fslp_flipped_layer_.reset([[CALayer alloc] init]);
+ [fslp_flipped_layer_ setGeometryFlipped:YES];
+ [fslp_flipped_layer_ setAnchorPoint:CGPointMake(0, 0)];
+ [fslp_flipped_layer_
+ setAutoresizingMask:kCALayerWidthSizable|kCALayerHeightSizable];
+
// Use a sequence number as the accelerated widget handle that we can use
// to look up the internals structure.
static intptr_t last_sequence_number = 0;
@@ -85,6 +80,7 @@ void AcceleratedWidgetMac::SetNSView(AcceleratedWidgetMacNSView* view) {
CALayer* background_layer = [view_->AcceleratedWidgetGetNSView() layer];
DCHECK(background_layer);
[flipped_layer_ setBounds:[background_layer bounds]];
+ [fslp_flipped_layer_ setBounds:[background_layer bounds]];
[background_layer addSublayer:flipped_layer_];
}
@@ -101,8 +97,10 @@ void AcceleratedWidgetMac::ResetNSView() {
ScopedCAActionDisabler disabler;
[flipped_layer_ removeFromSuperlayer];
- DestroyCAContextLayer(ca_context_layer_);
- DestroyLocalLayer();
+ [content_layer_ removeFromSuperlayer];
+ [io_surface_layer_ removeFromSuperlayer];
+ content_layer_.reset();
+ io_surface_layer_.reset();
last_swap_size_dip_ = gfx::Size();
view_ = NULL;
@@ -121,7 +119,11 @@ void AcceleratedWidgetMac::ResetFullscreenLowPowerCoordinator() {
}
CALayer* AcceleratedWidgetMac::GetFullscreenLowPowerLayer() const {
- return fullscreen_low_power_layer_;
+ return fslp_flipped_layer_;
+}
+
+bool AcceleratedWidgetMac::MightBeInFullscreenLowPowerMode() const {
+ return fslp_coordinator_;
}
bool AcceleratedWidgetMac::HasFrameOfSize(
@@ -139,95 +141,58 @@ void AcceleratedWidgetMac::GetVSyncParameters(
}
}
-void AcceleratedWidgetMac::GotFrame(
- CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
+AcceleratedWidgetMac* AcceleratedWidgetMac::Get(gfx::AcceleratedWidget widget) {
+ WidgetToHelperMap::const_iterator found =
+ g_widget_to_helper_map.Pointer()->find(widget);
+ // This can end up being accessed after the underlying widget has been
+ // destroyed, but while the ui::Compositor is still being destroyed.
+ // Return NULL in these cases.
+ if (found == g_widget_to_helper_map.Pointer()->end())
+ return nullptr;
+ return found->second;
+}
+
+void AcceleratedWidgetMac::GotCALayerFrame(
+ base::scoped_nsobject<CALayer> content_layer,
+ bool fullscreen_low_power_layer_valid,
+ base::scoped_nsobject<CALayer> fullscreen_low_power_layer,
const gfx::Size& pixel_size,
float scale_factor) {
- TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotFrame");
-
- // If there is no view and therefore no superview to draw into, early-out.
+ TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotCAContextFrame");
if (!view_) {
TRACE_EVENT0("ui", "No associated NSView");
return;
}
-
- // Disable the fade-in or fade-out effect if we create or remove layers.
ScopedCAActionDisabler disabler;
-
last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size);
-
- if (ca_context_id) {
- GotCAContextFrame(ca_context_id, fullscreen_low_power_ca_context_valid,
- fullscreen_low_power_ca_context_id, pixel_size,
- scale_factor);
- } else {
- GotIOSurfaceFrame(io_surface, pixel_size, scale_factor);
- }
-
- view_->AcceleratedWidgetSwapCompleted();
-}
-
-void AcceleratedWidgetMac::GotCAContextFrame(
- CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- const gfx::Size& pixel_size,
- float scale_factor) {
- TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotCAContextFrame");
-
- // In the layer is replaced, keep the old one around until after the new one
- // is installed to avoid flashes.
- base::scoped_nsobject<CALayerHost> old_ca_context_layer =
- ca_context_layer_;
-
- // Create the layer to host the layer exported by the GPU process with this
- // particular CAContext ID.
- if ([ca_context_layer_ contextId] != ca_context_id) {
- TRACE_EVENT0("ui", "Creating a new CALayerHost");
- ca_context_layer_.reset([[CALayerHost alloc] init]);
- [ca_context_layer_ setContextId:ca_context_id];
- [ca_context_layer_
- setAutoresizingMask:kCALayerMaxXMargin|kCALayerMaxYMargin];
- [flipped_layer_ addSublayer:ca_context_layer_];
+ if (fullscreen_low_power_layer_valid)
+ [fslp_flipped_layer_ setFrame:gfx::Rect(last_swap_size_dip_).ToCGRect()];
+
+ // Ensure that the content is in the CALayer hierarchy, and update fullscreen
+ // low power state.
+ if (content_layer_ != content_layer) {
+ [flipped_layer_ addSublayer:content_layer];
+ [content_layer_ removeFromSuperlayer];
+ content_layer_ = content_layer;
}
- if ([fullscreen_low_power_layer_ contextId] !=
- fullscreen_low_power_ca_context_id) {
- TRACE_EVENT0("ui", "Creating a new CALayerHost");
+ if (fullscreen_low_power_layer_ != fullscreen_low_power_layer) {
if (fslp_coordinator_) {
fslp_coordinator_->WillLoseAcceleratedWidget();
DCHECK(!fslp_coordinator_);
}
- fullscreen_low_power_layer_.reset([[CALayerHost alloc] init]);
- [fullscreen_low_power_layer_
- setContextId:fullscreen_low_power_ca_context_id];
+ [fslp_flipped_layer_ addSublayer:fullscreen_low_power_layer];
+ [fullscreen_low_power_layer_ removeFromSuperlayer];
+ fullscreen_low_power_layer_ = fullscreen_low_power_layer;
}
+ if (fslp_coordinator_)
+ fslp_coordinator_->SetLowPowerLayerValid(fullscreen_low_power_layer_valid);
- if (fslp_coordinator_) {
- fslp_coordinator_->SetLowPowerLayerValid(
- fullscreen_low_power_ca_context_valid);
- }
-
- // If this replacing a same-type layer, remove it now that the new layer is
- // in the hierarchy.
- if (old_ca_context_layer != ca_context_layer_)
- DestroyCAContextLayer(old_ca_context_layer);
-
- // Remove any different-type layers that this is replacing.
- DestroyLocalLayer();
-}
-
-void AcceleratedWidgetMac::EnsureLocalLayer() {
- if (!local_layer_) {
- local_layer_.reset([[CALayer alloc] init]);
- // Setting contents gravity is necessary to prevent the layer from being
- // scaled during dyanmic resizes (especially with devtools open).
- [local_layer_ setContentsGravity:kCAGravityTopLeft];
- [local_layer_ setAnchorPoint:CGPointMake(0, 0)];
- [flipped_layer_ addSublayer:local_layer_];
+ // Ensure the IOSurface is removed.
+ if (io_surface_layer_) {
+ [io_surface_layer_ removeFromSuperlayer];
+ io_surface_layer_.reset();
}
+ view_->AcceleratedWidgetSwapCompleted();
}
void AcceleratedWidgetMac::GotIOSurfaceFrame(
@@ -235,72 +200,36 @@ void AcceleratedWidgetMac::GotIOSurfaceFrame(
const gfx::Size& pixel_size,
float scale_factor) {
TRACE_EVENT0("ui", "AcceleratedWidgetMac::GotIOSurfaceFrame");
-
- // If there is not a layer for local frames, create one.
- EnsureLocalLayer();
-
- id new_contents = static_cast<id>(io_surface.get());
-
- if (new_contents && new_contents == [local_layer_ contents]) {
- [local_layer_ setContentsChanged];
- } else {
- [local_layer_ setContents:new_contents];
- }
-
- [local_layer_ setBounds:CGRectMake(0, 0, pixel_size.width() / scale_factor,
- pixel_size.height() / scale_factor)];
-
- if ([local_layer_ contentsScale] != scale_factor)
- [local_layer_ setContentsScale:scale_factor];
-
- // Remove any different-type layers that this is replacing.
- DestroyCAContextLayer(ca_context_layer_);
-}
-
-void AcceleratedWidgetMac::DestroyCAContextLayer(
- base::scoped_nsobject<CALayerHost> ca_context_layer) {
- if (!ca_context_layer)
- return;
- [ca_context_layer removeFromSuperlayer];
- if (ca_context_layer == ca_context_layer_)
- ca_context_layer_.reset();
-}
-
-void AcceleratedWidgetMac::DestroyLocalLayer() {
- if (!local_layer_)
+ if (!view_) {
+ TRACE_EVENT0("ui", "No associated NSView");
return;
- [local_layer_ removeFromSuperlayer];
- local_layer_.reset();
-}
+ }
+ ScopedCAActionDisabler disabler;
+ last_swap_size_dip_ = gfx::ConvertSizeToDIP(scale_factor, pixel_size);
-void AcceleratedWidgetMacGotFrame(
- gfx::AcceleratedWidget widget,
- CAContextID ca_context_id,
- bool fullscreen_low_power_ca_context_valid,
- CAContextID fullscreen_low_power_ca_context_id,
- base::ScopedCFTypeRef<IOSurfaceRef> io_surface,
- const gfx::Size& pixel_size,
- float scale_factor,
- base::TimeTicks* vsync_timebase,
- base::TimeDelta* vsync_interval) {
- if (vsync_timebase)
- *vsync_timebase = base::TimeTicks();
- if (vsync_interval)
- *vsync_interval = base::TimeDelta();
-
- AcceleratedWidgetMac* accelerated_widget_mac =
- GetHelperFromAcceleratedWidget(widget);
-
- if (accelerated_widget_mac) {
- accelerated_widget_mac->GotFrame(ca_context_id,
- fullscreen_low_power_ca_context_valid,
- fullscreen_low_power_ca_context_id,
- io_surface, pixel_size, scale_factor);
- if (vsync_timebase && vsync_interval) {
- accelerated_widget_mac->GetVSyncParameters(vsync_timebase,
- vsync_interval);
- }
+ // Create (if needed) and update the IOSurface layer with new content.
+ if (!io_surface_layer_) {
+ io_surface_layer_.reset([[CALayer alloc] init]);
+ [io_surface_layer_ setContentsGravity:kCAGravityTopLeft];
+ [io_surface_layer_ setAnchorPoint:CGPointMake(0, 0)];
+ [flipped_layer_ addSublayer:io_surface_layer_];
+ }
+ id new_contents = static_cast<id>(io_surface.get());
+ if (new_contents && new_contents == [io_surface_layer_ contents])
+ [io_surface_layer_ setContentsChanged];
+ else
+ [io_surface_layer_ setContents:new_contents];
+ [io_surface_layer_ setBounds:CGRectMake(0, 0, last_swap_size_dip_.width(),
+ last_swap_size_dip_.height())];
+ if ([io_surface_layer_ contentsScale] != scale_factor)
+ [io_surface_layer_ setContentsScale:scale_factor];
+
+ // Ensure that the content layer is removed.
+ if (content_layer_) {
+ [content_layer_ removeFromSuperlayer];
+ content_layer_.reset();
}
+ view_->AcceleratedWidgetSwapCompleted();
}
} // namespace ui
diff --git a/chromium/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm b/chromium/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
index fe5b2249a0d..882fc8c887d 100644
--- a/chromium/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
+++ b/chromium/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm
@@ -80,8 +80,8 @@ TEST_F(CALayerTreeTest, PropertyUpdates) {
properties.background_color = SkColorSetARGB(0xFF, 0xFF, 0, 0);
properties.edge_aa_mask = GL_CA_LAYER_EDGE_LEFT_CHROMIUM;
properties.opacity = 0.5f;
- properties.io_surface =
- gfx::CreateIOSurface(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888);
+ properties.io_surface.reset(
+ gfx::CreateIOSurface(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888));
std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree;
CALayer* root_layer = nil;
@@ -231,7 +231,7 @@ TEST_F(CALayerTreeTest, PropertyUpdates) {
// Change the contents and commit.
{
- properties.io_surface = nullptr;
+ properties.io_surface.reset();
UpdateCALayerTree(ca_layer_tree, &properties, superlayer_);
// Validate the tree structure.
@@ -338,8 +338,9 @@ TEST_F(CALayerTreeTest, PropertyUpdates) {
// Add the clipping and IOSurface contents back.
{
properties.is_clipped = true;
- properties.io_surface =
- gfx::CreateIOSurface(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888);
+ properties.io_surface.reset(
+ gfx::CreateIOSurface(gfx::Size(256, 256),
+ gfx::BufferFormat::BGRA_8888));
UpdateCALayerTree(ca_layer_tree, &properties, superlayer_);
// Validate the tree structure.
@@ -613,8 +614,8 @@ TEST_F(CALayerTreeTest, SortingContextMustHaveConsistentClip) {
// Test updating each layer's properties.
TEST_F(CALayerTreeTest, AVLayer) {
CALayerProperties properties;
- properties.io_surface = gfx::CreateIOSurface(
- gfx::Size(256, 256), gfx::BufferFormat::YUV_420_BIPLANAR);
+ properties.io_surface.reset(gfx::CreateIOSurface(
+ gfx::Size(256, 256), gfx::BufferFormat::YUV_420_BIPLANAR));
std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree;
CALayer* root_layer = nil;
@@ -720,8 +721,8 @@ TEST_F(CALayerTreeTest, AVLayer) {
// Test fullscreen low power detection.
TEST_F(CALayerTreeTest, FullscreenLowPower) {
CALayerProperties properties;
- properties.io_surface = gfx::CreateIOSurface(
- gfx::Size(256, 256), gfx::BufferFormat::YUV_420_BIPLANAR);
+ properties.io_surface.reset(gfx::CreateIOSurface(
+ gfx::Size(256, 256), gfx::BufferFormat::YUV_420_BIPLANAR));
properties.is_clipped = false;
CVPixelBufferCreateWithIOSurface(nullptr, properties.io_surface, nullptr,
properties.cv_pixel_buffer.InitializeInto());
diff --git a/chromium/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm b/chromium/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
index feb283eaade..7acd00ef7e6 100644
--- a/chromium/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
+++ b/chromium/ui/accelerated_widget_mac/ca_renderer_layer_tree.mm
@@ -588,7 +588,10 @@ void CARendererLayerTree::ContentLayer::CommitToCA(CALayer* superlayer,
ca_layer.reset([[CALayer alloc] init]);
}
[ca_layer setAnchorPoint:CGPointZero];
- [superlayer addSublayer:ca_layer];
+ if (old_layer && old_layer->ca_layer)
+ [superlayer replaceSublayer:old_layer->ca_layer with:ca_layer];
+ else
+ [superlayer addSublayer:ca_layer];
}
DCHECK_EQ([ca_layer superlayer], superlayer);
bool update_anything = update_contents || update_contents_rect ||
diff --git a/chromium/ui/accelerated_widget_mac/display_link_mac.cc b/chromium/ui/accelerated_widget_mac/display_link_mac.cc
index 72470f64b1e..a6bf7f120e9 100644
--- a/chromium/ui/accelerated_widget_mac/display_link_mac.cc
+++ b/chromium/ui/accelerated_widget_mac/display_link_mac.cc
@@ -6,8 +6,10 @@
#include <stdint.h>
+#include "base/location.h"
#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
+#include "base/single_thread_task_runner.h"
+#include "base/threading/thread_task_runner_handle.h"
#include "base/trace_event/trace_event.h"
namespace base {
@@ -81,11 +83,10 @@ scoped_refptr<DisplayLinkMac> DisplayLinkMac::GetForDisplay(
DisplayLinkMac::DisplayLinkMac(
CGDirectDisplayID display_id,
base::ScopedTypeRef<CVDisplayLinkRef> display_link)
- : main_thread_task_runner_(
- base::MessageLoop::current()->task_runner()),
- display_id_(display_id),
- display_link_(display_link),
- timebase_and_interval_valid_(false) {
+ : main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
+ display_id_(display_id),
+ display_link_(display_link),
+ timebase_and_interval_valid_(false) {
DCHECK(display_map_.Get().find(display_id) == display_map_.Get().end());
if (display_map_.Get().empty()) {
CGError register_error = CGDisplayRegisterReconfigurationCallback(
diff --git a/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.cc b/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.cc
index f44f7ae829d..b64e09b01d1 100644
--- a/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.cc
+++ b/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.cc
@@ -175,7 +175,8 @@ void WrappedTask::RemoveFromTaskRunnerQueue() {
PumpableTaskRunner::PumpableTaskRunner(
const EventTimedWaitCallback& event_timed_wait_callback,
const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner)
- : event_(false /* auto-reset */, false /* initially signalled */),
+ : event_(base::WaitableEvent::ResetPolicy::AUTOMATIC,
+ base::WaitableEvent::InitialState::NOT_SIGNALED),
event_timed_wait_callback_(event_timed_wait_callback),
target_task_runner_(target_task_runner) {}
@@ -300,6 +301,10 @@ void WindowResizeHelperMac::Init(
base::Bind(&WindowResizeHelperMac::EventTimedWait), target_task_runner);
}
+void WindowResizeHelperMac::ShutdownForTests() {
+ task_runner_ = nullptr;
+}
+
bool WindowResizeHelperMac::WaitForSingleTaskToRun(
const base::TimeDelta& max_delay) {
PumpableTaskRunner* pumpable_task_runner =
diff --git a/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.h b/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.h
index f81cdc48544..a83034f2df6 100644
--- a/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.h
+++ b/chromium/ui/accelerated_widget_mac/window_resize_helper_mac.h
@@ -53,6 +53,10 @@ class ACCELERATED_WIDGET_MAC_EXPORT WindowResizeHelperMac {
void Init(
const scoped_refptr<base::SingleThreadTaskRunner>& target_task_runner);
+ // Because this class is global, many tests may want to do this setup
+ // repeatedly, so need some way to uninitialize as well.
+ void ShutdownForTests();
+
scoped_refptr<base::SingleThreadTaskRunner> task_runner() const;
// UI THREAD ONLY -----------------------------------------------------------