mirror of
https://github.com/fish-shell/fish-shell.git
synced 2026-04-21 17:21:14 -03:00
This script was broken by the changes to profiling output in
9d904e1113.
The new version works with both the old and new profiling output, even when
mixed. The script output has been adjusted to match the new profiling style
better.
This also adds basic error handling for situations where the script is invoked
incorrectly and makes the file executable.
53 lines
1.4 KiB
Fish
Executable File
53 lines
1.4 KiB
Fish
Executable File
#!/usr/bin/env fish
|
|
#
|
|
# Compares the output of two fish profile runs and emits the time difference between
|
|
# the first and second set of results.
|
|
#
|
|
# Usage: ./diff_profiles.fish profile1.log profile2.log > profile_diff.log
|
|
|
|
if test (count $argv) -ne 2;
|
|
echo "Incorrect number of arguments."
|
|
echo "Usage: "(status filename)" profile1.log profile2.log"
|
|
exit 1
|
|
end
|
|
|
|
set -l profile1 (cat $argv[1])
|
|
set -l profile2 (cat $argv[2])
|
|
|
|
set -l line_no 0
|
|
while set -l next_line_no (math $line_no + 1) && set -q profile1[$next_line_no] && set -q profile2[$next_line_no]
|
|
set line_no $next_line_no
|
|
|
|
set -l line1 $profile1[$line_no]
|
|
set -l line2 $profile2[$line_no]
|
|
|
|
if not string match -qr '^\s*\d+\s+\d+' $line1
|
|
echo $line1
|
|
continue
|
|
end
|
|
|
|
set -l results1 (string match -r '^\s*(\d+)\s+(\d+)\s+(.*)' $line1)
|
|
set -l results2 (string match -r '^\s*(\d+)\s+(\d+)\s+(.*)' $line2)
|
|
|
|
# times from both files
|
|
set -l time1 $results1[2..3]
|
|
set -l time2 $results2[2..3]
|
|
|
|
# leftover from both files
|
|
set -l remainder1 $results1[4]
|
|
set -l remainder2 $results2[4]
|
|
|
|
if not string match -q -- $remainder1 $remainder2
|
|
echo Mismatch on line $line_no:
|
|
echo - $remainder1
|
|
echo + $remainder2
|
|
exit 1
|
|
end
|
|
|
|
set -l diff
|
|
set diff[1] (math $time1[1] - $time2[1])
|
|
set diff[2] (math $time1[2] - $time2[2])
|
|
|
|
printf '%10d %10d %s\n' $diff[1] $diff[2] $remainder1
|
|
end
|