← Index
NYTProf Performance Profile   « block view • line view • sub view »
For mentat.storage.mongo.pl
  Run on Tue Jun 24 10:04:38 2014
Reported on Tue Jun 24 10:05:06 2014

Filename/usr/share/perl/5.14/File/Compare.pm
StatementsExecuted 47 statements in 841µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11174µs158µsFile::Compare::::compareFile::Compare::compare
22132µs32µsFile::Compare::::CORE:openFile::Compare::CORE:open (opcode)
11119µs19µsFile::Compare::::BEGIN@3File::Compare::BEGIN@3
22119µs19µsFile::Compare::::CORE:closeFile::Compare::CORE:close (opcode)
22116µs16µsFile::Compare::::CORE:binmodeFile::Compare::CORE:binmode (opcode)
43116µs16µsFile::Compare::::CORE:readFile::Compare::CORE:read (opcode)
1117µs10µsFile::Compare::::BEGIN@4File::Compare::BEGIN@4
1116µs12µsFile::Compare::::BEGIN@5File::Compare::BEGIN@5
2212µs2µ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
3243µs119µs
# spent 19µs within File::Compare::BEGIN@3 which was called: # once (19µs+0s) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 3
use 5.006;
# spent 19µs making 1 call to File::Compare::BEGIN@3
4221µs213µs
# spent 10µs (7+3) within File::Compare::BEGIN@4 which was called: # once (7µs+3µs) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 4
use strict;
# spent 10µs making 1 call to File::Compare::BEGIN@4 # spent 3µs making 1 call to strict::import
52602µs217µs
# spent 12µs (6+5) within File::Compare::BEGIN@5 which was called: # once (6µs+5µs) by DateTime::TimeZone::Local::Unix::_FindMatchingZoneinfoFile at line 5
use warnings;
# spent 12µs making 1 call to File::Compare::BEGIN@5 # spent 5µs making 1 call to warnings::import
61500nsour($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big);
7
81500nsrequire Exporter;
9
101600ns$VERSION = '1.1006';
1115µs@ISA = qw(Exporter);
121400ns@EXPORT = qw(compare);
131400ns@EXPORT_OK = qw(cmp compare_text);
14
151200ns$Too_Big = 1024 * 1024 * 2;
16
17sub croak {
18 require Carp;
19 goto &Carp::croak;
20}
21
22
# spent 158µs (74+84) within File::Compare::compare which was called: # once (74µs+84µ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 {
2332160µs croak("Usage: compare( file1, file2 [, buffersize]) ")
24 unless(@_ == 2 || @_ == 3);
25
26 my ($from,$to,$size) = @_;
27 my $text_mode = defined($size) && (ref($size) eq 'CODE' || $size < 0);
28
29 my ($fromsize,$closefrom,$closeto);
30 local (*FROM, *TO);
31
32 croak("from undefined") unless (defined $from);
33 croak("to undefined") unless (defined $to);
34
35 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 {
41125µs open(FROM,"<",$from) or goto fail_open1;
# spent 25µs making 1 call to File::Compare::CORE:open
42 unless ($text_mode) {
43115µs binmode FROM;
# spent 15µs making 1 call to File::Compare::CORE:binmode
4411µs $fromsize = -s FROM;
# spent 1µs making 1 call to File::Compare::CORE:ftsize
45 }
46 $closefrom = 1;
47 }
48
49 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 {
5517µs open(TO,"<",$to) or goto fail_open2;
# spent 7µs making 1 call to File::Compare::CORE:open
561600ns binmode TO unless $text_mode;
# spent 600ns making 1 call to File::Compare::CORE:binmode
57 $closeto = 1;
58 }
59
60 if (!$text_mode && $closefrom && $closeto) {
61 # If both are opened files we know they differ if their size differ
621700ns goto fail_inner if $fromsize != -s TO;
# spent 700ns making 1 call to File::Compare::CORE:ftsize
63 }
64
65 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 {
80 unless (defined($size) && $size > 0) {
81 $size = $fromsize || -s TO || 0;
82 $size = 1024 if $size < 512;
83 $size = $Too_Big if $size > $Too_Big;
84 }
85
86 my ($fr,$tr,$fbuf,$tbuf);
87 $fbuf = $tbuf = '';
8819µs while(defined($fr = read(FROM,$fbuf,$size)) && $fr > 0) {
# spent 9µs making 1 call to File::Compare::CORE:read
8926µs unless (defined($tr = read(TO,$tbuf,$fr)) && $tbuf eq $fbuf) {
# spent 6µs making 2 calls to File::Compare::CORE:read, avg 3µs/call
90 goto fail_inner;
91 }
92 }
9311µs goto fail_inner if defined($tr = read(TO,$tbuf,$size)) && $tr > 0;
# spent 1µs making 1 call to File::Compare::CORE:read
94 }
95
96118µs close(TO) || goto fail_open2 if $closeto;
# spent 18µs making 1 call to File::Compare::CORE:close
9711µs close(FROM) || goto fail_open1 if $closefrom;
# spent 1µs making 1 call to File::Compare::CORE:close
98
99 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;
12012µ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
13416µs1;
135
136__END__
 
# spent 16µs within File::Compare::CORE:binmode which was called 2 times, avg 8µs/call: # once (15µs+0s) by File::Compare::compare at line 43 # once (600ns+0s) by File::Compare::compare at line 56
sub File::Compare::CORE:binmode; # opcode
# spent 19µs within File::Compare::CORE:close which was called 2 times, avg 10µs/call: # once (18µs+0s) by File::Compare::compare at line 96 # once (1µs+0s) by File::Compare::compare at line 97
sub File::Compare::CORE:close; # opcode
# spent 2µs within File::Compare::CORE:ftsize which was called 2 times, avg 850ns/call: # once (1µs+0s) by File::Compare::compare at line 44 # once (700ns+0s) by File::Compare::compare at line 62
sub File::Compare::CORE:ftsize; # opcode
# spent 32µs within File::Compare::CORE:open which was called 2 times, avg 16µs/call: # once (25µs+0s) by File::Compare::compare at line 41 # once (7µs+0s) by File::Compare::compare at line 55
sub File::Compare::CORE:open; # opcode
# spent 16µs within File::Compare::CORE:read which was called 4 times, avg 4µs/call: # 2 times (6µs+0s) by File::Compare::compare at line 89, avg 3µs/call # once (9µs+0s) by File::Compare::compare at line 88 # once (1µs+0s) by File::Compare::compare at line 93
sub File::Compare::CORE:read; # opcode