# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

{
  'android-devices': {
    'swarming': {
      'dimensions': {
        'android_devices': '1',
      },
    },
  },
  'cores-12': {
    'swarming': {
      'dimensions': {
        'cores': '12',
      }
    }
  },
  'crosshatch': {
    'swarming': {
      'dimensions': {
        'device_type': 'crosshatch',
        'os': 'Android',
      },
    },
  },
  # Hack to use the test-launcher-summary-output flag + emulator folders for gtest-output
  # but it's currently the only way to get the file out of the emulator.
  'fuchsia-gtest-output': {
    'args': [
      '--test-launcher-summary-output=${ISOLATED_OUTDIR}/gtest_output.json',
      '--test-arg=--gtest_output=json:/custom_artifacts/gtest_output.json',
      '--test-arg=--undefok=test_launcher_summary_output'
    ],
  },
  'ios-device-16.7': {
    'swarming': {
      'dimensions': {
        'os': 'iOS-16.7.1',
        'pool': 'chrome.tests',
        'device_status': 'available'
      }
    }
  },
  'ios-device-perf': {
    'swarming': {
      'idempotent': False,
      'dimensions': {
        'os': 'iOS-15.7.8',
        'pool': 'WebRTC',
        'id': 'mac-254-e504',
        'device_status': 'available'
      },
    },
  },
  'limited-capacity': {
    # Sometimes there are multiple tests that can be run only on one machine.
    # We need to increase timeouts so the tests dont expire before the machine is freed.
    # Using 3h expiration timeout to align with `timeout-3h` mixin used for per tests.
    'swarming': {
      'expiration': 10800,
    },
  },
  'mac-m1-cpu': {
    'swarming': {
      'dimensions': {
        'cpu': 'arm64-64-Apple_M1',
      }
    }
  },
  'mac11': {
    'swarming': {
      'dimensions': {
        'os': 'Mac-11'
      }
    }
  },
  'linux-bionic': {
    'swarming': {
      'dimensions': {
        'os': 'Ubuntu-18.04',
      }
    }
  },
  'perf-output': {
    'args': [
      '--isolated-script-test-perf-output=${ISOLATED_OUTDIR}/perftest-output.pb',
    ],
  },
  'perf-pool': {
    'swarming': {
      # Perf tests are marked as not idempotent, which means they're re-run even
      # if they did not change this build. This will give the dashboard some
      # more variance data to work with.
      'idempotent': False,
      'dimensions': {
        'pool': 'WebRTC-perf',
        'gce': '0',
      },
    },
  },
  'perf-pool-vm': {
    'swarming': {
      'idempotent': False,
      'dimensions': {
        'pool': 'WebRTC-perf',
        'gce': '1',
      },
    },
  },
  'perf-webrtc-perf-tests': {
    'merge': {
      'script': '//tools_webrtc/perf/process_perf_results.py',
      'args': ['--test-suite', 'webrtc_perf_tests'],
    },
    'args': ['--nologs']
  },
  'perf-video-codec-perf-tests': {
    'merge': {
      'script': '//tools_webrtc/perf/process_perf_results.py',
      'args': ['--test-suite', 'video_codec_perf_tests'],
    },
  },
  'quick-perf-tests': {
    'args': [
      '--webrtc_quick_perf_test',
      '--nologs',
    ],
  },
  'redfin': {
    'swarming': {
      'dimensions': {
        'device_type': 'redfin',
        'os': 'Android'
      }
    }
  },
  'resultdb-gtest-json-format': {
    'args': [
      '--gtest_output=json:${ISOLATED_OUTDIR}/gtest_output.json',
    ],
    'resultdb': {
      'result_format': 'gtest_json',
      'result_file': '${ISOLATED_OUTDIR}/gtest_output.json',
    },
  },
  'resultdb-json-format': {
    'resultdb': {
      'result_format': 'json'
    }
  },
  'shards-2': {
    'swarming': {
      'shards': 2,
    },
  },
  'shards-4': {
    'swarming': {
      'shards': 4,
    },
  },
  'shards-6': {
    'swarming': {
      'shards': 6,
    },
  },
  'shards-8': {
    'swarming': {
      'shards': 8,
    },
  },
  'timeout-2h': {
    'swarming': {
      'hard_timeout': 7200,
      'io_timeout': 7200,
    },
  },
  'timeout-3h': {
    'swarming': {
      'hard_timeout': 10800,
      'io_timeout': 10800,
    },
  },
  'webrtc-xctest': {
    'args': [
      '--xctest',
    ],
  },
  'xcode_14_main': {
    'args': ['--xcode-build-version', '14c18'],
    'swarming': {
      'dimensions': {
        'caches': 'xcode_ios_14c18',
      },
      'named_caches': [{
        'name': 'xcode_ios_14c18',
        'path': 'Xcode.app'
      }]
    }
  },
}
