diff options
| author | 2020-11-30 10:30:52 -1000 | |
|---|---|---|
| committer | 2020-12-01 15:07:50 -1000 | |
| commit | efed16630a8cf71287f04cde5dc59c4e0db1d987 (patch) | |
| tree | 7d9c798140281a901d8e6ab0607b594fe48e394b /tests/Input/src | |
| parent | 26ca287da728d88709f7523113637104fb31bf3e (diff) | |
Track per-window information in ViewFrameInfo
FrameInfo will now be per-window; that is, per-ViewRootImpl.
Some of the information should remain “global” (it remain in Choreographer),
while some information is going to become ViewRootImpl-specific.
Before the information gets passed to the native layer,
the ViewRootImpl-specific info will be stitched together
with the general Choreographer info.
This change is useful in order to correctly correlate frames with a specific
input event. In the unlikely scenario of a user touching two windows of the
same app simultaneously, this change will allow us to correctly measure the
latency of both frames produced by the windows.
Design doc: https://docs.google.com/document/d/1KMpMBlOxnl7zkWBCbXZZE6ZlaHEA4efYnN6WYK8n3FE/edit?resourcekey=0-eqooVNP0SskupljlTFvtOQ
Test: atest ViewFrameInfoTest
Bug: 169866723
Change-Id: Ib0bf9cd51cbcc0b9b70460c929c480eb490ec322
Diffstat (limited to 'tests/Input/src')
| -rw-r--r-- | tests/Input/src/com/android/test/input/ViewFrameInfoTest.kt | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/Input/src/com/android/test/input/ViewFrameInfoTest.kt b/tests/Input/src/com/android/test/input/ViewFrameInfoTest.kt new file mode 100644 index 000000000000..f919a3eaf271 --- /dev/null +++ b/tests/Input/src/com/android/test/input/ViewFrameInfoTest.kt @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.test.input + +import android.graphics.FrameInfo +import android.os.SystemClock +import android.view.ViewFrameInfo +import com.google.common.truth.Truth.assertThat +import org.junit.Before +import org.junit.Test + +class ViewFrameInfoTest { + companion object { + private const val TAG = "ViewFrameInfoTest" + } + private val mViewFrameInfo = ViewFrameInfo() + private var mTimeStarted: Long = 0 + + @Before + fun setUp() { + mViewFrameInfo.reset() + mViewFrameInfo.updateOldestInputEvent(10) + mViewFrameInfo.updateNewestInputEvent(20) + mViewFrameInfo.flags = mViewFrameInfo.flags or FrameInfo.FLAG_WINDOW_LAYOUT_CHANGED + mTimeStarted = SystemClock.uptimeNanos() + mViewFrameInfo.markDrawStart() + } + + @Test + fun testPopulateFields() { + assertThat(mViewFrameInfo.drawStart).isGreaterThan(mTimeStarted) + assertThat(mViewFrameInfo.oldestInputEventTime).isEqualTo(10) + assertThat(mViewFrameInfo.newestInputEventTime).isEqualTo(20) + assertThat(mViewFrameInfo.flags).isEqualTo(FrameInfo.FLAG_WINDOW_LAYOUT_CHANGED) + } + + @Test + fun testReset() { + mViewFrameInfo.reset() + // Ensure that the original object is reset correctly + assertThat(mViewFrameInfo.drawStart).isEqualTo(0) + assertThat(mViewFrameInfo.oldestInputEventTime).isEqualTo(0) + assertThat(mViewFrameInfo.newestInputEventTime).isEqualTo(0) + assertThat(mViewFrameInfo.flags).isEqualTo(0) + } + + @Test + fun testUpdateFrameInfoFromViewFrameInfo() { + val frameInfo = FrameInfo() + // By default, all values should be zero + assertThat(frameInfo.frameInfo[FrameInfo.OLDEST_INPUT_EVENT]).isEqualTo(0) + assertThat(frameInfo.frameInfo[FrameInfo.NEWEST_INPUT_EVENT]).isEqualTo(0) + assertThat(frameInfo.frameInfo[FrameInfo.FLAGS]).isEqualTo(0) + assertThat(frameInfo.frameInfo[FrameInfo.DRAW_START]).isEqualTo(0) + + // The values inside FrameInfo should match those from ViewFrameInfo after we update them + mViewFrameInfo.populateFrameInfo(frameInfo) + assertThat(frameInfo.frameInfo[FrameInfo.OLDEST_INPUT_EVENT]).isEqualTo(10) + assertThat(frameInfo.frameInfo[FrameInfo.NEWEST_INPUT_EVENT]).isEqualTo(20) + assertThat(frameInfo.frameInfo[FrameInfo.FLAGS]).isEqualTo( + FrameInfo.FLAG_WINDOW_LAYOUT_CHANGED) + assertThat(frameInfo.frameInfo[FrameInfo.DRAW_START]).isGreaterThan(mTimeStarted) + } +}
\ No newline at end of file |