From 39a4059ae873b2dffb016e2f59a65131f6516ce8 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Tue, 21 Sep 2021 12:56:24 -0700 Subject: [PATCH 01/17] Fix Android T deprecated WindowManager getter call Formatting Version Gate Formatting --- .../embedding/engine/loader/FlutterLoader.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index aa21bc6b360ab..c417c805dd23d 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -9,10 +9,12 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.res.AssetManager; +import android.hardware.display.DisplayManager; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; +import android.view.Display; import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -158,8 +160,20 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se initStartTimestampMillis = SystemClock.uptimeMillis(); flutterApplicationInfo = ApplicationInfoLoader.load(appContext); - VsyncWaiter.getInstance((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) - .init(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + final DisplayManager dm = appContext.getSystemService(DisplayManager.class); + final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); + final Context windowContext = + appContext.createWindowContext( + primaryDisplay, WindowManager.LayoutParams.TYPE_APPLICATION, null); + VsyncWaiter.getInstance( + (WindowManager) windowContext.getSystemService(Context.WINDOW_SERVICE)) + .init(); + } else { + VsyncWaiter.getInstance((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) + .init(); + } // Use a background thread for initialization tasks that require disk access. Callable initTask = From 433a7f5cb9f394cc62fe87aa99579395643f08f8 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Tue, 21 Sep 2021 13:44:04 -0700 Subject: [PATCH 02/17] Imports --- .../io/flutter/embedding/engine/loader/FlutterLoader.java | 1 + 1 file changed, 1 insertion(+) diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index c417c805dd23d..601aa6d5b6505 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -10,6 +10,7 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.hardware.display.DisplayManager; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; From b5a86a82e93758501423f1f13f3bbeafa7f4f46a Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Tue, 21 Sep 2021 14:20:30 -0700 Subject: [PATCH 03/17] VsyncWaiter takes Display instead of WindowManager Remove extra import Remove extra var --- .../engine/loader/FlutterLoader.java | 19 +++---------------- .../android/io/flutter/view/VsyncWaiter.java | 16 ++++++++-------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index 601aa6d5b6505..983b646070d3d 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -10,13 +10,11 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.hardware.display.DisplayManager; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.view.Display; -import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import io.flutter.BuildConfig; @@ -109,7 +107,6 @@ public FlutterLoader(@NonNull FlutterJNI flutterJNI, @NonNull ExecutorService ex private FlutterApplicationInfo flutterApplicationInfo; private FlutterJNI flutterJNI; private ExecutorService executorService; - private WindowManager windowManager; private static class InitResult { final String appStoragePath; @@ -162,19 +159,9 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se initStartTimestampMillis = SystemClock.uptimeMillis(); flutterApplicationInfo = ApplicationInfoLoader.load(appContext); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - final DisplayManager dm = appContext.getSystemService(DisplayManager.class); - final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); - final Context windowContext = - appContext.createWindowContext( - primaryDisplay, WindowManager.LayoutParams.TYPE_APPLICATION, null); - VsyncWaiter.getInstance( - (WindowManager) windowContext.getSystemService(Context.WINDOW_SERVICE)) - .init(); - } else { - VsyncWaiter.getInstance((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) - .init(); - } + final DisplayManager dm = appContext.getSystemService(DisplayManager.class); + final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); + VsyncWaiter.getInstance(primaryDisplay).init(); // Use a background thread for initialization tasks that require disk access. Callable initTask = diff --git a/shell/platform/android/io/flutter/view/VsyncWaiter.java b/shell/platform/android/io/flutter/view/VsyncWaiter.java index 8e225f0ee548a..13737479047fa 100644 --- a/shell/platform/android/io/flutter/view/VsyncWaiter.java +++ b/shell/platform/android/io/flutter/view/VsyncWaiter.java @@ -5,7 +5,7 @@ package io.flutter.view; import android.view.Choreographer; -import android.view.WindowManager; +import android.view.Display; import androidx.annotation.NonNull; import io.flutter.embedding.engine.FlutterJNI; @@ -14,14 +14,14 @@ public class VsyncWaiter { private static VsyncWaiter instance; @NonNull - public static VsyncWaiter getInstance(@NonNull WindowManager windowManager) { + public static VsyncWaiter getInstance(@NonNull Display display) { if (instance == null) { - instance = new VsyncWaiter(windowManager); + instance = new VsyncWaiter(display); } return instance; } - @NonNull private final WindowManager windowManager; + @NonNull private final Display display; private final FlutterJNI.AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate = new FlutterJNI.AsyncWaitForVsyncDelegate() { @@ -32,7 +32,7 @@ public void asyncWaitForVsync(long cookie) { new Choreographer.FrameCallback() { @Override public void doFrame(long frameTimeNanos) { - float fps = windowManager.getDefaultDisplay().getRefreshRate(); + float fps = display.getRefreshRate(); long refreshPeriodNanos = (long) (1000000000.0 / fps); FlutterJNI.nativeOnVsync( frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie); @@ -41,15 +41,15 @@ public void doFrame(long frameTimeNanos) { } }; - private VsyncWaiter(@NonNull WindowManager windowManager) { - this.windowManager = windowManager; + private VsyncWaiter(@NonNull Display display) { + this.display = display; } public void init() { FlutterJNI.setAsyncWaitForVsyncDelegate(asyncWaitForVsyncDelegate); // TODO(mattcarroll): look into moving FPS reporting to a plugin - float fps = windowManager.getDefaultDisplay().getRefreshRate(); + float fps = display.getRefreshRate(); FlutterJNI.setRefreshRateFPS(fps); } } From 2428099d7e5b53fdc21046bc32bbbc90b9b85ccd Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Tue, 21 Sep 2021 15:33:42 -0700 Subject: [PATCH 04/17] Version gate and take fps directly import --- .../embedding/engine/loader/FlutterLoader.java | 16 +++++++++++++--- .../android/io/flutter/view/VsyncWaiter.java | 13 +++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index 983b646070d3d..1d4af445b6f75 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -10,11 +10,13 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.hardware.display.DisplayManager; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; import android.view.Display; +import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import io.flutter.BuildConfig; @@ -159,9 +161,17 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se initStartTimestampMillis = SystemClock.uptimeMillis(); flutterApplicationInfo = ApplicationInfoLoader.load(appContext); - final DisplayManager dm = appContext.getSystemService(DisplayManager.class); - final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); - VsyncWaiter.getInstance(primaryDisplay).init(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + final DisplayManager dm = appContext.getSystemService(DisplayManager.class); + final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); + VsyncWaiter.getInstance(primaryDisplay.getRefreshRate()).init(); + } else { + VsyncWaiter.getInstance( + ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay() + .getRefreshRate()) + .init(); + } // Use a background thread for initialization tasks that require disk access. Callable initTask = diff --git a/shell/platform/android/io/flutter/view/VsyncWaiter.java b/shell/platform/android/io/flutter/view/VsyncWaiter.java index 13737479047fa..cb00293c0e394 100644 --- a/shell/platform/android/io/flutter/view/VsyncWaiter.java +++ b/shell/platform/android/io/flutter/view/VsyncWaiter.java @@ -5,7 +5,6 @@ package io.flutter.view; import android.view.Choreographer; -import android.view.Display; import androidx.annotation.NonNull; import io.flutter.embedding.engine.FlutterJNI; @@ -14,14 +13,14 @@ public class VsyncWaiter { private static VsyncWaiter instance; @NonNull - public static VsyncWaiter getInstance(@NonNull Display display) { + public static VsyncWaiter getInstance(@NonNull float fps) { if (instance == null) { - instance = new VsyncWaiter(display); + instance = new VsyncWaiter(fps); } return instance; } - @NonNull private final Display display; + @NonNull private final float fps; private final FlutterJNI.AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate = new FlutterJNI.AsyncWaitForVsyncDelegate() { @@ -32,7 +31,6 @@ public void asyncWaitForVsync(long cookie) { new Choreographer.FrameCallback() { @Override public void doFrame(long frameTimeNanos) { - float fps = display.getRefreshRate(); long refreshPeriodNanos = (long) (1000000000.0 / fps); FlutterJNI.nativeOnVsync( frameTimeNanos, frameTimeNanos + refreshPeriodNanos, cookie); @@ -41,15 +39,14 @@ public void doFrame(long frameTimeNanos) { } }; - private VsyncWaiter(@NonNull Display display) { - this.display = display; + private VsyncWaiter(@NonNull float fps) { + this.fps = fps; } public void init() { FlutterJNI.setAsyncWaitForVsyncDelegate(asyncWaitForVsyncDelegate); // TODO(mattcarroll): look into moving FPS reporting to a plugin - float fps = display.getRefreshRate(); FlutterJNI.setRefreshRateFPS(fps); } } From 5bd268f01b0805d396b7e00d793a3624db5437a0 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 10:58:11 -0700 Subject: [PATCH 05/17] Loader test --- .../embedding/engine/loader/FlutterLoaderTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 4b11863f5efb8..73683c50add9e 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -92,4 +92,14 @@ public void itUsesCorrectExecutorService() { flutterLoader.startInitialization(RuntimeEnvironment.application); verify(mockExecutorService, times(1)).submit(any(Callable.class)); } + + @Test + public void itReportsFpsToVsyncWaiter() { + FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); + FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); + + assertFalse(flutterLoader.initialized()); + flutterLoader.startInitialization(RuntimeEnvironment.application); + verify(mockFlutterJNI, times(1)).setRefreshRateFPS(anyFloat()); + } } From 7f4ebd5aa5d584238a34820784d7f535fab673bf Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 11:02:49 -0700 Subject: [PATCH 06/17] Test sdk differences --- .../engine/loader/FlutterLoaderTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 73683c50add9e..2f55425b2eb2e 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -16,6 +16,7 @@ import static org.mockito.Mockito.verify; import static org.robolectric.Shadows.shadowOf; +import android.annotation.TargetApi; import android.app.ActivityManager; import android.content.Context; import io.flutter.embedding.engine.FlutterJNI; @@ -94,6 +95,20 @@ public void itUsesCorrectExecutorService() { } @Test + @TargetApi(30) + @Config(sdk = 30) + public void itReportsFpsToVsyncWaiter() { + FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); + FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); + + assertFalse(flutterLoader.initialized()); + flutterLoader.startInitialization(RuntimeEnvironment.application); + verify(mockFlutterJNI, times(1)).setRefreshRateFPS(anyFloat()); + } + + @Test + @TargetApi(18) + @Config(sdk = 18) public void itReportsFpsToVsyncWaiter() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); From baea4ca951c22a953c163e41c4432ed29dc3e5bb Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 11:05:04 -0700 Subject: [PATCH 07/17] Rename tests --- .../embedding/engine/loader/FlutterLoaderTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 2f55425b2eb2e..89df8e5c7264e 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -95,9 +95,9 @@ public void itUsesCorrectExecutorService() { } @Test - @TargetApi(30) - @Config(sdk = 30) - public void itReportsFpsToVsyncWaiter() { + @TargetApi(23) + @Config(sdk = 23) + public void itReportsFpsToVsyncWaiterAndroidM() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); @@ -107,9 +107,9 @@ public void itReportsFpsToVsyncWaiter() { } @Test - @TargetApi(18) - @Config(sdk = 18) - public void itReportsFpsToVsyncWaiter() { + @TargetApi(22) + @Config(sdk = 22) + public void itReportsFpsToVsyncWaiterLegacy() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); From 49aee59695e3ece96c8ea2219e120b1d8f00f1bc Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 11:17:38 -0700 Subject: [PATCH 08/17] Address comments Formatting formatting --- .../embedding/engine/loader/FlutterLoader.java | 13 +++++++------ .../android/io/flutter/view/VsyncWaiter.java | 7 +++---- .../embedding/engine/loader/FlutterLoaderTest.java | 1 + 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java index 1d4af445b6f75..4f620f2b2b0c1 100644 --- a/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java +++ b/shell/platform/android/io/flutter/embedding/engine/loader/FlutterLoader.java @@ -161,17 +161,18 @@ public void startInitialization(@NonNull Context applicationContext, @NonNull Se initStartTimestampMillis = SystemClock.uptimeMillis(); flutterApplicationInfo = ApplicationInfoLoader.load(appContext); + float fps; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { final DisplayManager dm = appContext.getSystemService(DisplayManager.class); final Display primaryDisplay = dm.getDisplay(Display.DEFAULT_DISPLAY); - VsyncWaiter.getInstance(primaryDisplay.getRefreshRate()).init(); + fps = primaryDisplay.getRefreshRate(); } else { - VsyncWaiter.getInstance( - ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) - .getDefaultDisplay() - .getRefreshRate()) - .init(); + fps = + ((WindowManager) appContext.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay() + .getRefreshRate(); } + VsyncWaiter.getInstance(fps).init(); // Use a background thread for initialization tasks that require disk access. Callable initTask = diff --git a/shell/platform/android/io/flutter/view/VsyncWaiter.java b/shell/platform/android/io/flutter/view/VsyncWaiter.java index cb00293c0e394..a19587601fe00 100644 --- a/shell/platform/android/io/flutter/view/VsyncWaiter.java +++ b/shell/platform/android/io/flutter/view/VsyncWaiter.java @@ -5,7 +5,6 @@ package io.flutter.view; import android.view.Choreographer; -import androidx.annotation.NonNull; import io.flutter.embedding.engine.FlutterJNI; // TODO(mattcarroll): add javadoc. @@ -13,14 +12,14 @@ public class VsyncWaiter { private static VsyncWaiter instance; @NonNull - public static VsyncWaiter getInstance(@NonNull float fps) { + public static VsyncWaiter getInstance(float fps) { if (instance == null) { instance = new VsyncWaiter(fps); } return instance; } - @NonNull private final float fps; + private final float fps; private final FlutterJNI.AsyncWaitForVsyncDelegate asyncWaitForVsyncDelegate = new FlutterJNI.AsyncWaitForVsyncDelegate() { @@ -39,7 +38,7 @@ public void doFrame(long frameTimeNanos) { } }; - private VsyncWaiter(@NonNull float fps) { + private VsyncWaiter(float fps) { this.fps = fps; } diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 89df8e5c7264e..a7368e0a45979 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -8,6 +8,7 @@ import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyFloat; import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; From 1fc56c1c9d1aaf2b4b1b9446387dd0562dc9d34f Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 14:08:29 -0700 Subject: [PATCH 09/17] Verify getSystemService is not ccalled --- .../flutter/embedding/engine/loader/FlutterLoaderTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index a7368e0a45979..6f82bf5d006ec 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -102,9 +102,12 @@ public void itReportsFpsToVsyncWaiterAndroidM() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); + Context appContextSpy = Mockito.spy(RuntimeEnvironment.application); + assertFalse(flutterLoader.initialized()); - flutterLoader.startInitialization(RuntimeEnvironment.application); + flutterLoader.startInitialization(appContextSpy); verify(mockFlutterJNI, times(1)).setRefreshRateFPS(anyFloat()); + verify(appContextSpy, times(0)).getSystemService(anyString()); } @Test From 8cea69e9255b8b123a3fb146ce532e4c90d9be55 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 14:09:13 -0700 Subject: [PATCH 10/17] Missing import --- shell/platform/android/io/flutter/view/VsyncWaiter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/shell/platform/android/io/flutter/view/VsyncWaiter.java b/shell/platform/android/io/flutter/view/VsyncWaiter.java index a19587601fe00..89ff20dbee951 100644 --- a/shell/platform/android/io/flutter/view/VsyncWaiter.java +++ b/shell/platform/android/io/flutter/view/VsyncWaiter.java @@ -5,6 +5,7 @@ package io.flutter.view; import android.view.Choreographer; +import androidx.annotation.NonNull; import io.flutter.embedding.engine.FlutterJNI; // TODO(mattcarroll): add javadoc. From 03f137ecada36ac8344df8d81e58cc970e5140c0 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 16:03:03 -0700 Subject: [PATCH 11/17] Imports --- .../io/flutter/embedding/engine/loader/FlutterLoaderTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 6f82bf5d006ec..4da5cd1482f64 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -13,6 +13,7 @@ import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.robolectric.Shadows.shadowOf; @@ -102,7 +103,7 @@ public void itReportsFpsToVsyncWaiterAndroidM() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); - Context appContextSpy = Mockito.spy(RuntimeEnvironment.application); + Context appContextSpy = spy(RuntimeEnvironment.application); assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(appContextSpy); From 38af333e00f430d0d75407033d4f61b0b344122d Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Wed, 22 Sep 2021 16:47:43 -0700 Subject: [PATCH 12/17] No mock static methods --- .../flutter/embedding/engine/loader/FlutterLoaderTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 4da5cd1482f64..6480fb32a6677 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -8,11 +8,11 @@ import static junit.framework.TestCase.assertFalse; import static junit.framework.TestCase.assertTrue; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyFloat; import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.anyString; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -107,8 +107,7 @@ public void itReportsFpsToVsyncWaiterAndroidM() { assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(appContextSpy); - verify(mockFlutterJNI, times(1)).setRefreshRateFPS(anyFloat()); - verify(appContextSpy, times(0)).getSystemService(anyString()); + verify(appContextSpy, never()).getSystemService(anyString()); } @Test @@ -120,6 +119,6 @@ public void itReportsFpsToVsyncWaiterLegacy() { assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(RuntimeEnvironment.application); - verify(mockFlutterJNI, times(1)).setRefreshRateFPS(anyFloat()); + vverify(appContextSpy, times(1)).getSystemService(anyString()); } } From 3115d91fc53812c04ecf38132737dcf68f32820f Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Thu, 23 Sep 2021 11:51:56 -0700 Subject: [PATCH 13/17] Fix tests --- .../flutter/embedding/engine/loader/FlutterLoaderTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 6480fb32a6677..f431f1a2b1fb6 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -117,8 +117,10 @@ public void itReportsFpsToVsyncWaiterLegacy() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); + Context appContextSpy = spy(RuntimeEnvironment.application); + assertFalse(flutterLoader.initialized()); - flutterLoader.startInitialization(RuntimeEnvironment.application); - vverify(appContextSpy, times(1)).getSystemService(anyString()); + flutterLoader.startInitialization(appContextSpy); + verify(appContextSpy, times(1)).getSystemService(anyString()); } } From ae196c1fd0a598183374b0a8ef8d8367cd4fa05a Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Thu, 23 Sep 2021 12:26:39 -0700 Subject: [PATCH 14/17] Tests --- .../embedding/engine/loader/FlutterLoaderTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index f431f1a2b1fb6..72b2141611f51 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -22,6 +22,7 @@ import android.app.ActivityManager; import android.content.Context; import io.flutter.embedding.engine.FlutterJNI; +import io.flutter.view.VsyncWaiter; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; @@ -104,10 +105,12 @@ public void itReportsFpsToVsyncWaiterAndroidM() { FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); Context appContextSpy = spy(RuntimeEnvironment.application); + VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0)); assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(appContextSpy); verify(appContextSpy, never()).getSystemService(anyString()); + verify(vsyncSpy, times(1)).init(); } @Test @@ -117,10 +120,10 @@ public void itReportsFpsToVsyncWaiterLegacy() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); - Context appContextSpy = spy(RuntimeEnvironment.application); + VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0)); assertFalse(flutterLoader.initialized()); - flutterLoader.startInitialization(appContextSpy); - verify(appContextSpy, times(1)).getSystemService(anyString()); + flutterLoader.startInitialization(RuntimeEnvironment.application); + verify(vsyncSpy, times(1)).init(); } } From d41270f5b763be98ff5723c2b784b6bdd5ebfbb9 Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Thu, 23 Sep 2021 12:34:48 -0700 Subject: [PATCH 15/17] Float literal --- .../io/flutter/embedding/engine/loader/FlutterLoaderTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 72b2141611f51..24d5f9809f803 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -105,7 +105,7 @@ public void itReportsFpsToVsyncWaiterAndroidM() { FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); Context appContextSpy = spy(RuntimeEnvironment.application); - VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0)); + VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0f)); assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(appContextSpy); @@ -120,7 +120,7 @@ public void itReportsFpsToVsyncWaiterLegacy() { FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); - VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0)); + VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0f)); assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(RuntimeEnvironment.application); From 99c4a19643ea2e8aaeb19dcdb5bc8d9e4a8a61ad Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Thu, 23 Sep 2021 13:19:14 -0700 Subject: [PATCH 16/17] Cleanup --- .../engine/loader/FlutterLoaderTest.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 24d5f9809f803..3c96dded9df93 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -105,25 +105,9 @@ public void itReportsFpsToVsyncWaiterAndroidM() { FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); Context appContextSpy = spy(RuntimeEnvironment.application); - VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0f)); assertFalse(flutterLoader.initialized()); flutterLoader.startInitialization(appContextSpy); verify(appContextSpy, never()).getSystemService(anyString()); - verify(vsyncSpy, times(1)).init(); - } - - @Test - @TargetApi(22) - @Config(sdk = 22) - public void itReportsFpsToVsyncWaiterLegacy() { - FlutterJNI mockFlutterJNI = mock(FlutterJNI.class); - FlutterLoader flutterLoader = new FlutterLoader(mockFlutterJNI); - - VsyncWaiter vsyncSpy = spy(VsyncWaiter.getInstance(60.0f)); - - assertFalse(flutterLoader.initialized()); - flutterLoader.startInitialization(RuntimeEnvironment.application); - verify(vsyncSpy, times(1)).init(); } } From 8b9ccd1df8ee6266da4a46a64b992b20e513e36a Mon Sep 17 00:00:00 2001 From: Gary Qian Date: Thu, 23 Sep 2021 13:19:57 -0700 Subject: [PATCH 17/17] Cleanup --- .../io/flutter/embedding/engine/loader/FlutterLoaderTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java index 3c96dded9df93..854a23182f7bb 100644 --- a/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java +++ b/shell/platform/android/test/io/flutter/embedding/engine/loader/FlutterLoaderTest.java @@ -22,7 +22,6 @@ import android.app.ActivityManager; import android.content.Context; import io.flutter.embedding.engine.FlutterJNI; -import io.flutter.view.VsyncWaiter; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable;