#!/usr/bin/perl
# Copyright Mel Gorman 2013
use strict;

my $line;
my %unique_event_counts;

my ($process, $function, $event);
my ($stall_details, $trace, $first_trace, $reading_trace);
while ($line = <>) {
	# Watch for the beginning of a new stack trace
	if ($line =~ /^Name:/ || $line =~ /^time:/) {

		if ($trace ne "") {
			# Record the last event
			$unique_event_counts{$trace}++;
		}

		# Start the next event
		$reading_trace = 0;

		$first_trace = "";
		$trace = "";
	}

	# If we have reached a trace, blindly read it
	if ($reading_trace) {
		$trace .= $line;
		if ($first_trace eq "") {
			$first_trace = $line;
		}
		next;
	}

	if ($line =~ /^\[</) {
		$reading_trace = 1;
		next;
	}
}

foreach my $trace (sort {$unique_event_counts{$b} <=> $unique_event_counts{$a}} keys %unique_event_counts) {
	printf "Event count:                %8d\n", $unique_event_counts{$trace};
	print "$trace\n";
}
