← Index
NYTProf Performance Profile   « block view • line view • sub view »
For C:/lo/libo-master/solenv/bin/make_installer.pl
  Run on Mon Sep 24 00:52:54 2012
Reported on Mon Sep 24 07:34:49 2012

Filename/usr/lib/perl5/5.14/Time/Local.pm
StatementsExecuted 679200 statements in 2.19s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1996411942ms2.16sTime::Local::::timelocalTime::Local::timelocal
7985731435ms530msTime::Local::::_daygmTime::Local::_daygm
5989231390ms770msTime::Local::::_timegmTime::Local::_timegm
1996411296ms446msTime::Local::::timegmTime::Local::timegm
798571195.5ms95.5msTime::Local::::CORE:packTime::Local::CORE:pack (opcode)
8011261µs261µsTime::Local::::_is_leap_yearTime::Local::_is_leap_year
111217µs291µsTime::Local::::BEGIN@4Time::Local::BEGIN@4
11119µs38µsTime::Local::::BEGIN@5Time::Local::BEGIN@5
11118µs95µsTime::Local::::BEGIN@27Time::Local::BEGIN@27
11113µs19µsTime::Local::::BEGIN@6Time::Local::BEGIN@6
11112µs64µsTime::Local::::BEGIN@28Time::Local::BEGIN@28
11112µs60µsTime::Local::::BEGIN@29Time::Local::BEGIN@29
11112µs117µsTime::Local::::BEGIN@8Time::Local::BEGIN@8
0000s0sTime::Local::::timegm_nocheckTime::Local::timegm_nocheck
0000s0sTime::Local::::timelocal_nocheckTime::Local::timelocal_nocheck
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Time::Local;
2
31500nsrequire Exporter;
4260µs2366µs
# spent 291µs (217+75) within Time::Local::BEGIN@4 which was called: # once (217µs+75µs) by Archive::Zip::Member::BEGIN@21 at line 4
use Carp;
# spent 291µs making 1 call to Time::Local::BEGIN@4 # spent 75µs making 1 call to Exporter::import
5256µs257µs
# spent 38µs (19+19) within Time::Local::BEGIN@5 which was called: # once (19µs+19µs) by Archive::Zip::Member::BEGIN@21 at line 5
use Config;
# spent 38µs making 1 call to Time::Local::BEGIN@5 # spent 19µs making 1 call to Config::import
6258µs224µs
# spent 19µs (13+5) within Time::Local::BEGIN@6 which was called: # once (13µs+5µs) by Archive::Zip::Member::BEGIN@21 at line 6
use strict;
# spent 19µs making 1 call to Time::Local::BEGIN@6 # spent 5µs making 1 call to strict::import
7
82203µs2222µs
# spent 117µs (12+105) within Time::Local::BEGIN@8 which was called: # once (12µs+105µs) by Archive::Zip::Member::BEGIN@21 at line 8
use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK );
# spent 117µs making 1 call to Time::Local::BEGIN@8 # spent 105µs making 1 call to vars::import
911µs$VERSION = '1.2000';
10
1119µs@ISA = qw( Exporter );
1212µs@EXPORT = qw( timegm timelocal );
1312µs@EXPORT_OK = qw( timegm_nocheck timelocal_nocheck );
14
1512µsmy @MonthDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
16
17# Determine breakpoint for rolling century
18130µsmy $ThisYear = ( localtime() )[5];
1913µsmy $Breakpoint = ( $ThisYear + 50 ) % 100;
2012µsmy $NextCentury = $ThisYear - $ThisYear % 100;
211500ns$NextCentury += 100 if $Breakpoint < 50;
221500nsmy $Century = $NextCentury - 100;
231500nsmy $SecOff = 0;
24
251500nsmy ( %Options, %Cheat );
26
27261µs2173µs
# spent 95µs (18+77) within Time::Local::BEGIN@27 which was called: # once (18µs+77µs) by Archive::Zip::Member::BEGIN@21 at line 27
use constant SECS_PER_MINUTE => 60;
# spent 95µs making 1 call to Time::Local::BEGIN@27 # spent 77µs making 1 call to constant::import
28254µs2115µs
# spent 64µs (12+51) within Time::Local::BEGIN@28 which was called: # once (12µs+51µs) by Archive::Zip::Member::BEGIN@21 at line 28
use constant SECS_PER_HOUR => 3600;
# spent 64µs making 1 call to Time::Local::BEGIN@28 # spent 51µs making 1 call to constant::import
2921.54ms2108µs
# spent 60µs (12+48) within Time::Local::BEGIN@29 which was called: # once (12µs+48µs) by Archive::Zip::Member::BEGIN@21 at line 29
use constant SECS_PER_DAY => 86400;
# spent 60µs making 1 call to Time::Local::BEGIN@29 # spent 48µs making 1 call to constant::import
30
311500nsmy $MaxDay;
3212µsif ($] < 5.012000) {
33 my $MaxInt;
34 if ( $^O eq 'MacOS' ) {
35 # time_t is unsigned...
36 $MaxInt = ( 1 << ( 8 * $Config{ivsize} ) ) - 1;
37 }
38 else {
39 $MaxInt = ( ( 1 << ( 8 * $Config{ivsize} - 2 ) ) - 1 ) * 2 + 1;
40 }
41
42 $MaxDay = int( ( $MaxInt - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1;
43}
44else {
45 # recent localtime()'s limit is the year 2**31
461500ns $MaxDay = 365 * (2**31);
47}
48
49# Determine the EPOC day for this machine
501500nsmy $Epoc = 0;
5113µsif ( $^O eq 'vos' ) {
52 # work around posix-977 -- VOS doesn't handle dates in the range
53 # 1970-1980.
54 $Epoc = _daygm( 0, 0, 0, 1, 0, 70, 4, 0 );
55}
56elsif ( $^O eq 'MacOS' ) {
57 $MaxDay *=2 if $^O eq 'MacOS'; # time_t unsigned ... quick hack?
58 # MacOS time() is seconds since 1 Jan 1904, localtime
59 # so we need to calculate an offset to apply later
60 $Epoc = 693901;
61 $SecOff = timelocal( localtime(0)) - timelocal( gmtime(0) ) ;
62 $Epoc += _daygm( gmtime(0) );
63}
64else {
65111µs134µs $Epoc = _daygm( gmtime(0) );
# spent 34µs making 1 call to Time::Local::_daygm
66}
67
6812µs%Cheat = (); # clear the cache as epoc has changed
69
70
# spent 530ms (435+95.5) within Time::Local::_daygm which was called 79857 times, avg 7µs/call: # 59892 times (310ms+69.8ms) by Time::Local::_timegm at line 94, avg 6µs/call # 19964 times (124ms+25.7ms) by Time::Local::timegm at line 122, avg 8µs/call # once (29µs+5µs) by Archive::Zip::Member::BEGIN@21 at line 65
sub _daygm {
71
72 # This is written in such a byzantine way in order to avoid
73 # lexical variables and sub calls, for speed
74 return $_[3] + (
7579857643ms7985795.5ms $Cheat{ pack( 'ss', @_[ 4, 5 ] ) } ||= do {
# spent 95.5ms making 79857 calls to Time::Local::CORE:pack, avg 1µs/call
768496µs my $month = ( $_[4] + 10 ) % 12;
7784174µs my $year = $_[5] + 1900 - int($month / 10);
78
7984227µs ( ( 365 * $year )
80 + int( $year / 4 )
81 - int( $year / 100 )
82 + int( $year / 400 )
83 + int( ( ( $month * 306 ) + 5 ) / 10 )
84 )
85 - $Epoc;
86 }
87 );
88}
89
90
# spent 770ms (390+380) within Time::Local::_timegm which was called 59892 times, avg 13µs/call: # 19964 times (134ms+130ms) by Time::Local::timelocal at line 156, avg 13µs/call # 19964 times (132ms+125ms) by Time::Local::timelocal at line 170, avg 13µs/call # 19964 times (125ms+125ms) by Time::Local::timelocal at line 165, avg 12µs/call
sub _timegm {
915989257.5ms my $sec =
92 $SecOff + $_[0] + ( SECS_PER_MINUTE * $_[1] ) + ( SECS_PER_HOUR * $_[2] );
93
9459892306ms59892380ms return $sec + ( SECS_PER_DAY * &_daygm );
# spent 380ms making 59892 calls to Time::Local::_daygm, avg 6µs/call
95}
96
97
# spent 446ms (296+150) within Time::Local::timegm which was called 19964 times, avg 22µs/call: # 19964 times (296ms+150ms) by Time::Local::timelocal at line 155, avg 22µs/call
sub timegm {
981996424.8ms my ( $sec, $min, $hour, $mday, $month, $year ) = @_;
99
1001996416.0ms if ( $year >= 1000 ) {
101 $year -= 1900;
102 }
103 elsif ( $year < 100 and $year >= 0 ) {
104 $year += ( $year > $Breakpoint ) ? $Century : $NextCentury;
105 }
106
1071996423.5ms unless ( $Options{no_range_check} ) {
1081996412.1ms croak "Month '$month' out of range 0..11"
109 if $month > 11
110 or $month < 0;
111
1121996413.4ms my $md = $MonthDays[$month];
1131996410.4ms80261µs ++$md
# spent 261µs making 80 calls to Time::Local::_is_leap_year, avg 3µs/call
114 if $month == 1 && _is_leap_year( $year + 1900 );
115
1161996410.3ms croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1;
117199649.35ms croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0;
118199648.82ms croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0;
1191996413.3ms croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0;
120 }
121
1221996452.6ms19964150ms my $days = _daygm( undef, undef, undef, $mday, $month, $year );
# spent 150ms making 19964 calls to Time::Local::_daygm, avg 8µs/call
123
1241996418.3ms unless ($Options{no_range_check} or abs($days) < $MaxDay) {
125 my $msg = '';
126 $msg .= "Day too big - $days > $MaxDay\n" if $days > $MaxDay;
127
128 $year += 1900;
129 $msg .= "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
130
131 croak $msg;
132 }
133
1341996482.0ms return $sec
135 + $SecOff
136 + ( SECS_PER_MINUTE * $min )
137 + ( SECS_PER_HOUR * $hour )
138 + ( SECS_PER_DAY * $days );
139}
140
141
# spent 261µs within Time::Local::_is_leap_year which was called 80 times, avg 3µs/call: # 80 times (261µs+0s) by Time::Local::timegm at line 113, avg 3µs/call
sub _is_leap_year {
14280181µs return 0 if $_[0] % 4;
14356296µs return 1 if $_[0] % 100;
144 return 0 if $_[0] % 400;
145
146 return 1;
147}
148
149sub timegm_nocheck {
150 local $Options{no_range_check} = 1;
151 return &timegm;
152}
153
154
# spent 2.16s (942ms+1.22) within Time::Local::timelocal which was called 19964 times, avg 108µs/call: # 19964 times (942ms+1.22s) by Archive::Zip::Member::_dosToUnixTime at line 595 of Archive/Zip/Member.pm, avg 108µs/call
sub timelocal {
1551996445.5ms19964446ms my $ref_t = &timegm;
# spent 446ms making 19964 calls to Time::Local::timegm, avg 22µs/call
15619964204ms19964264ms my $loc_for_ref_t = _timegm( localtime($ref_t) );
# spent 264ms making 19964 calls to Time::Local::_timegm, avg 13µs/call
157
1581996413.1ms my $zone_off = $loc_for_ref_t - $ref_t
159 or return $loc_for_ref_t;
160
161 # Adjust for timezone
162199649.47ms my $loc_t = $ref_t - $zone_off;
163
164 # Are we close to a DST change or are we done
16519964179ms19964250ms my $dst_off = $ref_t - _timegm( localtime($loc_t) );
# spent 250ms making 19964 calls to Time::Local::_timegm, avg 12µs/call
166
167 # If this evaluates to true, it means that the value in $loc_t is
168 # the _second_ hour after a DST change where the local time moves
169 # backward.
17019964186ms19964257ms if ( ! $dst_off &&
# spent 257ms making 19964 calls to Time::Local::_timegm, avg 13µs/call
171 ( ( $ref_t - SECS_PER_HOUR ) - _timegm( localtime( $loc_t - SECS_PER_HOUR ) ) < 0 )
172 ) {
173 return $loc_t - SECS_PER_HOUR;
174 }
175
176 # Adjust for DST change
177199649.69ms $loc_t += $dst_off;
178
1791996410.0ms return $loc_t if $dst_off > 0;
180
181 # If the original date was a non-extent gap in a forward DST jump,
182 # we should now have the wrong answer - undo the DST adjustment
18319964129ms my ( $s, $m, $h ) = localtime($loc_t);
1841996414.7ms $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2];
185
1861996484.1ms return $loc_t;
187}
188
189sub timelocal_nocheck {
190 local $Options{no_range_check} = 1;
191 return &timelocal;
192}
193
1941104µs1;
195
196__END__
 
# spent 95.5ms within Time::Local::CORE:pack which was called 79857 times, avg 1µs/call: # 79857 times (95.5ms+0s) by Time::Local::_daygm at line 75, avg 1µs/call
sub Time::Local::CORE:pack; # opcode