← Index
NYTProf Performance Profile   « line view »
For /Users/brian/bin/perls/cpan5.26.1
  Run on Sat Dec 30 01:41:10 2017
Reported on Sat Dec 30 01:44:15 2017

Filename/usr/local/perls/perl-5.26.1/lib/5.26.1/IO/Uncompress/Gunzip.pm
StatementsExecuted 399 statements in 3.78ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.59ms14.6msIO::Uncompress::Gunzip::::BEGIN@12IO::Uncompress::Gunzip::BEGIN@12
311941µs3.05msIO::Uncompress::Gunzip::::_readGzipHeaderIO::Uncompress::Gunzip::_readGzipHeader
311149µs13.3msIO::Uncompress::Gunzip::::newIO::Uncompress::Gunzip::new
311102µs976µsIO::Uncompress::Gunzip::::ckMagicIO::Uncompress::Gunzip::ckMagic
31166µs3.12msIO::Uncompress::Gunzip::::readHeaderIO::Uncompress::Gunzip::readHeader
31154µs68µsIO::Uncompress::Gunzip::::isGzipMagicIO::Uncompress::Gunzip::isGzipMagic
31140µs62µsIO::Uncompress::Gunzip::::ckParamsIO::Uncompress::Gunzip::ckParams
21133µs39µsIO::Uncompress::Gunzip::::chkTrailerIO::Uncompress::Gunzip::chkTrailer
83127µs27µsIO::Uncompress::Gunzip::::CORE:unpackIO::Uncompress::Gunzip::CORE:unpack (opcode)
11122µs25µsIO::Uncompress::Gunzip::::BEGIN@8IO::Uncompress::Gunzip::BEGIN@8
11117µs270µsIO::Uncompress::Gunzip::::BEGIN@16IO::Uncompress::Gunzip::BEGIN@16
11116µs155µsIO::Uncompress::Gunzip::::BEGIN@15IO::Uncompress::Gunzip::BEGIN@15
11114µs23µsIO::Uncompress::Gunzip::::BEGIN@17IO::Uncompress::Gunzip::BEGIN@17
11112µs14µsIO::Uncompress::Gunzip::::BEGIN@10IO::Uncompress::Gunzip::BEGIN@10
11112µs21µsIO::Uncompress::Gunzip::::BEGIN@14IO::Uncompress::Gunzip::BEGIN@14
11111µs22µsIO::Uncompress::Gunzip::::BEGIN@9IO::Uncompress::Gunzip::BEGIN@9
3118µs8µsIO::Uncompress::Gunzip::::getExtraParamsIO::Uncompress::Gunzip::getExtraParams
0000s0sIO::Uncompress::Gunzip::::_readFullGzipHeaderIO::Uncompress::Gunzip::_readFullGzipHeader
0000s0sIO::Uncompress::Gunzip::::gunzipIO::Uncompress::Gunzip::gunzip
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1
2package IO::Uncompress::Gunzip ;
3
4110µsrequire 5.006 ;
5
6# for RFC1952
7
8233µs228µs
# spent 25µs (22+3) within IO::Uncompress::Gunzip::BEGIN@8 which was called: # once (22µs+3µs) by Compress::Zlib::BEGIN@13 at line 8
use strict ;
# spent 25µs making 1 call to IO::Uncompress::Gunzip::BEGIN@8 # spent 3µs making 1 call to strict::import
9230µs233µs
# spent 22µs (11+11) within IO::Uncompress::Gunzip::BEGIN@9 which was called: # once (11µs+11µs) by Compress::Zlib::BEGIN@13 at line 9
use warnings;
# spent 22µs making 1 call to IO::Uncompress::Gunzip::BEGIN@9 # spent 11µs making 1 call to warnings::import
10234µs216µs
# spent 14µs (12+2) within IO::Uncompress::Gunzip::BEGIN@10 which was called: # once (12µs+2µs) by Compress::Zlib::BEGIN@13 at line 10
use bytes;
# spent 14µs making 1 call to IO::Uncompress::Gunzip::BEGIN@10 # spent 2µs making 1 call to bytes::import
11
123519µs314.6ms
# spent 14.6ms (2.59+12.0) within IO::Uncompress::Gunzip::BEGIN@12 which was called: # once (2.59ms+12.0ms) by Compress::Zlib::BEGIN@13 at line 12
use IO::Uncompress::RawInflate 2.074 ;
# spent 14.6ms making 1 call to IO::Uncompress::Gunzip::BEGIN@12 # spent 21µs making 1 call to Exporter::import # spent 11µs making 1 call to version::_VERSION
13
14370µs230µs
# spent 21µs (12+9) within IO::Uncompress::Gunzip::BEGIN@14 which was called: # once (12µs+9µs) by Compress::Zlib::BEGIN@13 at line 14
use Compress::Raw::Zlib 2.074 () ;
# spent 21µs making 1 call to IO::Uncompress::Gunzip::BEGIN@14 # spent 9µs making 1 call to version::_VERSION
15356µs3294µs
# spent 155µs (16+139) within IO::Uncompress::Gunzip::BEGIN@15 which was called: # once (16µs+139µs) by Compress::Zlib::BEGIN@13 at line 15
use IO::Compress::Base::Common 2.074 qw(:Status );
# spent 155µs making 1 call to IO::Uncompress::Gunzip::BEGIN@15 # spent 131µs making 1 call to Exporter::import # spent 8µs making 1 call to version::_VERSION
16354µs3523µs
# spent 270µs (17+253) within IO::Uncompress::Gunzip::BEGIN@16 which was called: # once (17µs+253µs) by Compress::Zlib::BEGIN@13 at line 16
use IO::Compress::Gzip::Constants 2.074 ;
# spent 270µs making 1 call to IO::Uncompress::Gunzip::BEGIN@16 # spent 244µs making 1 call to Exporter::import # spent 9µs making 1 call to version::_VERSION
1731.57ms232µs
# spent 23µs (14+9) within IO::Uncompress::Gunzip::BEGIN@17 which was called: # once (14µs+9µs) by Compress::Zlib::BEGIN@13 at line 17
use IO::Compress::Zlib::Extra 2.074 ;
# spent 23µs making 1 call to IO::Uncompress::Gunzip::BEGIN@17 # spent 9µs making 1 call to version::_VERSION
18
1910srequire Exporter ;
20
21our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GunzipError);
22
23121µs@ISA = qw(IO::Uncompress::RawInflate Exporter);
2411µs@EXPORT_OK = qw( $GunzipError gunzip );
2511µs%EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ;
2612µspush @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
2713µs124µsExporter::export_ok_tags('all');
# spent 24µs making 1 call to Exporter::export_ok_tags
28
2910s$GunzipError = '';
30
3111µs$VERSION = '2.074';
32
33sub new
34
# spent 13.3ms (149µs+13.1) within IO::Uncompress::Gunzip::new which was called 3 times, avg 4.42ms/call: # 3 times (149µs+13.1ms) by Compress::Zlib::gzopen at line 142 of Compress/Zlib.pm, avg 4.42ms/call
{
35314µs my $class = shift ;
3635µs $GunzipError = '';
37342µs3365µs my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$GunzipError);
# spent 365µs making 3 calls to IO::Compress::Base::Common::createSelfTiedObject, avg 122µs/call
38
39365µs312.8ms $obj->_create(undef, 0, @_);
# spent 12.8ms making 3 calls to IO::Uncompress::Base::_create, avg 4.25ms/call
40}
41
42sub gunzip
43{
44 my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$GunzipError);
45 return $obj->_inf(@_) ;
46}
47
48sub getExtraParams
49
# spent 8µs within IO::Uncompress::Gunzip::getExtraParams which was called 3 times, avg 3µs/call: # 3 times (8µs+0s) by IO::Uncompress::Base::checkParams at line 350 of IO/Uncompress/Base.pm, avg 3µs/call
{
50314µs return ( 'parseextra' => [IO::Compress::Base::Common::Parse_boolean, 0] ) ;
51}
52
53sub ckParams
54
# spent 62µs (40+22) within IO::Uncompress::Gunzip::ckParams which was called 3 times, avg 21µs/call: # 3 times (40µs+22µs) by IO::Uncompress::Base::_create at line 411 of IO/Uncompress/Base.pm, avg 21µs/call
{
5533µs my $self = shift ;
5633µs my $got = shift ;
57
58 # gunzip always needs crc32
5938µs322µs $got->setValue('crc32' => 1);
# spent 22µs making 3 calls to IO::Compress::Base::Parameters::setValue, avg 7µs/call
60
61334µs return 1;
62}
63
64sub ckMagic
65
# spent 976µs (102+874) within IO::Uncompress::Gunzip::ckMagic which was called 3 times, avg 325µs/call: # 3 times (102µs+874µs) by IO::Uncompress::RawInflate::mkUncomp at line 87 of IO/Uncompress/RawInflate.pm, avg 325µs/call
{
66313µs my $self = shift;
67
6831µs my $magic ;
69353µs3806µs $self->smartReadExact(\$magic, GZIP_ID_SIZE);
# spent 806µs making 3 calls to IO::Uncompress::Base::smartReadExact, avg 269µs/call
70
7135µs *$self->{HeaderPending} = $magic ;
72
73313µs return $self->HeaderError("Minimum header size is " .
74 GZIP_MIN_HEADER_SIZE . " bytes")
75 if length $magic != GZIP_ID_SIZE ;
76
77311µs368µs return $self->HeaderError("Bad Magic")
# spent 68µs making 3 calls to IO::Uncompress::Gunzip::isGzipMagic, avg 23µs/call
78 if ! isGzipMagic($magic) ;
79
8039µs *$self->{Type} = 'rfc1952';
81
82317µs return $magic ;
83}
84
85sub readHeader
86
# spent 3.12ms (66µs+3.05) within IO::Uncompress::Gunzip::readHeader which was called 3 times, avg 1.04ms/call: # 3 times (66µs+3.05ms) by IO::Uncompress::RawInflate::mkUncomp at line 90 of IO/Uncompress/RawInflate.pm, avg 1.04ms/call
{
87315µs my $self = shift;
8831µs my $magic = shift;
89
90392µs33.05ms return $self->_readGzipHeader($magic);
# spent 3.05ms making 3 calls to IO::Uncompress::Gunzip::_readGzipHeader, avg 1.02ms/call
91}
92
93sub chkTrailer
94
# spent 39µs (33+6) within IO::Uncompress::Gunzip::chkTrailer which was called 2 times, avg 20µs/call: # 2 times (33µs+6µs) by IO::Uncompress::Base::_raw_read at line 954 of IO/Uncompress/Base.pm, avg 20µs/call
{
9521µs my $self = shift;
9621µs my $trailer = shift;
97
98 # Check CRC & ISIZE
99213µs26µs my ($CRC32, $ISIZE) = unpack("V V", $trailer) ;
# spent 6µs making 2 calls to IO::Uncompress::Gunzip::CORE:unpack, avg 3µs/call
10023µs *$self->{Info}{CRC32} = $CRC32;
101211µs *$self->{Info}{ISIZE} = $ISIZE;
102
10324µs if (*$self->{Strict}) {
104 return $self->TrailerError("CRC mismatch")
105 if $CRC32 != *$self->{Uncomp}->crc32() ;
106
107 my $exp_isize = *$self->{UnCompSize}->get32bit();
108 return $self->TrailerError("ISIZE mismatch. Got $ISIZE"
109 . ", expected $exp_isize")
110 if $ISIZE != $exp_isize ;
111 }
112
11327µs return STATUS_OK;
114}
115
116sub isGzipMagic
117
# spent 68µs (54+14) within IO::Uncompress::Gunzip::isGzipMagic which was called 3 times, avg 23µs/call: # 3 times (54µs+14µs) by IO::Uncompress::Gunzip::ckMagic at line 77, avg 23µs/call
{
118314µs my $buffer = shift ;
119313µs return 0 if length $buffer < GZIP_ID_SIZE ;
120329µs314µs my ($id1, $id2) = unpack("C C", $buffer) ;
# spent 14µs making 3 calls to IO::Uncompress::Gunzip::CORE:unpack, avg 5µs/call
121313µs return $id1 == GZIP_ID1 && $id2 == GZIP_ID2 ;
122}
123
124sub _readFullGzipHeader($)
125{
126 my ($self) = @_ ;
127 my $magic = '' ;
128
129 $self->smartReadExact(\$magic, GZIP_ID_SIZE);
130
131 *$self->{HeaderPending} = $magic ;
132
133 return $self->HeaderError("Minimum header size is " .
134 GZIP_MIN_HEADER_SIZE . " bytes")
135 if length $magic != GZIP_ID_SIZE ;
136
137
138 return $self->HeaderError("Bad Magic")
139 if ! isGzipMagic($magic) ;
140
141 my $status = $self->_readGzipHeader($magic);
142 delete *$self->{Transparent} if ! defined $status ;
143 return $status ;
144}
145
146sub _readGzipHeader($)
147
# spent 3.05ms (941µs+2.11) within IO::Uncompress::Gunzip::_readGzipHeader which was called 3 times, avg 1.02ms/call: # 3 times (941µs+2.11ms) by IO::Uncompress::Gunzip::readHeader at line 90, avg 1.02ms/call
{
14834µs my ($self, $magic) = @_ ;
149313µs my ($HeaderCRC) ;
150312µs my ($buffer) = '' ;
151
152313µs3119µs $self->smartReadExact(\$buffer, GZIP_MIN_HEADER_SIZE - GZIP_ID_SIZE)
# spent 119µs making 3 calls to IO::Uncompress::Base::smartReadExact, avg 40µs/call
153 or return $self->HeaderError("Minimum header size is " .
154 GZIP_MIN_HEADER_SIZE . " bytes") ;
155
156317µs my $keep = $magic . $buffer ;
15735µs *$self->{HeaderPending} = $keep ;
158
159 # now split out the various parts
160324µs37µs my ($cm, $flag, $mtime, $xfl, $os) = unpack("C C V C C", $buffer) ;
# spent 7µs making 3 calls to IO::Uncompress::Gunzip::CORE:unpack, avg 2µs/call
161
16231µs $cm == GZIP_CM_DEFLATED
163 or return $self->HeaderError("Not Deflate (CM is $cm)") ;
164
165 # check for use of reserved bits
166315µs return $self->HeaderError("Use of Reserved Bits in FLG field.")
167 if $flag & GZIP_FLG_RESERVED ;
168
169312µs my $EXTRA ;
17032µs my @EXTRA = () ;
171316µs if ($flag & GZIP_FLG_FEXTRA) {
172 $EXTRA = "" ;
173 $self->smartReadExact(\$buffer, GZIP_FEXTRA_HEADER_SIZE)
174 or return $self->TruncatedHeader("FEXTRA Length") ;
175
176 my ($XLEN) = unpack("v", $buffer) ;
177 $self->smartReadExact(\$EXTRA, $XLEN)
178 or return $self->TruncatedHeader("FEXTRA Body");
179 $keep .= $buffer . $EXTRA ;
180
181 if ($XLEN && *$self->{'ParseExtra'}) {
182 my $bad = IO::Compress::Zlib::Extra::parseRawExtra($EXTRA,
183 \@EXTRA, 1, 1);
184 return $self->HeaderError($bad)
185 if defined $bad;
186 }
187 }
188
189315µs my $origname ;
190331µs if ($flag & GZIP_FLG_FNAME) {
19134µs $origname = "" ;
19231µs while (1) {
19372183µs721.98ms $self->smartReadExact(\$buffer, 1)
# spent 1.98ms making 72 calls to IO::Uncompress::Base::smartReadExact, avg 28µs/call
194 or return $self->TruncatedHeader("FNAME");
19572168µs last if $buffer eq GZIP_NULL_BYTE ;
1966957µs $origname .= $buffer
197 }
198321µs $keep .= $origname . GZIP_NULL_BYTE ;
199
200 return $self->HeaderError("Non ISO 8859-1 Character found in Name")
20135µs if *$self->{Strict} && $origname =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ;
202 }
203
204312µs my $comment ;
205312µs if ($flag & GZIP_FLG_FCOMMENT) {
206 $comment = "";
207 while (1) {
208 $self->smartReadExact(\$buffer, 1)
209 or return $self->TruncatedHeader("FCOMMENT");
210 last if $buffer eq GZIP_NULL_BYTE ;
211 $comment .= $buffer
212 }
213 $keep .= $comment . GZIP_NULL_BYTE ;
214
215 return $self->HeaderError("Non ISO 8859-1 Character found in Comment")
216 if *$self->{Strict} && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o ;
217 }
218
21932µs if ($flag & GZIP_FLG_FHCRC) {
220 $self->smartReadExact(\$buffer, GZIP_FHCRC_SIZE)
221 or return $self->TruncatedHeader("FHCRC");
222
223 $HeaderCRC = unpack("v", $buffer) ;
224 my $crc16 = Compress::Raw::Zlib::crc32($keep) & 0xFF ;
225
226 return $self->HeaderError("CRC16 mismatch.")
227 if *$self->{Strict} && $crc16 != $HeaderCRC;
228
229 $keep .= $buffer ;
230 }
231
232 # Assume compression method is deflated for xfl tests
233 #if ($xfl) {
234 #}
235
236312µs *$self->{Type} = 'rfc1952';
237
238 return {
239 'Type' => 'rfc1952',
240 'FingerprintLength' => 2,
241 'HeaderLength' => length $keep,
242 'TrailerLength' => GZIP_TRAILER_SIZE,
243 'Header' => $keep,
244 'isMinimalHeader' => $keep eq GZIP_MINIMUM_HEADER ? 1 : 0,
245
246 'MethodID' => $cm,
247 'MethodName' => $cm == GZIP_CM_DEFLATED ? "Deflated" : "Unknown" ,
248 'TextFlag' => $flag & GZIP_FLG_FTEXT ? 1 : 0,
249 'HeaderCRCFlag' => $flag & GZIP_FLG_FHCRC ? 1 : 0,
250 'NameFlag' => $flag & GZIP_FLG_FNAME ? 1 : 0,
251 'CommentFlag' => $flag & GZIP_FLG_FCOMMENT ? 1 : 0,
252 'ExtraFlag' => $flag & GZIP_FLG_FEXTRA ? 1 : 0,
253 'Name' => $origname,
254 'Comment' => $comment,
255 'Time' => $mtime,
256 'OsID' => $os,
257 'OsName' => defined $GZIP_OS_Names{$os}
2583184µs ? $GZIP_OS_Names{$os} : "Unknown",
259 'HeaderCRC' => $HeaderCRC,
260 'Flags' => $flag,
261 'ExtraFlags' => $xfl,
262 'ExtraFieldRaw' => $EXTRA,
263 'ExtraField' => [ @EXTRA ],
264
265
266 #'CompSize'=> $compsize,
267 #'CRC32'=> $CRC32,
268 #'OrigSize'=> $ISIZE,
269 }
270}
271
272
273113µs1;
274
275__END__
 
# spent 27µs within IO::Uncompress::Gunzip::CORE:unpack which was called 8 times, avg 3µs/call: # 3 times (14µs+0s) by IO::Uncompress::Gunzip::isGzipMagic at line 120, avg 5µs/call # 3 times (7µs+0s) by IO::Uncompress::Gunzip::_readGzipHeader at line 160, avg 2µs/call # 2 times (6µs+0s) by IO::Uncompress::Gunzip::chkTrailer at line 99, avg 3µs/call
sub IO::Uncompress::Gunzip::CORE:unpack; # opcode