diff --git a/agent/lib/src/agent.dart b/agent/lib/src/agent.dart index fe60df0108..f0b704c90e 100644 --- a/agent/lib/src/agent.dart +++ b/agent/lib/src/agent.dart @@ -16,6 +16,7 @@ import 'package:cocoon_agent/src/gallery.dart'; import 'package:cocoon_agent/src/golem.dart'; import 'package:cocoon_agent/src/perf_tests.dart'; import 'package:cocoon_agent/src/refresh.dart'; +import 'package:cocoon_agent/src/hot_dev_cycle.dart'; import 'package:cocoon_agent/src/size_tests.dart'; import 'package:cocoon_agent/src/utils.dart'; @@ -95,6 +96,7 @@ class Agent { createAnalyzerCliTest(sdk: dartSdkVersion, commit: task.revision, timestamp: revisionTimestamp), createAnalyzerServerTest(sdk: dartSdkVersion, commit: task.revision, timestamp: revisionTimestamp), createRefreshTest(commit: task.revision, timestamp: revisionTimestamp), + createHotDevCycleTest(commit: task.revision, timestamp: revisionTimestamp), ]; return allTasks.firstWhere( diff --git a/agent/lib/src/golem.dart b/agent/lib/src/golem.dart index e86b706f6b..d6450b3f8e 100644 --- a/agent/lib/src/golem.dart +++ b/agent/lib/src/golem.dart @@ -33,6 +33,9 @@ const registeredBenchmarkNames = const [ 'flutter_gallery__build.aot_snapshot_size_instructions', 'flutter_gallery__build.aot_snapshot_size_rodata', 'flutter_gallery__build.aot_snapshot_size_total', + + 'hot_mode_dev_cycle__benchmark.hotReloadMillisecondsToFrame', + 'hot_mode_dev_cycle__benchmark.hotRestartMillisecondsToFrame', ]; /// Computes a golem-compliant revision number. diff --git a/agent/lib/src/hot_dev_cycle.dart b/agent/lib/src/hot_dev_cycle.dart new file mode 100644 index 0000000000..2081eccd9a --- /dev/null +++ b/agent/lib/src/hot_dev_cycle.dart @@ -0,0 +1,57 @@ +// Copyright (c) 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:async'; +import 'dart:io'; + +import 'package:path/path.dart' as path; + +import 'adb.dart'; +import 'benchmarks.dart'; +import 'framework.dart'; +import 'utils.dart'; + +Task createHotDevCycleTest({ + String commit, + DateTime timestamp +}) => new HotDevCycleTask(commit, timestamp); + +class HotDevCycleTask extends Task { + HotDevCycleTask(this.commit, this.timestamp) + : super('hot_mode_dev_cycle__benchmark') { + assert(commit != null); + assert(timestamp != null); + } + + final String commit; + final DateTime timestamp; + + Directory get appDir => + dir(path.join(config.flutterDirectory.path, + 'examples/flutter_gallery')); + + File get benchmarkFile => + file(path.join(appDir.path, 'hot_benchmark.json')); + + final List benchmarkScoreKeys = [ + 'hotReloadMillisecondsToFrame', + 'hotRestartMillisecondsToFrame' + ]; + + @override + Future run() async { + Adb device = await adb(); + device.unlock(); + rm(benchmarkFile); + await inDirectory(appDir, () async { + return await flutter( + 'run', + options: ['--hot', '-d', device.deviceId, '--benchmark'], + canFail: false + ); + }); + return new TaskResultData.fromFile(benchmarkFile, + benchmarkScoreKeys: benchmarkScoreKeys); + } +} diff --git a/commands/refresh_github_commits.go b/commands/refresh_github_commits.go index d030db84f5..89a26a15f0 100644 --- a/commands/refresh_github_commits.go +++ b/commands/refresh_github_commits.go @@ -156,6 +156,8 @@ func createTaskList(createTimestamp int64, checklistKey *datastore.Key) []*db.Ta makeTask("devicelab", "analyzer_cli__analysis_time", []string{"has-android-device"}), makeTask("devicelab", "analyzer_server__analysis_time", []string{"has-android-device"}), + makeTask("devicelab", "hot_mode_dev_cycle__benchmark", []string{"has-android-device"}), + // iOS makeTask("devicelab_ios", "complex_layout_scroll_perf_ios__timeline_summary", []string{"has-ios-device"}), makeTask("devicelab_ios", "flutter_gallery_ios__start_up", []string{"has-ios-device"}),