summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2019-03-29 09:36:46 +0000
committerMichael Meeks <michael.meeks@collabora.com>2019-03-29 09:37:28 +0000
commitcadcc6e166d4b69b03e4baa40f6184f9b27ffaf2 (patch)
tree83c1ad1a95c92d8af99bacf2d7f16e8962e2606d /scripts
parente2f48faf1441d88e545ff87b42a90a14bfcc04ac (diff)
perftrace: start to annotate common spans.
Change-Id: I90e9939ddc7dedfb24fd608f13ea31a2863ebe3e
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/perftrace.pl63
1 files changed, 56 insertions, 7 deletions
diff --git a/scripts/perftrace.pl b/scripts/perftrace.pl
index 90fe06105..d050d9fe3 100755
--- a/scripts/perftrace.pl
+++ b/scripts/perftrace.pl
@@ -18,29 +18,78 @@ my @events;
sub escape($)
{
my $str = shift;
+ $str =~ s/\\/\\\\/g;
$str =~ s/\$/\\\$/g;
$str =~ s/\'/\\'/g;
$str =~ s/\"/\\"/g;
+ $str =~ s/\&/&amp;/g;
+ $str =~ s/\#/&#35;/g;
+ $str =~ s/\>/&gt;/g;
+ $str =~ s/\</&lt;/g;
+ $str =~ s/[\r\n]+/\\n/g;
return $str;
}
+# Delimit spans of time:
+my @pairs = (
+ { type => 'INF',
+ emitter => 'loolwsd',
+ start => 'Initializing wsd.\.*',
+ end => 'Listening to prisoner connections.*' },
+ { type => 'INF',
+ emitter => 'forkit',
+ start => 'Initializing frk.\.*',
+ end => 'ForKit process is ready.*'
+ }
+);
+my %pair_starts;
+
sub consume($$$$$)
{
my ($time, $emitter, $type, $message, $line) = @_;
+ # print STDERR "$emitter, $type, $time, $message, $line\n";
+
+ # accumulate all threads / processes
if (!defined $emitters{$emitter}) {
$emitters{$emitter} = (scalar keys %emitters) + 1;
}
- return if ($type eq 'TRC' || $type eq 'DBG' || $type eq 'ERR');
+ my $handled = 0;
+ foreach my $match (@pairs) {
+ next if ($type ne $match->{type});
+ next if (!($emitter =~ m/$match->{emitter}/));
+
+ my $start = $match->{start};
+ my $end = $match->{end};
+ my $key = $type.$emitter.$start;
+ if ($message =~ m/$start/) {
+ defined $pair_starts{$key} && die "event $start ($end) starts and fails to finish";
+ $pair_starts{$key} = $time;
+ last;
+ } elsif ($message =~ m/$end/) {
+ defined $pair_starts{$key} || die "event $start ($end) ends but failed to start";
+
+ my $id = (scalar @events) + 1;
+
+ my $content_e = escape($start);
+ my $title_e = escape($line);
+ my $start_time = $pair_starts{$key};
+ my $end_time = $time;
+ push @events, "{id: $id, group: $emitters{$emitter}, ".
+ "start: new Date('$log_date $start_time'), ".
+ "end: new Date('$log_date $end_time'), ".
+ "content: '$content_e', title: '$title_e'}";
+ last;
+ }
+ }
+ my $content_e = escape($message. " " . $line);
my $id = (scalar @events) + 1;
- # omitted 'end' - should really synthesize more cleverly here. title: '$message_e'
- my $message_e = escape($message);
- my $line_e = escape($line);
- push @events, "{id: $id, group: $emitters{$emitter}, start: new Date('$log_date $time'), content: '$line_e'}";
-
-# print STDERR "$emitter, $type, $time, $message, $line\n";
+ push @events, "{id: $id, group: $emitters{$emitter}, ".
+ "start: new Date('$log_date $time'), ".
+ "end: new Date('$log_date $time)') + new Date(1), ".
+ "content: '$content_e', title: ''}";
}
sub emit()