xref: /aosp_15_r20/frameworks/native/include/gui/ISurfaceComposer.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2006 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker #pragma once
18*38e8c45fSAndroid Build Coastguard Worker 
19*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/CachingHint.h>
20*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/DisplayBrightness.h>
21*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/DisplayCaptureArgs.h>
22*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/FrameTimelineInfo.h>
23*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IDisplayEventConnection.h>
24*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IFpsListener.h>
25*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IHdrLayerInfoListener.h>
26*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IRegionSamplingListener.h>
27*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IScreenCaptureListener.h>
28*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/ITunnelModeEnabledListener.h>
29*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IWindowInfosListener.h>
30*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/IWindowInfosPublisher.h>
31*38e8c45fSAndroid Build Coastguard Worker #include <android/gui/LayerCaptureArgs.h>
32*38e8c45fSAndroid Build Coastguard Worker #include <binder/IBinder.h>
33*38e8c45fSAndroid Build Coastguard Worker #include <binder/IInterface.h>
34*38e8c45fSAndroid Build Coastguard Worker #include <gui/ITransactionCompletedListener.h>
35*38e8c45fSAndroid Build Coastguard Worker #include <gui/SpHash.h>
36*38e8c45fSAndroid Build Coastguard Worker #include <math/vec4.h>
37*38e8c45fSAndroid Build Coastguard Worker #include <stdint.h>
38*38e8c45fSAndroid Build Coastguard Worker #include <sys/types.h>
39*38e8c45fSAndroid Build Coastguard Worker #include <ui/ConfigStoreTypes.h>
40*38e8c45fSAndroid Build Coastguard Worker #include <ui/DisplayId.h>
41*38e8c45fSAndroid Build Coastguard Worker #include <ui/DisplayMode.h>
42*38e8c45fSAndroid Build Coastguard Worker #include <ui/DisplayedFrameStats.h>
43*38e8c45fSAndroid Build Coastguard Worker #include <ui/FrameStats.h>
44*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicBuffer.h>
45*38e8c45fSAndroid Build Coastguard Worker #include <ui/GraphicTypes.h>
46*38e8c45fSAndroid Build Coastguard Worker #include <ui/PixelFormat.h>
47*38e8c45fSAndroid Build Coastguard Worker #include <ui/Rotation.h>
48*38e8c45fSAndroid Build Coastguard Worker #include <utils/Errors.h>
49*38e8c45fSAndroid Build Coastguard Worker #include <utils/RefBase.h>
50*38e8c45fSAndroid Build Coastguard Worker #include <utils/Timers.h>
51*38e8c45fSAndroid Build Coastguard Worker #include <utils/Vector.h>
52*38e8c45fSAndroid Build Coastguard Worker 
53*38e8c45fSAndroid Build Coastguard Worker #include <optional>
54*38e8c45fSAndroid Build Coastguard Worker #include <unordered_set>
55*38e8c45fSAndroid Build Coastguard Worker #include <vector>
56*38e8c45fSAndroid Build Coastguard Worker 
57*38e8c45fSAndroid Build Coastguard Worker #include <aidl/android/hardware/graphics/common/DisplayDecorationSupport.h>
58*38e8c45fSAndroid Build Coastguard Worker 
59*38e8c45fSAndroid Build Coastguard Worker namespace android {
60*38e8c45fSAndroid Build Coastguard Worker 
61*38e8c45fSAndroid Build Coastguard Worker struct client_cache_t;
62*38e8c45fSAndroid Build Coastguard Worker class ComposerState;
63*38e8c45fSAndroid Build Coastguard Worker struct DisplayStatInfo;
64*38e8c45fSAndroid Build Coastguard Worker struct DisplayState;
65*38e8c45fSAndroid Build Coastguard Worker struct InputWindowCommands;
66*38e8c45fSAndroid Build Coastguard Worker class HdrCapabilities;
67*38e8c45fSAndroid Build Coastguard Worker class Rect;
68*38e8c45fSAndroid Build Coastguard Worker 
69*38e8c45fSAndroid Build Coastguard Worker using gui::FrameTimelineInfo;
70*38e8c45fSAndroid Build Coastguard Worker using gui::IDisplayEventConnection;
71*38e8c45fSAndroid Build Coastguard Worker using gui::IRegionSamplingListener;
72*38e8c45fSAndroid Build Coastguard Worker using gui::IScreenCaptureListener;
73*38e8c45fSAndroid Build Coastguard Worker using gui::SpHash;
74*38e8c45fSAndroid Build Coastguard Worker 
75*38e8c45fSAndroid Build Coastguard Worker namespace ui {
76*38e8c45fSAndroid Build Coastguard Worker 
77*38e8c45fSAndroid Build Coastguard Worker struct DisplayMode;
78*38e8c45fSAndroid Build Coastguard Worker struct DisplayState;
79*38e8c45fSAndroid Build Coastguard Worker struct DynamicDisplayInfo;
80*38e8c45fSAndroid Build Coastguard Worker 
81*38e8c45fSAndroid Build Coastguard Worker } // namespace ui
82*38e8c45fSAndroid Build Coastguard Worker 
83*38e8c45fSAndroid Build Coastguard Worker /*
84*38e8c45fSAndroid Build Coastguard Worker  * This class defines the Binder IPC interface for accessing various
85*38e8c45fSAndroid Build Coastguard Worker  * SurfaceFlinger features.
86*38e8c45fSAndroid Build Coastguard Worker  */
87*38e8c45fSAndroid Build Coastguard Worker class ISurfaceComposer: public IInterface {
88*38e8c45fSAndroid Build Coastguard Worker public:
89*38e8c45fSAndroid Build Coastguard Worker     DECLARE_META_INTERFACE(SurfaceComposer)
90*38e8c45fSAndroid Build Coastguard Worker 
91*38e8c45fSAndroid Build Coastguard Worker     // flags for setTransactionState()
92*38e8c45fSAndroid Build Coastguard Worker     enum {
93*38e8c45fSAndroid Build Coastguard Worker         eAnimation = 0x02,
94*38e8c45fSAndroid Build Coastguard Worker 
95*38e8c45fSAndroid Build Coastguard Worker         // Explicit indication that this transaction and others to follow will likely result in a
96*38e8c45fSAndroid Build Coastguard Worker         // lot of layers being composed, and thus, SurfaceFlinger should wake-up earlier to avoid
97*38e8c45fSAndroid Build Coastguard Worker         // missing frame deadlines. In this case SurfaceFlinger will wake up at
98*38e8c45fSAndroid Build Coastguard Worker         // (sf vsync offset - debug.sf.early_phase_offset_ns). SurfaceFlinger will continue to be
99*38e8c45fSAndroid Build Coastguard Worker         // in the early configuration until it receives eEarlyWakeupEnd. These flags are
100*38e8c45fSAndroid Build Coastguard Worker         // expected to be used by WindowManager only and are guarded by
101*38e8c45fSAndroid Build Coastguard Worker         // android.permission.WAKEUP_SURFACE_FLINGER
102*38e8c45fSAndroid Build Coastguard Worker         eEarlyWakeupStart = 0x08,
103*38e8c45fSAndroid Build Coastguard Worker         eEarlyWakeupEnd = 0x10,
104*38e8c45fSAndroid Build Coastguard Worker         eOneWay = 0x20
105*38e8c45fSAndroid Build Coastguard Worker     };
106*38e8c45fSAndroid Build Coastguard Worker 
107*38e8c45fSAndroid Build Coastguard Worker     /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
108*38e8c45fSAndroid Build Coastguard Worker     virtual status_t setTransactionState(
109*38e8c45fSAndroid Build Coastguard Worker             const FrameTimelineInfo& frameTimelineInfo, Vector<ComposerState>& state,
110*38e8c45fSAndroid Build Coastguard Worker             Vector<DisplayState>& displays, uint32_t flags, const sp<IBinder>& applyToken,
111*38e8c45fSAndroid Build Coastguard Worker             InputWindowCommands inputWindowCommands, int64_t desiredPresentTime,
112*38e8c45fSAndroid Build Coastguard Worker             bool isAutoTimestamp, const std::vector<client_cache_t>& uncacheBuffer,
113*38e8c45fSAndroid Build Coastguard Worker             bool hasListenerCallbacks, const std::vector<ListenerCallbacks>& listenerCallbacks,
114*38e8c45fSAndroid Build Coastguard Worker             uint64_t transactionId, const std::vector<uint64_t>& mergedTransactionIds) = 0;
115*38e8c45fSAndroid Build Coastguard Worker };
116*38e8c45fSAndroid Build Coastguard Worker 
117*38e8c45fSAndroid Build Coastguard Worker // ----------------------------------------------------------------------------
118*38e8c45fSAndroid Build Coastguard Worker 
119*38e8c45fSAndroid Build Coastguard Worker class BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
120*38e8c45fSAndroid Build Coastguard Worker public:
121*38e8c45fSAndroid Build Coastguard Worker     enum ISurfaceComposerTag {
122*38e8c45fSAndroid Build Coastguard Worker         // Note: BOOT_FINISHED must remain this value, it is called from
123*38e8c45fSAndroid Build Coastguard Worker         // Java by ActivityManagerService.
124*38e8c45fSAndroid Build Coastguard Worker         BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
125*38e8c45fSAndroid Build Coastguard Worker         CREATE_CONNECTION,               // Deprecated. Autogenerated by .aidl now.
126*38e8c45fSAndroid Build Coastguard Worker         GET_STATIC_DISPLAY_INFO,         // Deprecated. Autogenerated by .aidl now.
127*38e8c45fSAndroid Build Coastguard Worker         CREATE_DISPLAY_EVENT_CONNECTION, // Deprecated. Autogenerated by .aidl now.
128*38e8c45fSAndroid Build Coastguard Worker         CREATE_VIRTUAL_DISPLAY,          // Deprecated. Autogenerated by .aidl now.
129*38e8c45fSAndroid Build Coastguard Worker         DESTROY_VIRTUAL_DISPLAY,         // Deprecated. Autogenerated by .aidl now.
130*38e8c45fSAndroid Build Coastguard Worker         GET_PHYSICAL_DISPLAY_TOKEN,      // Deprecated. Autogenerated by .aidl now.
131*38e8c45fSAndroid Build Coastguard Worker         SET_TRANSACTION_STATE,
132*38e8c45fSAndroid Build Coastguard Worker         AUTHENTICATE_SURFACE,           // Deprecated. Autogenerated by .aidl now.
133*38e8c45fSAndroid Build Coastguard Worker         GET_SUPPORTED_FRAME_TIMESTAMPS, // Deprecated. Autogenerated by .aidl now.
134*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_MODES,              // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
135*38e8c45fSAndroid Build Coastguard Worker         GET_ACTIVE_DISPLAY_MODE,        // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
136*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_STATE,
137*38e8c45fSAndroid Build Coastguard Worker         CAPTURE_DISPLAY,             // Deprecated. Autogenerated by .aidl now.
138*38e8c45fSAndroid Build Coastguard Worker         CAPTURE_LAYERS,              // Deprecated. Autogenerated by .aidl now.
139*38e8c45fSAndroid Build Coastguard Worker         CLEAR_ANIMATION_FRAME_STATS, // Deprecated. Autogenerated by .aidl now.
140*38e8c45fSAndroid Build Coastguard Worker         GET_ANIMATION_FRAME_STATS,   // Deprecated. Autogenerated by .aidl now.
141*38e8c45fSAndroid Build Coastguard Worker         SET_POWER_MODE,              // Deprecated. Autogenerated by .aidl now.
142*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_STATS,
143*38e8c45fSAndroid Build Coastguard Worker         GET_HDR_CAPABILITIES,       // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
144*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_COLOR_MODES,    // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
145*38e8c45fSAndroid Build Coastguard Worker         GET_ACTIVE_COLOR_MODE,      // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
146*38e8c45fSAndroid Build Coastguard Worker         SET_ACTIVE_COLOR_MODE,      // Deprecated. Autogenerated by .aidl now.
147*38e8c45fSAndroid Build Coastguard Worker         ENABLE_VSYNC_INJECTIONS,    // Deprecated. Autogenerated by .aidl now.
148*38e8c45fSAndroid Build Coastguard Worker         INJECT_VSYNC,               // Deprecated. Autogenerated by .aidl now.
149*38e8c45fSAndroid Build Coastguard Worker         GET_LAYER_DEBUG_INFO,       // Deprecated. Autogenerated by .aidl now.
150*38e8c45fSAndroid Build Coastguard Worker         GET_COMPOSITION_PREFERENCE, // Deprecated. Autogenerated by .aidl now.
151*38e8c45fSAndroid Build Coastguard Worker         GET_COLOR_MANAGEMENT,       // Deprecated. Autogenerated by .aidl now.
152*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAYED_CONTENT_SAMPLING_ATTRIBUTES, // Deprecated. Autogenerated by .aidl now.
153*38e8c45fSAndroid Build Coastguard Worker         SET_DISPLAY_CONTENT_SAMPLING_ENABLED,      // Deprecated. Autogenerated by .aidl now.
154*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAYED_CONTENT_SAMPLE,
155*38e8c45fSAndroid Build Coastguard Worker         GET_PROTECTED_CONTENT_SUPPORT,   // Deprecated. Autogenerated by .aidl now.
156*38e8c45fSAndroid Build Coastguard Worker         IS_WIDE_COLOR_DISPLAY,           // Deprecated. Autogenerated by .aidl now.
157*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_NATIVE_PRIMARIES,    // Deprecated. Autogenerated by .aidl now.
158*38e8c45fSAndroid Build Coastguard Worker         GET_PHYSICAL_DISPLAY_IDS,        // Deprecated. Autogenerated by .aidl now.
159*38e8c45fSAndroid Build Coastguard Worker         ADD_REGION_SAMPLING_LISTENER,    // Deprecated. Autogenerated by .aidl now.
160*38e8c45fSAndroid Build Coastguard Worker         REMOVE_REGION_SAMPLING_LISTENER, // Deprecated. Autogenerated by .aidl now.
161*38e8c45fSAndroid Build Coastguard Worker         SET_DESIRED_DISPLAY_MODE_SPECS,  // Deprecated. Autogenerated by .aidl now.
162*38e8c45fSAndroid Build Coastguard Worker         GET_DESIRED_DISPLAY_MODE_SPECS,  // Deprecated. Autogenerated by .aidl now.
163*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_BRIGHTNESS_SUPPORT,  // Deprecated. Autogenerated by .aidl now.
164*38e8c45fSAndroid Build Coastguard Worker         SET_DISPLAY_BRIGHTNESS,          // Deprecated. Autogenerated by .aidl now.
165*38e8c45fSAndroid Build Coastguard Worker         CAPTURE_DISPLAY_BY_ID,           // Deprecated. Autogenerated by .aidl now.
166*38e8c45fSAndroid Build Coastguard Worker         NOTIFY_POWER_BOOST,              // Deprecated. Autogenerated by .aidl now.
167*38e8c45fSAndroid Build Coastguard Worker         SET_GLOBAL_SHADOW_SETTINGS,
168*38e8c45fSAndroid Build Coastguard Worker         GET_AUTO_LOW_LATENCY_MODE_SUPPORT, // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
169*38e8c45fSAndroid Build Coastguard Worker         SET_AUTO_LOW_LATENCY_MODE,         // Deprecated. Autogenerated by .aidl now.
170*38e8c45fSAndroid Build Coastguard Worker         GET_GAME_CONTENT_TYPE_SUPPORT,     // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
171*38e8c45fSAndroid Build Coastguard Worker         SET_GAME_CONTENT_TYPE,             // Deprecated. Use GET_DYNAMIC_DISPLAY_INFO instead.
172*38e8c45fSAndroid Build Coastguard Worker         SET_FRAME_RATE,                    // Deprecated. Autogenerated by .aidl now.
173*38e8c45fSAndroid Build Coastguard Worker         // Deprecated. Use DisplayManager.setShouldAlwaysRespectAppRequestedMode(true);
174*38e8c45fSAndroid Build Coastguard Worker         ACQUIRE_FRAME_RATE_FLEXIBILITY_TOKEN,
175*38e8c45fSAndroid Build Coastguard Worker         SET_FRAME_TIMELINE_INFO,        // Deprecated. Autogenerated by .aidl now.
176*38e8c45fSAndroid Build Coastguard Worker         ADD_TRANSACTION_TRACE_LISTENER, // Deprecated. Autogenerated by .aidl now.
177*38e8c45fSAndroid Build Coastguard Worker         GET_GPU_CONTEXT_PRIORITY,
178*38e8c45fSAndroid Build Coastguard Worker         GET_MAX_ACQUIRED_BUFFER_COUNT,
179*38e8c45fSAndroid Build Coastguard Worker         GET_DYNAMIC_DISPLAY_INFO,            // Deprecated. Autogenerated by .aidl now.
180*38e8c45fSAndroid Build Coastguard Worker         ADD_FPS_LISTENER,                    // Deprecated. Autogenerated by .aidl now.
181*38e8c45fSAndroid Build Coastguard Worker         REMOVE_FPS_LISTENER,                 // Deprecated. Autogenerated by .aidl now.
182*38e8c45fSAndroid Build Coastguard Worker         OVERRIDE_HDR_TYPES,                  // Deprecated. Autogenerated by .aidl now.
183*38e8c45fSAndroid Build Coastguard Worker         ADD_HDR_LAYER_INFO_LISTENER,         // Deprecated. Autogenerated by .aidl now.
184*38e8c45fSAndroid Build Coastguard Worker         REMOVE_HDR_LAYER_INFO_LISTENER,      // Deprecated. Autogenerated by .aidl now.
185*38e8c45fSAndroid Build Coastguard Worker         ON_PULL_ATOM,                        // Deprecated. Autogenerated by .aidl now.
186*38e8c45fSAndroid Build Coastguard Worker         ADD_TUNNEL_MODE_ENABLED_LISTENER,    // Deprecated. Autogenerated by .aidl now.
187*38e8c45fSAndroid Build Coastguard Worker         REMOVE_TUNNEL_MODE_ENABLED_LISTENER, // Deprecated. Autogenerated by .aidl now.
188*38e8c45fSAndroid Build Coastguard Worker         ADD_WINDOW_INFOS_LISTENER,           // Deprecated. Autogenerated by .aidl now.
189*38e8c45fSAndroid Build Coastguard Worker         REMOVE_WINDOW_INFOS_LISTENER,        // Deprecated. Autogenerated by .aidl now.
190*38e8c45fSAndroid Build Coastguard Worker         GET_PRIMARY_PHYSICAL_DISPLAY_ID,     // Deprecated. Autogenerated by .aidl now.
191*38e8c45fSAndroid Build Coastguard Worker         GET_DISPLAY_DECORATION_SUPPORT,
192*38e8c45fSAndroid Build Coastguard Worker         GET_BOOT_DISPLAY_MODE_SUPPORT, // Deprecated. Autogenerated by .aidl now.
193*38e8c45fSAndroid Build Coastguard Worker         SET_BOOT_DISPLAY_MODE,         // Deprecated. Autogenerated by .aidl now.
194*38e8c45fSAndroid Build Coastguard Worker         CLEAR_BOOT_DISPLAY_MODE,       // Deprecated. Autogenerated by .aidl now.
195*38e8c45fSAndroid Build Coastguard Worker         SET_OVERRIDE_FRAME_RATE,       // Deprecated. Autogenerated by .aidl now.
196*38e8c45fSAndroid Build Coastguard Worker         GET_SCHEDULING_POLICY,
197*38e8c45fSAndroid Build Coastguard Worker         // Always append new enum to the end.
198*38e8c45fSAndroid Build Coastguard Worker     };
199*38e8c45fSAndroid Build Coastguard Worker 
200*38e8c45fSAndroid Build Coastguard Worker     virtual status_t onTransact(uint32_t code, const Parcel& data,
201*38e8c45fSAndroid Build Coastguard Worker             Parcel* reply, uint32_t flags = 0);
202*38e8c45fSAndroid Build Coastguard Worker };
203*38e8c45fSAndroid Build Coastguard Worker 
204*38e8c45fSAndroid Build Coastguard Worker } // namespace android
205