diff --git a/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart b/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart index 0bb4853fb40..971610fd353 100644 --- a/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart +++ b/dev/benchmarks/macrobenchmarks/lib/src/stack_size.dart @@ -45,12 +45,12 @@ const int kExitCodeSuccess = 0; final GetStackPointerCallback getStackPointer = () { // Makes sure we are running on an Android arm64 device. if (!io.Platform.isAndroid) - throw 'This benchmark test can only be run on Android arm64 devices.'; + throw 'This benchmark test can only be run on Android arm devices.'; final io.ProcessResult result = io.Process.runSync('getprop', ['ro.product.cpu.abi']); if (result.exitCode != 0) throw 'Failed to retrieve CPU information.'; - if (!result.stdout.toString().contains('arm64')) - throw 'This benchmark test can only be run on Android arm64 devices.'; + if (!result.stdout.toString().contains('armeabi')) + throw 'This benchmark test can only be run on Android arm devices.'; // Creates a block of memory to store the assembly code. final ffi.Pointer region = mmap(ffi.nullptr, kMemorySize, kProtRead | kProtWrite, @@ -64,10 +64,10 @@ final GetStackPointerCallback getStackPointer = () { region.cast().asTypedList(kMemorySize).setAll( kMemoryStartingIndex, [ - // "mov x0, sp" in machine code: E0030091. - 0xe0, 0x03, 0x00, 0x91, - // "ret" in machine code: C0035FD6. - 0xc0, 0x03, 0x5f, 0xd6 + // "mov r0, sp" in machine code: 0D00A0E1. + 0x0d, 0x00, 0xa0, 0xe1, + // "bx lr" in machine code: 1EFF2FE1. + 0x1e, 0xff, 0x2f, 0xe1 ] ); diff --git a/dev/devicelab/bin/tasks/android_stack_size_test.dart b/dev/devicelab/bin/tasks/android_stack_size_test.dart index 9610a9347cf..df0744baa7f 100644 --- a/dev/devicelab/bin/tasks/android_stack_size_test.dart +++ b/dev/devicelab/bin/tasks/android_stack_size_test.dart @@ -7,6 +7,6 @@ import 'package:flutter_devicelab/framework/adb.dart'; import 'package:flutter_devicelab/framework/framework.dart'; Future main() async { - deviceOperatingSystem = DeviceOperatingSystem.androidArm64; + deviceOperatingSystem = DeviceOperatingSystem.androidArm; await task(createStackSizeTest()); } diff --git a/dev/devicelab/lib/framework/adb.dart b/dev/devicelab/lib/framework/adb.dart index 841f7ff03df..4bed4c5fd94 100644 --- a/dev/devicelab/lib/framework/adb.dart +++ b/dev/devicelab/lib/framework/adb.dart @@ -52,7 +52,7 @@ String _findMatchId(List idList, String idPattern) { DeviceDiscovery get devices => DeviceDiscovery(); /// Device operating system the test is configured to test. -enum DeviceOperatingSystem { android, androidArm64 ,ios, fuchsia, fake } +enum DeviceOperatingSystem { android, androidArm, androidArm64 ,ios, fuchsia, fake } /// Device OS to test on. DeviceOperatingSystem deviceOperatingSystem = DeviceOperatingSystem.android; @@ -63,6 +63,8 @@ abstract class DeviceDiscovery { switch (deviceOperatingSystem) { case DeviceOperatingSystem.android: return AndroidDeviceDiscovery(); + case DeviceOperatingSystem.androidArm: + return AndroidDeviceDiscovery(cpu: _AndroidCPU.arm); case DeviceOperatingSystem.androidArm64: return AndroidDeviceDiscovery(cpu: _AndroidCPU.arm64); case DeviceOperatingSystem.ios: @@ -158,6 +160,7 @@ abstract class Device { } enum _AndroidCPU { + arm, arm64, } @@ -199,6 +202,8 @@ class AndroidDeviceDiscovery implements DeviceDiscovery { switch (cpu) { case _AndroidCPU.arm64: return device.isArm64(); + case _AndroidCPU.arm: + return device.isArm(); } return true; } @@ -486,6 +491,11 @@ class AndroidDevice extends Device { return cpuInfo.contains('arm64'); } + Future isArm() async { + final String cpuInfo = await shellEval('getprop', const ['ro.product.cpu.abi']); + return cpuInfo.contains('armeabi'); + } + Future _updateDeviceInfo() async { String info; try { diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart index b47b0b16460..e0092a44cf4 100644 --- a/dev/devicelab/lib/tasks/perf_tests.dart +++ b/dev/devicelab/lib/tasks/perf_tests.dart @@ -503,6 +503,15 @@ class StartupTest { ]); applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk'; break; + case DeviceOperatingSystem.androidArm: + await flutter('build', options: [ + 'apk', + '-v', + '--profile', + '--target-platform=android-arm', + ]); + applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk'; + break; case DeviceOperatingSystem.androidArm64: await flutter('build', options: [ 'apk', @@ -1031,6 +1040,7 @@ class CompileTest { metrics.addAll(await getSizesFromIosApp(appPath)); break; case DeviceOperatingSystem.android: + case DeviceOperatingSystem.androidArm: options.insert(0, 'apk'); options.add('--target-platform=android-arm'); options.add('--tree-shake-icons'); @@ -1081,6 +1091,7 @@ class CompileTest { options.insert(0, 'ios'); break; case DeviceOperatingSystem.android: + case DeviceOperatingSystem.androidArm: options.insert(0, 'apk'); options.add('--target-platform=android-arm'); break;