123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Cheng Zhao <[email protected]>
- Date: Thu, 20 Sep 2018 17:48:49 -0700
- Subject: mas: disable remote layer APIs (CAContext and CALayerHost) for MAS
- build
- Accordin to ccameron:
- For apps that spend a lot of time watching video (especially fullscreen video),
- the power/battery usage will likely increase 1.5x to 2x. For something that is,
- e.g, scrolling, it'll be smaller, more like 1.15x or 1.25x.
- In terms of performance, the impact will likely be fairly small -- any app that
- could hit 60fps before will likely still be able to hit 60fps. There may even be
- cases where performance improves when disabling remote CoreAnimation (remote
- CoreAnimation is really only about battery usage).
- diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.h b/gpu/ipc/service/image_transport_surface_overlay_mac.h
- index ee83f9e5504eda6bd1ad80db7bd486934b7f3b6d..5db55a349f7eaf829d8458b279fd64f1f28a9a2c 100644
- --- a/gpu/ipc/service/image_transport_surface_overlay_mac.h
- +++ b/gpu/ipc/service/image_transport_surface_overlay_mac.h
- @@ -24,7 +24,9 @@
- #include "gpu/ipc/service/gpu_vsync_mac.h"
- #endif
-
- +#if !IS_MAS_BUILD()
- @class CAContext;
- +#endif
- @class CALayer;
-
- namespace ui {
- @@ -79,8 +81,10 @@ class ImageTransportSurfaceOverlayMacEGL : public gl::Presenter {
-
- base::WeakPtr<ImageTransportSurfaceDelegate> delegate_;
-
- +#if !IS_MAS_BUILD()
- const bool use_remote_layer_api_;
- CAContext* __strong ca_context_;
- +#endif
- std::unique_ptr<ui::CALayerTreeCoordinator> ca_layer_tree_coordinator_;
-
- gfx::Size pixel_size_;
- diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
- index bd2f1d8a8d82456390a5efb641545e9177727542..c368baeb3b8141a84f461eff5bd84129dc26f0fd 100644
- --- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
- +++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
- @@ -53,7 +53,9 @@
- ImageTransportSurfaceOverlayMacEGL::ImageTransportSurfaceOverlayMacEGL(
- base::WeakPtr<ImageTransportSurfaceDelegate> delegate)
- : delegate_(delegate),
- +#if !IS_MAS_BUILD()
- use_remote_layer_api_(ui::RemoteLayerAPISupported()),
- +#endif
- scale_factor_(1),
- weak_ptr_factory_(this) {
- static bool av_disabled_at_command_line =
- @@ -65,6 +67,7 @@
- ->workarounds()
- .disable_av_sample_buffer_display_layer;
-
- +#if !IS_MAS_BUILD()
- ca_layer_tree_coordinator_ = std::make_unique<ui::CALayerTreeCoordinator>(
- use_remote_layer_api_, allow_av_sample_buffer_display_layer);
-
- @@ -85,6 +88,10 @@
- #endif
- ca_context_.layer = ca_layer_tree_coordinator_->GetCALayerForDisplay();
- }
- +#else
- + ca_layer_tree_coordinator_ = std::make_unique<ui::CALayerTreeCoordinator>(
- + /*allow_remote_layers=*/false, allow_av_sample_buffer_display_layer);
- +#endif
-
- #if BUILDFLAG(IS_MAC)
- if (features::UseGpuVsync()) {
- @@ -176,9 +183,13 @@
- TRACE_EVENT_INSTANT2("test_gpu", "SwapBuffers", TRACE_EVENT_SCOPE_THREAD,
- "GLImpl", static_cast<int>(gl::GetGLImplementation()),
- "width", pixel_size_.width());
- +#if !IS_MAS_BUILD()
- if (use_remote_layer_api_) {
- params.ca_context_id = [ca_context_ contextId];
- } else {
- +#else
- + if (true) {
- +#endif
- IOSurfaceRef io_surface =
- ca_layer_tree_coordinator_->GetIOSurfaceForDisplay();
- if (io_surface) {
- diff --git a/ui/accelerated_widget_mac/display_ca_layer_tree.mm b/ui/accelerated_widget_mac/display_ca_layer_tree.mm
- index cdcb1da0c11b07cce895369aba56b78623a0bef5..3765fb5106c8f2fbc1438ad759a173610b5db2aa 100644
- --- a/ui/accelerated_widget_mac/display_ca_layer_tree.mm
- +++ b/ui/accelerated_widget_mac/display_ca_layer_tree.mm
- @@ -120,6 +120,7 @@ - (void)setContentsChanged;
- }
-
- void DisplayCALayerTree::GotCALayerFrame(uint32_t ca_context_id) {
- +#if !IS_MAS_BUILD()
- // Early-out if the remote layer has not changed.
- if (remote_layer_.contextId == ca_context_id) {
- return;
- @@ -149,6 +150,9 @@ - (void)setContentsChanged;
- [io_surface_layer_ removeFromSuperlayer];
- io_surface_layer_ = nil;
- }
- +#else
- + NOTREACHED() << "Remote layer is being used in MAS build";
- +#endif
- }
-
- void DisplayCALayerTree::GotIOSurfaceFrame(
- diff --git a/ui/base/cocoa/remote_layer_api.h b/ui/base/cocoa/remote_layer_api.h
- index 59dc2f82214cfd883b6ebef3b0fb25af6387a9cd..d585ba14b34021a93c878d0d9f9d9ef70eed32ca 100644
- --- a/ui/base/cocoa/remote_layer_api.h
- +++ b/ui/base/cocoa/remote_layer_api.h
- @@ -17,6 +17,7 @@
-
- #if BUILDFLAG(IS_MAC)
-
- +#if !IS_MAS_BUILD()
- // The CGSConnectionID is used to create the CAContext in the process that is
- // going to share the CALayers that it is rendering to another process to
- // display.
- @@ -68,6 +69,8 @@ extern NSString* const kCAContextIgnoresHitTest;
-
- #endif // __OBJC__
-
- +#endif // MAS_BUILD
- +
- namespace ui {
-
- // This function will check if all of the interfaces listed above are supported
- diff --git a/ui/base/cocoa/remote_layer_api.mm b/ui/base/cocoa/remote_layer_api.mm
- index fc25ba79d2b0e1acdb7ba54b89e7d6e16f94771b..962df2d65d61ec0836cf465d847eb666033846f2 100644
- --- a/ui/base/cocoa/remote_layer_api.mm
- +++ b/ui/base/cocoa/remote_layer_api.mm
- @@ -10,6 +10,7 @@
-
- namespace ui {
-
- +#if !IS_MAS_BUILD()
- namespace {
- // Control use of cross-process CALayers to display content directly from the
- // GPU process on Mac.
- @@ -17,8 +18,10 @@
- "RemoteCoreAnimationAPI",
- base::FEATURE_ENABLED_BY_DEFAULT);
- } // namespace
- +#endif
-
- bool RemoteLayerAPISupported() {
- +#if !IS_MAS_BUILD()
- if (!base::FeatureList::IsEnabled(kRemoteCoreAnimationAPI))
- return false;
-
- @@ -55,6 +58,9 @@ bool RemoteLayerAPISupported() {
-
- // If everything is there, we should be able to use the API.
- return true;
- +#else
- + return false;
- +#endif // MAS_BUILD
- }
-
- } // namespace
|