diff options
author | 2021-05-25 13:25:06 +0000 | |
---|---|---|
committer | 2021-05-25 13:25:06 +0000 | |
commit | aa11e58c63a745b42d3d565ff4e9e35ecd32099f (patch) | |
tree | 3e9ad02b3f750ec296c049c5bc8353be2aae924c /libs | |
parent | 45916263e09d63771c7cc9748f134b45de563c05 (diff) | |
parent | c238fa8420d69ff1f8b1353116b5b1c9f2220c9a (diff) |
Add SF side tunnel mode listener am: 8f04b30c59 am: 2833f90b06 am: c238fa8420
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/14340746
Change-Id: Ib98149545d6feb82c5e720710d4adbe233a6e46f
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gui/ISurfaceComposer.cpp | 50 | ||||
-rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 10 | ||||
-rw-r--r-- | libs/gui/aidl/android/gui/ITunnelModeEnabledListener.aidl | 29 | ||||
-rw-r--r-- | libs/gui/include/gui/ISurfaceComposer.h | 18 | ||||
-rw-r--r-- | libs/gui/include/gui/SurfaceComposerClient.h | 5 | ||||
-rw-r--r-- | libs/gui/tests/Surface_test.cpp | 10 |
6 files changed, 122 insertions, 0 deletions
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index 0436758e72..f6a48d7abd 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -829,6 +829,36 @@ public: return error; } + virtual status_t addTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) { + Parcel data, reply; + SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor()); + SAFE_PARCEL(data.writeStrongBinder, IInterface::asBinder(listener)); + + const status_t error = + remote()->transact(BnSurfaceComposer::ADD_TUNNEL_MODE_ENABLED_LISTENER, data, + &reply); + if (error != NO_ERROR) { + ALOGE("addTunnelModeEnabledListener: Failed to transact"); + } + return error; + } + + virtual status_t removeTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) { + Parcel data, reply; + SAFE_PARCEL(data.writeInterfaceToken, ISurfaceComposer::getInterfaceDescriptor()); + SAFE_PARCEL(data.writeStrongBinder, IInterface::asBinder(listener)); + + const status_t error = + remote()->transact(BnSurfaceComposer::REMOVE_TUNNEL_MODE_ENABLED_LISTENER, data, + &reply); + if (error != NO_ERROR) { + ALOGE("removeTunnelModeEnabledListener: Failed to transact"); + } + return error; + } + status_t setDesiredDisplayModeSpecs(const sp<IBinder>& displayToken, ui::DisplayModeId defaultMode, bool allowGroupSwitching, float primaryRefreshRateMin, float primaryRefreshRateMax, @@ -1748,6 +1778,26 @@ status_t BnSurfaceComposer::onTransact( } return removeFpsListener(listener); } + case ADD_TUNNEL_MODE_ENABLED_LISTENER: { + CHECK_INTERFACE(ISurfaceComposer, data, reply); + sp<gui::ITunnelModeEnabledListener> listener; + status_t result = data.readNullableStrongBinder(&listener); + if (result != NO_ERROR) { + ALOGE("addTunnelModeEnabledListener: Failed to read listener"); + return result; + } + return addTunnelModeEnabledListener(listener); + } + case REMOVE_TUNNEL_MODE_ENABLED_LISTENER: { + CHECK_INTERFACE(ISurfaceComposer, data, reply); + sp<gui::ITunnelModeEnabledListener> listener; + status_t result = data.readNullableStrongBinder(&listener); + if (result != NO_ERROR) { + ALOGE("removeTunnelModeEnabledListener: Failed to read listener"); + return result; + } + return removeTunnelModeEnabledListener(listener); + } case SET_DESIRED_DISPLAY_MODE_SPECS: { CHECK_INTERFACE(ISurfaceComposer, data, reply); sp<IBinder> displayToken = data.readStrongBinder(); diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index 1bb63930a7..521f2b0046 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -2077,6 +2077,16 @@ status_t SurfaceComposerClient::removeFpsListener(const sp<gui::IFpsListener>& l return ComposerService::getComposerService()->removeFpsListener(listener); } +status_t SurfaceComposerClient::addTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) { + return ComposerService::getComposerService()->addTunnelModeEnabledListener(listener); +} + +status_t SurfaceComposerClient::removeTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) { + return ComposerService::getComposerService()->removeTunnelModeEnabledListener(listener); +} + bool SurfaceComposerClient::getDisplayBrightnessSupport(const sp<IBinder>& displayToken) { bool support = false; ComposerService::getComposerService()->getDisplayBrightnessSupport(displayToken, &support); diff --git a/libs/gui/aidl/android/gui/ITunnelModeEnabledListener.aidl b/libs/gui/aidl/android/gui/ITunnelModeEnabledListener.aidl new file mode 100644 index 0000000000..2a89ccacec --- /dev/null +++ b/libs/gui/aidl/android/gui/ITunnelModeEnabledListener.aidl @@ -0,0 +1,29 @@ +/* + * Copyright 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.gui; + +/** @hide */ +oneway interface ITunnelModeEnabledListener { + + /** + * Called when tunnel mode status has changed. Tunnel mode is: + * - enabled when there is a sideband stream attached to one of the layers in + * surface flinger + * - disabled when there is no layer with a sideband stream + */ + void onTunnelModeEnabledChanged(boolean enabled); +} diff --git a/libs/gui/include/gui/ISurfaceComposer.h b/libs/gui/include/gui/ISurfaceComposer.h index c420e4a8d4..6b1e6c1592 100644 --- a/libs/gui/include/gui/ISurfaceComposer.h +++ b/libs/gui/include/gui/ISurfaceComposer.h @@ -21,6 +21,7 @@ #include <android/gui/IHdrLayerInfoListener.h> #include <android/gui/IScreenCaptureListener.h> #include <android/gui/ITransactionTraceListener.h> +#include <android/gui/ITunnelModeEnabledListener.h> #include <binder/IBinder.h> #include <binder/IInterface.h> #include <gui/FrameTimelineInfo.h> @@ -375,6 +376,21 @@ public: */ virtual status_t removeFpsListener(const sp<gui::IFpsListener>& listener) = 0; + /* Registers a listener to receive tunnel mode enabled updates from SurfaceFlinger. + * + * Requires ACCESS_SURFACE_FLINGER permission. + */ + virtual status_t addTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) = 0; + + /* + * Removes a listener that was receiving tunnel mode enabled updates from SurfaceFlinger. + * + * Requires ACCESS_SURFACE_FLINGER permission. + */ + virtual status_t removeTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener) = 0; + /* Sets the refresh rate boundaries for the display. * * The primary refresh rate range represents display manager's general guidance on the display @@ -605,6 +621,8 @@ public: ADD_HDR_LAYER_INFO_LISTENER, REMOVE_HDR_LAYER_INFO_LISTENER, ON_PULL_ATOM, + ADD_TUNNEL_MODE_ENABLED_LISTENER, + REMOVE_TUNNEL_MODE_ENABLED_LISTENER, // Always append new enum to the end. }; diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index 86f1b63e24..9dadea8d44 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -50,6 +50,7 @@ class HdrCapabilities; class ISurfaceComposerClient; class IGraphicBufferProducer; class IRegionSamplingListener; +class ITunnelModeEnabledListener; class Region; struct SurfaceControlStats { @@ -610,6 +611,10 @@ public: static status_t removeRegionSamplingListener(const sp<IRegionSamplingListener>& listener); static status_t addFpsListener(int32_t taskId, const sp<gui::IFpsListener>& listener); static status_t removeFpsListener(const sp<gui::IFpsListener>& listener); + static status_t addTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener); + static status_t removeTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& listener); private: virtual void onFirstRef(); diff --git a/libs/gui/tests/Surface_test.cpp b/libs/gui/tests/Surface_test.cpp index 7002adf1ba..42c2c1098d 100644 --- a/libs/gui/tests/Surface_test.cpp +++ b/libs/gui/tests/Surface_test.cpp @@ -843,6 +843,16 @@ public: return NO_ERROR; } status_t removeFpsListener(const sp<gui::IFpsListener>& /*listener*/) { return NO_ERROR; } + + status_t addTunnelModeEnabledListener(const sp<gui::ITunnelModeEnabledListener>& /*listener*/) { + return NO_ERROR; + } + + status_t removeTunnelModeEnabledListener( + const sp<gui::ITunnelModeEnabledListener>& /*listener*/) { + return NO_ERROR; + } + status_t setDesiredDisplayModeSpecs(const sp<IBinder>& /*displayToken*/, ui::DisplayModeId /*defaultMode*/, bool /*allowGroupSwitching*/, |