diff options
author | Stan Iliev <stani@google.com> | 2017-01-05 10:24:54 -0500 |
---|---|---|
committer | Stan Iliev <stani@google.com> | 2017-01-06 14:28:56 -0500 |
commit | 6337f4fb27836cdb9055c6e79d6fc3d62d7c9e67 (patch) | |
tree | 5807a64dd19da8baeca5ddbfd365f74649db2912 /tests/UiBench | |
parent | 202b862be0a552936a8e67960178c05d51de8841 (diff) |
Create a new jank test to measure HW layer resize performance
Write a jank test that is animating height and width of a View
backed by a HW layer.
Test: built angler-userdebug and ran UiBench jank tests.
Change-Id: I69eccb73b6fb887549506c80590892665051ee2f
Diffstat (limited to 'tests/UiBench')
-rw-r--r-- | tests/UiBench/AndroidManifest.xml | 8 | ||||
-rw-r--r-- | tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java | 60 |
2 files changed, 68 insertions, 0 deletions
diff --git a/tests/UiBench/AndroidManifest.xml b/tests/UiBench/AndroidManifest.xml index 29154aa8dcaf..0681b61fc02f 100644 --- a/tests/UiBench/AndroidManifest.xml +++ b/tests/UiBench/AndroidManifest.xml @@ -76,6 +76,14 @@ </intent-filter> </activity> <activity + android:name=".ResizeHWLayerActivity" + android:label="General/Resize HW Layer" > + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + <category android:name="com.android.test.uibench.TEST" /> + </intent-filter> + </activity> + <activity android:name=".TrivialAnimationActivity" android:label="General/Trivial Animation" > <intent-filter> diff --git a/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java b/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java new file mode 100644 index 000000000000..23a2713abd40 --- /dev/null +++ b/tests/UiBench/src/com/android/test/uibench/ResizeHWLayerActivity.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2017 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.uibench; + +import android.animation.PropertyValuesHolder; +import android.animation.ValueAnimator; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.FrameLayout; + +/** + * Tests resizing of a View backed by a hardware layer. + */ +public class ResizeHWLayerActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DisplayMetrics metrics = getResources().getDisplayMetrics(); + int width = metrics.widthPixels; + int height = metrics.heightPixels; + View child = new View(this); + child.setBackgroundColor(Color.BLUE); + child.setLayoutParams(new FrameLayout.LayoutParams(width, height)); + child.setLayerType(View.LAYER_TYPE_HARDWARE, null); + PropertyValuesHolder pvhWidth = PropertyValuesHolder.ofInt("width", width, 1); + PropertyValuesHolder pvhHeight = PropertyValuesHolder.ofInt("height", height, 1); + final LayoutParams params = child.getLayoutParams(); + ValueAnimator animator = ValueAnimator.ofPropertyValuesHolder(pvhWidth, pvhHeight); + animator.setRepeatMode(ValueAnimator.REVERSE); + animator.setRepeatCount(ValueAnimator.INFINITE); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator valueAnimator) { + params.width = (Integer)valueAnimator.getAnimatedValue("width"); + params.height = (Integer)valueAnimator.getAnimatedValue("height"); + child.requestLayout(); + } + }); + animator.start(); + setContentView(child); + } +} |