diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-08-01 12:59:39 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2016-08-04 12:40:43 +0000 |
commit | 28b1110370900897ab652cb420c371fab8857ad4 (patch) | |
tree | 41b32127d23b0df4f2add2a27e12dc87bddb260e /chromium/ui/accelerated_widget_mac | |
parent | 399c965b6064c440ddcf4015f5f8e9d131c7a0a6 (diff) | |
download | qtwebengine-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')
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 ----------------------------------------------------------- |