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