summaryrefslogtreecommitdiff
path: root/libs/gui/ISurfaceComposer.cpp
diff options
context:
space:
mode:
author Galia Peycheva <galinap@google.com> 2021-04-27 13:25:38 +0200
committer Galia Peycheva <galinap@google.com> 2021-05-25 11:50:31 +0200
commit8f04b30c59ebb8bd3c7d66203d91113e078ed815 (patch)
treee6805e71261974857f7be5c22cc25c065fc5964b /libs/gui/ISurfaceComposer.cpp
parent6b38461a39eca271da55cf14682b6dfef764529b (diff)
Add SF side tunnel mode listener
This CL adds a TunnelModeStateReporter, which monitors if there are any layers with a sideband stream in SurfaceFlinger. If any of the layers have a sideband stream, it informs all the registered listeners that tunnel mode is enabled. When no layers have a sideband stream, it notifies the listeners that tunnel mode is disabled. Bug: 171457637 Test: atest TunnelModeStateListenerTest Test: atest TunnelModeStateReporterTest Change-Id: Ie54b34dbd9b6253d7142e9b0f690c8469374604d
Diffstat (limited to 'libs/gui/ISurfaceComposer.cpp')
-rw-r--r--libs/gui/ISurfaceComposer.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp
index 53721cf6f7..71e18a97c9 100644
--- a/libs/gui/ISurfaceComposer.cpp
+++ b/libs/gui/ISurfaceComposer.cpp
@@ -824,6 +824,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,
@@ -1740,6 +1770,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();