Merge "mapper: support new usage and format" into qt-dev
diff --git a/libs/dumputils/dump_utils.cpp b/libs/dumputils/dump_utils.cpp
index 142010f..180fd97 100644
--- a/libs/dumputils/dump_utils.cpp
+++ b/libs/dumputils/dump_utils.cpp
@@ -31,6 +31,7 @@
"/system/bin/mediaextractor", // media.extractor
"/system/bin/mediametrics", // media.metrics
"/system/bin/mediaserver",
+ "/system/bin/netd",
"/system/bin/sdcard",
"/system/bin/statsd",
"/system/bin/surfaceflinger",
diff --git a/libs/gui/BufferQueueCore.cpp b/libs/gui/BufferQueueCore.cpp
index 96c55ac..e0e3431 100644
--- a/libs/gui/BufferQueueCore.cpp
+++ b/libs/gui/BufferQueueCore.cpp
@@ -73,6 +73,8 @@
mActiveBuffers(),
mDequeueCondition(),
mDequeueBufferCannotBlock(false),
+ mQueueBufferCanDrop(false),
+ mLegacyBufferDrop(true),
mDefaultBufferFormat(PIXEL_FORMAT_RGBA_8888),
mDefaultWidth(1),
mDefaultHeight(1),
@@ -117,6 +119,8 @@
mMaxAcquiredBufferCount, mMaxDequeuedBufferCount);
outResult->appendFormat("%s mDequeueBufferCannotBlock=%d mAsyncMode=%d\n", prefix.string(),
mDequeueBufferCannotBlock, mAsyncMode);
+ outResult->appendFormat("%s mQueueBufferCanDrop=%d mLegacyBufferDrop=%d\n", prefix.string(),
+ mQueueBufferCanDrop, mLegacyBufferDrop);
outResult->appendFormat("%s default-size=[%dx%d] default-format=%d ", prefix.string(),
mDefaultWidth, mDefaultHeight, mDefaultBufferFormat);
outResult->appendFormat("transform-hint=%02x frame-counter=%" PRIu64, mTransformHint,
diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp
index 72ae375..4ff69c5 100644
--- a/libs/gui/BufferQueueProducer.cpp
+++ b/libs/gui/BufferQueueProducer.cpp
@@ -889,7 +889,8 @@
item.mFence = acquireFence;
item.mFenceTime = acquireFenceTime;
item.mIsDroppable = mCore->mAsyncMode ||
- mCore->mDequeueBufferCannotBlock ||
+ (!mCore->mLegacyBufferDrop && mConsumerIsSurfaceFlinger) ||
+ (mCore->mLegacyBufferDrop && mCore->mQueueBufferCanDrop) ||
(mCore->mSharedBufferMode && mCore->mSharedBufferSlot == slot);
item.mSurfaceDamage = surfaceDamage;
item.mQueuedBuffer = true;
@@ -1230,9 +1231,11 @@
mCore->mConnectedPid = BufferQueueThreadState::getCallingPid();
mCore->mBufferHasBeenQueued = false;
mCore->mDequeueBufferCannotBlock = false;
- if (mDequeueTimeout < 0) {
- mCore->mDequeueBufferCannotBlock =
- mCore->mConsumerControlledByApp && producerControlledByApp;
+ mCore->mQueueBufferCanDrop = false;
+ mCore->mLegacyBufferDrop = true;
+ if (mCore->mConsumerControlledByApp && producerControlledByApp) {
+ mCore->mDequeueBufferCannotBlock = mDequeueTimeout < 0;
+ mCore->mQueueBufferCanDrop = mDequeueTimeout <= 0;
}
mCore->mAllowAllocation = true;
@@ -1516,12 +1519,26 @@
}
mDequeueTimeout = timeout;
- mCore->mDequeueBufferCannotBlock = false;
+ if (timeout >= 0) {
+ mCore->mDequeueBufferCannotBlock = false;
+ if (timeout != 0) {
+ mCore->mQueueBufferCanDrop = false;
+ }
+ }
VALIDATE_CONSISTENCY();
return NO_ERROR;
}
+status_t BufferQueueProducer::setLegacyBufferDrop(bool drop) {
+ ATRACE_CALL();
+ BQ_LOGV("setLegacyBufferDrop: drop = %d", drop);
+
+ std::lock_guard<std::mutex> lock(mCore->mMutex);
+ mCore->mLegacyBufferDrop = drop;
+ return NO_ERROR;
+}
+
status_t BufferQueueProducer::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) {
ATRACE_CALL();
diff --git a/libs/gui/IGraphicBufferProducer.cpp b/libs/gui/IGraphicBufferProducer.cpp
index bf44121..0e03b7d 100644
--- a/libs/gui/IGraphicBufferProducer.cpp
+++ b/libs/gui/IGraphicBufferProducer.cpp
@@ -72,6 +72,7 @@
GET_FRAME_TIMESTAMPS,
GET_UNIQUE_ID,
GET_CONSUMER_USAGE,
+ SET_LEGACY_BUFFER_DROP,
};
class BpGraphicBufferProducer : public BpInterface<IGraphicBufferProducer>
@@ -437,6 +438,20 @@
return reply.readInt32();
}
+ virtual status_t setLegacyBufferDrop(bool drop) {
+ Parcel data, reply;
+ data.writeInterfaceToken(
+ IGraphicBufferProducer::getInterfaceDescriptor());
+ data.writeInt32(drop);
+ status_t result = remote()->transact(SET_LEGACY_BUFFER_DROP,
+ data, &reply);
+ if (result != NO_ERROR) {
+ return result;
+ }
+ result = reply.readInt32();
+ return result;
+ }
+
virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) override {
Parcel data, reply;
@@ -637,6 +652,10 @@
return mBase->setDequeueTimeout(timeout);
}
+ status_t setLegacyBufferDrop(bool drop) override {
+ return mBase->setLegacyBufferDrop(drop);
+ }
+
status_t getLastQueuedBuffer(
sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence,
@@ -663,6 +682,12 @@
// ----------------------------------------------------------------------
+status_t IGraphicBufferProducer::setLegacyBufferDrop(bool drop) {
+ // No-op for IGBP other than BufferQueue.
+ (void) drop;
+ return INVALID_OPERATION;
+}
+
status_t IGraphicBufferProducer::exportToParcel(Parcel* parcel) {
status_t res = OK;
res = parcel->writeUint32(USE_BUFFER_QUEUE);
@@ -1018,6 +1043,13 @@
}
return NO_ERROR;
}
+ case SET_LEGACY_BUFFER_DROP: {
+ CHECK_INTERFACE(IGraphicBufferProducer, data, reply);
+ bool drop = data.readInt32();
+ int result = setLegacyBufferDrop(drop);
+ reply->writeInt32(result);
+ return NO_ERROR;
+ }
}
return BBinder::onTransact(code, data, reply, flags);
}
diff --git a/libs/gui/include/gui/BufferQueueCore.h b/libs/gui/include/gui/BufferQueueCore.h
index 0e80283..9c0ee99 100644
--- a/libs/gui/include/gui/BufferQueueCore.h
+++ b/libs/gui/include/gui/BufferQueueCore.h
@@ -226,6 +226,16 @@
// consumer are controlled by the application.
bool mDequeueBufferCannotBlock;
+ // mQueueBufferCanDrop indicates whether queueBuffer is allowed to drop
+ // buffers in non-async mode. This flag is set during connect when both the
+ // producer and consumer are controlled by application.
+ bool mQueueBufferCanDrop;
+
+ // mLegacyBufferDrop indicates whether mQueueBufferCanDrop is in effect.
+ // If this flag is set mQueueBufferCanDrop is working as explained. If not
+ // queueBuffer will not drop buffers unless consumer is SurfaceFlinger.
+ bool mLegacyBufferDrop;
+
// mDefaultBufferFormat can be set so it will override the buffer format
// when it isn't specified in dequeueBuffer.
PixelFormat mDefaultBufferFormat;
diff --git a/libs/gui/include/gui/BufferQueueProducer.h b/libs/gui/include/gui/BufferQueueProducer.h
index 415e2a6..d2a47a6 100644
--- a/libs/gui/include/gui/BufferQueueProducer.h
+++ b/libs/gui/include/gui/BufferQueueProducer.h
@@ -174,6 +174,9 @@
// See IGraphicBufferProducer::setDequeueTimeout
virtual status_t setDequeueTimeout(nsecs_t timeout) override;
+ // see IGraphicBufferProducer::setLegacyBufferDrop
+ virtual status_t setLegacyBufferDrop(bool drop);
+
// See IGraphicBufferProducer::getLastQueuedBuffer
virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) override;
diff --git a/libs/gui/include/gui/IGraphicBufferProducer.h b/libs/gui/include/gui/IGraphicBufferProducer.h
index 9f7e22b..3dde8c8 100644
--- a/libs/gui/include/gui/IGraphicBufferProducer.h
+++ b/libs/gui/include/gui/IGraphicBufferProducer.h
@@ -592,12 +592,20 @@
// non-blocking mode and its corresponding spare buffer (which is used to
// ensure a buffer is always available).
//
+ // Note well: queueBuffer will stop buffer dropping behavior if timeout is
+ // strictly positive. If timeout is zero or negative, previous buffer
+ // dropping behavior will not be changed.
+ //
// Return of a value other than NO_ERROR means an error has occurred:
// * BAD_VALUE - Failure to adjust the number of available slots. This can
// happen because of trying to allocate/deallocate the async
// buffer.
virtual status_t setDequeueTimeout(nsecs_t timeout) = 0;
+ // Used to enable/disable buffer drop behavior of queueBuffer.
+ // If it's not used, legacy drop behavior will be retained.
+ virtual status_t setLegacyBufferDrop(bool drop);
+
// Returns the last queued buffer along with a fence which must signal
// before the contents of the buffer are read. If there are no buffers in
// the queue, outBuffer will be populated with nullptr and outFence will be
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index 12947b2..eb970d9 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -336,56 +336,10 @@
mVendorString = sVendorString;
mVersionString.clear();
cnx->driverVersion = EGL_MAKE_VERSION(1, 4, 0);
+ mVersionString = sVersionString14;
if ((cnx->major == 1) && (cnx->minor == 5)) {
mVersionString = sVersionString15;
cnx->driverVersion = EGL_MAKE_VERSION(1, 5, 0);
- } else if ((cnx->major == 1) && (cnx->minor == 4)) {
- /* Querying extension strings for type Client */
- std::string typesExtString;
- static const char* clientExtensions =
- cnx->egl.eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
- if (clientExtensions != nullptr && strlen(clientExtensions) > 0) {
- typesExtString.append(clientExtensions);
- typesExtString.append(" ");
- }
-
- /* Adding extension strings for type Display */
- typesExtString.append(disp.queryString.extensions);
- mVersionString = sVersionString14;
- // Extensions needed for an EGL 1.4 implementation to be
- // able to support EGL 1.5 functionality
- std::vector<const char*> egl15extensions = {
- "EGL_EXT_client_extensions",
- // "EGL_EXT_platform_base", // implemented by EGL runtime
- "EGL_KHR_image_base",
- "EGL_KHR_fence_sync",
- "EGL_KHR_wait_sync",
- "EGL_KHR_create_context",
- "EGL_EXT_create_context_robustness",
- "EGL_KHR_gl_colorspace",
- "EGL_ANDROID_native_fence_sync",
- };
- bool extensionsFound = true;
- for (const auto& name : egl15extensions) {
- extensionsFound &= findExtension(typesExtString.c_str(), name);
- ALOGV("Extension %s: %s", name,
- findExtension(typesExtString.c_str(), name) ? "Found" : "Missing");
- }
- // NOTE: From the spec:
- // Creation of fence sync objects requires support from the bound
- // client API, and will not succeed unless the client API satisfies:
- // client API is OpenGL ES, and either the OpenGL ES version is 3.0
- // or greater, or the GL_OES_EGL_sync extension is supported.
- // We don't have a way to check the GL_EXTENSIONS string at this
- // point in the code, assume that GL_OES_EGL_sync is supported
- // because EGL_KHR_fence_sync is supported (as verified above).
- if (extensionsFound) {
- // Have everything needed to emulate EGL 1.5 so report EGL 1.5
- // to the application.
- mVersionString = sVersionString15;
- cnx->major = 1;
- cnx->minor = 5;
- }
}
if (mVersionString.empty()) {
ALOGW("Unexpected driver version: %d.%d, want 1.4 or 1.5", cnx->major, cnx->minor);
diff --git a/services/surfaceflinger/MonitoredProducer.cpp b/services/surfaceflinger/MonitoredProducer.cpp
index 06e3d9c..c60421b 100644
--- a/services/surfaceflinger/MonitoredProducer.cpp
+++ b/services/surfaceflinger/MonitoredProducer.cpp
@@ -132,6 +132,10 @@
return mProducer->setDequeueTimeout(timeout);
}
+status_t MonitoredProducer::setLegacyBufferDrop(bool drop) {
+ return mProducer->setLegacyBufferDrop(drop);
+}
+
status_t MonitoredProducer::getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) {
return mProducer->getLastQueuedBuffer(outBuffer, outFence,
diff --git a/services/surfaceflinger/MonitoredProducer.h b/services/surfaceflinger/MonitoredProducer.h
index 1246d14..d346f82 100644
--- a/services/surfaceflinger/MonitoredProducer.h
+++ b/services/surfaceflinger/MonitoredProducer.h
@@ -61,6 +61,7 @@
virtual status_t setGenerationNumber(uint32_t generationNumber);
virtual String8 getConsumerName() const override;
virtual status_t setDequeueTimeout(nsecs_t timeout) override;
+ virtual status_t setLegacyBufferDrop(bool drop) override;
virtual status_t getLastQueuedBuffer(sp<GraphicBuffer>* outBuffer,
sp<Fence>* outFence, float outTransformMatrix[16]) override;
virtual IBinder* onAsBinder();
diff --git a/services/surfaceflinger/Scheduler/DispSync.cpp b/services/surfaceflinger/Scheduler/DispSync.cpp
index 0738c6d..871f556 100644
--- a/services/surfaceflinger/Scheduler/DispSync.cpp
+++ b/services/surfaceflinger/Scheduler/DispSync.cpp
@@ -212,11 +212,14 @@
const nsecs_t predictedReference = mReferenceTime + numPeriodsSinceReference * mPeriod;
listener.mLastEventTime = predictedReference + mPhase + listener.mPhase;
// If we're very close in time to the predicted last event time,
+ // and we're not very close to the next predicted last event time
// then we need to back up the last event time so that we can
// attempt to fire an event immediately.
//
- // Otherwise, keep the last event time that we predicted.
- if (isShorterThanPeriod(now - listener.mLastEventTime)) {
+ // Otherwise, keep the last event time that we predicted so that
+ // we don't wake up early.
+ if (isShorterThanPeriod(now - listener.mLastEventTime) &&
+ !isShorterThanPeriod(listener.mLastEventTime + mPeriod - now)) {
listener.mLastEventTime -= mPeriod;
}
} else {
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 3c25564..53c615f 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -4993,7 +4993,7 @@
}
// Numbers from 1000 to 1034 are currently used for backdoors. The code
// in onTransact verifies that the user is root, and has access to use SF.
- if (code >= 1000 && code <= 1034) {
+ if (code >= 1000 && code <= 1035) {
ALOGV("Accessing SurfaceFlinger through backdoor code: %u", code);
return OK;
}
@@ -5316,6 +5316,19 @@
}
return NO_ERROR;
}
+ case 1035: {
+ n = data.readInt32();
+ mDebugDisplayConfigSetByBackdoor = false;
+ if (n >= 0) {
+ const auto displayToken = getInternalDisplayToken();
+ status_t result = setAllowedDisplayConfigs(displayToken, {n});
+ if (result != NO_ERROR) {
+ return result;
+ }
+ mDebugDisplayConfigSetByBackdoor = true;
+ }
+ return NO_ERROR;
+ }
}
}
return err;
@@ -5828,6 +5841,11 @@
return BAD_VALUE;
}
+ if (mDebugDisplayConfigSetByBackdoor) {
+ // ignore this request as config is overridden by backdoor
+ return NO_ERROR;
+ }
+
postMessageSync(new LambdaMessage([&]() NO_THREAD_SAFETY_ANALYSIS {
const auto display = getDisplayDeviceLocked(displayToken);
if (!display) {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index 4c482a1..7a7ad33 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -1142,6 +1142,9 @@
Hwc2::impl::PowerAdvisor mPowerAdvisor;
std::unique_ptr<RefreshRateOverlay> mRefreshRateOverlay;
+
+ // Flag used to set override allowed display configs from backdoor
+ bool mDebugDisplayConfigSetByBackdoor = false;
};
} // namespace android
diff --git a/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop b/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop
index 830c03e..d369096 100644
--- a/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop
+++ b/services/surfaceflinger/sysprop/SurfaceFlingerProperties.sysprop
@@ -36,7 +36,7 @@
prop {
api_name: "vsync_event_phase_offset_ns"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.vsync_event_phase_offset_ns"
}
@@ -44,7 +44,7 @@
prop {
api_name: "vsync_sf_event_phase_offset_ns"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.vsync_sf_event_phase_offset_ns"
}
@@ -53,7 +53,7 @@
prop {
api_name: "use_context_priority"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.use_context_priority"
}
@@ -62,7 +62,7 @@
prop {
api_name: "max_frame_buffer_acquired_buffers"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.max_frame_buffer_acquired_buffers"
}
@@ -80,7 +80,7 @@
prop {
api_name: "has_wide_color_display"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.has_wide_color_display"
}
@@ -90,7 +90,7 @@
prop {
api_name: "running_without_sync_framework"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.running_without_sync_framework"
}
@@ -108,7 +108,7 @@
prop {
api_name: "has_HDR_display"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.has_HDR_display"
}
@@ -117,7 +117,7 @@
prop {
api_name: "present_time_offset_from_vsync_ns"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.present_time_offset_from_vsync_ns"
}
@@ -129,7 +129,7 @@
prop {
api_name: "force_hwc_copy_for_virtual_displays"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.force_hwc_copy_for_virtual_displays"
}
@@ -139,7 +139,7 @@
prop {
api_name: "max_virtual_display_dimension"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.max_virtual_display_dimension"
}
@@ -151,7 +151,7 @@
prop {
api_name: "use_vr_flinger"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.use_vr_flinger"
}
@@ -161,7 +161,7 @@
prop {
api_name: "start_graphics_allocator_service"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.start_graphics_allocator_service"
}
@@ -171,7 +171,7 @@
api_name: "primary_display_orientation"
type: Enum
enum_values: "ORIENTATION_0|ORIENTATION_90|ORIENTATION_180|ORIENTATION_270"
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.primary_display_orientation"
}
@@ -182,7 +182,7 @@
prop {
api_name: "use_color_management"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.use_color_management"
}
@@ -209,7 +209,7 @@
prop {
api_name: "default_composition_dataspace"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.default_composition_dataspace"
}
@@ -220,7 +220,7 @@
prop {
api_name: "default_composition_pixel_format"
type: Integer
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.default_composition_pixel_format"
}
@@ -235,7 +235,7 @@
prop {
api_name: "wcg_composition_dataspace"
type: Long
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.wcg_composition_dataspace"
}
@@ -246,7 +246,7 @@
prop {
api_name: "wcg_composition_pixel_format"
type: Integer
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.wcg_composition_pixel_format"
}
@@ -258,7 +258,7 @@
prop {
api_name: "display_primary_red"
type: DoubleList
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.display_primary_red"
}
@@ -266,7 +266,7 @@
prop {
api_name: "display_primary_green"
type: DoubleList
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.display_primary_green"
}
@@ -274,7 +274,7 @@
prop {
api_name: "display_primary_blue"
type: DoubleList
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.display_primary_blue"
}
@@ -282,7 +282,7 @@
prop {
api_name: "display_primary_white"
type: DoubleList
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.display_primary_white"
}
@@ -293,7 +293,7 @@
prop {
api_name: "set_idle_timer_ms"
type: Integer
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.set_idle_timer_ms"
}
@@ -303,7 +303,7 @@
prop {
api_name: "use_smart_90_for_video"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.use_smart_90_for_video"
}
@@ -311,7 +311,7 @@
prop {
api_name: "enable_protected_contents"
type: Boolean
- scope: Internal
+ scope: System
access: Readonly
prop_name: "ro.surface_flinger.protected_contents"
}
diff --git a/services/surfaceflinger/sysprop/api/system-current.txt b/services/surfaceflinger/sysprop/api/system-current.txt
index d802177..3c39b51 100644
--- a/services/surfaceflinger/sysprop/api/system-current.txt
+++ b/services/surfaceflinger/sysprop/api/system-current.txt
@@ -1 +1,41 @@
// Signature format: 2.0
+package android.sysprop {
+
+ public final class SurfaceFlingerProperties {
+ method public static java.util.Optional<java.lang.Long> default_composition_dataspace();
+ method public static java.util.Optional<java.lang.Integer> default_composition_pixel_format();
+ method public static java.util.List<java.lang.Double> display_primary_blue();
+ method public static java.util.List<java.lang.Double> display_primary_green();
+ method public static java.util.List<java.lang.Double> display_primary_red();
+ method public static java.util.List<java.lang.Double> display_primary_white();
+ method public static java.util.Optional<java.lang.Boolean> enable_protected_contents();
+ method public static java.util.Optional<java.lang.Boolean> force_hwc_copy_for_virtual_displays();
+ method public static java.util.Optional<java.lang.Boolean> has_HDR_display();
+ method public static java.util.Optional<java.lang.Boolean> has_wide_color_display();
+ method public static java.util.Optional<java.lang.Long> max_frame_buffer_acquired_buffers();
+ method public static java.util.Optional<java.lang.Long> max_virtual_display_dimension();
+ method public static java.util.Optional<java.lang.Long> present_time_offset_from_vsync_ns();
+ method public static java.util.Optional<android.sysprop.SurfaceFlingerProperties.primary_display_orientation_values> primary_display_orientation();
+ method public static java.util.Optional<java.lang.Boolean> running_without_sync_framework();
+ method public static java.util.Optional<java.lang.Integer> set_idle_timer_ms();
+ method public static java.util.Optional<java.lang.Boolean> start_graphics_allocator_service();
+ method public static java.util.Optional<java.lang.Boolean> use_color_management();
+ method public static java.util.Optional<java.lang.Boolean> use_context_priority();
+ method public static java.util.Optional<java.lang.Boolean> use_smart_90_for_video();
+ method public static java.util.Optional<java.lang.Boolean> use_vr_flinger();
+ method public static java.util.Optional<java.lang.Long> vsync_event_phase_offset_ns();
+ method public static java.util.Optional<java.lang.Long> vsync_sf_event_phase_offset_ns();
+ method public static java.util.Optional<java.lang.Long> wcg_composition_dataspace();
+ method public static java.util.Optional<java.lang.Integer> wcg_composition_pixel_format();
+ }
+
+ public enum SurfaceFlingerProperties.primary_display_orientation_values {
+ method public String getPropValue();
+ enum_constant public static final android.sysprop.SurfaceFlingerProperties.primary_display_orientation_values ORIENTATION_0;
+ enum_constant public static final android.sysprop.SurfaceFlingerProperties.primary_display_orientation_values ORIENTATION_180;
+ enum_constant public static final android.sysprop.SurfaceFlingerProperties.primary_display_orientation_values ORIENTATION_270;
+ enum_constant public static final android.sysprop.SurfaceFlingerProperties.primary_display_orientation_values ORIENTATION_90;
+ }
+
+}
+