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