xref: /aosp_15_r20/hardware/interfaces/configstore/1.1/default/SurfaceFlingerConfigs.cpp (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker /*
2*4d7e907cSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*4d7e907cSAndroid Build Coastguard Worker  *
4*4d7e907cSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.1 (the "License");
5*4d7e907cSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*4d7e907cSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*4d7e907cSAndroid Build Coastguard Worker  *
8*4d7e907cSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.1
9*4d7e907cSAndroid Build Coastguard Worker  *
10*4d7e907cSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*4d7e907cSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*4d7e907cSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4d7e907cSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*4d7e907cSAndroid Build Coastguard Worker  * limitations under the License.
15*4d7e907cSAndroid Build Coastguard Worker  */
16*4d7e907cSAndroid Build Coastguard Worker 
17*4d7e907cSAndroid Build Coastguard Worker #include "SurfaceFlingerConfigs.h"
18*4d7e907cSAndroid Build Coastguard Worker 
19*4d7e907cSAndroid Build Coastguard Worker #include <android/hardware/configstore/1.1/types.h>
20*4d7e907cSAndroid Build Coastguard Worker #include <log/log.h>
21*4d7e907cSAndroid Build Coastguard Worker 
22*4d7e907cSAndroid Build Coastguard Worker namespace android {
23*4d7e907cSAndroid Build Coastguard Worker namespace hardware {
24*4d7e907cSAndroid Build Coastguard Worker namespace configstore {
25*4d7e907cSAndroid Build Coastguard Worker namespace V1_1 {
26*4d7e907cSAndroid Build Coastguard Worker namespace implementation {
27*4d7e907cSAndroid Build Coastguard Worker 
28*4d7e907cSAndroid Build Coastguard Worker // ::android::hardware::configstore::V1_0::ISurfaceFlingerConfigs implementation.
vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb)29*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::vsyncEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) {
30*4d7e907cSAndroid Build Coastguard Worker #ifdef VSYNC_EVENT_PHASE_OFFSET_NS
31*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, VSYNC_EVENT_PHASE_OFFSET_NS});
32*4d7e907cSAndroid Build Coastguard Worker #else
33*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, 0});
34*4d7e907cSAndroid Build Coastguard Worker #endif
35*4d7e907cSAndroid Build Coastguard Worker     return Void();
36*4d7e907cSAndroid Build Coastguard Worker }
37*4d7e907cSAndroid Build Coastguard Worker 
vsyncSfEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb)38*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::vsyncSfEventPhaseOffsetNs(vsyncEventPhaseOffsetNs_cb _hidl_cb) {
39*4d7e907cSAndroid Build Coastguard Worker #ifdef SF_VSYNC_EVENT_PHASE_OFFSET_NS
40*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, SF_VSYNC_EVENT_PHASE_OFFSET_NS});
41*4d7e907cSAndroid Build Coastguard Worker #else
42*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, 0});
43*4d7e907cSAndroid Build Coastguard Worker #endif
44*4d7e907cSAndroid Build Coastguard Worker     return Void();
45*4d7e907cSAndroid Build Coastguard Worker }
46*4d7e907cSAndroid Build Coastguard Worker 
useContextPriority(useContextPriority_cb _hidl_cb)47*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::useContextPriority(useContextPriority_cb _hidl_cb) {
48*4d7e907cSAndroid Build Coastguard Worker #ifdef USE_CONTEXT_PRIORITY
49*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, USE_CONTEXT_PRIORITY});
50*4d7e907cSAndroid Build Coastguard Worker #else
51*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, false});
52*4d7e907cSAndroid Build Coastguard Worker #endif
53*4d7e907cSAndroid Build Coastguard Worker     return Void();
54*4d7e907cSAndroid Build Coastguard Worker }
55*4d7e907cSAndroid Build Coastguard Worker 
maxFrameBufferAcquiredBuffers(maxFrameBufferAcquiredBuffers_cb _hidl_cb)56*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::maxFrameBufferAcquiredBuffers(
57*4d7e907cSAndroid Build Coastguard Worker         maxFrameBufferAcquiredBuffers_cb _hidl_cb) {
58*4d7e907cSAndroid Build Coastguard Worker #ifdef NUM_FRAMEBUFFER_SURFACE_BUFFERS
59*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, NUM_FRAMEBUFFER_SURFACE_BUFFERS});
60*4d7e907cSAndroid Build Coastguard Worker #else
61*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, 0});
62*4d7e907cSAndroid Build Coastguard Worker #endif
63*4d7e907cSAndroid Build Coastguard Worker     return Void();
64*4d7e907cSAndroid Build Coastguard Worker }
65*4d7e907cSAndroid Build Coastguard Worker 
hasWideColorDisplay(hasWideColorDisplay_cb _hidl_cb)66*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::hasWideColorDisplay(hasWideColorDisplay_cb _hidl_cb) {
67*4d7e907cSAndroid Build Coastguard Worker     bool value = false;
68*4d7e907cSAndroid Build Coastguard Worker #ifdef HAS_WIDE_COLOR_DISPLAY
69*4d7e907cSAndroid Build Coastguard Worker     value = true;
70*4d7e907cSAndroid Build Coastguard Worker #endif
71*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, value});
72*4d7e907cSAndroid Build Coastguard Worker     return Void();
73*4d7e907cSAndroid Build Coastguard Worker }
74*4d7e907cSAndroid Build Coastguard Worker 
hasSyncFramework(hasSyncFramework_cb _hidl_cb)75*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::hasSyncFramework(hasSyncFramework_cb _hidl_cb) {
76*4d7e907cSAndroid Build Coastguard Worker     bool value = true;
77*4d7e907cSAndroid Build Coastguard Worker #ifdef RUNNING_WITHOUT_SYNC_FRAMEWORK
78*4d7e907cSAndroid Build Coastguard Worker     value = false;
79*4d7e907cSAndroid Build Coastguard Worker #endif
80*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, value});
81*4d7e907cSAndroid Build Coastguard Worker     return Void();
82*4d7e907cSAndroid Build Coastguard Worker }
83*4d7e907cSAndroid Build Coastguard Worker 
hasHDRDisplay(hasHDRDisplay_cb _hidl_cb)84*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::hasHDRDisplay(hasHDRDisplay_cb _hidl_cb) {
85*4d7e907cSAndroid Build Coastguard Worker     bool value = false;
86*4d7e907cSAndroid Build Coastguard Worker #ifdef HAS_HDR_DISPLAY
87*4d7e907cSAndroid Build Coastguard Worker     value = true;
88*4d7e907cSAndroid Build Coastguard Worker #endif
89*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, value});
90*4d7e907cSAndroid Build Coastguard Worker     return Void();
91*4d7e907cSAndroid Build Coastguard Worker }
92*4d7e907cSAndroid Build Coastguard Worker 
presentTimeOffsetFromVSyncNs(presentTimeOffsetFromVSyncNs_cb _hidl_cb)93*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::presentTimeOffsetFromVSyncNs(
94*4d7e907cSAndroid Build Coastguard Worker         presentTimeOffsetFromVSyncNs_cb _hidl_cb) {
95*4d7e907cSAndroid Build Coastguard Worker #ifdef PRESENT_TIME_OFFSET_FROM_VSYNC_NS
96*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, PRESENT_TIME_OFFSET_FROM_VSYNC_NS});
97*4d7e907cSAndroid Build Coastguard Worker #else
98*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, 0});
99*4d7e907cSAndroid Build Coastguard Worker #endif
100*4d7e907cSAndroid Build Coastguard Worker     return Void();
101*4d7e907cSAndroid Build Coastguard Worker }
102*4d7e907cSAndroid Build Coastguard Worker 
useHwcForRGBtoYUV(useHwcForRGBtoYUV_cb _hidl_cb)103*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::useHwcForRGBtoYUV(useHwcForRGBtoYUV_cb _hidl_cb) {
104*4d7e907cSAndroid Build Coastguard Worker     bool value = false;
105*4d7e907cSAndroid Build Coastguard Worker #ifdef FORCE_HWC_COPY_FOR_VIRTUAL_DISPLAYS
106*4d7e907cSAndroid Build Coastguard Worker     value = true;
107*4d7e907cSAndroid Build Coastguard Worker #endif
108*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, value});
109*4d7e907cSAndroid Build Coastguard Worker     return Void();
110*4d7e907cSAndroid Build Coastguard Worker }
111*4d7e907cSAndroid Build Coastguard Worker 
maxVirtualDisplaySize(maxVirtualDisplaySize_cb _hidl_cb)112*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::maxVirtualDisplaySize(maxVirtualDisplaySize_cb _hidl_cb) {
113*4d7e907cSAndroid Build Coastguard Worker     uint64_t maxSize = 0;
114*4d7e907cSAndroid Build Coastguard Worker #ifdef MAX_VIRTUAL_DISPLAY_DIMENSION
115*4d7e907cSAndroid Build Coastguard Worker     maxSize = MAX_VIRTUAL_DISPLAY_DIMENSION;
116*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, maxSize});
117*4d7e907cSAndroid Build Coastguard Worker #else
118*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({false, maxSize});
119*4d7e907cSAndroid Build Coastguard Worker #endif
120*4d7e907cSAndroid Build Coastguard Worker     return Void();
121*4d7e907cSAndroid Build Coastguard Worker }
122*4d7e907cSAndroid Build Coastguard Worker 
useVrFlinger(useVrFlinger_cb _hidl_cb)123*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::useVrFlinger(useVrFlinger_cb _hidl_cb) {
124*4d7e907cSAndroid Build Coastguard Worker     bool value = false;
125*4d7e907cSAndroid Build Coastguard Worker     bool specified = false;
126*4d7e907cSAndroid Build Coastguard Worker #ifdef USE_VR_FLINGER
127*4d7e907cSAndroid Build Coastguard Worker     value = true;
128*4d7e907cSAndroid Build Coastguard Worker     specified = true;
129*4d7e907cSAndroid Build Coastguard Worker #endif
130*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({specified, value});
131*4d7e907cSAndroid Build Coastguard Worker     return Void();
132*4d7e907cSAndroid Build Coastguard Worker }
133*4d7e907cSAndroid Build Coastguard Worker 
startGraphicsAllocatorService(startGraphicsAllocatorService_cb _hidl_cb)134*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::startGraphicsAllocatorService(
135*4d7e907cSAndroid Build Coastguard Worker         startGraphicsAllocatorService_cb _hidl_cb) {
136*4d7e907cSAndroid Build Coastguard Worker     bool value = false;
137*4d7e907cSAndroid Build Coastguard Worker #ifdef START_GRAPHICS_ALLOCATOR_SERVICE
138*4d7e907cSAndroid Build Coastguard Worker     value = true;
139*4d7e907cSAndroid Build Coastguard Worker #endif
140*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({true, value});
141*4d7e907cSAndroid Build Coastguard Worker     return Void();
142*4d7e907cSAndroid Build Coastguard Worker }
143*4d7e907cSAndroid Build Coastguard Worker 
144*4d7e907cSAndroid Build Coastguard Worker // ::android::hardware::configstore::V1_1::ISurfaceFlingerConfigs implementation.
145*4d7e907cSAndroid Build Coastguard Worker 
146*4d7e907cSAndroid Build Coastguard Worker #ifdef PRIMARY_DISPLAY_ORIENTATION
147*4d7e907cSAndroid Build Coastguard Worker static_assert(PRIMARY_DISPLAY_ORIENTATION == 0 || PRIMARY_DISPLAY_ORIENTATION == 90 ||
148*4d7e907cSAndroid Build Coastguard Worker                       PRIMARY_DISPLAY_ORIENTATION == 180 || PRIMARY_DISPLAY_ORIENTATION == 270,
149*4d7e907cSAndroid Build Coastguard Worker               "Primary display orientation must be 0/90/180/270");
150*4d7e907cSAndroid Build Coastguard Worker #endif
151*4d7e907cSAndroid Build Coastguard Worker 
primaryDisplayOrientation(primaryDisplayOrientation_cb _hidl_cb)152*4d7e907cSAndroid Build Coastguard Worker Return<void> SurfaceFlingerConfigs::primaryDisplayOrientation(
153*4d7e907cSAndroid Build Coastguard Worker         primaryDisplayOrientation_cb _hidl_cb) {
154*4d7e907cSAndroid Build Coastguard Worker     using ::android::hardware::configstore::V1_1::DisplayOrientation;
155*4d7e907cSAndroid Build Coastguard Worker 
156*4d7e907cSAndroid Build Coastguard Worker     bool specified = false;
157*4d7e907cSAndroid Build Coastguard Worker     DisplayOrientation value = DisplayOrientation::ORIENTATION_0;
158*4d7e907cSAndroid Build Coastguard Worker 
159*4d7e907cSAndroid Build Coastguard Worker     int orientation = 0;
160*4d7e907cSAndroid Build Coastguard Worker #ifdef PRIMARY_DISPLAY_ORIENTATION
161*4d7e907cSAndroid Build Coastguard Worker     specified = true;
162*4d7e907cSAndroid Build Coastguard Worker     orientation = PRIMARY_DISPLAY_ORIENTATION;
163*4d7e907cSAndroid Build Coastguard Worker #endif
164*4d7e907cSAndroid Build Coastguard Worker 
165*4d7e907cSAndroid Build Coastguard Worker     switch (orientation) {
166*4d7e907cSAndroid Build Coastguard Worker         case 0: {
167*4d7e907cSAndroid Build Coastguard Worker             value = DisplayOrientation::ORIENTATION_0;
168*4d7e907cSAndroid Build Coastguard Worker             break;
169*4d7e907cSAndroid Build Coastguard Worker         }
170*4d7e907cSAndroid Build Coastguard Worker         case 90: {
171*4d7e907cSAndroid Build Coastguard Worker             value = DisplayOrientation::ORIENTATION_90;
172*4d7e907cSAndroid Build Coastguard Worker             break;
173*4d7e907cSAndroid Build Coastguard Worker         }
174*4d7e907cSAndroid Build Coastguard Worker         case 180: {
175*4d7e907cSAndroid Build Coastguard Worker             value = DisplayOrientation::ORIENTATION_180;
176*4d7e907cSAndroid Build Coastguard Worker             break;
177*4d7e907cSAndroid Build Coastguard Worker         }
178*4d7e907cSAndroid Build Coastguard Worker         case 270: {
179*4d7e907cSAndroid Build Coastguard Worker             value = DisplayOrientation::ORIENTATION_270;
180*4d7e907cSAndroid Build Coastguard Worker             break;
181*4d7e907cSAndroid Build Coastguard Worker         }
182*4d7e907cSAndroid Build Coastguard Worker         default: {
183*4d7e907cSAndroid Build Coastguard Worker             // statically checked above -> memory corruption
184*4d7e907cSAndroid Build Coastguard Worker             LOG_ALWAYS_FATAL("Invalid orientation %d", orientation);
185*4d7e907cSAndroid Build Coastguard Worker         }
186*4d7e907cSAndroid Build Coastguard Worker     }
187*4d7e907cSAndroid Build Coastguard Worker 
188*4d7e907cSAndroid Build Coastguard Worker     _hidl_cb({specified, value});
189*4d7e907cSAndroid Build Coastguard Worker     return Void();
190*4d7e907cSAndroid Build Coastguard Worker }
191*4d7e907cSAndroid Build Coastguard Worker 
192*4d7e907cSAndroid Build Coastguard Worker }  // namespace implementation
193*4d7e907cSAndroid Build Coastguard Worker }  // namespace V1_1
194*4d7e907cSAndroid Build Coastguard Worker }  // namespace configstore
195*4d7e907cSAndroid Build Coastguard Worker }  // namespace hardware
196*4d7e907cSAndroid Build Coastguard Worker }  // namespace android
197