diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-05-09 01:26:22 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-09 01:26:22 +0000 |
commit | 408bcba4f2db18ab32455b48bbda525233c0f58f (patch) | |
tree | e4ac261957a0f9039a4a497e552cae54fdd1238c | |
parent | 38fea70b60e02220d103a13fa26730b05b1c749a (diff) | |
parent | 6c97c6295afec9ecb2649f7fbb382173d03fc84c (diff) | |
download | native-sdk-release.tar.gz |
Merge "Snap for 11819063 from ec4fb37b08f5d653dd0fdcaa6dbbbc86e3095813 to sdk-release" into sdk-releasesdk-release
-rw-r--r-- | include/android/choreographer.h | 85 | ||||
-rw-r--r-- | include/android/looper.h | 44 | ||||
-rw-r--r-- | include/android/surface_control.h | 216 | ||||
-rw-r--r-- | libs/cputimeinstate/testtimeinstate.cpp | 5 |
4 files changed, 219 insertions, 131 deletions
diff --git a/include/android/choreographer.h b/include/android/choreographer.h index c4d1ca65be..6a91d9836e 100644 --- a/include/android/choreographer.h +++ b/include/android/choreographer.h @@ -17,8 +17,20 @@ /** * @addtogroup Choreographer * - * Choreographer coordinates the timing of frame rendering. This is the C version of the - * android.view.Choreographer object in Java. + * Choreographer coordinates the timing of frame rendering. This is the C + * version of the android.view.Choreographer object in Java. If you do not use + * Choreographer to pace your render loop, you may render too quickly for the + * display, increasing latency between frame submission and presentation. + * + * Input events are guaranteed to be processed before the frame callback is + * called, and will not be run concurrently. Input and sensor events should not + * be handled in the Choregrapher callback. + * + * The frame callback is also the appropriate place to run any per-frame state + * update logic. For example, in a game, the frame callback should be + * responsible for updating things like physics, AI, game state, and rendering + * the frame. Input and sensors should be handled separately via callbacks + * registered with AInputQueue and ASensorManager. * * As of API level 33, apps can follow proper frame pacing and even choose a future frame to render. * The API is used as follows: @@ -38,6 +50,11 @@ * 4. SurfaceFlinger attempts to follow the chosen frame timeline, by not applying transactions or * latching buffers before the desired presentation time. * + * On older devices, AChoreographer_postFrameCallback64 or + * AChoreographer_postFrameCallback can be used to lesser effect. They cannot be + * used to precisely plan your render timeline, but will rate limit to avoid + * overloading the display pipeline and increasing frame latency. + * * @{ */ @@ -119,14 +136,46 @@ typedef void (*AChoreographer_refreshRateCallback)(int64_t vsyncPeriodNanos, voi AChoreographer* AChoreographer_getInstance() __INTRODUCED_IN(24); /** - * Deprecated: Use AChoreographer_postFrameCallback64 instead. + * Post a callback to be run when the application should begin rendering the + * next frame. The data pointer provided will be passed to the callback function + * when it's called. + * + * The callback will only be run for the next frame, not all subsequent frames, + * so to render continuously the callback should itself call + * AChoreographer_postFrameCallback. + * + * \bug The callback receives the frame time in nanoseconds as a long. On 32-bit + * systems, long is 32-bit, so the frame time will roll over roughly every two + * seconds. If your minSdkVersion is 29 or higher, switch to + * AChoreographer_postFrameCallback64, which uses a 64-bit frame time for all + * platforms. For older OS versions, you must combine the argument with the + * upper bits of clock_gettime(CLOCK_MONOTONIC, ...) on 32-bit systems. + * + * \deprecated Use AChoreographer_postFrameCallback64, which does not have the + * bug described above. */ void AChoreographer_postFrameCallback(AChoreographer* choreographer, AChoreographer_frameCallback callback, void* data) __INTRODUCED_IN(24) __DEPRECATED_IN(29, "Use AChoreographer_postFrameCallback64 instead"); /** - * Deprecated: Use AChoreographer_postFrameCallbackDelayed64 instead. + * Post a callback to be run when the application should begin rendering the + * next frame following the specified delay. The data pointer provided will be + * passed to the callback function when it's called. + * + * The callback will only be run for the next frame after the delay, not all + * subsequent frames, so to render continuously the callback should itself call + * AChoreographer_postFrameCallbackDelayed. + * + * \bug The callback receives the frame time in nanoseconds as a long. On 32-bit + * systems, long is 32-bit, so the frame time will roll over roughly every two + * seconds. If your minSdkVersion is 29 or higher, switch to + * AChoreographer_postFrameCallbackDelayed64, which uses a 64-bit frame time for + * all platforms. For older OS versions, you must combine the argument with the + * upper bits of clock_gettime(CLOCK_MONOTONIC, ...) on 32-bit systems. + * + * \deprecated Use AChoreographer_postFrameCallbackDelayed64, which does not + * have the bug described above. */ void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer, AChoreographer_frameCallback callback, void* data, @@ -134,8 +183,13 @@ void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer, __DEPRECATED_IN(29, "Use AChoreographer_postFrameCallbackDelayed64 instead"); /** - * Post a callback to be run on the next frame. The data pointer provided will - * be passed to the callback function when it's called. + * Post a callback to be run when the application should begin rendering the + * next frame. The data pointer provided will be passed to the callback function + * when it's called. + * + * The callback will only be run on the next frame, not all subsequent frames, + * so to render continuously the callback should itself call + * AChoreographer_postFrameCallback64. * * Available since API level 29. */ @@ -144,9 +198,13 @@ void AChoreographer_postFrameCallback64(AChoreographer* choreographer, __INTRODUCED_IN(29); /** - * Post a callback to be run on the frame following the specified delay. The - * data pointer provided will be passed to the callback function when it's - * called. + * Post a callback to be run when the application should begin rendering the + * next frame following the specified delay. The data pointer provided will be + * passed to the callback function when it's called. + * + * The callback will only be run for the next frame after the delay, not all + * subsequent frames, so to render continuously the callback should itself call + * AChoreographer_postFrameCallbackDelayed64. * * Available since API level 29. */ @@ -155,8 +213,13 @@ void AChoreographer_postFrameCallbackDelayed64(AChoreographer* choreographer, uint32_t delayMillis) __INTRODUCED_IN(29); /** - * Posts a callback to be run on the next frame. The data pointer provided will - * be passed to the callback function when it's called. + * Posts a callback to be run when the application should begin rendering the + * next frame. The data pointer provided will be passed to the callback function + * when it's called. + * + * The callback will only be run for the next frame, not all subsequent frames, + * so to render continuously the callback should itself call + * AChoreographer_postVsyncCallback. * * Available since API level 33. */ diff --git a/include/android/looper.h b/include/android/looper.h index 6a02916fb3..d80a3660a6 100644 --- a/include/android/looper.h +++ b/include/android/looper.h @@ -182,23 +182,27 @@ typedef int (*ALooper_callbackFunc)(int fd, int events, void* data); * If the timeout is zero, returns immediately without blocking. * If the timeout is negative, waits indefinitely until an event appears. * - * Returns ALOOPER_POLL_WAKE if the poll was awoken using wake() before + * Returns ALOOPER_POLL_WAKE if the poll was awoken using ALooper_wake() before * the timeout expired and no callbacks were invoked and no other file - * descriptors were ready. + * descriptors were ready. **All return values may also imply + * ALOOPER_POLL_WAKE.** * - * Returns ALOOPER_POLL_CALLBACK if one or more callbacks were invoked. + * Returns ALOOPER_POLL_CALLBACK if one or more callbacks were invoked. The poll + * may also have been explicitly woken by ALooper_wake. * - * Returns ALOOPER_POLL_TIMEOUT if there was no data before the given - * timeout expired. + * Returns ALOOPER_POLL_TIMEOUT if there was no data before the given timeout + * expired. The poll may also have been explicitly woken by ALooper_wake. * - * Returns ALOOPER_POLL_ERROR if an error occurred. + * Returns ALOOPER_POLL_ERROR if the calling thread has no associated Looper or + * for unrecoverable internal errors. The poll may also have been explicitly + * woken by ALooper_wake. * - * Returns a value >= 0 containing an identifier (the same identifier - * `ident` passed to ALooper_addFd()) if its file descriptor has data - * and it has no callback function (requiring the caller here to - * handle it). In this (and only this) case outFd, outEvents and - * outData will contain the poll events and data associated with the - * fd, otherwise they will be set to NULL. + * Returns a value >= 0 containing an identifier (the same identifier `ident` + * passed to ALooper_addFd()) if its file descriptor has data and it has no + * callback function (requiring the caller here to handle it). In this (and + * only this) case outFd, outEvents and outData will contain the poll events and + * data associated with the fd, otherwise they will be set to NULL. The poll may + * also have been explicitly woken by ALooper_wake. * * This method does not return until it has finished invoking the appropriate callbacks * for all file descriptors that were signalled. @@ -210,11 +214,21 @@ int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outDa * data has been consumed or a file descriptor is available with no callback. * This function will never return ALOOPER_POLL_CALLBACK. * - * Removed in API 34 as ALooper_pollAll can swallow ALooper_wake calls. - * Use ALooper_pollOnce instead. + * This API cannot be used safely, but a safe alternative exists (see below). As + * such, new builds will not be able to call this API and must migrate to the + * safe API. Binary compatibility is preserved to support already-compiled apps. + * + * \bug ALooper_pollAll will not wake in response to ALooper_wake calls if it + * also handles another event at the same time. + * + * \deprecated Calls to ALooper_pollAll should be replaced with + * ALooper_pollOnce. If you call ALooper_pollOnce in a loop, you *must* treat + * all return values as if they also indicate ALOOPER_POLL_WAKE. */ int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outData) - __REMOVED_IN(1, "ALooper_pollAll may ignore wakes. Use ALooper_pollOnce instead. See https://github.com/android/ndk/discussions/2020 for more information"); + __REMOVED_IN(1, + "ALooper_pollAll may ignore wakes. Use ALooper_pollOnce instead. See " + "The API documentation for more information"); /** * Wakes the poll asynchronously. diff --git a/include/android/surface_control.h b/include/android/surface_control.h index 443cb7e51f..14167e6467 100644 --- a/include/android/surface_control.h +++ b/include/android/surface_control.h @@ -62,16 +62,18 @@ typedef struct ASurfaceControl ASurfaceControl; * * Available since API level 29. */ -ASurfaceControl* ASurfaceControl_createFromWindow(ANativeWindow* parent, const char* debug_name) - __INTRODUCED_IN(29); +ASurfaceControl* _Nullable ASurfaceControl_createFromWindow(ANativeWindow* _Nonnull parent, + const char* _Nonnull debug_name) + __INTRODUCED_IN(29); /** * See ASurfaceControl_createFromWindow. * * Available since API level 29. */ -ASurfaceControl* ASurfaceControl_create(ASurfaceControl* parent, const char* debug_name) - __INTRODUCED_IN(29); +ASurfaceControl* _Nullable ASurfaceControl_create(ASurfaceControl* _Nonnull parent, + const char* _Nonnull debug_name) + __INTRODUCED_IN(29); /** * Acquires a reference on the given ASurfaceControl object. This prevents the object @@ -81,7 +83,7 @@ ASurfaceControl* ASurfaceControl_create(ASurfaceControl* parent, const char* deb * * Available since API level 31. */ -void ASurfaceControl_acquire(ASurfaceControl* surface_control) __INTRODUCED_IN(31); +void ASurfaceControl_acquire(ASurfaceControl* _Nonnull surface_control) __INTRODUCED_IN(31); /** * Removes a reference that was previously acquired with one of the following functions: @@ -92,7 +94,7 @@ void ASurfaceControl_acquire(ASurfaceControl* surface_control) __INTRODUCED_IN(3 * * Available since API level 29. */ -void ASurfaceControl_release(ASurfaceControl* surface_control) __INTRODUCED_IN(29); +void ASurfaceControl_release(ASurfaceControl* _Nonnull surface_control) __INTRODUCED_IN(29); struct ASurfaceTransaction; @@ -108,14 +110,14 @@ typedef struct ASurfaceTransaction ASurfaceTransaction; * * Available since API level 29. */ -ASurfaceTransaction* ASurfaceTransaction_create() __INTRODUCED_IN(29); +ASurfaceTransaction* _Nonnull ASurfaceTransaction_create() __INTRODUCED_IN(29); /** * Destroys the \a transaction object. * * Available since API level 29. */ -void ASurfaceTransaction_delete(ASurfaceTransaction* transaction) __INTRODUCED_IN(29); +void ASurfaceTransaction_delete(ASurfaceTransaction* _Nullable transaction) __INTRODUCED_IN(29); /** * Applies the updates accumulated in \a transaction. @@ -126,7 +128,7 @@ void ASurfaceTransaction_delete(ASurfaceTransaction* transaction) __INTRODUCED_I * * Available since API level 29. */ -void ASurfaceTransaction_apply(ASurfaceTransaction* transaction) __INTRODUCED_IN(29); +void ASurfaceTransaction_apply(ASurfaceTransaction* _Nonnull transaction) __INTRODUCED_IN(29); /** * An opaque handle returned during a callback that can be used to query general stats and stats for @@ -154,9 +156,9 @@ typedef struct ASurfaceTransactionStats ASurfaceTransactionStats; * * Available since API level 29. */ -typedef void (*ASurfaceTransaction_OnComplete)(void* context, ASurfaceTransactionStats* stats) - __INTRODUCED_IN(29); - +typedef void (*ASurfaceTransaction_OnComplete)(void* _Null_unspecified context, + ASurfaceTransactionStats* _Nonnull stats) + __INTRODUCED_IN(29); /** * The ASurfaceTransaction_OnCommit callback is invoked when transaction is applied and the updates @@ -183,8 +185,9 @@ typedef void (*ASurfaceTransaction_OnComplete)(void* context, ASurfaceTransactio * * Available since API level 31. */ -typedef void (*ASurfaceTransaction_OnCommit)(void* context, ASurfaceTransactionStats* stats) - __INTRODUCED_IN(31); +typedef void (*ASurfaceTransaction_OnCommit)(void* _Null_unspecified context, + ASurfaceTransactionStats* _Nonnull stats) + __INTRODUCED_IN(31); /** * Returns the timestamp of when the frame was latched by the framework. Once a frame is @@ -192,8 +195,8 @@ typedef void (*ASurfaceTransaction_OnCommit)(void* context, ASurfaceTransactionS * * Available since API level 29. */ -int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* surface_transaction_stats) - __INTRODUCED_IN(29); +int64_t ASurfaceTransactionStats_getLatchTime( + ASurfaceTransactionStats* _Nonnull surface_transaction_stats) __INTRODUCED_IN(29); /** * Returns a sync fence that signals when the transaction has been presented. @@ -204,8 +207,8 @@ int64_t ASurfaceTransactionStats_getLatchTime(ASurfaceTransactionStats* surface_ * * Available since API level 29. */ -int ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats* surface_transaction_stats) - __INTRODUCED_IN(29); +int ASurfaceTransactionStats_getPresentFenceFd( + ASurfaceTransactionStats* _Nonnull surface_transaction_stats) __INTRODUCED_IN(29); /** * \a outASurfaceControls returns an array of ASurfaceControl pointers that were updated during the @@ -217,18 +220,18 @@ int ASurfaceTransactionStats_getPresentFenceFd(ASurfaceTransactionStats* surface * * \a outASurfaceControlsSize returns the size of the ASurfaceControls array. */ -void ASurfaceTransactionStats_getASurfaceControls(ASurfaceTransactionStats* surface_transaction_stats, - ASurfaceControl*** outASurfaceControls, - size_t* outASurfaceControlsSize) - __INTRODUCED_IN(29); +void ASurfaceTransactionStats_getASurfaceControls( + ASurfaceTransactionStats* _Nonnull surface_transaction_stats, + ASurfaceControl* _Nullable* _Nullable* _Nonnull outASurfaceControls, + size_t* _Nonnull outASurfaceControlsSize) __INTRODUCED_IN(29); /** * Releases the array of ASurfaceControls that were returned by * ASurfaceTransactionStats_getASurfaceControls(). * * Available since API level 29. */ -void ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl** surface_controls) - __INTRODUCED_IN(29); +void ASurfaceTransactionStats_releaseASurfaceControls( + ASurfaceControl* _Nonnull* _Nonnull surface_controls) __INTRODUCED_IN(29); /** * Returns the timestamp of when the CURRENT buffer was acquired. A buffer is considered @@ -237,9 +240,9 @@ void ASurfaceTransactionStats_releaseASurfaceControls(ASurfaceControl** surface_ * * Available since API level 29. */ -int64_t ASurfaceTransactionStats_getAcquireTime(ASurfaceTransactionStats* surface_transaction_stats, - ASurfaceControl* surface_control) - __INTRODUCED_IN(29); +int64_t ASurfaceTransactionStats_getAcquireTime( + ASurfaceTransactionStats* _Nonnull surface_transaction_stats, + ASurfaceControl* _Nonnull surface_control) __INTRODUCED_IN(29); /** * The returns the fence used to signal the release of the PREVIOUS buffer set on @@ -264,9 +267,8 @@ int64_t ASurfaceTransactionStats_getAcquireTime(ASurfaceTransactionStats* surfac * Available since API level 29. */ int ASurfaceTransactionStats_getPreviousReleaseFenceFd( - ASurfaceTransactionStats* surface_transaction_stats, - ASurfaceControl* surface_control) - __INTRODUCED_IN(29); + ASurfaceTransactionStats* _Nonnull surface_transaction_stats, + ASurfaceControl* _Nonnull surface_control) __INTRODUCED_IN(29); /** * Sets the callback that will be invoked when the updates from this transaction @@ -275,8 +277,10 @@ int ASurfaceTransactionStats_getPreviousReleaseFenceFd( * * Available since API level 29. */ -void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* transaction, void* context, - ASurfaceTransaction_OnComplete func) __INTRODUCED_IN(29); +void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* _Nonnull transaction, + void* _Null_unspecified context, + ASurfaceTransaction_OnComplete _Nonnull func) + __INTRODUCED_IN(29); /** * Sets the callback that will be invoked when the updates from this transaction are applied and are @@ -285,8 +289,10 @@ void ASurfaceTransaction_setOnComplete(ASurfaceTransaction* transaction, void* c * * Available since API level 31. */ -void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* transaction, void* context, - ASurfaceTransaction_OnCommit func) __INTRODUCED_IN(31); +void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* _Nonnull transaction, + void* _Null_unspecified context, + ASurfaceTransaction_OnCommit _Nonnull func) + __INTRODUCED_IN(31); /** * Reparents the \a surface_control from its old parent to the \a new_parent surface control. @@ -296,9 +302,9 @@ void ASurfaceTransaction_setOnCommit(ASurfaceTransaction* transaction, void* con * * Available since API level 29. */ -void ASurfaceTransaction_reparent(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, ASurfaceControl* new_parent) - __INTRODUCED_IN(29); +void ASurfaceTransaction_reparent(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + ASurfaceControl* _Nullable new_parent) __INTRODUCED_IN(29); /** * Parameter for ASurfaceTransaction_setVisibility(). @@ -314,10 +320,10 @@ enum ASurfaceTransactionVisibility : int8_t { * * Available since API level 29. */ -void ASurfaceTransaction_setVisibility(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, +void ASurfaceTransaction_setVisibility(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, enum ASurfaceTransactionVisibility visibility) - __INTRODUCED_IN(29); + __INTRODUCED_IN(29); /** * Updates the z order index for \a surface_control. Note that the z order for a surface @@ -328,9 +334,9 @@ void ASurfaceTransaction_setVisibility(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setZOrder(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, int32_t z_order) - __INTRODUCED_IN(29); +void ASurfaceTransaction_setZOrder(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, int32_t z_order) + __INTRODUCED_IN(29); /** * Updates the AHardwareBuffer displayed for \a surface_control. If not -1, the @@ -345,9 +351,10 @@ void ASurfaceTransaction_setZOrder(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setBuffer(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, AHardwareBuffer* buffer, - int acquire_fence_fd) __INTRODUCED_IN(29); +void ASurfaceTransaction_setBuffer(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + AHardwareBuffer* _Nonnull buffer, int acquire_fence_fd) + __INTRODUCED_IN(29); /** * Updates the color for \a surface_control. This will make the background color for the @@ -357,23 +364,23 @@ void ASurfaceTransaction_setBuffer(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setColor(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, float r, float g, float b, - float alpha, enum ADataSpace dataspace) - __INTRODUCED_IN(29); +void ASurfaceTransaction_setColor(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, float r, float g, + float b, float alpha, enum ADataSpace dataspace) + __INTRODUCED_IN(29); /** * \param source The sub-rect within the buffer's content to be rendered inside the surface's area * The surface's source rect is clipped by the bounds of its current buffer. The source rect's width * and height must be > 0. * - * \param destination Specifies the rect in the parent's space where this surface will be drawn. The post - * source rect bounds are scaled to fit the destination rect. The surface's destination rect is + * \param destination Specifies the rect in the parent's space where this surface will be drawn. The + * post source rect bounds are scaled to fit the destination rect. The surface's destination rect is * clipped by the bounds of its parent. The destination rect's width and height must be > 0. * - * \param transform The transform applied after the source rect is applied to the buffer. This parameter - * should be set to 0 for no transform. To specify a transfrom use the NATIVE_WINDOW_TRANSFORM_* - * enum. + * \param transform The transform applied after the source rect is applied to the buffer. This + * parameter should be set to 0 for no transform. To specify a transfrom use the + * NATIVE_WINDOW_TRANSFORM_* enum. * * Available since API level 29. * @@ -382,10 +389,10 @@ void ASurfaceTransaction_setColor(ASurfaceTransaction* transaction, * to set different properties at different times, instead of having to specify all the desired * properties at once. */ -void ASurfaceTransaction_setGeometry(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, const ARect& source, +void ASurfaceTransaction_setGeometry(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, const ARect& source, const ARect& destination, int32_t transform) - __INTRODUCED_IN(29); + __INTRODUCED_IN(29); /** * Bounds the surface and its children to the bounds specified. The crop and buffer size will be @@ -396,9 +403,9 @@ void ASurfaceTransaction_setGeometry(ASurfaceTransaction* transaction, * * Available since API level 31. */ -void ASurfaceTransaction_setCrop(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, const ARect& crop) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setCrop(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, const ARect& crop) + __INTRODUCED_IN(31); /** * Specifies the position in the parent's space where the surface will be drawn. @@ -408,9 +415,9 @@ void ASurfaceTransaction_setCrop(ASurfaceTransaction* transaction, * * Available since API level 31. */ -void ASurfaceTransaction_setPosition(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, int32_t x, int32_t y) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setPosition(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, int32_t x, + int32_t y) __INTRODUCED_IN(31); /** * \param transform The transform applied after the source rect is applied to the buffer. This @@ -419,9 +426,9 @@ void ASurfaceTransaction_setPosition(ASurfaceTransaction* transaction, * * Available since API level 31. */ -void ASurfaceTransaction_setBufferTransform(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, int32_t transform) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setBufferTransform(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + int32_t transform) __INTRODUCED_IN(31); /** * Sets an x and y scale of a surface with (0, 0) as the centerpoint of the scale. @@ -431,9 +438,9 @@ void ASurfaceTransaction_setBufferTransform(ASurfaceTransaction* transaction, * * Available since API level 31. */ -void ASurfaceTransaction_setScale(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, float xScale, float yScale) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setScale(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, float xScale, + float yScale) __INTRODUCED_IN(31); /** * Parameter for ASurfaceTransaction_setBufferTransparency(). */ @@ -449,8 +456,8 @@ enum ASurfaceTransactionTransparency : int8_t { * * Available since API level 29. */ -void ASurfaceTransaction_setBufferTransparency(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, +void ASurfaceTransaction_setBufferTransparency(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, enum ASurfaceTransactionTransparency transparency) __INTRODUCED_IN(29); @@ -460,9 +467,10 @@ void ASurfaceTransaction_setBufferTransparency(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setDamageRegion(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, const ARect rects[], - uint32_t count) __INTRODUCED_IN(29); +void ASurfaceTransaction_setDamageRegion(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + const ARect* _Nullable rects, uint32_t count) + __INTRODUCED_IN(29); /** * Specifies a desiredPresentTime for the transaction. The framework will try to present @@ -476,7 +484,7 @@ void ASurfaceTransaction_setDamageRegion(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setDesiredPresentTime(ASurfaceTransaction* transaction, +void ASurfaceTransaction_setDesiredPresentTime(ASurfaceTransaction* _Nonnull transaction, int64_t desiredPresentTime) __INTRODUCED_IN(29); /** @@ -486,8 +494,8 @@ void ASurfaceTransaction_setDesiredPresentTime(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setBufferAlpha(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, float alpha) +void ASurfaceTransaction_setBufferAlpha(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, float alpha) __INTRODUCED_IN(29); /** @@ -497,9 +505,9 @@ void ASurfaceTransaction_setBufferAlpha(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, enum ADataSpace data_space) - __INTRODUCED_IN(29); +void ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + enum ADataSpace data_space) __INTRODUCED_IN(29); /** * SMPTE ST 2086 "Mastering Display Color Volume" static metadata @@ -509,9 +517,9 @@ void ASurfaceTransaction_setBufferDataSpace(ASurfaceTransaction* transaction, * * Available since API level 29. */ -void ASurfaceTransaction_setHdrMetadata_smpte2086(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, - struct AHdrMetadata_smpte2086* metadata) +void ASurfaceTransaction_setHdrMetadata_smpte2086(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + struct AHdrMetadata_smpte2086* _Nullable metadata) __INTRODUCED_IN(29); /** @@ -522,9 +530,9 @@ void ASurfaceTransaction_setHdrMetadata_smpte2086(ASurfaceTransaction* transacti * * Available since API level 29. */ -void ASurfaceTransaction_setHdrMetadata_cta861_3(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, - struct AHdrMetadata_cta861_3* metadata) +void ASurfaceTransaction_setHdrMetadata_cta861_3(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + struct AHdrMetadata_cta861_3* _Nullable metadata) __INTRODUCED_IN(29); /** @@ -569,10 +577,10 @@ void ASurfaceTransaction_setHdrMetadata_cta861_3(ASurfaceTransaction* transactio * * Available since API level 34. */ -void ASurfaceTransaction_setExtendedRangeBrightness(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, - float currentBufferRatio, - float desiredRatio) __INTRODUCED_IN(__ANDROID_API_U__); +void ASurfaceTransaction_setExtendedRangeBrightness(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + float currentBufferRatio, float desiredRatio) + __INTRODUCED_IN(__ANDROID_API_U__); /** * Same as ASurfaceTransaction_setFrameRateWithChangeStrategy(transaction, surface_control, @@ -582,8 +590,8 @@ void ASurfaceTransaction_setExtendedRangeBrightness(ASurfaceTransaction* transac * * Available since API level 30. */ -void ASurfaceTransaction_setFrameRate(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, float frameRate, +void ASurfaceTransaction_setFrameRate(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, float frameRate, int8_t compatibility) __INTRODUCED_IN(30); /** @@ -618,10 +626,11 @@ void ASurfaceTransaction_setFrameRate(ASurfaceTransaction* transaction, * * Available since API level 31. */ -void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, float frameRate, - int8_t compatibility, int8_t changeFrameRateStrategy) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + float frameRate, int8_t compatibility, + int8_t changeFrameRateStrategy) + __INTRODUCED_IN(31); /** * Clears the frame rate which is set for \a surface_control. @@ -644,8 +653,8 @@ void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* tra * * Available since API level 34. */ -void ASurfaceTransaction_clearFrameRate(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control) +void ASurfaceTransaction_clearFrameRate(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control) __INTRODUCED_IN(__ANDROID_API_U__); /** @@ -674,10 +683,9 @@ void ASurfaceTransaction_clearFrameRate(ASurfaceTransaction* transaction, * \param surface_control The ASurfaceControl on which to control buffer backpressure behavior. * \param enableBackPressure Whether to enable back pressure. */ -void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* transaction, - ASurfaceControl* surface_control, - bool enableBackPressure) - __INTRODUCED_IN(31); +void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* _Nonnull transaction, + ASurfaceControl* _Nonnull surface_control, + bool enableBackPressure) __INTRODUCED_IN(31); /** * Sets the frame timeline to use in SurfaceFlinger. @@ -697,7 +705,7 @@ void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* transaction, * to the corresponding expected presentation time and deadline from the frame to be rendered. A * stale or invalid value will be ignored. */ -void ASurfaceTransaction_setFrameTimeline(ASurfaceTransaction* transaction, +void ASurfaceTransaction_setFrameTimeline(ASurfaceTransaction* _Nonnull transaction, AVsyncId vsyncId) __INTRODUCED_IN(33); __END_DECLS diff --git a/libs/cputimeinstate/testtimeinstate.cpp b/libs/cputimeinstate/testtimeinstate.cpp index 6ccc6cafb6..81f6a585ab 100644 --- a/libs/cputimeinstate/testtimeinstate.cpp +++ b/libs/cputimeinstate/testtimeinstate.cpp @@ -40,6 +40,9 @@ namespace bpf { static constexpr uint64_t NSEC_PER_SEC = 1000000000; static constexpr uint64_t NSEC_PER_YEAR = NSEC_PER_SEC * 60 * 60 * 24 * 365; +// Declare busy loop variable globally to prevent removal during optimization +static long sum __attribute__((used)) = 0; + using std::vector; class TimeInStateTest : public testing::Test { @@ -576,7 +579,7 @@ uint64_t timeNanos() { // Keeps CPU busy with some number crunching void useCpu() { - long sum = 0; + sum = 0; for (int i = 0; i < 100000; i++) { sum *= i; } |