← Index
NYTProf Performance Profile   « line view »
For index.cgi
  Run on Sat May 9 17:18:47 2020
Reported on Sat May 9 17:19:07 2020

Filename/usr/lib/perl/5.18/Unicode/Normalize.pm
StatementsExecuted 1181 statements in 7.73ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
386114.42ms4.42msUnicode::Normalize::::NFCUnicode::Normalize::NFC (xsub)
386111.85ms6.27msUnicode::Normalize::::normalizeUnicode::Normalize::normalize
111102µs102µsUnicode::Normalize::::bootstrapUnicode::Normalize::bootstrap (xsub)
11115µs21µsUnicode::Normalize::::BEGIN@11Unicode::Normalize::BEGIN@11
11113µs13µsUnicode::Normalize::::BEGIN@9Unicode::Normalize::BEGIN@9
11110µs22µsUnicode::Normalize::::BEGIN@14Unicode::Normalize::BEGIN@14
1119µs54µsUnicode::Normalize::::BEGIN@12Unicode::Normalize::BEGIN@12
1118µs25µsUnicode::Normalize::::BEGIN@10Unicode::Normalize::BEGIN@10
1115µs5µsUnicode::Normalize::::BEGIN@3Unicode::Normalize::BEGIN@3
0000s0sUnicode::Normalize::::FCDUnicode::Normalize::FCD
0000s0sUnicode::Normalize::::NFC_partialUnicode::Normalize::NFC_partial
0000s0sUnicode::Normalize::::NFD_partialUnicode::Normalize::NFD_partial
0000s0sUnicode::Normalize::::NFKC_partialUnicode::Normalize::NFKC_partial
0000s0sUnicode::Normalize::::NFKD_partialUnicode::Normalize::NFKD_partial
0000s0sUnicode::Normalize::::checkUnicode::Normalize::check
0000s0sUnicode::Normalize::::normalize_partialUnicode::Normalize::normalize_partial
0000s0sUnicode::Normalize::::pack_UUnicode::Normalize::pack_U
0000s0sUnicode::Normalize::::unpack_UUnicode::Normalize::unpack_U
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Unicode::Normalize;
2
3
# spent 5µs within Unicode::Normalize::BEGIN@3 which was called: # once (5µs+0s) by String::Markov::BEGIN@11 at line 7
BEGIN {
4113µs120µs unless ("A" eq pack('U', 0x41)) {
# spent 20µs making 1 call to main::CORE:pack
5 die "Unicode::Normalize cannot stringify a Unicode code point\n";
6 }
7124µs15µs}
# spent 5µs making 1 call to Unicode::Normalize::BEGIN@3
8
9255µs113µs
# spent 13µs within Unicode::Normalize::BEGIN@9 which was called: # once (13µs+0s) by String::Markov::BEGIN@11 at line 9
use 5.006;
# spent 13µs making 1 call to Unicode::Normalize::BEGIN@9
10228µs242µs
# spent 25µs (8+17) within Unicode::Normalize::BEGIN@10 which was called: # once (8µs+17µs) by String::Markov::BEGIN@11 at line 10
use strict;
# spent 25µs making 1 call to Unicode::Normalize::BEGIN@10 # spent 17µs making 1 call to strict::import
11227µs228µs
# spent 21µs (15+7) within Unicode::Normalize::BEGIN@11 which was called: # once (15µs+7µs) by String::Markov::BEGIN@11 at line 11
use warnings;
# spent 21µs making 1 call to Unicode::Normalize::BEGIN@11 # spent 6µs making 1 call to warnings::import
12234µs2100µs
# spent 54µs (9+45) within Unicode::Normalize::BEGIN@12 which was called: # once (9µs+45µs) by String::Markov::BEGIN@11 at line 12
use Carp;
# spent 54µs making 1 call to Unicode::Normalize::BEGIN@12 # spent 45µs making 1 call to Exporter::import
13
142848µs235µs
# spent 22µs (10+13) within Unicode::Normalize::BEGIN@14 which was called: # once (10µs+13µs) by String::Markov::BEGIN@11 at line 14
no warnings 'utf8';
# spent 22µs making 1 call to Unicode::Normalize::BEGIN@14 # spent 13µs making 1 call to warnings::unimport
15
1611µsour $VERSION = '1.16';
171200nsour $PACKAGE = __PACKAGE__;
18
1912µsour @EXPORT = qw( NFC NFD NFKC NFKD );
2015µsour @EXPORT_OK = qw(
21 normalize decompose reorder compose
22 checkNFD checkNFKD checkNFC checkNFKC check
23 getCanon getCompat getComposite getCombinClass
24 isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex
25 isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE
26 FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter
27 normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial
28);
29110µsour %EXPORT_TAGS = (
30 all => [ @EXPORT, @EXPORT_OK ],
31 normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ],
32 check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ],
33 fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ],
34);
35
36##
37## utilities for tests
38##
39
40sub pack_U {
41 return pack('U*', @_);
42}
43
44sub unpack_U {
4512µs return unpack('U*', shift(@_).pack('U*'));
# spent 2µs making 1 call to main::CORE:pack
46}
47
481500nsrequire Exporter;
49
50##### The above part is common to XS and PP #####
51
52110µsour @ISA = qw(Exporter DynaLoader);
531115µsrequire DynaLoader;
5419µs1734µsbootstrap Unicode::Normalize $VERSION;
# spent 734µs making 1 call to DynaLoader::bootstrap
55
56##### The below part is common to XS and PP #####
57
58##
59## normalize
60##
61
62sub FCD ($) {
63 my $str = shift;
64 return checkFCD($str) ? $str : NFD($str);
65}
66
6716µsour %formNorm = (
68 NFC => \&NFC, C => \&NFC,
69 NFD => \&NFD, D => \&NFD,
70 NFKC => \&NFKC, KC => \&NFKC,
71 NFKD => \&NFKD, KD => \&NFKD,
72 FCD => \&FCD, FCC => \&FCC,
73);
74
75sub normalize($$)
76
# spent 6.27ms (1.85+4.42) within Unicode::Normalize::normalize which was called 386 times, avg 16µs/call: # 386 times (1.85ms+4.42ms) by String::Markov::split_line at line 87 of String/Markov.pm, avg 16µs/call
{
77386123µs my $form = shift;
7838697µs my $str = shift;
793866.30ms3864.42ms if (exists $formNorm{$form}) {
# spent 4.42ms making 386 calls to Unicode::Normalize::NFC, avg 11µs/call
80 return $formNorm{$form}->($str);
81 }
82 croak($PACKAGE."::normalize: invalid form name: $form");
83}
84
85##
86## partial
87##
88
89sub normalize_partial ($$) {
90 if (exists $formNorm{$_[0]}) {
91 my $n = normalize($_[0], $_[1]);
92 my($p, $u) = splitOnLastStarter($n);
93 $_[1] = $u;
94 return $p;
95 }
96 croak($PACKAGE."::normalize_partial: invalid form name: $_[0]");
97}
98
99sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) }
100sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) }
101sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) }
102sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) }
103
104##
105## check
106##
107
10813µsour %formCheck = (
109 NFC => \&checkNFC, C => \&checkNFC,
110 NFD => \&checkNFD, D => \&checkNFD,
111 NFKC => \&checkNFKC, KC => \&checkNFKC,
112 NFKD => \&checkNFKD, KD => \&checkNFKD,
113 FCD => \&checkFCD, FCC => \&checkFCC,
114);
115
116sub check($$)
117{
118 my $form = shift;
119 my $str = shift;
120 if (exists $formCheck{$form}) {
121 return $formCheck{$form}->($str);
122 }
123 croak($PACKAGE."::check: invalid form name: $form");
124}
125
126119µs1;
127__END__
 
# spent 4.42ms within Unicode::Normalize::NFC which was called 386 times, avg 11µs/call: # 386 times (4.42ms+0s) by Unicode::Normalize::normalize at line 79, avg 11µs/call
sub Unicode::Normalize::NFC; # xsub
# spent 102µs within Unicode::Normalize::bootstrap which was called: # once (102µs+0s) by DynaLoader::bootstrap at line 207 of DynaLoader.pm
sub Unicode::Normalize::bootstrap; # xsub