// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:io'; import 'package:flutter_devicelab/framework/adb.dart'; import '../framework/framework.dart'; import '../framework/ios.dart'; import '../framework/utils.dart'; TaskFunction createBasicMaterialAppSizeTest() { return () async { const String sampleAppName = 'sample_flutter_app'; final Directory sampleDir = dir('${Directory.systemTemp.path}/$sampleAppName'); if (await sampleDir.exists()) rmTree(sampleDir); final Stopwatch watch = new Stopwatch(); int releaseSizeInBytes; await inDirectory(Directory.systemTemp, () async { await flutter('create', options: [sampleAppName]); if (!(await sampleDir.exists())) throw 'Failed to create sample Flutter app in ${sampleDir.path}'; await inDirectory(sampleDir, () async { await flutter('packages', options: ['get']); await flutter('build', options: ['clean']); if (deviceOperatingSystem == DeviceOperatingSystem.ios) { await prepareProvisioningCertificates(sampleDir.path); watch.start(); await flutter('build', options: ['ios', '--release']); watch.stop(); // IPAs are created manually AFAICT await exec('tar', ['-zcf', 'build/app.ipa', 'build/ios/Release-iphoneos/Runner.app/']); releaseSizeInBytes = await file('${sampleDir.path}/build/app.ipa').length(); } else { watch.start(); await flutter('build', options: ['apk', '--release']); watch.stop(); releaseSizeInBytes = await file('${sampleDir.path}/build/app/outputs/apk/app-release.apk').length(); } }); }); return new TaskResult.success( { 'release_size_in_bytes': releaseSizeInBytes, 'build_time_millis': watch.elapsedMilliseconds, }, benchmarkScoreKeys: ['release_size_in_bytes', 'build_time_millis']); }; }