1*4d7e907cSAndroid Build Coastguard Worker/* 2*4d7e907cSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*4d7e907cSAndroid Build Coastguard Worker * 4*4d7e907cSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (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.0 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 Workerpackage [email protected]; 17*4d7e907cSAndroid Build Coastguard Worker 18*4d7e907cSAndroid Build Coastguard Workerinterface ISurfaceFlingerConfigs { 19*4d7e907cSAndroid Build Coastguard Worker /** 20*4d7e907cSAndroid Build Coastguard Worker * The following two methods define (respectively): 21*4d7e907cSAndroid Build Coastguard Worker * 22*4d7e907cSAndroid Build Coastguard Worker * - The phase offset between hardware vsync and when apps are woken up by the 23*4d7e907cSAndroid Build Coastguard Worker * Choreographer callback 24*4d7e907cSAndroid Build Coastguard Worker * - The phase offset between hardware vsync and when SurfaceFlinger wakes up 25*4d7e907cSAndroid Build Coastguard Worker * to consume input 26*4d7e907cSAndroid Build Coastguard Worker * 27*4d7e907cSAndroid Build Coastguard Worker * Their values may be tuned to trade off between display pipeline latency (both 28*4d7e907cSAndroid Build Coastguard Worker * overall latency and the lengths of the app --> SF and SF --> display phases) 29*4d7e907cSAndroid Build Coastguard Worker * and frame delivery jitter (which typically manifests as "jank" or "jerkiness" 30*4d7e907cSAndroid Build Coastguard Worker * while interacting with the device). The default values must produce a 31*4d7e907cSAndroid Build Coastguard Worker * relatively low amount of jitter at the expense of roughly two frames of 32*4d7e907cSAndroid Build Coastguard Worker * app --> display latency, and unless significant testing is performed to avoid 33*4d7e907cSAndroid Build Coastguard Worker * increased display jitter (both manual investigation using systrace [1] and 34*4d7e907cSAndroid Build Coastguard Worker * automated testing using dumpsys gfxinfo [2] are recommended), they should not 35*4d7e907cSAndroid Build Coastguard Worker * be modified. 36*4d7e907cSAndroid Build Coastguard Worker * 37*4d7e907cSAndroid Build Coastguard Worker * [1] https://developer.android.com/studio/profile/systrace.html 38*4d7e907cSAndroid Build Coastguard Worker * [2] https://developer.android.com/training/testing/performance.html 39*4d7e907cSAndroid Build Coastguard Worker */ 40*4d7e907cSAndroid Build Coastguard Worker vsyncEventPhaseOffsetNs() generates (OptionalInt64 value); 41*4d7e907cSAndroid Build Coastguard Worker vsyncSfEventPhaseOffsetNs() generates (OptionalInt64 value); 42*4d7e907cSAndroid Build Coastguard Worker 43*4d7e907cSAndroid Build Coastguard Worker /** 44*4d7e907cSAndroid Build Coastguard Worker * Instruct the Render Engine to use EGL_IMG_context_priority hint if 45*4d7e907cSAndroid Build Coastguard Worker * availabe. 46*4d7e907cSAndroid Build Coastguard Worker */ 47*4d7e907cSAndroid Build Coastguard Worker useContextPriority() generates(OptionalBool value); 48*4d7e907cSAndroid Build Coastguard Worker 49*4d7e907cSAndroid Build Coastguard Worker /** 50*4d7e907cSAndroid Build Coastguard Worker * hasWideColorDisplay indicates that the device has 51*4d7e907cSAndroid Build Coastguard Worker * or can support a wide-color display, e.g. color space 52*4d7e907cSAndroid Build Coastguard Worker * greater than sRGB. Typical display may have same 53*4d7e907cSAndroid Build Coastguard Worker * color primaries as DCI-P3. 54*4d7e907cSAndroid Build Coastguard Worker * Indicate support for this feature by setting 55*4d7e907cSAndroid Build Coastguard Worker * TARGET_HAS_WIDE_COLOR_DISPLAY to true in BoardConfig.mk 56*4d7e907cSAndroid Build Coastguard Worker * This also means that the device is color managed. 57*4d7e907cSAndroid Build Coastguard Worker * A color managed device will use the appropriate 58*4d7e907cSAndroid Build Coastguard Worker * display mode depending on the content on the screen. 59*4d7e907cSAndroid Build Coastguard Worker * Default is sRGB. 60*4d7e907cSAndroid Build Coastguard Worker */ 61*4d7e907cSAndroid Build Coastguard Worker hasWideColorDisplay() generates (OptionalBool value); 62*4d7e907cSAndroid Build Coastguard Worker 63*4d7e907cSAndroid Build Coastguard Worker /** 64*4d7e907cSAndroid Build Coastguard Worker * hwHDRDisplay indicates that the device has an High Dynamic Range display. 65*4d7e907cSAndroid Build Coastguard Worker * A display is considered High Dynamic Range if it 66*4d7e907cSAndroid Build Coastguard Worker * 67*4d7e907cSAndroid Build Coastguard Worker * 1. is a wide color gamut display, typically DCI-P3 or lager 68*4d7e907cSAndroid Build Coastguard Worker * 2. has high luminance capability, typically 540 nits or higher at 10% OPR 69*4d7e907cSAndroid Build Coastguard Worker * 70*4d7e907cSAndroid Build Coastguard Worker * Indicate support for this feature by setting 71*4d7e907cSAndroid Build Coastguard Worker * TARGET_HAS_HDR_DISPLAY to true in BoardConfig.mk 72*4d7e907cSAndroid Build Coastguard Worker * TARGET_HAS_WIDE_COLOR_DISPLAY must be set to true when 73*4d7e907cSAndroid Build Coastguard Worker * TARGET_HAS_HDR_DISPLAY is true. 74*4d7e907cSAndroid Build Coastguard Worker */ 75*4d7e907cSAndroid Build Coastguard Worker hasHDRDisplay() generates (OptionalBool value); 76*4d7e907cSAndroid Build Coastguard Worker 77*4d7e907cSAndroid Build Coastguard Worker /** 78*4d7e907cSAndroid Build Coastguard Worker * Specify the offset in nanoseconds to add to vsync time when timestamping 79*4d7e907cSAndroid Build Coastguard Worker * present fences. 80*4d7e907cSAndroid Build Coastguard Worker */ 81*4d7e907cSAndroid Build Coastguard Worker presentTimeOffsetFromVSyncNs() generates(OptionalInt64 value); 82*4d7e907cSAndroid Build Coastguard Worker 83*4d7e907cSAndroid Build Coastguard Worker /** 84*4d7e907cSAndroid Build Coastguard Worker * Some hardware can do RGB->YUV conversion more efficiently in hardware 85*4d7e907cSAndroid Build Coastguard Worker * controlled by HWC than in hardware controlled by the video encoder. 86*4d7e907cSAndroid Build Coastguard Worker * This instruct VirtualDisplaySurface to use HWC for such conversion on 87*4d7e907cSAndroid Build Coastguard Worker * GL composition. 88*4d7e907cSAndroid Build Coastguard Worker */ 89*4d7e907cSAndroid Build Coastguard Worker useHwcForRGBtoYUV() generates(OptionalBool value); 90*4d7e907cSAndroid Build Coastguard Worker 91*4d7e907cSAndroid Build Coastguard Worker /** 92*4d7e907cSAndroid Build Coastguard Worker * Maximum dimension supported by HWC for virtual display. 93*4d7e907cSAndroid Build Coastguard Worker * Must be equals to min(max_width, max_height). 94*4d7e907cSAndroid Build Coastguard Worker */ 95*4d7e907cSAndroid Build Coastguard Worker maxVirtualDisplaySize() generates (OptionalUInt64 value); 96*4d7e907cSAndroid Build Coastguard Worker 97*4d7e907cSAndroid Build Coastguard Worker /** 98*4d7e907cSAndroid Build Coastguard Worker * Indicates if Sync framework is available. Sync framework provides fence 99*4d7e907cSAndroid Build Coastguard Worker * mechanism which significantly reduces buffer processing latency. 100*4d7e907cSAndroid Build Coastguard Worker */ 101*4d7e907cSAndroid Build Coastguard Worker hasSyncFramework() generates(OptionalBool value); 102*4d7e907cSAndroid Build Coastguard Worker 103*4d7e907cSAndroid Build Coastguard Worker /** 104*4d7e907cSAndroid Build Coastguard Worker * Return true if surface flinger should use vr flinger for compatible vr 105*4d7e907cSAndroid Build Coastguard Worker * apps, false otherwise. Devices that will never be running vr apps should 106*4d7e907cSAndroid Build Coastguard Worker * return false to avoid extra resource usage. Daydream ready devices must 107*4d7e907cSAndroid Build Coastguard Worker * return true for full vr support. 108*4d7e907cSAndroid Build Coastguard Worker */ 109*4d7e907cSAndroid Build Coastguard Worker useVrFlinger() generates (OptionalBool value); 110*4d7e907cSAndroid Build Coastguard Worker 111*4d7e907cSAndroid Build Coastguard Worker /** 112*4d7e907cSAndroid Build Coastguard Worker * Controls the number of buffers SurfaceFlinger will allocate for use in 113*4d7e907cSAndroid Build Coastguard Worker * FramebufferSurface. 114*4d7e907cSAndroid Build Coastguard Worker */ 115*4d7e907cSAndroid Build Coastguard Worker maxFrameBufferAcquiredBuffers() generates(OptionalInt64 value); 116*4d7e907cSAndroid Build Coastguard Worker 117*4d7e907cSAndroid Build Coastguard Worker /** 118*4d7e907cSAndroid Build Coastguard Worker * Returns true if surface flinger should start 119*4d7e907cSAndroid Build Coastguard Worker * [email protected]::IAllocator service. 120*4d7e907cSAndroid Build Coastguard Worker */ 121*4d7e907cSAndroid Build Coastguard Worker startGraphicsAllocatorService() generates(OptionalBool value); 122*4d7e907cSAndroid Build Coastguard Worker}; 123