change stack size test to test arm device (#75814)

This commit is contained in:
chunhtai 2021-02-17 12:46:03 -08:00 committed by GitHub
parent a3dd5aeaad
commit 815976a8e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 9 deletions

View File

@ -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', <String>['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<ffi.Void> region = mmap(ffi.nullptr, kMemorySize, kProtRead | kProtWrite,
@ -64,10 +64,10 @@ final GetStackPointerCallback getStackPointer = () {
region.cast<ffi.Uint8>().asTypedList(kMemorySize).setAll(
kMemoryStartingIndex,
<int>[
// "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
]
);

View File

@ -7,6 +7,6 @@ import 'package:flutter_devicelab/framework/adb.dart';
import 'package:flutter_devicelab/framework/framework.dart';
Future<void> main() async {
deviceOperatingSystem = DeviceOperatingSystem.androidArm64;
deviceOperatingSystem = DeviceOperatingSystem.androidArm;
await task(createStackSizeTest());
}

View File

@ -52,7 +52,7 @@ String _findMatchId(List<String> 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<bool> isArm() async {
final String cpuInfo = await shellEval('getprop', const <String>['ro.product.cpu.abi']);
return cpuInfo.contains('armeabi');
}
Future<void> _updateDeviceInfo() async {
String info;
try {

View File

@ -503,6 +503,15 @@ class StartupTest {
]);
applicationBinaryPath = '$testDirectory/build/app/outputs/flutter-apk/app-profile.apk';
break;
case DeviceOperatingSystem.androidArm:
await flutter('build', options: <String>[
'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: <String>[
'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;