diff options
| author | 2023-09-01 18:05:53 +0000 | |
|---|---|---|
| committer | 2023-09-01 18:05:53 +0000 | |
| commit | ae8460cf854c78b26785ef0a107a6f8189887ffd (patch) | |
| tree | 0efcc5baf796004199eedad8246c309f7362fbba | |
| parent | d344eceef1f465f2d3ec57e039df42c9ceb037e6 (diff) | |
| parent | ddb2fb71f9c30bae92683af24c3656eb1effdf2e (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.java | 19 |
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++) { |