eng/scripts/Test-ModulePerformance.ps1 (84 lines of code) (raw):

#!/bin/env pwsh #Requires -Version 7 param( [string] $Command = 'azmcp tools list' ) . "$PSScriptRoot/../common/scripts/common.ps1" $combinations = @() @($false, $true) | ForEach-Object { $Trimmed = $_ @($false, $true) | ForEach-Object { $ReadyToRun = $_ $combinations += @{ Name = "$($Trimmed ? 'aot' : 'no-aot')/$($ReadyToRun ? 'r2r' : 'no-r2r')" Trimmed = $Trimmed ReadyToRun = $ReadyToRun } } } function SaveResults() { $csv = @("Trimmed,ReadyToRun,Compilation,Installation,First Run,Average Run,Tgz Size,Package Size") foreach($combination in $combinations) { $result = $results[$combination.Name] $compilation = ($result | Measure-Object -Property Compilation -Average).Average $installation = ($result | Measure-Object -Property Installation -Average).Average $firstRun = ($result | Measure-Object -Property FirstRun -Average).Average $averageRun = ($result | Measure-Object -Property AverageRun -Average).Average $tgzSize = ($result | Measure-Object -Property TgzSize -Average).Average $packageSize = ($result | Measure-Object -Property PackageSize -Average).Average $csv += "$($combination.Trimmed),$($combination.ReadyToRun),$compilation,$installation,$firstRun,$averageRun,$tgzSize,$packageSize" } $csv | Out-File -FilePath .work/results.csv -Encoding utf8 -Force } $results = @{}; Push-Location $RepoRoot try { $version = & "./eng/scripts/Get-Version.ps1" $rid = [System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier $nodeRid = $rid.Replace('win', 'win32').Replace('osx', 'darwin') foreach($combination in $combinations) { $results[$combination.Name] = @() Write-Host "Building '$($combination.Name)'" Write-Host "-------------------------------" Remove-Item -Path .work -Recurse -Force -ErrorAction SilentlyContinue -ProgressAction SilentlyContinue Remove-Item -Path .dist -Recurse -Force -ErrorAction SilentlyContinue -ProgressAction SilentlyContinue Remove-Item -Path ./src/bin -Recurse -Force -ErrorAction SilentlyContinue -ProgressAction SilentlyContinue Remove-Item -Path ./src/obj -Recurse -Force -ErrorAction SilentlyContinue -ProgressAction SilentlyContinue $start = Get-Date ./eng/scripts/Build-Local.ps1 -SelfContained:$true -Trimmed:$combination.Trimmed -ReadyToRun:$combination.ReadyToRun -UsePaths:$true -AllPlatforms:$false $compilation = ((Get-Date) - $start).TotalMilliseconds for($i = 1; $i -le 3; $i++) { Write-Host "Running '$($combination.Name)' - Round $i" Write-Host "----------------------------------------" npm uninstall -g azmcp | Out-Null $start = Get-Date Write-Host "> npm install -g .dist/wrapper/azure-mcp-$version.tgz" npm install -g ".dist/wrapper/azure-mcp-$version.tgz" | Out-Null $installation = ((Get-Date) - $start).TotalMilliseconds $runs = @() Write-Host "Running ..." foreach($x in 1..6) { $start = Get-Date Invoke-Expression $Command | Out-Null if ($LASTEXITCODE -ne 0) { Write-Warning "$($combination.Name) failed with exit code $LASTEXITCODE" } $runs += ((Get-Date) - $start).TotalMilliseconds } $tgzSize = (Get-Item -Path ".dist/platform/azure-mcp-$nodeRid-$version.tgz").Length / 1MB $packageSize = (Get-ChildItem -Path ".work/platform/$rid" -File -Recurse | Measure-Object -Property Length -Sum).Sum / 1MB $results[$combination.Name] += @{ Compilation = $compilation Installation = $installation FirstRun = $runs[0] AverageRun = ($runs | Select-Object -Skip 3 | Measure-Object -Average).Average TgzSize = $tgzSize PackageSize = $packageSize } } SaveResults } } finally { Pop-Location }