Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/Base.pm |
Statements | Executed 182714 statements in 6.58s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
68992 | 8 | 2 | 2.41s | 2.92s | fromPx | OCBNET::CSS::Parser::Base::
73848 | 8 | 1 | 798ms | 798ms | CORE:match (opcode) | OCBNET::CSS::Parser::Base::
9880 | 3 | 2 | 652ms | 1.04s | fromUrl (recurses: max depth 1, inclusive time 577ms) | OCBNET::CSS::Parser::Base::
10072 | 1 | 1 | 498ms | 732ms | uncomment | OCBNET::CSS::Parser::Base::
9856 | 1 | 1 | 485ms | 582ms | fromPosition | OCBNET::CSS::Parser::Base::
53009 | 4 | 1 | 263ms | 263ms | CORE:regcomp (opcode) | OCBNET::CSS::Parser::Base::
10072 | 1 | 1 | 171ms | 171ms | CORE:subst (opcode) | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 202µs | 232µs | BEGIN@9 | OCBNET::CSS::Parser::Base::
7 | 7 | 1 | 92µs | 92µs | CORE:qr (opcode) | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 82µs | 180µs | BEGIN@8 | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 52µs | 52µs | BEGIN@17.3 | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 32µs | 32µs | BEGIN@14 | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 29µs | 29µs | BEGIN@20 | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 27µs | 27µs | BEGIN@23 | OCBNET::CSS::Parser::Base::
1 | 1 | 1 | 24µs | 24µs | BEGIN@17 | OCBNET::CSS::Parser::Base::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | ################################################################################################### | ||||
2 | # Copyright 2013 by Marcel Greter | ||||
3 | # This file is part of Webmerge (GPL3) | ||||
4 | #################################################################################################### | ||||
5 | package OCBNET::CSS::Parser::Base; | ||||
6 | #################################################################################################### | ||||
7 | |||||
8 | 2 | 150µs | 2 | 279µs | # spent 180µs (82+99) within OCBNET::CSS::Parser::Base::BEGIN@8 which was called:
# once (82µs+99µs) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 8 # spent 180µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@8
# spent 99µs making 1 call to strict::import |
9 | 2 | 338µs | 2 | 262µs | # spent 232µs (202+30) within OCBNET::CSS::Parser::Base::BEGIN@9 which was called:
# once (202µs+30µs) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 9 # spent 232µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@9
# spent 30µs making 1 call to warnings::import |
10 | |||||
11 | #################################################################################################### | ||||
12 | |||||
13 | # define our version string | ||||
14 | 1 | 183µs | 1 | 32µs | # spent 32µs within OCBNET::CSS::Parser::Base::BEGIN@14 which was called:
# once (32µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 14 # spent 32µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@14 |
15 | |||||
16 | # load exporter and inherit from it | ||||
17 | 3 | 400µs | 2 | 76µs | # spent 24µs within OCBNET::CSS::Parser::Base::BEGIN@17 which was called:
# once (24µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 17
# spent 52µs within OCBNET::CSS::Parser::Base::BEGIN@17.3 which was called:
# once (52µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 17 # spent 52µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@17.3
# spent 24µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@17 |
18 | |||||
19 | # define our functions that will be exported | ||||
20 | 1 | 176µs | 1 | 29µs | # spent 29µs within OCBNET::CSS::Parser::Base::BEGIN@20 which was called:
# once (29µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 20 # spent 29µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@20 |
21 | |||||
22 | # define our functions than can be exported | ||||
23 | 1 | 2.36ms | 1 | 27µs | # spent 27µs within OCBNET::CSS::Parser::Base::BEGIN@23 which was called:
# once (27µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 23 # spent 27µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@23 |
24 | |||||
25 | #################################################################################################### | ||||
26 | # base regular expressions | ||||
27 | #################################################################################################### | ||||
28 | |||||
29 | # match text in apos or quotes | ||||
30 | #************************************************************************************************** | ||||
31 | 1 | 77µs | 1 | 37µs | our $re_apo = qr/(?:[^\'\\]+|\\.)*/s; # spent 37µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
32 | 1 | 26µs | 1 | 9µs | our $re_quot = qr/(?:[^\"\\]+|\\.)*/s; # spent 9µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
33 | |||||
34 | # match a multiline comment | ||||
35 | #************************************************************************************************** | ||||
36 | 1 | 24µs | 1 | 8µs | our $re_comment = qr/\/\*\s*(.*?)\s*\*\//s; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
37 | |||||
38 | # match a css identifier name | ||||
39 | #************************************************************************************************** | ||||
40 | 1 | 25µs | 1 | 8µs | our $re_css_name = qr/[_a-zA-Z][_a-zA-Z0-9\-]*/; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
41 | |||||
42 | # match (floating point) numbers | ||||
43 | #************************************************************************************************** | ||||
44 | 1 | 30µs | 1 | 14µs | our $re_number = qr/[\-\+]?[0-9]*\.?[0-9]+/s; # spent 14µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
45 | # our $re_number_neg = qr/\-[0-9]*\.?[0-9]+/s; | ||||
46 | # our $re_number_pos = qr/\+?[0-9]*\.?[0-9]+/s; | ||||
47 | |||||
48 | # match a percent value | ||||
49 | #************************************************************************************************** | ||||
50 | 1 | 104µs | 2 | 58µs | our $re_percent = qr/$re_number\%/s; # spent 50µs making 1 call to OCBNET::CSS::Parser::Base::CORE:regcomp
# spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
51 | |||||
52 | # match a number from 0 to 255 (strict match) | ||||
53 | #************************************************************************************************** | ||||
54 | 1 | 30µs | 1 | 8µs | our $re_byte = qr/(?:0|[1-9]\d?|1\d{2}|2(?:[0-4]\d|5[0-5]))/s; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
55 | |||||
56 | #################################################################################################### | ||||
57 | # some helper functions | ||||
58 | #################################################################################################### | ||||
59 | |||||
60 | # parse dimension from pixel | ||||
61 | #************************************************************************************************** | ||||
62 | sub uncomment | ||||
63 | # spent 732ms (498+234) within OCBNET::CSS::Parser::Base::uncomment which was called 10072 times, avg 73µs/call:
# 10072 times (498ms+234ms) by OCBNET::Spritesets::CSS::Parser::read at line 117 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 73µs/call | ||||
64 | # remove comment from actual value | ||||
65 | 10072 | 606ms | 20144 | 234ms | $_[0] =~ s/$re_comment//gm; # spent 171ms making 10072 calls to OCBNET::CSS::Parser::Base::CORE:subst, avg 17µs/call
# spent 63.3ms making 10072 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 6µs/call |
66 | # return the given value | ||||
67 | 10072 | 292ms | return $_[0]; | ||
68 | } | ||||
69 | # EO sub uncomment | ||||
70 | |||||
71 | # parse dimension from pixel | ||||
72 | #************************************************************************************************** | ||||
73 | sub fromPx | ||||
74 | # spent 2.92s (2.41+510ms) within OCBNET::CSS::Parser::Base::fromPx which was called 68992 times, avg 42µs/call:
# 19712 times (799ms+182ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 50µs/call
# 9856 times (569ms+169ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 55 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 75µs/call
# 9856 times (125ms+14.7ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 56 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 14µs/call
# 9856 times (96.4ms+0s) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 57 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 10µs/call
# 4928 times (230ms+39.1ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 69 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 55µs/call
# 4928 times (217ms+35.2ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 72 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 51µs/call
# 4928 times (187ms+34.8ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 70 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 45µs/call
# 4928 times (186ms+34.7ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 71 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 45µs/call | ||||
75 | # return undef if nothing passed | ||||
76 | 68992 | 721ms | return unless defined $_[0]; | ||
77 | # parse number via regular expression | ||||
78 | 41080 | 3.14s | 82160 | 510ms | $_[0] =~ m/($re_number)px/i ? $1 : $_[0]; # spent 319ms making 41080 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 8µs/call
# spent 190ms making 41080 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 5µs/call |
79 | } | ||||
80 | |||||
81 | # parse an url | ||||
82 | #************************************************************************************************** | ||||
83 | sub fromUrl | ||||
84 | # spent 1.04s (652ms+392ms) within OCBNET::CSS::Parser::Base::fromUrl which was called 9880 times, avg 106µs/call:
# 4940 times (429ms+-429ms) by OCBNET::CSS::Parser::Base::fromUrl at line 86, avg 0s/call
# 4928 times (222ms+819ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 211µs/call
# 12 times (488µs+1.55ms) by OCBNET::Spritesets::CSS::Parser::write at line 404 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 170µs/call | ||||
85 | # check for css url pattern (call again to unwrap quotes) | ||||
86 | 9880 | 638ms | 14820 | 297ms | return fromUrl($1) if $_[0] =~ m/^\s*url\(\s*(.*?)\s*\)\s*$/m; # spent 297ms making 9880 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 30µs/call
# spent 577ms making 4940 calls to OCBNET::CSS::Parser::Base::fromUrl, avg 117µs/call, recursion: max depth 1, sum of overlapping time 577ms |
87 | # unwrap quotes if there are any | ||||
88 | 4940 | 191ms | 4940 | 28.5ms | return $1 if $_[0] =~ m/^\"(.*?)\"\z/m; # spent 28.5ms making 4940 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 6µs/call |
89 | 4940 | 274ms | 4940 | 65.9ms | return $1 if $_[0] =~ m/^\'(.*?)\'\z/m; # spent 65.9ms making 4940 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 13µs/call |
90 | # return same as given | ||||
91 | return $_[0]; | ||||
92 | } | ||||
93 | |||||
94 | # parse background position | ||||
95 | #************************************************************************************************** | ||||
96 | sub fromPosition | ||||
97 | # spent 582ms (485+96.9) within OCBNET::CSS::Parser::Base::fromPosition which was called 9856 times, avg 59µs/call:
# 9856 times (485ms+96.9ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 59µs/call | ||||
98 | |||||
99 | # get position string | ||||
100 | 9856 | 37.2ms | my ($position) = @_; | ||
101 | |||||
102 | # default to left/top position | ||||
103 | 9856 | 9.64ms | return 0 unless (defined $position); | ||
104 | |||||
105 | # allow keywords for left and top position | ||||
106 | 9856 | 465ms | 9856 | 59.5ms | return 0 if ($position =~ m/^(?:top|left)$/i); # spent 59.5ms making 9856 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 6µs/call |
107 | |||||
108 | # return the parsed pixel number if matched | ||||
109 | 1856 | 150ms | 3712 | 31.0ms | return $1 if ($position =~ m/^($re_number)(?:px)?$/i); # spent 21.4ms making 1856 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 12µs/call
# spent 9.58ms making 1856 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 5µs/call |
110 | |||||
111 | # right/bottom are the only valid keywords | ||||
112 | # for the position for most other functions | ||||
113 | 864 | 41.6ms | 864 | 4.35ms | return 'right' if ($position =~ m/^right$/i); # spent 4.35ms making 864 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 5µs/call |
114 | 432 | 13.9ms | 432 | 2.09ms | return 'bottom' if ($position =~ m/^bottom$/i); # spent 2.09ms making 432 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 5µs/call |
115 | |||||
116 | # die with a fatal error for invalid positions | ||||
117 | die "unknown background position: <$position>"; | ||||
118 | |||||
119 | } | ||||
120 | |||||
121 | #################################################################################################### | ||||
122 | #################################################################################################### | ||||
123 | 1 | 36µs | 1; | ||
# spent 798ms within OCBNET::CSS::Parser::Base::CORE:match which was called 73848 times, avg 11µs/call:
# 41080 times (319ms+0s) by OCBNET::CSS::Parser::Base::fromPx at line 78, avg 8µs/call
# 9880 times (297ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 86, avg 30µs/call
# 9856 times (59.5ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 106, avg 6µs/call
# 4940 times (65.9ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 89, avg 13µs/call
# 4940 times (28.5ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 88, avg 6µs/call
# 1856 times (21.4ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 109, avg 12µs/call
# 864 times (4.35ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 113, avg 5µs/call
# 432 times (2.09ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 114, avg 5µs/call | |||||
# spent 92µs within OCBNET::CSS::Parser::Base::CORE:qr which was called 7 times, avg 13µs/call:
# once (37µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 31
# once (14µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 44
# once (9µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 32
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 50
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 54
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 36
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 40 | |||||
# spent 263ms within OCBNET::CSS::Parser::Base::CORE:regcomp which was called 53009 times, avg 5µs/call:
# 41080 times (190ms+0s) by OCBNET::CSS::Parser::Base::fromPx at line 78, avg 5µs/call
# 10072 times (63.3ms+0s) by OCBNET::CSS::Parser::Base::uncomment at line 65, avg 6µs/call
# 1856 times (9.58ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 109, avg 5µs/call
# once (50µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 50 | |||||
# spent 171ms within OCBNET::CSS::Parser::Base::CORE:subst which was called 10072 times, avg 17µs/call:
# 10072 times (171ms+0s) by OCBNET::CSS::Parser::Base::uncomment at line 65, avg 17µs/call |