summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rachel Lee <rnlee@google.com> 2023-09-01 18:05:53 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-09-01 18:05:53 +0000
commitae8460cf854c78b26785ef0a107a6f8189887ffd (patch)
tree0efcc5baf796004199eedad8246c309f7362fbba
parentd344eceef1f465f2d3ec57e039df42c9ceb037e6 (diff)
parentddb2fb71f9c30bae92683af24c3656eb1effdf2e (diff)
Merge "Minimum 1 frame timeline in java Choreographer" into udc-qpr-dev am: ddb2fb71f9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/24590499 Change-Id: Ie198d7d86011e03803f830efc57b35399bec2331 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--core/java/android/view/Choreographer.java19
1 files changed, 10 insertions, 9 deletions
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java
index 5127f05a03ab..dfa0000cca78 100644
--- a/core/java/android/view/Choreographer.java
+++ b/core/java/android/view/Choreographer.java
@@ -1155,9 +1155,15 @@ public final class Choreographer {
}
private void allocateFrameTimelines(int length) {
- mFrameTimelines = new FrameTimeline[length];
- for (int i = 0; i < mFrameTimelines.length; i++) {
- mFrameTimelines[i] = new FrameTimeline();
+ // Maintain one default frame timeline for API (such as getFrameTimelines and
+ // getPreferredFrameTimeline) consistency. It should have default data when accessed.
+ length = Math.max(1, length);
+
+ if (mFrameTimelines == null || mFrameTimelines.length != length) {
+ mFrameTimelines = new FrameTimeline[length];
+ for (int i = 0; i < mFrameTimelines.length; i++) {
+ mFrameTimelines[i] = new FrameTimeline();
+ }
}
}
@@ -1167,12 +1173,7 @@ public final class Choreographer {
*/
FrameTimeline update(
long frameTimeNanos, DisplayEventReceiver.VsyncEventData vsyncEventData) {
- // Even if the frame timelines length is 0, continue with allocation for API
- // FrameData.getFrameTimelines consistency. The 0 length frame timelines code path
- // should only occur when USE_VSYNC property is false.
- if (mFrameTimelines.length != vsyncEventData.frameTimelinesLength) {
- allocateFrameTimelines(vsyncEventData.frameTimelinesLength);
- }
+ allocateFrameTimelines(vsyncEventData.frameTimelinesLength);
mFrameTimeNanos = frameTimeNanos;
mPreferredFrameTimelineIndex = vsyncEventData.preferredFrameTimelineIndex;
for (int i = 0; i < mFrameTimelines.length; i++) {