A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 104 lines 2.9 kB view raw
1#!/usr/bin/perl 2sub error { 3 print("Error: @_\n"); 4 exit(1); 5} 6sub usage { 7 if (@_) { 8 print STDERR ("Error: @_\n"); 9 } 10 print STDERR ("USAGE:\n"); 11 print STDERR ("$0 file1 file2 [showcalldiff]\n"); 12 print STDERR 13 ("\tfile[12] output from profile_reader.pl to compare\n"); 14 print STDERR 15 ("\tshowcalldiff show the percent change in calls instead of ticks\n"); 16 exit(1); 17} 18if ($ARGV[0] =~ m/-(h|help|-help)/) { 19 usage(); 20} 21if (@ARGV < 2) { 22 usage("Requires at least 2 arguments"); 23} 24open(FILE1,shift) || error("Couldn't open file1"); 25my @file1 = <FILE1>; 26close(FILE1); 27open(FILE2,shift) || error("Couldn't open file2"); 28my @file2 = <FILE2>; 29close(FILE2); 30my $showcalldiff = shift; 31my %calls1; 32my %calls2; 33my @calls = (\%calls1,\%calls2); 34my $start = 0; 35my @files = (\@file1,\@file2); 36my @allcalls = (0,0); 37my @allticks = (0,0); 38for ( $i=0; $i <= $#files; $i++ ) { 39 my $file = $files[$i]; 40 foreach $line(@$file) { 41 chomp($line); 42 if ( $line =~ m/By calls/ ) { 43 $start = 1; 44 next; 45 } 46 if ( $line =~ m/By ticks/ ) { 47 $start = 0; 48 last; 49 } 50 if ( $start == 1) { 51 my @line = split(/[[:space:]]+/,$line); 52 $allcalls[$i] += $line[1]; 53 $allticks[$i] += $line[3]; 54 $calls[$i]{$line[5]} = [($line[1],$line[3])]; 55 } 56 } 57} 58printf("File one calls: %08ld, ticks: %08ld\n",$allcalls[0],$allticks[0]); 59printf("File two calls: %08ld, ticks: %08ld\n",$allcalls[1],$allticks[1]); 60printf("Percent change: %+7.2f%%, ticks: %+7.2f%%\n", 61 ($allcalls[1]-$allcalls[0])/$allcalls[0]*100, 62 ($allticks[1]-$allticks[0])/$allticks[0]*100); 63my @allkeys = keys(%calls1); 64push(@allkeys,keys(%calls2)); 65my %u = (); 66my @keys = grep {defined} map { 67 if (exists $u{$_}) { undef; } else { $u{$_}=undef;$_; } 68} @allkeys; 69undef %u; 70my %byticks; 71my %bycalls; 72foreach $key(@keys) { 73 my $values1 = $calls1{$key}; 74 my $values2 = $calls2{$key}; 75 my $calldiff = @$values2[0]-@$values1[0]; 76 my $totalcalls = @$values2[0]+@$values1[0]; 77 my $tickdiff = @$values2[1]-@$values1[1]; 78 my $totalticks = @$values2[1]+@$values1[1]; 79 my $pdiff; 80 my $result; 81 if ($showcalldiff) { 82 $pdiff = $calldiff/(@$values1[0]>0?@$values1[0]:1)*100; 83 $result = sprintf("%+7.2f%% Calls: %+09d Symbol: %s$key\n", 84 $pdiff, $calldiff, 85 (exists $calls1{$key} && exists $calls2{$key})?"":"LONE "); 86 } else { 87 $pdiff = $tickdiff/(@$values1[1]>0?@$values1[1]:1)*100; 88 $result = sprintf("%+7.2f%% Ticks: %+09d Symbol: %s$key\n", 89 $pdiff, $tickdiff, 90 (exists $calls1{$key} && exists $calls2{$key})?"":"LONE "); 91 } 92 $bycalls{sprintf("%08X$key",$totalcalls)} = $result; 93 $byticks{sprintf("%08X$key",$totalticks)} = $result; 94} 95my @calls = sort(keys(%bycalls)); 96print("By calls\n"); 97foreach $call(@calls) { 98 print($bycalls{$call}); 99} 100my @ticks = sort(keys(%byticks)); 101print("By ticks\n"); 102foreach $tick(@ticks) { 103 print($byticks{$tick}); 104}