| Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/CSS/Collection.pm |
| Statements | Executed 2855794 statements in 37.8s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 523592 | 13 | 3 | 28.1s | 30.3s | OCBNET::Spritesets::CSS::Collection::get (recurses: max depth 2, inclusive time 15.6s) |
| 46188 | 20 | 3 | 3.00s | 3.30s | OCBNET::Spritesets::CSS::Collection::set (recurses: max depth 1, inclusive time 598ms) |
| 554796 | 12 | 1 | 2.27s | 2.27s | OCBNET::Spritesets::CSS::Collection::CORE:match (opcode) |
| 25392 | 2 | 2 | 391ms | 391ms | OCBNET::Spritesets::CSS::Collection::new |
| 46188 | 1 | 1 | 129ms | 129ms | OCBNET::Spritesets::CSS::Collection::CORE:subst (opcode) |
| 5308 | 2 | 1 | 68.9ms | 68.9ms | OCBNET::Spritesets::CSS::Collection::defined |
| 11497 | 14 | 1 | 66.6ms | 66.6ms | OCBNET::Spritesets::CSS::Collection::CORE:regcomp (opcode) |
| 1 | 1 | 1 | 8.95ms | 14.1ms | OCBNET::Spritesets::CSS::Collection::BEGIN@16 |
| 1 | 1 | 1 | 94µs | 236µs | OCBNET::Spritesets::CSS::Collection::BEGIN@10 |
| 1 | 1 | 1 | 73µs | 106µs | OCBNET::Spritesets::CSS::Collection::BEGIN@11 |
| 7 | 7 | 1 | 69µs | 69µs | OCBNET::Spritesets::CSS::Collection::CORE:qr (opcode) |
| 1 | 1 | 1 | 58µs | 762µs | OCBNET::Spritesets::CSS::Collection::BEGIN@15 |
| 0 | 0 | 0 | 0s | 0s | OCBNET::Spritesets::CSS::Collection::exists |
| 0 | 0 | 0 | 0s | 0s | OCBNET::Spritesets::CSS::Collection::keys |
| 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: Move bits to separated packages | ||||
| 6 | #################################################################################################### | ||||
| 7 | package OCBNET::Spritesets::CSS::Collection; | ||||
| 8 | #################################################################################################### | ||||
| 9 | |||||
| 10 | 2 | 175µs | 2 | 378µs | # spent 236µs (94+142) within OCBNET::Spritesets::CSS::Collection::BEGIN@10 which was called:
# once (94µs+142µs) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 10 # spent 236µs making 1 call to OCBNET::Spritesets::CSS::Collection::BEGIN@10
# spent 142µs making 1 call to strict::import |
| 11 | 2 | 150µs | 2 | 139µs | # spent 106µs (73+33) within OCBNET::Spritesets::CSS::Collection::BEGIN@11 which was called:
# once (73µs+33µs) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 11 # spent 106µs making 1 call to OCBNET::Spritesets::CSS::Collection::BEGIN@11
# spent 33µs making 1 call to warnings::import |
| 12 | |||||
| 13 | #################################################################################################### | ||||
| 14 | |||||
| 15 | 2 | 176µs | 2 | 1.47ms | # spent 762µs (58+703) within OCBNET::Spritesets::CSS::Collection::BEGIN@15 which was called:
# once (58µs+703µs) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 15 # spent 762µs making 1 call to OCBNET::Spritesets::CSS::Collection::BEGIN@15
# spent 703µs making 1 call to Exporter::import |
| 16 | 2 | 7.32ms | 2 | 14.6ms | # spent 14.1ms (8.95+5.20) within OCBNET::Spritesets::CSS::Collection::BEGIN@16 which was called:
# once (8.95ms+5.20ms) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 16 # spent 14.1ms making 1 call to OCBNET::Spritesets::CSS::Collection::BEGIN@16
# spent 476µs making 1 call to Exporter::import |
| 17 | |||||
| 18 | #################################################################################################### | ||||
| 19 | |||||
| 20 | # regular expression to match any url | ||||
| 21 | #************************************************************************************************** | ||||
| 22 | 1 | 204µs | 2 | 129µs | my $re_css_url = qr/url\((?:\'$re_apo\'|\"$re_quot\"|[^\)]*)\)/; # spent 114µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:regcomp
# spent 15µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 23 | |||||
| 24 | # regular expression to match any length property | ||||
| 25 | #************************************************************************************************** | ||||
| 26 | 1 | 111µs | 2 | 76µs | our $re_css_length = qr/\b$re_number(?:em|ex|px|\%|in|cm|mm|pt|pc)?(?=\s|\b|\Z|;|,)/i; # spent 67µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:regcomp
# spent 9µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 27 | |||||
| 28 | # regular expression for background options | ||||
| 29 | #************************************************************************************************** | ||||
| 30 | 1 | 133µs | 2 | 97µs | my $re_css_bg_image = qr/(?:none|$re_css_url|inherit)/i; # spent 89µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:regcomp
# spent 8µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 31 | 1 | 27µs | 1 | 10µs | my $re_css_bg_attachment = qr/(?:scroll|fixed|inherit)/i; # spent 10µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 32 | 1 | 27µs | 1 | 10µs | my $re_css_bg_repeat = qr/(?:no-repeat|repeat|repeat-x|repeat-y|inherit)/i; # spent 10µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 33 | 1 | 125µs | 2 | 89µs | my $re_css_bg_position = qr/(?:left|right|top|bottom|center|$re_css_length|inherit)/i; # spent 80µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:regcomp
# spent 9µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 34 | |||||
| 35 | # regular expression for combined background options | ||||
| 36 | #************************************************************************************************** | ||||
| 37 | 1 | 180µs | 2 | 144µs | my $re_css_bg_position_block = qr/($re_css_bg_position(?:\s+($re_css_bg_position))?)/; # spent 135µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:regcomp
# spent 9µs making 1 call to OCBNET::Spritesets::CSS::Collection::CORE:qr |
| 38 | |||||
| 39 | #################################################################################################### | ||||
| 40 | |||||
| 41 | # attributes for box model that | ||||
| 42 | # have left/top and right/bottom | ||||
| 43 | 1 | 14µs | my %boxmodel = | ||
| 44 | ( | ||||
| 45 | 'margin' => 1, | ||||
| 46 | 'padding' => 1, | ||||
| 47 | # not yet implemented | ||||
| 48 | # but parse them anyway | ||||
| 49 | 'sprite-margin' => 1, | ||||
| 50 | 'sprite-padding' => 1 | ||||
| 51 | ); | ||||
| 52 | |||||
| 53 | # attributes with keywords | ||||
| 54 | # and more complex logic | ||||
| 55 | 1 | 23µs | my %shorthand = | ||
| 56 | ( | ||||
| 57 | 'background' => [ | ||||
| 58 | [ 'color' => $re_css_color ], | ||||
| 59 | [ 'image' => $re_css_bg_image ], | ||||
| 60 | [ 'repeat' => $re_css_bg_repeat ], | ||||
| 61 | [ 'attachment' => $re_css_bg_attachment ], | ||||
| 62 | [ 'position' => $re_css_bg_position_block ] | ||||
| 63 | ] | ||||
| 64 | ); | ||||
| 65 | |||||
| 66 | #################################################################################################### | ||||
| 67 | |||||
| 68 | # set a value by name | ||||
| 69 | #************************************************************************************************** | ||||
| 70 | sub set | ||||
| 71 | # spent 3.30s (3.00+301ms) within OCBNET::Spritesets::CSS::Collection::set which was called 46188 times, avg 71µs/call:
# 34672 times (2.39s+879ms) 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 77 of webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm, avg 94µs/call
# 4896 times (298ms+-298ms) by OCBNET::Spritesets::CSS::Collection::set at line 143, avg 0s/call
# 4896 times (212ms+-212ms) by OCBNET::Spritesets::CSS::Collection::set at line 144, avg 0s/call
# 444 times (18.7ms+-18.7ms) by OCBNET::Spritesets::CSS::Collection::set at line 172, avg 0s/call
# 444 times (16.9ms+-16.9ms) by OCBNET::Spritesets::CSS::Collection::set at line 173, avg 0s/call
# 152 times (5.65ms+-5.65ms) by OCBNET::Spritesets::CSS::Collection::set at line 241, avg 0s/call
# 152 times (5.82ms+-5.82ms) by OCBNET::Spritesets::CSS::Collection::set at line 239, avg 0s/call
# 152 times (6.87ms+-6.87ms) by OCBNET::Spritesets::CSS::Collection::set at line 238, avg 0s/call
# 152 times (5.64ms+-5.64ms) by OCBNET::Spritesets::CSS::Collection::set at line 240, avg 0s/call
# 32 times (1.17ms+-1.17ms) by OCBNET::Spritesets::CSS::Collection::set at line 251, avg 0s/call
# 32 times (1.16ms+-1.16ms) by OCBNET::Spritesets::CSS::Collection::set at line 252, avg 0s/call
# 32 times (1.17ms+-1.17ms) by OCBNET::Spritesets::CSS::Collection::set at line 250, avg 0s/call
# 32 times (1.46ms+-1.46ms) by OCBNET::Spritesets::CSS::Collection::set at line 249, avg 0s/call
# 16 times (592µs+-592µs) by OCBNET::Spritesets::CSS::Collection::set at line 214, avg 0s/call
# 16 times (682µs+-682µs) by OCBNET::Spritesets::CSS::Collection::set at line 213, avg 0s/call
# 16 times (594µs+-594µs) by OCBNET::Spritesets::CSS::Collection::set at line 215, avg 0s/call
# 16 times (588µs+-588µs) by OCBNET::Spritesets::CSS::Collection::set at line 216, avg 0s/call
# 12 times (25.1ms+134µs) by OCBNET::Spritesets::CSS::Parser::write at line 404 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 2.10ms/call
# 12 times (470µs+-470µs) by OCBNET::Spritesets::CSS::Collection::set at line 197, avg 0s/call
# 12 times (595µs+-595µs) by OCBNET::Spritesets::CSS::Collection::set at line 196, avg 0s/call | ||||
| 72 | |||||
| 73 | # get passed arguments | ||||
| 74 | 46188 | 222ms | my ($self, $name, $value, $imp) = @_; | ||
| 75 | |||||
| 76 | # hotfix to at least be able to read | ||||
| 77 | # important rules too, altough we will | ||||
| 78 | # not consider their importance really | ||||
| 79 | 46188 | 1.13s | 46188 | 129ms | $imp = ($value =~ s/\s*!important\s*$//i) || $imp; # spent 129ms making 46188 calls to OCBNET::Spritesets::CSS::Collection::CORE:subst, avg 3µs/call |
| 80 | |||||
| 81 | # test if this a shorthand | ||||
| 82 | 46188 | 1.31s | if (exists $shorthand{$name}) | ||
| 83 | { | ||||
| 84 | |||||
| 85 | # get array with all shorthands | ||||
| 86 | my $shorthands = $shorthand{$name}; | ||||
| 87 | |||||
| 88 | # parse value completly | ||||
| 89 | while ($value ne '') | ||||
| 90 | { | ||||
| 91 | # status variable | ||||
| 92 | my $rv = 0; | ||||
| 93 | # parse in order (priority) | ||||
| 94 | foreach my $shorthand (@{$shorthands}) | ||||
| 95 | { | ||||
| 96 | # get the attribute name | ||||
| 97 | my $attr = $shorthand->[0]; | ||||
| 98 | # regular expression for attribute | ||||
| 99 | my $re_css_attribute = $shorthand->[1]; | ||||
| 100 | # test if the current value matches | ||||
| 101 | if ($value =~ s/^\s*($re_css_attribute)\s*//) | ||||
| 102 | { | ||||
| 103 | # set the property (may be shorthand too) | ||||
| 104 | $self->set(join('-', $name, $attr), $1, $imp); | ||||
| 105 | # remember state and exit loop | ||||
| 106 | $rv = 1; last | ||||
| 107 | } | ||||
| 108 | # EO if match | ||||
| 109 | } | ||||
| 110 | # EO each shorthand | ||||
| 111 | |||||
| 112 | # warn and exit loop if nothing was parsed (syntax error) | ||||
| 113 | warn "invalid options for $name: ", $value && last if $rv == 0; | ||||
| 114 | |||||
| 115 | } | ||||
| 116 | # EO parse value | ||||
| 117 | |||||
| 118 | } | ||||
| 119 | # EO if shorthand | ||||
| 120 | |||||
| 121 | # special case top/left and right/bottom | ||||
| 122 | elsif ($name eq 'background-position') | ||||
| 123 | { | ||||
| 124 | |||||
| 125 | # parse both values and correct wrong | ||||
| 126 | # order of left/top and right/bottom | ||||
| 127 | 4896 | 323ms | 9792 | 105ms | if ($value =~ m/\A\s* # spent 72.5ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 15µs/call
# spent 32.3ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 7µs/call |
| 128 | ($re_css_bg_position)\s* | ||||
| 129 | ($re_css_bg_position)\s* | ||||
| 130 | \z/gmx | ||||
| 131 | ) | ||||
| 132 | { | ||||
| 133 | 4896 | 63.7ms | if ( | ||
| 134 | (($1 eq 'top' || $1 eq 'bottom') && not ($2 eq 'top' || $2 eq 'bottom')) | ||||
| 135 | || (($2 eq 'left' || $2 eq 'right') && not ($1 eq 'left' || $1 eq 'right')) | ||||
| 136 | ) | ||||
| 137 | { | ||||
| 138 | $self->set(join('-', $name, 'x'), $2, $imp); | ||||
| 139 | $self->set(join('-', $name, 'y'), $1, $imp); | ||||
| 140 | } | ||||
| 141 | else | ||||
| 142 | { | ||||
| 143 | 4896 | 72.5ms | 4896 | 0s | $self->set(join('-', $name, 'x'), $1, $imp); # spent 307ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::set, avg 63µs/call, recursion: max depth 1, sum of overlapping time 307ms |
| 144 | 4896 | 67.9ms | 4896 | 0s | $self->set(join('-', $name, 'y'), $2, $imp); # spent 220ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::set, avg 45µs/call, recursion: max depth 1, sum of overlapping time 220ms |
| 145 | } | ||||
| 146 | } | ||||
| 147 | |||||
| 148 | # one value means the other is centered | ||||
| 149 | 4896 | 203ms | 9792 | 34.2ms | if ($value =~ m/\A\s* # spent 24.0ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 5µs/call
# spent 10.2ms making 4896 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 2µs/call |
| 150 | ($re_css_bg_position)\s* | ||||
| 151 | \z/gmx | ||||
| 152 | ) | ||||
| 153 | { | ||||
| 154 | $self->set(join('-', $name, 'x'), $1, $imp); | ||||
| 155 | $self->set(join('-', $name, 'y'), '50%', $imp); | ||||
| 156 | } | ||||
| 157 | |||||
| 158 | } | ||||
| 159 | # EO if 'background-position' | ||||
| 160 | |||||
| 161 | # do not inherit for all axes | ||||
| 162 | elsif ($name eq 'background-size') | ||||
| 163 | { | ||||
| 164 | |||||
| 165 | # values are always in order | ||||
| 166 | 444 | 22.7ms | 888 | 11.4ms | if ($value =~ m/\A\s* # spent 8.75ms making 444 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 20µs/call
# spent 2.66ms making 444 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 6µs/call |
| 167 | ($re_css_length|inherit)\s* | ||||
| 168 | ($re_css_length|inherit)\s* | ||||
| 169 | \z/gmx | ||||
| 170 | ) | ||||
| 171 | { | ||||
| 172 | 444 | 6.34ms | 444 | 0s | $self->set(join('-', $name, 'x'), $1, $imp); # spent 19.4ms making 444 calls to OCBNET::Spritesets::CSS::Collection::set, avg 44µs/call, recursion: max depth 1, sum of overlapping time 19.4ms |
| 173 | 444 | 5.91ms | 444 | 0s | $self->set(join('-', $name, 'y'), $2, $imp); # spent 17.6ms making 444 calls to OCBNET::Spritesets::CSS::Collection::set, avg 40µs/call, recursion: max depth 1, sum of overlapping time 17.6ms |
| 174 | } | ||||
| 175 | |||||
| 176 | # only adjust one axis | ||||
| 177 | 444 | 12.4ms | 888 | 2.94ms | if ($value =~ m/\A\s* # spent 2.10ms making 444 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 5µs/call
# spent 840µs making 444 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 2µs/call |
| 178 | ($re_css_length|inherit)\s* | ||||
| 179 | \z/gmx | ||||
| 180 | ) | ||||
| 181 | { | ||||
| 182 | $self->set(join('-', $name, 'x'), $1, $imp); | ||||
| 183 | $self->set(join('-', $name, 'y'), '100%', $imp); | ||||
| 184 | } | ||||
| 185 | |||||
| 186 | } | ||||
| 187 | # EO if 'background-size' | ||||
| 188 | |||||
| 189 | # do not inherit for all axes | ||||
| 190 | elsif ($name eq 'sprite') | ||||
| 191 | { | ||||
| 192 | 12 | 936µs | 24 | 601µs | $value =~ m/^\s*($re_css_name)\s+($re_css_url)\s*(\!important)?$/i; # spent 364µs making 12 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 30µs/call
# spent 237µs making 12 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 20µs/call |
| 193 | # split the shorthand value into id and url | ||||
| 194 | 12 | 145µs | my ($id, $url) = split(/\s+/, $value, 2); | ||
| 195 | # set the block options for this sprite | ||||
| 196 | 12 | 215µs | 12 | 0s | $self->set('css-id', $1) if defined $1; # spent 615µs making 12 calls to OCBNET::Spritesets::CSS::Collection::set, avg 51µs/call, recursion: max depth 1, sum of overlapping time 615µs |
| 197 | 12 | 178µs | 12 | 0s | $self->set('sprite-image', $2) if defined $2; # spent 578µs making 12 calls to OCBNET::Spritesets::CSS::Collection::set, avg 48µs/call, recursion: max depth 1, sum of overlapping time 578µs |
| 198 | 12 | 66µs | $self->set('sprite-importance', $3) if defined $3; | ||
| 199 | } | ||||
| 200 | |||||
| 201 | # parse margin and padding boxmodel | ||||
| 202 | elsif (exists $boxmodel{$name}) | ||||
| 203 | { | ||||
| 204 | |||||
| 205 | 200 | 11.5ms | 400 | 6.35ms | if ($value =~ m/\A\s* # spent 4.68ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 23µs/call
# spent 1.67ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 8µs/call |
| 206 | ($re_css_length)\s* | ||||
| 207 | ($re_css_length)\s* | ||||
| 208 | ($re_css_length)\s* | ||||
| 209 | ($re_css_length)\s* | ||||
| 210 | \z/gmx | ||||
| 211 | ) | ||||
| 212 | { | ||||
| 213 | 16 | 251µs | 16 | 0s | $self->set(join('-', $name, 'top'), $1, $imp); # spent 707µs making 16 calls to OCBNET::Spritesets::CSS::Collection::set, avg 44µs/call, recursion: max depth 1, sum of overlapping time 707µs |
| 214 | 16 | 201µs | 16 | 0s | $self->set(join('-', $name, 'left'), $4, $imp); # spent 618µs making 16 calls to OCBNET::Spritesets::CSS::Collection::set, avg 39µs/call, recursion: max depth 1, sum of overlapping time 618µs |
| 215 | 16 | 199µs | 16 | 0s | $self->set(join('-', $name, 'right'), $2, $imp); # spent 618µs making 16 calls to OCBNET::Spritesets::CSS::Collection::set, avg 39µs/call, recursion: max depth 1, sum of overlapping time 618µs |
| 216 | 16 | 217µs | 16 | 0s | $self->set(join('-', $name, 'bottom'), $3, $imp); # spent 612µs making 16 calls to OCBNET::Spritesets::CSS::Collection::set, avg 38µs/call, recursion: max depth 1, sum of overlapping time 612µs |
| 217 | } | ||||
| 218 | |||||
| 219 | 200 | 9.70ms | 400 | 5.09ms | if ($value =~ m/\A\s* # spent 3.88ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 19µs/call
# spent 1.21ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 6µs/call |
| 220 | ($re_css_length)\s* | ||||
| 221 | ($re_css_length)\s* | ||||
| 222 | ($re_css_length)\s* | ||||
| 223 | \z/gmx | ||||
| 224 | ) | ||||
| 225 | { | ||||
| 226 | $self->set(join('-', $name, 'top'), $1, $imp); | ||||
| 227 | $self->set(join('-', $name, 'left'), $2, $imp); | ||||
| 228 | $self->set(join('-', $name, 'right'), $2, $imp); | ||||
| 229 | $self->set(join('-', $name, 'bottom'), $3, $imp); | ||||
| 230 | } | ||||
| 231 | |||||
| 232 | 200 | 8.98ms | 400 | 4.32ms | if ($value =~ m/\A\s* # spent 3.28ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 16µs/call
# spent 1.04ms making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 5µs/call |
| 233 | ($re_css_length)\s* | ||||
| 234 | ($re_css_length)\s* | ||||
| 235 | \z/gmx | ||||
| 236 | ) | ||||
| 237 | { | ||||
| 238 | 152 | 2.31ms | 152 | 0s | $self->set(join('-', $name, 'top'), $1, $imp); # spent 7.14ms making 152 calls to OCBNET::Spritesets::CSS::Collection::set, avg 47µs/call, recursion: max depth 1, sum of overlapping time 7.14ms |
| 239 | 152 | 1.99ms | 152 | 0s | $self->set(join('-', $name, 'left'), $2, $imp); # spent 6.07ms making 152 calls to OCBNET::Spritesets::CSS::Collection::set, avg 40µs/call, recursion: max depth 1, sum of overlapping time 6.07ms |
| 240 | 152 | 1.89ms | 152 | 0s | $self->set(join('-', $name, 'right'), $2, $imp); # spent 5.86ms making 152 calls to OCBNET::Spritesets::CSS::Collection::set, avg 39µs/call, recursion: max depth 1, sum of overlapping time 5.86ms |
| 241 | 152 | 2.10ms | 152 | 0s | $self->set(join('-', $name, 'bottom'), $1, $imp); # spent 5.89ms making 152 calls to OCBNET::Spritesets::CSS::Collection::set, avg 39µs/call, recursion: max depth 1, sum of overlapping time 5.89ms |
| 242 | } | ||||
| 243 | |||||
| 244 | 200 | 6.54ms | 400 | 1.90ms | if ($value =~ m/\A\s* # spent 957µs making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:regcomp, avg 5µs/call
# spent 941µs making 200 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 5µs/call |
| 245 | ($re_css_length)\s* | ||||
| 246 | \z/gmx | ||||
| 247 | ) | ||||
| 248 | { | ||||
| 249 | 32 | 485µs | 32 | 0s | $self->set(join('-', $name, 'top'), $1, $imp); # spent 1.51ms making 32 calls to OCBNET::Spritesets::CSS::Collection::set, avg 47µs/call, recursion: max depth 1, sum of overlapping time 1.51ms |
| 250 | 32 | 392µs | 32 | 0s | $self->set(join('-', $name, 'left'), $1, $imp); # spent 1.22ms making 32 calls to OCBNET::Spritesets::CSS::Collection::set, avg 38µs/call, recursion: max depth 1, sum of overlapping time 1.22ms |
| 251 | 32 | 366µs | 32 | 0s | $self->set(join('-', $name, 'right'), $1, $imp); # spent 1.22ms making 32 calls to OCBNET::Spritesets::CSS::Collection::set, avg 38µs/call, recursion: max depth 1, sum of overlapping time 1.22ms |
| 252 | 32 | 432µs | 32 | 0s | $self->set(join('-', $name, 'bottom'), $1, $imp); # spent 1.21ms making 32 calls to OCBNET::Spritesets::CSS::Collection::set, avg 38µs/call, recursion: max depth 1, sum of overlapping time 1.21ms |
| 253 | } | ||||
| 254 | |||||
| 255 | } | ||||
| 256 | # EO boxmodel | ||||
| 257 | |||||
| 258 | # just assign the value | ||||
| 259 | # ignore if we don't understand | ||||
| 260 | # implement atrributes when needed | ||||
| 261 | else | ||||
| 262 | { | ||||
| 263 | 40636 | 362ms | unless ($imp) { $self->{$name} = $value; } | ||
| 264 | else { $self->{ '!' . $name } = $value; } | ||||
| 265 | } | ||||
| 266 | |||||
| 267 | } | ||||
| 268 | # EO sub set | ||||
| 269 | |||||
| 270 | #################################################################################################### | ||||
| 271 | |||||
| 272 | # get a value by name | ||||
| 273 | #************************************************************************************************** | ||||
| 274 | sub get | ||||
| 275 | # spent 30.3s (28.1+2.16) within OCBNET::Spritesets::CSS::Collection::get which was called 523592 times, avg 58µs/call:
# 261796 times (9.70s+-9.70s) by OCBNET::Spritesets::CSS::Collection::get at line 285, avg 0s/call
# 151244 times (11.4s+11.2s) by OCBNET::Spritesets::CSS::Block::style at line 266 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Block.pm, avg 149µs/call
# 21100 times (1.19s+948ms) by OCBNET::Spritesets::CSS::Block::option at line 300 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Block.pm, avg 101µs/call
# 20984 times (1.39s+1.04s) by OCBNET::Spritesets::CSS::Block::style at line 278 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Block.pm, avg 116µs/call
# 19712 times (1.24s+-1.24s) by OCBNET::Spritesets::CSS::Collection::get at line 307, avg 0s/call
# 19712 times (1.31s+-1.31s) by OCBNET::Spritesets::CSS::Collection::get at line 301, avg 0s/call
# 10036 times (596ms+328ms) by OCBNET::Spritesets::CSS::Parser::rehash at line 216 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 92µs/call
# 10036 times (515ms+359ms) by OCBNET::Spritesets::CSS::Parser::rehash at line 207 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 87µs/call
# 4928 times (394ms+251ms) by OCBNET::Spritesets::CSS::Parser::process at line 489 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 131µs/call
# 4008 times (407ms+259ms) by OCBNET::Spritesets::CSS::Parser::process at line 463 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 166µs/call
# 12 times (1.04ms+752µs) by OCBNET::Spritesets::CSS::Parser::write at line 417 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 149µs/call
# 12 times (859µs+599µs) by OCBNET::Spritesets::CSS::Parser::write at line 404 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 121µs/call
# 12 times (608µs+413µs) by OCBNET::Spritesets::CSS::Parser::write at line 407 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 85µs/call | ||||
| 276 | |||||
| 277 | # get passed arguments | ||||
| 278 | 523592 | 1.49s | my ($self, $name) = @_; | ||
| 279 | |||||
| 280 | # try to fetch important rule first | ||||
| 281 | # only if we are not yet asking for it | ||||
| 282 | 523592 | 13.6s | 523592 | 2.08s | unless ($name =~ m/^\!/) # spent 2.08s making 523592 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 4µs/call |
| 283 | { | ||||
| 284 | # prepend a exlamation mark to the name | ||||
| 285 | 261796 | 3.12s | 261796 | 0s | my $value = $self->get('!' . $name); # spent 11.2s making 261796 calls to OCBNET::Spritesets::CSS::Collection::get, avg 43µs/call, recursion: max depth 2, sum of overlapping time 11.2s |
| 286 | # return the important value if given | ||||
| 287 | 261796 | 518ms | return $value if defined $value; | ||
| 288 | } | ||||
| 289 | |||||
| 290 | # return combined shorthand | ||||
| 291 | 523592 | 1.00s | if ($name eq 'background-position') | ||
| 292 | { | ||||
| 293 | return join(' ', | ||||
| 294 | $self->get('background-position-x'), | ||||
| 295 | $self->get('background-position-y') | ||||
| 296 | ); | ||||
| 297 | } | ||||
| 298 | # return boolean if we are repeating | ||||
| 299 | elsif ($name eq 'background-repeat-x') | ||||
| 300 | { | ||||
| 301 | 9856 | 663ms | 29568 | 41.9ms | return (not defined $self->get('background-repeat')) || # spent 41.9ms making 9856 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 4µs/call
# spent 2.23s making 19712 calls to OCBNET::Spritesets::CSS::Collection::get, avg 113µs/call, recursion: max depth 1, sum of overlapping time 2.23s |
| 302 | $self->get('background-repeat') =~ m/repeat-x/i ? 1 : 0; | ||||
| 303 | } | ||||
| 304 | # return boolean if we are repeating | ||||
| 305 | elsif ($name eq 'background-repeat-y') | ||||
| 306 | { | ||||
| 307 | 9856 | 689ms | 29568 | 34.7ms | return (not defined $self->get('background-repeat')) || # spent 34.7ms making 9856 calls to OCBNET::Spritesets::CSS::Collection::CORE:match, avg 4µs/call
# spent 2.13s making 19712 calls to OCBNET::Spritesets::CSS::Collection::get, avg 108µs/call, recursion: max depth 1, sum of overlapping time 2.13s |
| 308 | $self->get('background-repeat') =~ m/repeat-y/i ? 1 : 0; | ||||
| 309 | } | ||||
| 310 | |||||
| 311 | # return stored value | ||||
| 312 | 503880 | 12.0s | return $self->{$name}; | ||
| 313 | |||||
| 314 | } | ||||
| 315 | # EO sub get | ||||
| 316 | |||||
| 317 | #################################################################################################### | ||||
| 318 | |||||
| 319 | # simple core methods for hash | ||||
| 320 | 25392 | 646ms | # spent 391ms within OCBNET::Spritesets::CSS::Collection::new which was called 25392 times, avg 15µs/call:
# 20096 times (315ms+0s) by OCBNET::Spritesets::CSS::Block::new at line 80 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Block.pm, avg 16µs/call
# 5296 times (75.8ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 135 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 14µs/call | ||
| 321 | sub keys { CORE::keys %{$_[0]} } | ||||
| 322 | sub exists { CORE::exists $_[0]->{$_[1]}; } | ||||
| 323 | 5308 | 156ms | # spent 68.9ms within OCBNET::Spritesets::CSS::Collection::defined which was called 5308 times, avg 13µs/call:
# 5296 times (68.7ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 141 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 13µs/call
# 12 times (156µs+0s) by OCBNET::Spritesets::CSS::Parser::read at line 144 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 13µs/call | ||
| 324 | |||||
| 325 | #################################################################################################### | ||||
| 326 | #################################################################################################### | ||||
| 327 | 1 | 53µs | 1; | ||
# spent 2.27s within OCBNET::Spritesets::CSS::Collection::CORE:match which was called 554796 times, avg 4µs/call:
# 523592 times (2.08s+0s) by OCBNET::Spritesets::CSS::Collection::get at line 282, avg 4µs/call
# 9856 times (41.9ms+0s) by OCBNET::Spritesets::CSS::Collection::get at line 301, avg 4µs/call
# 9856 times (34.7ms+0s) by OCBNET::Spritesets::CSS::Collection::get at line 307, avg 4µs/call
# 4896 times (72.5ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 127, avg 15µs/call
# 4896 times (10.2ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 149, avg 2µs/call
# 444 times (8.75ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 166, avg 20µs/call
# 444 times (840µs+0s) by OCBNET::Spritesets::CSS::Collection::set at line 177, avg 2µs/call
# 200 times (4.68ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 205, avg 23µs/call
# 200 times (3.88ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 219, avg 19µs/call
# 200 times (3.28ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 232, avg 16µs/call
# 200 times (941µs+0s) by OCBNET::Spritesets::CSS::Collection::set at line 244, avg 5µs/call
# 12 times (364µs+0s) by OCBNET::Spritesets::CSS::Collection::set at line 192, avg 30µs/call | |||||
# spent 69µs within OCBNET::Spritesets::CSS::Collection::CORE:qr which was called 7 times, avg 10µs/call:
# once (15µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 22
# once (10µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 32
# once (10µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 31
# once (9µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 37
# once (9µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 33
# once (9µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 26
# once (8µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 30 | |||||
# spent 66.6ms within OCBNET::Spritesets::CSS::Collection::CORE:regcomp which was called 11497 times, avg 6µs/call:
# 4896 times (32.3ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 127, avg 7µs/call
# 4896 times (24.0ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 149, avg 5µs/call
# 444 times (2.66ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 166, avg 6µs/call
# 444 times (2.10ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 177, avg 5µs/call
# 200 times (1.67ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 205, avg 8µs/call
# 200 times (1.21ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 219, avg 6µs/call
# 200 times (1.04ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 232, avg 5µs/call
# 200 times (957µs+0s) by OCBNET::Spritesets::CSS::Collection::set at line 244, avg 5µs/call
# 12 times (237µs+0s) by OCBNET::Spritesets::CSS::Collection::set at line 192, avg 20µs/call
# once (135µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 37
# once (114µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 22
# once (89µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 30
# once (80µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 33
# once (67µs+0s) by OCBNET::Spritesets::CSS::Block::BEGIN@20 at line 26 | |||||
# spent 129ms within OCBNET::Spritesets::CSS::Collection::CORE:subst which was called 46188 times, avg 3µs/call:
# 46188 times (129ms+0s) by OCBNET::Spritesets::CSS::Collection::set at line 79, avg 3µs/call |