| Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm |
| Statements | Executed 470694 statements in 23.8s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 271552 | 5 | 1 | 7.20s | 7.20s | OCBNET::CSS::Parser::CSS::CORE:subst (opcode) |
| 9988 | 2 | 1 | 7.02s | 15.5s | OCBNET::CSS::Parser::CSS::__ANON__[:252] (recurses: max depth 3, inclusive time 13.4s) |
| 20284 | 3 | 1 | 4.02s | 8.82s | OCBNET::CSS::Parser::CSS::__ANON__[:82] |
| 4752 | 1 | 1 | 3.27s | 4.48s | OCBNET::CSS::Parser::CSS::__ANON__[:154] |
| 139257 | 4 | 1 | 1.57s | 1.57s | OCBNET::CSS::Parser::CSS::CORE:regcomp (opcode) |
| 5036 | 2 | 2 | 516ms | 15.5s | OCBNET::CSS::Parser::CSS::__ANON__[:175] (recurses: max depth 2, inclusive time 12.3s) |
| 20284 | 1 | 1 | 347ms | 347ms | OCBNET::CSS::Parser::CSS::CORE:match (opcode) |
| 5020 | 4 | 1 | 106ms | 106ms | OCBNET::CSS::Parser::CSS::CORE:qr (opcode) |
| 1 | 1 | 1 | 3.09ms | 8.08ms | OCBNET::CSS::Parser::CSS::BEGIN@30 |
| 1 | 1 | 1 | 105µs | 208µs | OCBNET::CSS::Parser::CSS::BEGIN@10 |
| 1 | 1 | 1 | 57µs | 90µs | OCBNET::CSS::Parser::CSS::BEGIN@11 |
| 1 | 1 | 1 | 52µs | 52µs | OCBNET::CSS::Parser::CSS::BEGIN@19.7 |
| 1 | 1 | 1 | 52µs | 584µs | OCBNET::CSS::Parser::CSS::BEGIN@29 |
| 1 | 1 | 1 | 25µs | 25µs | OCBNET::CSS::Parser::CSS::BEGIN@22 |
| 1 | 1 | 1 | 25µs | 25µs | OCBNET::CSS::Parser::CSS::BEGIN@25 |
| 1 | 1 | 1 | 23µs | 23µs | OCBNET::CSS::Parser::CSS::BEGIN@16 |
| 1 | 1 | 1 | 22µs | 22µs | OCBNET::CSS::Parser::CSS::BEGIN@19 |
| 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 | # TODO: improve and test handling with invalid formated files | ||||
| 6 | #################################################################################################### | ||||
| 7 | package OCBNET::CSS::Parser::CSS; | ||||
| 8 | #################################################################################################### | ||||
| 9 | |||||
| 10 | 2 | 182µs | 2 | 311µs | # spent 208µs (105+103) within OCBNET::CSS::Parser::CSS::BEGIN@10 which was called:
# once (105µs+103µs) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 10 # spent 208µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@10
# spent 103µs making 1 call to strict::import |
| 11 | 2 | 216µs | 2 | 124µs | # spent 90µs (57+34) within OCBNET::CSS::Parser::CSS::BEGIN@11 which was called:
# once (57µs+34µs) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 11 # spent 90µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@11
# spent 34µs making 1 call to warnings::import |
| 12 | |||||
| 13 | #################################################################################################### | ||||
| 14 | |||||
| 15 | # define our version string | ||||
| 16 | 1 | 144µs | 1 | 23µs | # spent 23µs within OCBNET::CSS::Parser::CSS::BEGIN@16 which was called:
# once (23µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 16 # spent 23µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@16 |
| 17 | |||||
| 18 | # load exporter and inherit from it | ||||
| 19 | 3 | 359µs | 2 | 74µs | BEGIN { use Exporter qw(); our @ISA = qw(Exporter); } # spent 52µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@19.7
# spent 22µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@19 |
| 20 | |||||
| 21 | # define our functions that will be exported | ||||
| 22 | 1 | 170µs | 1 | 25µs | # spent 25µs within OCBNET::CSS::Parser::CSS::BEGIN@22 which was called:
# once (25µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 22 # spent 25µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@22 |
| 23 | |||||
| 24 | # define our functions than can be exported | ||||
| 25 | 1 | 143µs | 1 | 25µs | # spent 25µs within OCBNET::CSS::Parser::CSS::BEGIN@25 which was called:
# once (25µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 25 # spent 25µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@25 |
| 26 | |||||
| 27 | #################################################################################################### | ||||
| 28 | |||||
| 29 | 2 | 182µs | 2 | 1.12ms | # spent 584µs (52+533) within OCBNET::CSS::Parser::CSS::BEGIN@29 which was called:
# once (52µs+533µs) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 29 # spent 584µs making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@29
# spent 533µs making 1 call to Exporter::import |
| 30 | 2 | 4.75ms | 2 | 8.71ms | # spent 8.08ms (3.09+5.00) within OCBNET::CSS::Parser::CSS::BEGIN@30 which was called:
# once (3.09ms+5.00ms) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 30 # spent 8.08ms making 1 call to OCBNET::CSS::Parser::CSS::BEGIN@30
# spent 628µs making 1 call to Exporter::import |
| 31 | |||||
| 32 | #################################################################################################### | ||||
| 33 | |||||
| 34 | 1 | 700ns | our $parse_blocks; | ||
| 35 | 1 | 400ns | our $parse_bracket; | ||
| 36 | 1 | 500ns | our $parse_definition; | ||
| 37 | 1 | 400ns | our $parse_declarations; | ||
| 38 | |||||
| 39 | #################################################################################################### | ||||
| 40 | |||||
| 41 | 1 | 65µs | 1 | 18µs | our $re_option = qr/\w(?:\w|-)*\s*:\s*[^;]+;/; # spent 18µs making 1 call to OCBNET::CSS::Parser::CSS::CORE:qr |
| 42 | 1 | 139µs | 2 | 91µs | our $re_options = qr/$re_option(?:\s*$re_option)*/m; # spent 81µs making 1 call to OCBNET::CSS::Parser::CSS::CORE:regcomp
# spent 10µs making 1 call to OCBNET::CSS::Parser::CSS::CORE:qr |
| 43 | |||||
| 44 | #################################################################################################### | ||||
| 45 | |||||
| 46 | 1 | 128µs | 6 | 51µs | my $re_closer = # spent 51µs making 6 calls to OCBNET::CSS::Parser::CSS::CORE:qr, avg 9µs/call |
| 47 | { | ||||
| 48 | "" => qr/\A\z/, | ||||
| 49 | "\(" => qr/\A(\)|\z)/, | ||||
| 50 | "\[" => qr/\A(\]|\z)/, | ||||
| 51 | "\{" => qr/\A(\}|\z)/, | ||||
| 52 | "\"" => qr/\A(\"|\z)/, | ||||
| 53 | "\'" => qr/\A(\'|\z)/ | ||||
| 54 | }; | ||||
| 55 | |||||
| 56 | #################################################################################################### | ||||
| 57 | |||||
| 58 | # rename either one of parse_decl subs | ||||
| 59 | $parse_definition = sub | ||||
| 60 | # spent 8.82s (4.02+4.81) within OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82] which was called 20284 times, avg 435µs/call:
# 10036 times (2.38s+3.92s) by OCBNET::Spritesets::CSS::Parser::read at line 182 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 628µs/call
# 5296 times (780ms+427ms) by OCBNET::Spritesets::CSS::Parser::read at line 138 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 228µs/call
# 4952 times (857ms+457ms) by OCBNET::Spritesets::CSS::Parser::read at line 179 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 265µs/call | ||||
| 61 | |||||
| 62 | 20284 | 115ms | my ($option, $code) = @_; | ||
| 63 | |||||
| 64 | # remove whitespace from body | ||||
| 65 | 20284 | 1.45s | 20284 | 1.09s | $code =~ s/(?:\A\s+|\s+\z)//gm; # spent 1.09s making 20284 calls to OCBNET::CSS::Parser::CSS::CORE:subst, avg 54µs/call |
| 66 | |||||
| 67 | # check if this is a valid sprite option block | ||||
| 68 | 20284 | 1.44s | 40568 | 445ms | return unless $code =~ m/^\s*$re_options(?:\s|\n)*\z/m; # spent 347ms making 20284 calls to OCBNET::CSS::Parser::CSS::CORE:match, avg 17µs/call
# spent 98.2ms making 20284 calls to OCBNET::CSS::Parser::CSS::CORE:regcomp, avg 5µs/call |
| 69 | |||||
| 70 | # split all declarations | ||||
| 71 | 34672 | 503ms | my @declarations = map { | ||
| 72 | 14908 | 693ms | [ split(/\s*:\s*/, $_, 2) ] | ||
| 73 | } split(/\s*;\s*/, $code); | ||||
| 74 | |||||
| 75 | # set option via our css system | ||||
| 76 | 14908 | 69.0ms | foreach my $item (@declarations) | ||
| 77 | 34672 | 587ms | 34672 | 3.27s | { $option->set(lc $item->[0], $item->[1]); } # spent 3.27s making 34672 calls to OCBNET::Spritesets::CSS::Collection::set, avg 94µs/call |
| 78 | |||||
| 79 | # return object | ||||
| 80 | 14908 | 495ms | return $option; | ||
| 81 | |||||
| 82 | 1 | 16µs | }; | ||
| 83 | |||||
| 84 | # parse all declaration in given data | ||||
| 85 | # usefull to parse css selector blocks | ||||
| 86 | # also used to parse spriteset comments | ||||
| 87 | # ****************************************************************************** | ||||
| 88 | $parse_declarations = sub | ||||
| 89 | # spent 4.48s (3.27+1.20) within OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:154] which was called 4752 times, avg 942µs/call:
# 4752 times (3.27s+1.20s) by OCBNET::Spritesets::CSS::Block::parse at line 43 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Block.pm, avg 942µs/call | ||||
| 90 | |||||
| 91 | # get stylesheet | ||||
| 92 | 4752 | 17.2ms | my ($data) = @_; | ||
| 93 | |||||
| 94 | # array of rules | ||||
| 95 | 4752 | 6.70ms | my @declarations; | ||
| 96 | |||||
| 97 | # loop until no more data | ||||
| 98 | 4752 | 18.8ms | while (${$data} ne '') | ||
| 99 | { | ||||
| 100 | # consume data | ||||
| 101 | 28240 | 2.30s | 56480 | 982ms | if (${$data} =~ # spent 786ms making 28240 calls to OCBNET::CSS::Parser::CSS::CORE:subst, avg 28µs/call
# spent 196ms making 28240 calls to OCBNET::CSS::Parser::CSS::CORE:regcomp, avg 7µs/call |
| 102 | s/^ | ||||
| 103 | ( | ||||
| 104 | (?: | ||||
| 105 | # escaped char | ||||
| 106 | (?: \\ .)+ | | ||||
| 107 | # comment or only a slash | ||||
| 108 | \/+ (?:\*+ .*? \*+ \/+)? | | ||||
| 109 | # a string in delimiters | ||||
| 110 | \" $re_quot \" | \' $re_apo \' | | ||||
| 111 | # not the delimiter | ||||
| 112 | [^\:\;\/]+ | ||||
| 113 | )* | ||||
| 114 | ) | ||||
| 115 | ( | ||||
| 116 | (?:\: | ||||
| 117 | # escaped char | ||||
| 118 | (?: \\ .)+ | | ||||
| 119 | # comment or only a slash | ||||
| 120 | \/+ (?:\*+ .*? \*+ \/+)? | | ||||
| 121 | # a string in delimiters | ||||
| 122 | \" $re_quot \" | \' $re_apo \' | | ||||
| 123 | # not the delimiter | ||||
| 124 | [^\;\/]+ | ||||
| 125 | )* | ||||
| 126 | (?:\;|\z) | ||||
| 127 | ) | ||||
| 128 | //xs | ||||
| 129 | ) | ||||
| 130 | { | ||||
| 131 | |||||
| 132 | # store the name and the config | ||||
| 133 | # create a copy for stripped version | ||||
| 134 | 28240 | 470ms | my $declaration = [$1, $2, $1, $2]; | ||
| 135 | |||||
| 136 | # strip comments from declaration copy | ||||
| 137 | 28240 | 816ms | 28240 | 162ms | $declaration->[2] =~ s/\/\*\s*.*?\s*\*\///gs; # spent 162ms making 28240 calls to OCBNET::CSS::Parser::CSS::CORE:subst, avg 6µs/call |
| 138 | 28240 | 618ms | 28240 | 57.4ms | $declaration->[3] =~ s/\/\*\s*.*?\s*\*\///gs; # spent 57.4ms making 28240 calls to OCBNET::CSS::Parser::CSS::CORE:subst, avg 2µs/call |
| 139 | |||||
| 140 | # store in order into array | ||||
| 141 | 28240 | 159ms | push @declarations, $declaration; | ||
| 142 | |||||
| 143 | } | ||||
| 144 | else | ||||
| 145 | { | ||||
| 146 | # this should not happen, investigate further | ||||
| 147 | die "Fatal: CSS parse error: ", substr(${$data}, 0, 110); | ||||
| 148 | } | ||||
| 149 | } | ||||
| 150 | |||||
| 151 | # return parsed declarations | ||||
| 152 | 4752 | 205ms | return \ @declarations; | ||
| 153 | |||||
| 154 | 1 | 11µs | }; | ||
| 155 | # EO sub $parse_declarations | ||||
| 156 | |||||
| 157 | #################################################################################################### | ||||
| 158 | |||||
| 159 | # parse the css into blocks | ||||
| 160 | $parse_blocks = sub | ||||
| 161 | # spent 15.5s (516ms+15.0) within OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:175] which was called 5036 times, avg 3.08ms/call:
# 5012 times (514ms+-514ms) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] at line 221, avg 0s/call
# 24 times (1.75ms+15.5s) by OCBNET::Spritesets::CSS::Parser::read at line 95 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 646ms/call | ||||
| 162 | |||||
| 163 | # get passed input arguments | ||||
| 164 | 5036 | 28.2ms | my ($data, $parent, $clause) = @_; | ||
| 165 | |||||
| 166 | # create new block node with the given parent | ||||
| 167 | 5036 | 131ms | 5036 | 700ms | my $block = OCBNET::Spritesets::CSS::Block->new($parent); # spent 700ms making 5036 calls to OCBNET::Spritesets::CSS::Block::new, avg 139µs/call |
| 168 | |||||
| 169 | # parse the new block as normal bracket block | ||||
| 170 | 5036 | 65.7ms | 5036 | 15.5s | $parse_bracket->($data, $block, '', $clause); # spent 26.6s making 5036 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252], avg 5.28ms/call, recursion: max depth 2, sum of overlapping time 11.1s |
| 171 | |||||
| 172 | # return object | ||||
| 173 | 5036 | 172ms | return $parent; | ||
| 174 | |||||
| 175 | 1 | 9µs | }; | ||
| 176 | |||||
| 177 | #################################################################################################### | ||||
| 178 | |||||
| 179 | # parse a bracket block | ||||
| 180 | $parse_bracket = sub | ||||
| 181 | # spent 15.5s (7.02+8.47) within OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] which was called 9988 times, avg 1.55ms/call:
# 5036 times (6.02s+9.47s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:175] at line 170, avg 3.08ms/call
# 4952 times (995ms+-995ms) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] at line 230, avg 0s/call | ||||
| 182 | |||||
| 183 | # get passed input arguments | ||||
| 184 | 9988 | 69.7ms | my ($data, $block, $opener, $clause) = @_; | ||
| 185 | |||||
| 186 | # add opener to head if defined | ||||
| 187 | 9988 | 40.1ms | $block->{'head'} .= $opener if $opener; | ||
| 188 | |||||
| 189 | # repeat until all the data is parsed | ||||
| 190 | # be sure to include an abort clause | ||||
| 191 | 9988 | 14.9ms | while(1) | ||
| 192 | { | ||||
| 193 | |||||
| 194 | # simpler grammars | ||||
| 195 | 50480 | 12.2s | 257280 | 6.38s | if (${$data} =~ s/^( # spent 5.10s making 166548 calls to OCBNET::CSS::Parser::CSS::CORE:subst, avg 31µs/call
# spent 1.28s making 90732 calls to OCBNET::CSS::Parser::CSS::CORE:regcomp, avg 14µs/call |
| 196 | # escaped char | ||||
| 197 | (?: \\ .)+ | | ||||
| 198 | # comment or only a slash | ||||
| 199 | \/+ (?:\* .*? \*\/+)? | | ||||
| 200 | # a string in delimiters | ||||
| 201 | \" $re_quot \" | \' $re_apo \' | ||||
| 202 | )//xs) | ||||
| 203 | { | ||||
| 204 | # just store the match | ||||
| 205 | $block->{'head'} .= $1; | ||||
| 206 | } | ||||
| 207 | |||||
| 208 | # check if we found our exit clause | ||||
| 209 | elsif (${$data} =~ s/^($clause)//s) | ||||
| 210 | { | ||||
| 211 | # add closer to head if defined | ||||
| 212 | 9988 | 71.8ms | $block->{'head'} .= $1 if $opener; | ||
| 213 | # return the block node | ||||
| 214 | 9988 | 366ms | return $block; | ||
| 215 | } | ||||
| 216 | |||||
| 217 | # parse an inner block recursive | ||||
| 218 | elsif (${$data} =~ s/^(\{)//s) | ||||
| 219 | { | ||||
| 220 | # parse this one block body | ||||
| 221 | 5012 | 352ms | 10024 | 106ms | $parse_blocks->($data, $block, qr/^(\})/); # spent 106ms making 5012 calls to OCBNET::CSS::Parser::CSS::CORE:qr, avg 21µs/call
# spent 12.3s making 5012 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:175], avg 2.45ms/call, recursion: max depth 2, sum of overlapping time 12.3s |
| 222 | # create new block node with the given parent | ||||
| 223 | 5012 | 202ms | 5012 | 773ms | $block = OCBNET::Spritesets::CSS::Block->new($block->{'parent'}); # spent 773ms making 5012 calls to OCBNET::Spritesets::CSS::Block::new, avg 154µs/call |
| 224 | } | ||||
| 225 | |||||
| 226 | # parse further for a bracket | ||||
| 227 | elsif (${$data} =~ s/^(\(|\[)//s) | ||||
| 228 | { | ||||
| 229 | # parse a default bracket block | ||||
| 230 | 4952 | 140ms | 4952 | 0s | $parse_bracket->($data, $block, $1, $re_closer->{$1}); # spent 2.32s making 4952 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252], avg 468µs/call, recursion: max depth 3, sum of overlapping time 2.32s |
| 231 | } | ||||
| 232 | |||||
| 233 | # parse unimportant chars in this context | ||||
| 234 | elsif (${$data} =~ s/^([^\{\}\[\]\(\)\"\'\/]+)//s) | ||||
| 235 | { | ||||
| 236 | $block->{'head'} .= $1; | ||||
| 237 | } | ||||
| 238 | |||||
| 239 | # invalid parsing | ||||
| 240 | else | ||||
| 241 | { | ||||
| 242 | # this should not happen, investigate further | ||||
| 243 | die "Fatal: CSS parse error: ", substr(${$data}, 0, 10); | ||||
| 244 | } | ||||
| 245 | |||||
| 246 | } | ||||
| 247 | # EO while 1 | ||||
| 248 | |||||
| 249 | # this should not happen, investigate further | ||||
| 250 | die "Fatal: Escaped endless parse loop?"; | ||||
| 251 | |||||
| 252 | 1 | 11µs | }; | ||
| 253 | |||||
| 254 | #################################################################################################### | ||||
| 255 | #################################################################################################### | ||||
| 256 | 1 | 36µs | 1; | ||
# spent 347ms within OCBNET::CSS::Parser::CSS::CORE:match which was called 20284 times, avg 17µs/call:
# 20284 times (347ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82] at line 68, avg 17µs/call | |||||
# spent 106ms within OCBNET::CSS::Parser::CSS::CORE:qr which was called 5020 times, avg 21µs/call:
# 5012 times (106ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] at line 221, avg 21µs/call
# 6 times (51µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 46, avg 9µs/call
# once (18µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 41
# once (10µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 42 | |||||
# spent 1.57s within OCBNET::CSS::Parser::CSS::CORE:regcomp which was called 139257 times, avg 11µs/call:
# 90732 times (1.28s+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] at line 195, avg 14µs/call
# 28240 times (196ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:154] at line 101, avg 7µs/call
# 20284 times (98.2ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82] at line 68, avg 5µs/call
# once (81µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@23 at line 42 | |||||
# spent 7.20s within OCBNET::CSS::Parser::CSS::CORE:subst which was called 271552 times, avg 27µs/call:
# 166548 times (5.10s+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:252] at line 195, avg 31µs/call
# 28240 times (786ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:154] at line 101, avg 28µs/call
# 28240 times (162ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:154] at line 137, avg 6µs/call
# 28240 times (57.4ms+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:154] at line 138, avg 2µs/call
# 20284 times (1.09s+0s) by OCBNET::CSS::Parser::CSS::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82] at line 65, avg 54µs/call |