← Index
NYTProf Performance Profile   « block view • line view • sub view »
For mentat.storage.mongo.pl
  Run on Tue Jun 24 09:58:41 2014
Reported on Tue Jun 24 09:59:30 2014

Filename/usr/share/perl/5.14/File/Compare.pm
StatementsExecuted 47 statements in 1.83ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
111158µs271µsFile::Compare::::compareFile::Compare::compare
22152µs52µsFile::Compare::::CORE:openFile::Compare::CORE:open (opcode)
11142µs42µsFile::Compare::::BEGIN@3File::Compare::BEGIN@3
43137µs37µsFile::Compare::::CORE:readFile::Compare::CORE:read (opcode)
11117µs24µsFile::Compare::::BEGIN@4File::Compare::BEGIN@4
22116µs16µsFile::Compare::::CORE:closeFile::Compare::CORE:close (opcode)
11116µs34µsFile::Compare::::BEGIN@5File::Compare::BEGIN@5
2216µs6µsFile::Compare::::CORE:binmodeFile::Compare::CORE:binmode (opcode)
2213µs3µsFile::Compare::::CORE:ftsizeFile::Compare::CORE:ftsize (opcode)
0000s0sFile::Compare::::compare_textFile::Compare::compare_text
0000s0sFile::Compare::::croakFile::Compare::croak
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Compare;
2
3299µs142µs
# spent 42µs within File::Compare::BEGIN@3 which was called: # once (42µs+0s) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 3
use 5.006;
# spent 42µs making 1 call to File::Compare::BEGIN@3
4250µs231µs
# spent 24µs (17+7) within File::Compare::BEGIN@4 which was called: # once (17µs+7µs) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 4
use strict;
# spent 24µs making 1 call to File::Compare::BEGIN@4 # spent 7µs making 1 call to strict::import
521.37ms252µs
# spent 34µs (16+18) within File::Compare::BEGIN@5 which was called: # once (16µs+18µs) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 5
use warnings;
# spent 34µs making 1 call to File::Compare::BEGIN@5 # spent 18µs making 1 call to warnings::import
611µsour($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
7
811µsrequire Exporter;
9
1011µs$VERSION = '1.1006';
11111µs@ISA = qw(Exporter);
1211µs@EXPORT = qw(compare);
1311µs@EXPORT_OK = qw(cmp compare_text);
14
151400ns$Too_Big = 1024 * 1024 * 2;
16
17sub croak {
18 require Carp;
19 goto &Carp::croak;
20}
21
22
# spent 271µs (158+113) within File::Compare::compare which was called: # once (158µs+113µs) by DateTime::TimeZone::Local::Unix::__ANON__[/usr/local/share/perl/5.14.2/DateTime/TimeZone/Local/Unix.pm:116] at line 98 of DateTime/TimeZone/Local/Unix.pm
sub compare {
2311µs croak("Usage: compare( file1, file2 [, buffersize]) ")
24 unless(@_ == 2 || @_ == 3);
25
2612µs my ($from,$to,$size) = @_;
271900ns my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
28
291400ns my ($fromsize,$closefrom,$closeto);
3013µs local (*FROM, *TO);
31
321500ns croak("from undefined") unless (defined $from);
331300ns croak("to undefined") unless (defined $to);
34
3514µs if (ref($from) &&
36 (UNIVERSAL::isa($from,'GLOB') || UNIVERSAL::isa($from,'IO::Handle'))) {
37 *FROM = *$from;
38 } elsif (ref(\$from) eq 'GLOB') {
39 *FROM = $from;
40 } else {
41154µs139µs open(FROM,"<",$from) or goto fail_open1;
# spent 39µs making 1 call to File::Compare::CORE:open
4211µs unless ($text_mode) {
43115µs15µs binmode FROM;
# spent 5µs making 1 call to File::Compare::CORE:binmode
44113µs12µs $fromsize = -s FROM;
# spent 2µs making 1 call to File::Compare::CORE:ftsize
45 }
461900ns $closefrom = 1;
47 }
48
4912µs if (ref($to) &&
50 (UNIVERSAL::isa($to,'GLOB') || UNIVERSAL::isa($to,'IO::Handle'))) {
51 *TO = *$to;
52 } elsif (ref(\$to) eq 'GLOB') {
53 *TO = $to;
54 } else {
55119µs112µs open(TO,"<",$to) or goto fail_open2;
# spent 12µs making 1 call to File::Compare::CORE:open
5617µs11µs binmode TO unless $text_mode;
# spent 1µs making 1 call to File::Compare::CORE:binmode
5711µs $closeto = 1;
58 }
59
6011µs if (!$text_mode && $closefrom && $closeto) {
61 # If both are opened files we know they differ if their size differ
6217µs11µs goto fail_inner if $fromsize != -s TO;
# spent 1µs making 1 call to File::Compare::CORE:ftsize
63 }
64
651600ns if ($text_mode) {
66 local $/ = "\n";
67 my ($fline,$tline);
68 while (defined($fline = <FROM>)) {
69 goto fail_inner unless defined($tline = <TO>);
70 if (ref $size) {
71 # $size contains ref to comparison function
72 goto fail_inner if &$size($fline, $tline);
73 } else {
74 goto fail_inner if $fline ne $tline;
75 }
76 }
77 goto fail_inner if defined($tline = <TO>);
78 }
79 else {
801700ns unless (defined($size) && $size > 0) {
811500ns $size = $fromsize || -s TO || 0;
821500ns $size = 1024 if $size < 512;
831600ns $size = $Too_Big if $size > $Too_Big;
84 }
85
861700ns my ($fr,$tr,$fbuf,$tbuf);
8711µs $fbuf = $tbuf = '';
88130µs117µs while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
# spent 17µs making 1 call to File::Compare::CORE:read
89134µs217µs unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
# spent 17µs making 2 calls to File::Compare::CORE:read, avg 9µs/call
90 goto fail_inner;
91 }
92 }
93112µs13µs goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
# spent 3µs making 1 call to File::Compare::CORE:read
94 }
95
96124µs113µs close(TO) || goto fail_open2 if $closeto;
# spent 13µs making 1 call to File::Compare::CORE:close
9719µs13µs close(FROM) || goto fail_open1 if $closefrom;
# spent 3µs making 1 call to File::Compare::CORE:close
98
99129µs return 0;
100
101 # All of these contortions try to preserve error messages...
102 fail_inner:
103 close(TO) || goto fail_open2 if $closeto;
104 close(FROM) || goto fail_open1 if $closefrom;
105
106 return 1;
107
108 fail_open2:
109 if ($closefrom) {
110 my $status = $!;
111 $! = 0;
112 close FROM;
113 $! = $status unless $!;
114 }
115 fail_open1:
116 return -1;
117}
118
119sub cmp;
12016µs*cmp = \&compare;
121
122sub compare_text {
123 my ($from,$to,$cmp) = @_;
124 croak("Usage: compare_text( file1, file2 [, cmp-function])")
125 unless @_ == 2 || @_ == 3;
126 croak("Third arg to compare_text() function must be a code reference")
127 if @_ == 3 && ref($cmp) ne 'CODE';
128
129 # Using a negative buffer size puts compare into text_mode too
130 $cmp = -1 unless defined $cmp;
131 compare($from, $to, $cmp);
132}
133
134113µs1;
135
136__END__
 
