diff options
author | Adrian Salido <salidoa@google.com> | 2018-11-28 19:18:02 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2018-11-28 19:18:02 +0000 |
commit | 1c548e5c79be326c4c0f7d77a30399cee1cef925 (patch) | |
tree | 546a184221783e6415250f16cb9f8faf2681c56d | |
parent | 81dc06e2597023632c9e66df219c12c07b8304fa (diff) | |
parent | beefecc309039a3232e7f73ce1307f8ad6256c4e (diff) | |
download | base-1c548e5c79be326c4c0f7d77a30399cee1cef925.tar.gz |
Merge "TouchLatency: make updates time based and add fps to ball mode"
5 files changed, 75 insertions, 41 deletions
diff --git a/tests/TouchLatency/.gitignore b/tests/TouchLatency/.gitignore index bd79078a904e..7f4121a9623a 100644 --- a/tests/TouchLatency/.gitignore +++ b/tests/TouchLatency/.gitignore @@ -3,4 +3,5 @@ /.idea .DS_Store /build +/gen .iml diff --git a/tests/TouchLatency/app/build.gradle b/tests/TouchLatency/app/build.gradle index 233711055eb8..2594322e3727 100644 --- a/tests/TouchLatency/app/build.gradle +++ b/tests/TouchLatency/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 21 - buildToolsVersion "21.1.2" + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { applicationId "com.prefabulated.touchlatency" minSdkVersion 21 - targetSdkVersion 21 + targetSdkVersion 28 versionCode 1 versionName "1.0" } diff --git a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java index b4b5ca7161fc..360c22f832b3 100644 --- a/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java +++ b/tests/TouchLatency/app/src/main/java/com/prefabulated/touchlatency/TouchLatencyActivity.java @@ -19,11 +19,9 @@ package com.prefabulated.touchlatency; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; -import android.os.CountDownTimer; +import android.graphics.Paint.Align; import android.os.Bundle; -import android.text.method.Touch; import android.util.AttributeSet; import android.util.Log; import android.view.Menu; @@ -31,15 +29,17 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.os.Trace; - -import java.util.ArrayList; -import java.util.Collections; +import java.math.RoundingMode; +import java.text.DecimalFormat; class TouchLatencyView extends View implements View.OnTouchListener { private static final String LOG_TAG = "TouchLatency"; private static final int BACKGROUND_COLOR = 0xFF400080; private static final int INNER_RADIUS = 70; - private static final int BALL_RADIUS = 100; + private static final int BALL_DIAMETER = 200; + private static final int SEC_TO_NANOS = 1000000000; + private static final float FPS_UPDATE_THRESHOLD = 20; + private static final long BALL_VELOCITY = 420; public TouchLatencyView(Context context, AttributeSet attrs) { super(context, attrs); @@ -58,13 +58,17 @@ class TouchLatencyView extends View implements View.OnTouchListener { mRedPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mRedPaint.setColor(0xFFFF0000); mRedPaint.setStyle(Paint.Style.FILL); + mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mTextPaint.setColor(0xFFFFFFFF); + mTextPaint.setTextSize(100); + mTextPaint.setTextAlign(Align.RIGHT); mTouching = false; - mBallX = 100.0f; - mBallY = 100.0f; - mVelocityX = 7.0f; - mVelocityY = 7.0f; + mLastDrawNano = 0; + mFps = 0; + mLastFpsUpdate = 0; + mFrameCount = 0; Trace.endSection(); } @@ -113,43 +117,70 @@ class TouchLatencyView extends View implements View.OnTouchListener { } } + private Paint getBallColor() { + if (mFps > 75) + return mGreenPaint; + else if (mFps > 45) + return mYellowPaint; + else + return mRedPaint; + } + private void drawBall(Canvas canvas) { Trace.beginSection("TouchLatencyView drawBall"); int width = canvas.getWidth(); int height = canvas.getHeight(); + float fps = 0f; - // Update position - mBallX += mVelocityX; - mBallY += mVelocityY; + long t = System.nanoTime(); + long tDiff = t - mLastDrawNano; + mLastDrawNano = t; + mFrameCount++; - // Clamp and change velocity if necessary - float left = mBallX - BALL_RADIUS; - if (left < 0) { - left = 0; - mVelocityX *= -1; + if (tDiff < SEC_TO_NANOS) { + fps = 1f * SEC_TO_NANOS / tDiff; } - float top = mBallY - BALL_RADIUS; - if (top < 0) { - top = 0; - mVelocityY *= -1; + long fDiff = t - mLastFpsUpdate; + if (Math.abs(mFps - fps) > FPS_UPDATE_THRESHOLD) { + mFps = fps; + mLastFpsUpdate = t; + mFrameCount = 0; + } else if (fDiff > SEC_TO_NANOS) { + mFps = 1f * mFrameCount * SEC_TO_NANOS / fDiff; + mLastFpsUpdate = t; + mFrameCount = 0; } - float right = mBallX + BALL_RADIUS; - if (right > width) { - right = width; - mVelocityX *= -1; + final long pos = t * BALL_VELOCITY / SEC_TO_NANOS; + final long xMax = width - BALL_DIAMETER; + final long yMax = height - BALL_DIAMETER; + long xOffset = pos % xMax; + long yOffset = pos % yMax; + + float left, right, top, bottom; + + if (((pos / xMax) & 1) == 0) { + left = xMax - xOffset; + } else { + left = xOffset; } + right = left + BALL_DIAMETER; - float bottom = mBallY + BALL_RADIUS; - if (bottom > height) { - bottom = height; - mVelocityY *= -1; + if (((pos / yMax) & 1) == 0) { + top = yMax - yOffset; + } else { + top = yOffset; } + bottom = top + BALL_DIAMETER; // Draw the ball canvas.drawColor(BACKGROUND_COLOR); - canvas.drawOval(left, top, right, bottom, mYellowPaint); + canvas.drawOval(left, top, right, bottom, getBallColor()); + DecimalFormat df = new DecimalFormat("fps: #.##"); + df.setRoundingMode(RoundingMode.HALF_UP); + canvas.drawText(df.format(mFps), width, 100, mTextPaint); + invalidate(); Trace.endSection(); } @@ -176,15 +207,15 @@ class TouchLatencyView extends View implements View.OnTouchListener { Trace.endSection(); } - private Paint mBluePaint, mGreenPaint, mYellowPaint, mRedPaint; + private final Paint mBluePaint, mGreenPaint, mYellowPaint, mRedPaint, mTextPaint; private int mMode; private boolean mTouching; private float mTouchX, mTouchY; private float mLastDrawnX, mLastDrawnY; - private float mBallX, mBallY; - private float mVelocityX, mVelocityY; + private long mLastDrawNano, mLastFpsUpdate, mFrameCount; + private float mFps; } public class TouchLatencyActivity extends Activity { diff --git a/tests/TouchLatency/build.gradle b/tests/TouchLatency/build.gradle index d3ff69d6e7f9..03abe82a4359 100644 --- a/tests/TouchLatency/build.gradle +++ b/tests/TouchLatency/build.gradle @@ -3,9 +3,10 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -15,5 +16,6 @@ buildscript { allprojects { repositories { jcenter() + google() } } diff --git a/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties b/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties index 0c71e760dc93..111992a460fa 100644 --- a/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties +++ b/tests/TouchLatency/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Tue Nov 27 13:37:59 PST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip |