package Test2::Plugin::Times; use strict; use warnings; use Test2::Util::Times qw/render_bench render_duration/; use Test2::API qw{ test2_add_callback_exit }; use Time::HiRes qw/time/; our $VERSION = '0.000162'; my $ADDED_HOOK = 0; my $START; sub import { return if $ADDED_HOOK++; $START = time; test2_add_callback_exit(\&send_time_event); } sub send_time_event { my ($ctx, $real, $new) = @_; my $stop = time; my @times = times(); my $summary = render_bench($START, $stop, @times); my $duration = render_duration($START, $stop); my $e = $ctx->send_ev2( about => {package => __PACKAGE__, details => $summary}, info => [{tag => 'TIME', details => $summary}], times => { details => $summary, start => $START, stop => $stop, user => $times[0], sys => $times[1], cuser => $times[2], csys => $times[3], }, harness_job_fields => [ {name => "time_duration", details => $duration}, {name => "time_user", details => $times[0]}, {name => "time_sys", details => $times[1]}, {name => "time_cuser", details => $times[2]}, {name => "time_csys", details => $times[3]}, ], ); } 1; __END__ =pod =encoding UTF-8 =head1 NAME Test2::Plugin::Times - Output timing data at the end of the test. =head1 CAVEAT It is important to note that this timing data does not include global destruction. This data is only collected up until the point done_testing() is called. If your program takes time for END blocks, garbage collection, and similar, then this timing data will fall short of reality. =head1 DESCRIPTION This plugin will output a diagnostics message at the end of testing that tells you how much time elapsed, and how hard the system worked on the test. This will produce a string like one of these (Note these numbers are completely made up). I 0.12345s on wallclock (0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) 11.1234s on wallclock (0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) 01m:54.45s on wallclock (0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) 18h:22m:54.45s on wallclock (0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) 04d:18h:22m:54.45s on wallclock (0.05 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.05 CPU) =head1 SYNOPSIS use Test2::Plugin::Times; This is also useful at the command line for 1-time use: $ perl -MTest2::Plugin::Times path/to/test.t =head1 SOURCE The source code repository for Test2-Suite can be found at F. =head1 MAINTAINERS =over 4 =item Chad Granum Eexodist@cpan.orgE =back =head1 AUTHORS =over 4 =item Chad Granum Eexodist@cpan.orgE =back =head1 COPYRIGHT Copyright 2018 Chad Granum Eexodist@cpan.orgE. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See F =cut