# spent 6µs within File::Compare::CORE:binmode which was called 2 times, avg 3µs/call: # once (5µs+0s) by File::Compare::compare at line 43 # once (1µs+0s) by File::Compare::compare at line 56
sub File::Compare::CORE:binmode; # opcode
# spent 16µs within File::Compare::CORE:close which was called 2 times, avg 8µs/call: # once (13µs+0s) by File::Compare::compare at line 96 # once (3µs+0s) by File::Compare::compare at line 97
sub File::Compare::CORE:close; # opcode
# spent 3µs within File::Compare::CORE:ftsize which was called 2 times, avg 1µs/call: # once (2µs+0s) by File::Compare::compare at line 44 # once (1µs+0s) by File::Compare::compare at line 62
sub File::Compare::CORE:ftsize; # opcode
# spent 52µs within File::Compare::CORE:open which was called 2 times, avg 26µs/call: # once (39µs+0s) by File::Compare::compare at line 41 # once (12µs+0s) by File::Compare::compare at line 55
sub File::Compare::CORE:open; # opcode
# spent 37µs within File::Compare::CORE:read which was called 4 times, avg 9µs/call: # 2 times (17µs+0s) by File::Compare::compare at line 89, avg 9µs/call # once (17µs+0s) by File::Compare::compare at line 88 # once (3µs+0s) by File::Compare::compare at line 93
sub File::Compare::CORE:read; # opcode