# Describes the tasks we run in the continuous integration (CI) environment.
#
# Cocoon[1] uses this file to generate a checklist of tasks to be performed for
# every master commit.
#
# [1] github.com/flutter/cocoon

# CI tasks.
#
# Each key in this dictionary is the unique name of a task, which also
# corresponds to a file in the "bin/" directory that the task runner will run.
#
# Due to historic reasons that may go away at some point, the suffix of the task
# name is significant. It is used by the dashboard to pick the right HTML
# template to display the results in a card. If you use a known name suffix also
# make sure that your task outputs data in the expected format for that card.
#
# Known suffixes:
#
# __analysis_time:
#     Analyzer performance benchmarks.
# __refresh_time:
#     Edit refresh cycle benchmarks.
# __start_up:
#     Application startup speed benchmarks.
# __timeline_summary:
#     Per-frame timings and missed/average/total counts.
# __transition_perf:
#     Flutter Gallery app transitions benchmark.
# __size:
#     Application size benchmarks.

tasks:
  # Deviceless tests

  # TODO: make these not require "has-android-device"; it is only there to
  #       ensure we have the Android SDK.

  flutter_gallery__build:
    description: >
      Collects various performance metrics from AOT builds of the Flutter
      Gallery.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout__build:
    description: >
      Collects various performance metrics from AOT builds of the Complex
      Layout sample app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  basic_material_app__size:
    description: >
      Measures the APK size of a basic material app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  analyzer_cli__analysis_time:
    description: >
      Measures the speed of analyzing Flutter itself in batch mode.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  analyzer_server__analysis_time:
    description: >
      Measures the speed of analyzing Flutter itself in server mode.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  technical_debt__cost:
    description: >
      Estimates our technical debt (TODOs, analyzer ignores, etc).
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  # Android on-device tests

  complex_layout_scroll_perf__timeline_summary:
    description: >
      Measures the runtime performance of the Complex Layout sample app on
      Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__start_up:
    description: >
      Measures the startup time of the Flutter Gallery app on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout__start_up:
    description: >
      Measures the startup time of the Complex Layout sample app on Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__transition_perf:
    description: >
      Measures the performance of screen transitions in Flutter Gallery on
      Android.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  hot_mode_dev_cycle__benchmark:
    description: >
      Measures the performance of Dart VM hot patching feature.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  complex_layout_scroll_perf__memory:
    description: >
      Measures memory usage of the scroll performance test.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  hello_world__memory:
    description: >
      Measures starting memory usage of the simplest Flutter app.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__memory_nav:
    description: >
      Measures memory usage after repeated navigation in Gallery.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  flutter_gallery__back_button_memory:
    description: >
      Measures memory usage after Android app suspend and resume.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]

  microbenchmarks:
    description: >
      Runs benchmarks from dev/benchmarks/microbenchmarks.
    stage: devicelab
    required_agent_capabilities: ["has-android-device"]


  # iOS on-device tests

  complex_layout_scroll_perf_ios__timeline_summary:
    description: >
      Measures the runtime performance of the Complex Layout sample app on
      iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  flutter_gallery_ios__start_up:
    description: >
      Measures the startup time of the Flutter Gallery app on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  complex_layout_ios__start_up:
    description: >
      Measures the startup time of the Complex Layout sample app on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  flutter_gallery_ios__transition_perf:
    description: >
      Measures the performance of screen transitions in Flutter Gallery on
      iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  basic_material_app_ios__size:
    description: >
      Measures the IPA size of a basic material app.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]

  microbenchmarks_ios:
    description: >
      Runs benchmarks from dev/benchmarks/microbenchmarks on iOS.
    stage: devicelab_ios
    required_agent_capabilities: ["has-ios-device"]
