Skip to content

Commit c19483f

Browse files
authored
Setup runtime Android sample app AOT/R2R tests (#4808)
1 parent 4a27f61 commit c19483f

File tree

4 files changed

+83
-30
lines changed

4 files changed

+83
-30
lines changed

eng/pipelines/runtime-perf-jobs.yml

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ jobs:
8686
performanceRepoAlias: ${{ parameters.performanceRepoAlias }}
8787
jobParameters: ${{ parameters.jobParameters }}
8888

89-
# run android scenarios - Mono
89+
# run android scenarios - Mono JIT
9090
- template: /eng/pipelines/common/platform-matrix.yml@${{ parameters.runtimeRepoAlias }}
9191
parameters:
9292
jobTemplate: /eng/pipelines/templates/runtime-perf-job.yml@${{ parameters.performanceRepoAlias }}
@@ -96,6 +96,7 @@ jobs:
9696
- windows_x64
9797
jobParameters:
9898
runtimeType: AndroidMono
99+
codeGenType: JIT
99100
projectFile: $(Build.SourcesDirectory)/eng/testing/performance/android_scenarios.proj
100101
runKind: android_scenarios
101102
isScenario: true
@@ -105,7 +106,47 @@ jobs:
105106
${{ each parameter in parameters.jobParameters }}:
106107
${{ parameter.key }}: ${{ parameter.value }}
107108

108-
# run android scenarios - CoreCLR
109+
# run android scenarios - Mono AOT
110+
- template: /eng/pipelines/common/platform-matrix.yml@${{ parameters.runtimeRepoAlias }}
111+
parameters:
112+
jobTemplate: /eng/pipelines/templates/runtime-perf-job.yml@${{ parameters.performanceRepoAlias }}
113+
buildConfig: release
114+
runtimeFlavor: mono
115+
platforms:
116+
- windows_x64
117+
jobParameters:
118+
runtimeType: AndroidMono
119+
codeGenType: AOT
120+
projectFile: $(Build.SourcesDirectory)/eng/testing/performance/android_scenarios.proj
121+
runKind: android_scenarios
122+
isScenario: true
123+
logicalMachine: 'perfpixel4a'
124+
runtimeRepoAlias: ${{ parameters.runtimeRepoAlias }}
125+
performanceRepoAlias: ${{ parameters.performanceRepoAlias }}
126+
${{ each parameter in parameters.jobParameters }}:
127+
${{ parameter.key }}: ${{ parameter.value }}
128+
129+
# run android scenarios - CoreCLR JIT
130+
- template: /eng/pipelines/common/platform-matrix.yml@${{ parameters.runtimeRepoAlias }}
131+
parameters:
132+
jobTemplate: /eng/pipelines/templates/runtime-perf-job.yml@${{ parameters.performanceRepoAlias }}
133+
buildConfig: release
134+
runtimeFlavor: coreclr
135+
platforms:
136+
- windows_x64
137+
jobParameters:
138+
runtimeType: AndroidCoreCLR
139+
codeGenType: JIT
140+
projectFile: $(Build.SourcesDirectory)/eng/testing/performance/android_scenarios.proj
141+
runKind: android_scenarios
142+
isScenario: true
143+
logicalMachine: 'perfpixel4a'
144+
runtimeRepoAlias: ${{ parameters.runtimeRepoAlias }}
145+
performanceRepoAlias: ${{ parameters.performanceRepoAlias }}
146+
${{ each parameter in parameters.jobParameters }}:
147+
${{ parameter.key }}: ${{ parameter.value }}
148+
149+
# run android scenarios - CoreCLR R2R
109150
- template: /eng/pipelines/common/platform-matrix.yml@${{ parameters.runtimeRepoAlias }}
110151
parameters:
111152
jobTemplate: /eng/pipelines/templates/runtime-perf-job.yml@${{ parameters.performanceRepoAlias }}
@@ -115,6 +156,7 @@ jobs:
115156
- windows_x64
116157
jobParameters:
117158
runtimeType: AndroidCoreCLR
159+
codeGenType: R2R
118160
projectFile: $(Build.SourcesDirectory)/eng/testing/performance/android_scenarios.proj
119161
runKind: android_scenarios
120162
isScenario: true

eng/pipelines/templates/runtime-perf-job.yml

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ jobs:
4242
- ${{ format('build_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, 'mono') }}
4343
- ${{ if eq(parameters.runtimeType, 'wasm')}}:
4444
- ${{ format('build_{0}{1}_{2}_{3}_{4}_{5}', 'browser', '', 'wasm', 'linux', parameters.buildConfig, parameters.runtimeType) }}
45-
- ${{ if and(eq(parameters.codeGenType, 'AOT'), ne(parameters.runtimeType, 'wasm'))}}:
45+
- ${{ if and(eq(parameters.codeGenType, 'AOT'), not(in(parameters.runtimeType, 'wasm', 'AndroidMono'))) }}:
4646
- ${{ format('build_{0}{1}_{2}_{3}_{4}', parameters.osGroup, parameters.osSubgroup, parameters.archType, parameters.buildConfig, parameters.codeGenType) }}
4747
- ${{ if eq(parameters.runtimeType, 'AndroidMono')}}:
4848
- ${{ 'build_android_arm64_release_AndroidMono' }}
@@ -128,7 +128,7 @@ jobs:
128128
find $(librariesDownloadDir)/bin/wasm -type d &&
129129
find $(librariesDownloadDir)/bin/wasm -type f -exec chmod 664 {} \;
130130
displayName: "Create wasm directory (Linux)"
131-
- ${{ elseif eq(parameters.codeGenType, 'AOT') }}:
131+
- ${{ elseif and(eq(parameters.codeGenType, 'AOT'), not(eq(parameters.runtimeType, 'AndroidMono'))) }}:
132132
# Download mono AOT
133133
- template: /eng/pipelines/templates/download-artifact-step.yml
134134
parameters:
@@ -153,15 +153,33 @@ jobs:
153153
artifactFileName: 'BuildArtifacts_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_$(buildConfigUpper)_${{ parameters.runtimeType }}$(archiveExtension)'
154154
artifactName: 'BuildArtifacts_${{ parameters.osGroup }}${{ parameters.osSubgroup }}_${{ parameters.archType }}_$(buildConfigUpper)_${{ parameters.runtimeType }}'
155155
displayName: 'Runtime artifacts'
156-
- ${{ elseif eq(parameters.runtimeType, 'AndroidMono')}}:
156+
- ${{ elseif or(eq(parameters.runtimeType, 'AndroidMono'), eq(parameters.runtimeType, 'AndroidCoreCLR'))}}:
157157
# Download artifacts for Android Testing
158158
- template: /eng/pipelines/templates/download-artifact-step.yml
159159
parameters:
160160
unpackFolder: $(builtAppDir)/androidHelloWorld
161161
cleanUnpackFolder: false
162-
artifactFileName: 'AndroidHelloWorldArm64Mono.tar.gz'
163-
artifactName: 'AndroidHelloWorldArm64Mono'
164-
displayName: 'Mono Android HelloWorld'
162+
163+
# AndroidMono
164+
${{ if eq(parameters.runtimeType, 'AndroidMono')}}:
165+
${{ if eq(parameters.codeGenType, 'JIT') }}:
166+
artifactFileName: 'AndroidHelloWorldArm64Mono.tar.gz'
167+
artifactName: 'AndroidHelloWorldArm64Mono'
168+
${{ if eq(parameters.codeGenType, 'AOT') }}:
169+
artifactFileName: 'AndroidHelloWorldArm64MonoAOT.tar.gz'
170+
artifactName: 'AndroidHelloWorldArm64MonoAOT'
171+
172+
# AndroidCoreCLR
173+
${{ if eq(parameters.runtimeType, 'AndroidCoreCLR')}}:
174+
${{ if eq(parameters.codeGenType, 'JIT') }}:
175+
artifactFileName: 'AndroidHelloWorldArm64CoreCLR.tar.gz'
176+
artifactName: 'AndroidHelloWorldArm64CoreCLR'
177+
${{ if eq(parameters.codeGenType, 'R2R') }}:
178+
artifactFileName: 'AndroidHelloWorldArm64CoreCLRR2R.tar.gz'
179+
artifactName: 'AndroidHelloWorldArm64CoreCLRR2R'
180+
181+
displayName: 'Android Sample App'
182+
165183
# Disabled due to not working and needing consistent normal android results. https://github.com/dotnet/performance/issues/4729
166184
# - template: /eng/pipelines/templates/download-artifact-step.yml
167185
# parameters:
@@ -170,15 +188,6 @@ jobs:
170188
# artifactFileName: 'AndroidBDNApk.tar.gz'
171189
# artifactName: 'AndroidBDNApk'
172190
# displayName: 'Mono Android BDN Apk'
173-
- ${{ elseif eq(parameters.runtimeType, 'AndroidCoreCLR')}}:
174-
# Download artifacts for Android Testing
175-
- template: /eng/pipelines/templates/download-artifact-step.yml
176-
parameters:
177-
unpackFolder: $(builtAppDir)/androidHelloWorld
178-
cleanUnpackFolder: false
179-
artifactFileName: 'AndroidHelloWorldArm64CoreCLR.tar.gz'
180-
artifactName: 'AndroidHelloWorldArm64CoreCLR'
181-
displayName: 'CoreCLR Android HelloWorld'
182191
- ${{ elseif or(eq(parameters.runtimeType, 'iOSMono'), eq(parameters.runtimeType, 'iOSNativeAOT')) }}:
183192
# Download iOSMono and Native AOT tests
184193
- template: /eng/pipelines/templates/download-artifact-step.yml

scripts/run_performance_job.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,7 @@ def run_performance_job(args: RunPerformanceJobArgs):
391391
if args.libraries_download_dir is None and not args.performance_repo_ci and args.runtime_repo_dir is not None:
392392
args.libraries_download_dir = os.path.join(args.runtime_repo_dir, "artifacts")
393393

394-
llvm = args.codegen_type.lower() == "aot" and args.runtime_type != "wasm"
395-
android_mono = args.runtime_type == "AndroidMono"
396-
android_coreclr = args.runtime_type == "AndroidCoreCLR"
394+
llvm = args.codegen_type.lower() == "aot" and args.runtime_type != "wasm" and not args.run_kind == "android_scenarios"
397395
ios_mono = args.runtime_type == "iOSMono"
398396
ios_nativeaot = args.runtime_type == "iOSNativeAOT"
399397
mono_aot = False
@@ -531,15 +529,16 @@ def run_performance_job(args: RunPerformanceJobArgs):
531529

532530
runtime_type = ""
533531

534-
if android_mono:
535-
runtime_type = "Mono"
536-
configurations["CompilationMode"] = "JIT"
537-
configurations["RuntimeType"] = str(runtime_type)
538-
539-
if android_coreclr:
540-
runtime_type = "CoreCLR"
541-
configurations["CompilationMode"] = "JIT"
542-
configurations["RuntimeType"] = str(runtime_type)
532+
if args.run_kind == "android_scenarios":
533+
# Mapping runtime_type to runtime_flavor before sending to helix
534+
if args.runtime_type == "AndroidMono":
535+
args.runtime_flavor = "mono"
536+
elif args.runtime_type == "AndroidCoreCLR":
537+
args.runtime_flavor = "coreclr"
538+
else:
539+
raise Exception("Android scenarios only support Mono and CoreCLR runtimes")
540+
configurations["CodegenType"] = str(args.codegen_type)
541+
configurations["RuntimeType"] = str(args.runtime_flavor)
543542

544543
if ios_mono:
545544
runtime_type = "Mono"
@@ -719,7 +718,7 @@ def run_performance_job(args: RunPerformanceJobArgs):
719718
if args.runtime_repo_dir is not None:
720719
args.built_app_dir = args.runtime_repo_dir
721720

722-
if android_mono or android_coreclr:
721+
if args.run_kind == "android_scenarios":
723722
if args.built_app_dir is None:
724723
raise Exception("Built apps directory must be present for Android benchmarks")
725724
getLogger().info("Copying Android apps to payload directory")
@@ -1090,6 +1089,7 @@ def run_performance_job(args: RunPerformanceJobArgs):
10901089
helix_build=args.build_number,
10911090
partition_count=args.partition_count,
10921091
runtime_flavor=args.runtime_flavor or "",
1092+
codegen_type=args.codegen_type,
10931093
hybrid_globalization=args.hybrid_globalization,
10941094
target_csproj=args.target_csproj,
10951095
work_item_command=work_item_command or None,

scripts/send_to_helix.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class PerfSendToHelixArgs:
6767

6868
# Used by scenarios projects
6969
runtime_flavor: Optional[str] = None
70+
codegen_type: Optional[str] = None
7071
hybrid_globalization: Optional[bool] = None
7172
python: Optional[str] = None
7273
affinity: Optional[str] = None
@@ -108,6 +109,7 @@ def set_env_var(name: str, value: Union[str, bool, List[str], timedelta, int, No
108109
set_env_var("Creator", self.creator)
109110
set_env_var("PartitionCount", self.partition_count)
110111
set_env_var("RuntimeFlavor", self.runtime_flavor)
112+
set_env_var("CodegenType", self.codegen_type)
111113
set_env_var("HybridGlobalization", self.hybrid_globalization)
112114
set_env_var("iOSStripSymbols", self.ios_strip_symbols)
113115
set_env_var("iOSLlvmBuild", self.ios_llvm_build)

0 commit comments

Comments
 (0)