Profile of HTTP/Parser/XS.pm

← Index
NYTProf Performance Profile «line view»
For script/ponapi
Run on Wed Feb 10 15:51:26 2016
Reported on Thu Feb 11 09:43:12 2016

Filename | /usr/local/lib/perl/5.18.2/HTTP/Parser/XS.pm
Statements | Executed 23 statements in 430µs

Subroutines
Calls | P | F | Exclusive Time | Inclusive Time | Subroutine
--- | --- | --- | --- | --- | ---
100001 | 1 | 1 | 1.57s | 1.57s | HTTP::Parser::XS::::parse_http_requestHTTP::Parser::XS::parse_http_request (xsub)
1 | 1 | 1 | 12µs | 56µs | HTTP::Parser::XS::::BEGIN@16HTTP::Parser::XS::BEGIN@16
1 | 1 | 1 | 8µs | 16µs | HTTP::Parser::XS::::BEGIN@3HTTP::Parser::XS::BEGIN@3
1 | 1 | 1 | 7µs | 70µs | HTTP::Parser::XS::::BEGIN@6HTTP::Parser::XS::BEGIN@6
1 | 1 | 1 | 6µs | 8µs | HTTP::Parser::XS::::BEGIN@4HTTP::Parser::XS::BEGIN@4
1 | 1 | 1 | 200ns | 200ns | HTTP::Parser::XS::::CORE:matchHTTP::Parser::XS::CORE:match (opcode)

Call graph for these subroutines as a Graphviz dot language file.

Line | State ments | Time on line | Calls | Time in subs | Code
--- | --- | --- | --- | --- | ---
1 |  |  |  |  | package HTTP::Parser::XS;
2 |  |  |  |  |
3 | 2 | 18µs | 2 | 25µs | # spent 16µs (8+8) within HTTP::Parser::XS::BEGIN@3 which was called: # once (8µs+8µs) by Plack::HTTPParser::try {...} at line 3 use strict; # spent 16µs making 1 call to HTTP::Parser::XS::BEGIN@3 # spent 8µs making 1 call to strict::import
4 | 2 | 23µs | 2 | 11µs | # spent 8µs (6+3) within HTTP::Parser::XS::BEGIN@4 which was called: # once (6µs+3µs) by Plack::HTTPParser::try {...} at line 4 use warnings; # spent 8µs making 1 call to HTTP::Parser::XS::BEGIN@4 # spent 3µs making 1 call to warnings::import
5 |  |  |  |  |
6 | 2 | 76µs | 2 | 134µs | # spent 70µs (7+64) within HTTP::Parser::XS::BEGIN@6 which was called: # once (7µs+64µs) by Plack::HTTPParser::try {...} at line 6 use base qw(Exporter); # spent 70µs making 1 call to HTTP::Parser::XS::BEGIN@6 # spent 64µs making 1 call to base::import
7 |  |  |  |  |
8 | 1 | 2µs |  |  | our %EXPORT_TAGS = (
9 |  |  |  |  | 'all' => [ qw/parse_http_request parse_http_response
10 |  |  |  |  | HEADERS_NONE HEADERS_AS_HASHREF HEADERS_AS_ARRAYREF/ ],
11 |  |  |  |  | );
12 | 1 | 2µs |  |  | our @EXPORT_OK = @{$EXPORT_TAGS{all}};
13 | 1 | 200ns |  |  | our @EXPORT = ();
14 |  |  |  |  |
15 |  |  |  |  | # header format for parse_http_response()
16 |  |  |  |  | # spent 56µs (12+45) within HTTP::Parser::XS::BEGIN@16 which was called: # once (12µs+45µs) by Plack::HTTPParser::try {...} at line 20 use constant {
17 | 1 | 9µs | 1 | 45µs | HEADERS_NONE => 0, # don't parse headers. It's fastest. if you want only special headers, also fastest. # spent 45µs making 1 call to constant::import
18 |  |  |  |  | HEADERS_AS_HASHREF => 1, # HTTP::Headers compatible HashRef, { header_name => "header_value" or ["val1", "val2"] }
19 |  |  |  |  | HEADERS_AS_ARRAYREF =>2, # Ordered ArrayRef : [ name, value, name2, value2 ... ]
20 | 1 | 126µs | 1 | 56µs | }; # spent 56µs making 1 call to HTTP::Parser::XS::BEGIN@16
21 |  |  |  |  |
22 | 1 | 300ns |  |  | our $VERSION = '0.16';
23 |  |  |  |  |
24 | 1 | 100ns |  |  | our $BACKEND;
25 |  |  |  |  |
26 | 1 | 9µs | 1 | 2µs | if (not __PACKAGE__->can('parse_http_response')) { # spent 2µs making 1 call to UNIVERSAL::can
27 | 1 | 800ns |  |  | $BACKEND = $ENV{PERL_HTTP_PARSER_XS} || ($ENV{PERL_ONLY} ? 'pp' : '');
28 | 1 | 4µs | 1 | 200ns | if ($BACKEND !~ /\b pp \b/xms) { # spent 200ns making 1 call to HTTP::Parser::XS::CORE:match
29 | 1 | 300ns |  |  | eval {
30 | 1 | 700ns |  |  | require XSLoader;
31 | 1 | 144µs | 1 | 139µs | XSLoader::load(__PACKAGE__, $VERSION); # spent 139µs making 1 call to XSLoader::load
32 | 1 | 600ns |  |  | $BACKEND = 'xs';
33 |  |  |  |  | };
34 | 1 | 200ns |  |  | die $@ if $@ && $BACKEND =~ /\bxs\b/;
35 |  |  |  |  | }
36 | 1 | 5µs | 1 | 1µs | if (not __PACKAGE__->can('parse_http_response')) { # spent 1µs making 1 call to UNIVERSAL::can
37 |  |  |  |  | require HTTP::Parser::XS::PP;
38 |  |  |  |  | $BACKEND = 'pp';
39 |  |  |  |  | }
40 |  |  |  |  | }
41 |  |  |  |  |
42 | 1 | 10µs |  |  | 1;
43 |  |  |  |  | __END__
|  |  |  |  | # spent 200ns within HTTP::Parser::XS::CORE:match which was called: # once (200ns+0s) by Plack::HTTPParser::try {...} at line 28 sub HTTP::Parser::XS::CORE:match; # opcode
|  |  |  |  | # spent 1.57s within HTTP::Parser::XS::parse_http_request which was called 100001 times, avg 16µs/call: # 100001 times (1.57s+0s) by HTTP::Server::PSGI::handle_connection at line 147 of HTTP/Server/PSGI.pm, avg 16µs/call sub HTTP::Parser::XS::parse_http_request; # xsub