Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm |
Statements | Executed 444529 statements in 79.5s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
24680 | 4 | 1 | 55.1s | 55.1s | CORE:match (opcode) | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 5.11s | 19.6s | process | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 4.31s | 87.4s | read | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 3.05s | 37.8s | load | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 1.79s | 7.45s | rehash | OCBNET::Spritesets::CSS::Parser::
35108 | 5 | 1 | 437ms | 437ms | CORE:subst (opcode) | OCBNET::Spritesets::CSS::Parser::
19328 | 4 | 1 | 428ms | 428ms | toPx | OCBNET::Spritesets::CSS::Parser::
40428 | 5 | 1 | 256ms | 256ms | CORE:regcomp (opcode) | OCBNET::Spritesets::CSS::Parser::
8776 | 3 | 1 | 153ms | 153ms | CORE:qr (opcode) | OCBNET::Spritesets::CSS::Parser::
4008 | 1 | 1 | 92.1ms | 92.1ms | toUrl | OCBNET::Spritesets::CSS::Parser::
4012 | 2 | 1 | 48.4ms | 48.4ms | spriteset | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 4.72ms | 116s | write | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 1.52ms | 30.4s | distribute | OCBNET::Spritesets::CSS::Parser::
96 | 4 | 1 | 1.40ms | 1.40ms | spritesets | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 1.39ms | 2.02s | finalize | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 1.38ms | 1.38ms | new | OCBNET::Spritesets::CSS::Parser::
24 | 1 | 1 | 1.28ms | 23.2s | optimize | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 82µs | 177µs | BEGIN@19 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 65µs | 234µs | BEGIN@25 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 62µs | 299µs | BEGIN@41 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 61µs | 651µs | BEGIN@40 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 60µs | 46.6ms | BEGIN@30 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 58µs | 489µs | BEGIN@42 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 56µs | 630µs | BEGIN@38 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 56µs | 471µs | BEGIN@39 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 54µs | 84µs | BEGIN@20 | OCBNET::Spritesets::CSS::Parser::
1 | 1 | 1 | 27µs | 27µs | BEGIN@30.9 | OCBNET::Spritesets::CSS::Parser::
0 | 0 | 0 | 0s | 0s | debug | OCBNET::Spritesets::CSS::Parser::
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 | # this is a block which represents a stylesheet | ||||
6 | # a stylesheet can contain multiple spritesets | ||||
7 | # we will take care of reading and mangling the | ||||
8 | # styles for background images regarding spritesets | ||||
9 | #################################################################################################### | ||||
10 | package OCBNET::Spritesets::CSS::Parser; | ||||
11 | #################################################################################################### | ||||
12 | # my $css = OCBNET::Spritesets::CSS::Parser->new($config); | ||||
13 | # $css->read($data)->rehash->load; | ||||
14 | # $css->optimize->distribute->finalize; | ||||
15 | # my $written = $css->write($writer); | ||||
16 | # my $data = $css->process->render; | ||||
17 | #################################################################################################### | ||||
18 | |||||
19 | 2 | 147µs | 2 | 273µs | # spent 177µs (82+96) within OCBNET::Spritesets::CSS::Parser::BEGIN@19 which was called:
# once (82µs+96µs) by OCBNET::Spritesets::BEGIN@33 at line 19 # spent 177µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@19
# spent 96µs making 1 call to strict::import |
20 | 2 | 202µs | 2 | 115µs | # spent 84µs (54+31) within OCBNET::Spritesets::CSS::Parser::BEGIN@20 which was called:
# once (54µs+31µs) by OCBNET::Spritesets::BEGIN@33 at line 20 # spent 84µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@20
# spent 31µs making 1 call to warnings::import |
21 | |||||
22 | #################################################################################################### | ||||
23 | |||||
24 | # load function from core module | ||||
25 | 2 | 188µs | 2 | 403µs | # spent 234µs (65+169) within OCBNET::Spritesets::CSS::Parser::BEGIN@25 which was called:
# once (65µs+169µs) by OCBNET::Spritesets::BEGIN@33 at line 25 # spent 234µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@25
# spent 169µs making 1 call to Exporter::import |
26 | |||||
27 | #################################################################################################### | ||||
28 | |||||
29 | # we are ourself the root css block | ||||
30 | 3 | 321µs | 3 | 93.2ms | # spent 46.6ms (60µs+46.6) within OCBNET::Spritesets::CSS::Parser::BEGIN@30 which was called:
# once (60µs+46.6ms) by OCBNET::Spritesets::BEGIN@33 at line 30
# spent 27µs within OCBNET::Spritesets::CSS::Parser::BEGIN@30.9 which was called:
# once (27µs+0s) by OCBNET::Spritesets::BEGIN@33 at line 30 # spent 46.6ms making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@30
# spent 46.6ms making 1 call to base::import
# spent 27µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@30.9 |
31 | |||||
32 | #################################################################################################### | ||||
33 | |||||
34 | # load base classes for later instantiation | ||||
35 | 1 | 4µs | require OCBNET::Spritesets::CSS::Collection; | ||
36 | |||||
37 | # load dependencies and import globals and functions | ||||
38 | 2 | 188µs | 2 | 1.20ms | # spent 630µs (56+574) within OCBNET::Spritesets::CSS::Parser::BEGIN@38 which was called:
# once (56µs+574µs) by OCBNET::Spritesets::BEGIN@33 at line 38 # spent 630µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@38
# spent 574µs making 1 call to Exporter::import |
39 | 2 | 176µs | 2 | 887µs | # spent 471µs (56+415) within OCBNET::Spritesets::CSS::Parser::BEGIN@39 which was called:
# once (56µs+415µs) by OCBNET::Spritesets::BEGIN@33 at line 39 # spent 471µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@39
# spent 415µs making 1 call to Exporter::import |
40 | 2 | 208µs | 2 | 1.24ms | # spent 651µs (61+590) within OCBNET::Spritesets::CSS::Parser::BEGIN@40 which was called:
# once (61µs+590µs) by OCBNET::Spritesets::BEGIN@33 at line 40 # spent 651µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@40
# spent 590µs making 1 call to Exporter::import |
41 | 2 | 173µs | 2 | 535µs | # spent 299µs (62+236) within OCBNET::Spritesets::CSS::Parser::BEGIN@41 which was called:
# once (62µs+236µs) by OCBNET::Spritesets::BEGIN@33 at line 41 # spent 299µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@41
# spent 236µs making 1 call to Exporter::import |
42 | 2 | 10.5ms | 2 | 920µs | # spent 489µs (58+431) within OCBNET::Spritesets::CSS::Parser::BEGIN@42 which was called:
# once (58µs+431µs) by OCBNET::Spritesets::BEGIN@33 at line 42 # spent 489µs making 1 call to OCBNET::Spritesets::CSS::Parser::BEGIN@42
# spent 431µs making 1 call to Exporter::import |
43 | |||||
44 | #################################################################################################### | ||||
45 | |||||
46 | # helper methods for css stuff | ||||
47 | 19328 | 646ms | # spent 428ms within OCBNET::Spritesets::CSS::Parser::toPx which was called 19328 times, avg 22µs/call:
# 4928 times (177ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 511, avg 36µs/call
# 4928 times (111ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 512, avg 22µs/call
# 4736 times (70.9ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 515, avg 15µs/call
# 4736 times (69.4ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 516, avg 15µs/call | ||
48 | 4008 | 175ms | # spent 92.1ms within OCBNET::Spritesets::CSS::Parser::toUrl which was called 4008 times, avg 23µs/call:
# 4008 times (92.1ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 469, avg 23µs/call | ||
49 | |||||
50 | #################################################################################################### | ||||
51 | |||||
52 | # constructor | ||||
53 | # ****************************************************************************** | ||||
54 | sub new | ||||
55 | # spent 1.38ms within OCBNET::Spritesets::CSS::Parser::new which was called 24 times, avg 57µs/call:
# 24 times (1.38ms+0s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 49 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 57µs/call | ||||
56 | |||||
57 | # get passed variables | ||||
58 | 24 | 117µs | my ($pckg, $config) = @_; | ||
59 | |||||
60 | # init object | ||||
61 | 24 | 725µs | my $self = { | ||
62 | # store id blocks | ||||
63 | 'ids' => {}, | ||||
64 | # the header part | ||||
65 | 'head' => '', | ||||
66 | # all subparts | ||||
67 | 'blocks' => [], | ||||
68 | # the footer part | ||||
69 | 'footer' => '', | ||||
70 | # spritesets by name | ||||
71 | 'spritesets' => {}, | ||||
72 | # config from outside | ||||
73 | # only debug implemented | ||||
74 | 'config' => $config || {} | ||||
75 | }; | ||||
76 | |||||
77 | # bless into package | ||||
78 | 24 | 864µs | return bless $self, $pckg; | ||
79 | |||||
80 | } | ||||
81 | # EO constructor | ||||
82 | |||||
83 | #################################################################################################### | ||||
84 | |||||
85 | # read some css block data | ||||
86 | # parse out selector blocks | ||||
87 | # ****************************************************************************** | ||||
88 | sub read | ||||
89 | # spent 87.4s (4.31+83.1) within OCBNET::Spritesets::CSS::Parser::read which was called 24 times, avg 3.64s/call:
# 24 times (4.31s+83.1s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 102 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 3.64s/call | ||||
90 | |||||
91 | # get text as data ref | ||||
92 | 24 | 103µs | my ($self, $data) = @_; | ||
93 | |||||
94 | # parse all blocks and end when all is parsed | ||||
95 | 24 | 1.26ms | 48 | 15.5s | $parse_blocks->($data, $self, qr/\A\z/); # spent 15.5s making 24 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:175], avg 646ms/call
# spent 407µs making 24 calls to OCBNET::Spritesets::CSS::Parser::CORE:qr, avg 17µs/call |
96 | |||||
97 | # assertion in any case (should never happen?) | ||||
98 | 24 | 87µs | die "Fatal: not everything parsed" if ${$data} ne ''; | ||
99 | |||||
100 | # put all blocks in a flat array | ||||
101 | 24 | 2.02ms | 24 | 2.20ms | my @blocks = ($self, $self->blocks); # spent 2.20ms making 24 calls to OCBNET::Spritesets::CSS::Block::blocks, avg 92µs/call |
102 | # this will process all and each sub block | ||||
103 | 24 | 264ms | 20120 | 206ms | for (my $i = 0; $i < scalar(@blocks); $i ++) # spent 206ms making 20120 calls to OCBNET::Spritesets::CSS::Block::blocks, avg 10µs/call |
104 | { push @blocks, $blocks[$i]->blocks; } | ||||
105 | |||||
106 | # make blocks unique | ||||
107 | 24 | 71.2ms | 24 | 52.9ms | @blocks = uniq @blocks; # spent 52.9ms making 24 calls to List::MoreUtils::uniq, avg 2.20ms/call |
108 | |||||
109 | # reset block type arrays | ||||
110 | 24 | 769µs | $self->{'others'} = []; | ||
111 | 24 | 230µs | $self->{'selectors'} = []; | ||
112 | |||||
113 | # find selector blocks | ||||
114 | 24 | 208µs | foreach my $block (@blocks) | ||
115 | { | ||||
116 | # check if the head only consists of selector rules, comments and whitespace | ||||
117 | 10072 | 55.6s | 40288 | 55.9s | if (uncomment($block->head) =~ m/(?:\A|;)\s*(?:$re_css_selector_rules|\s+)+$/s) # spent 55.0s making 10072 calls to OCBNET::Spritesets::CSS::Parser::CORE:match, avg 5.46ms/call
# spent 732ms making 10072 calls to OCBNET::CSS::Parser::Base::uncomment, avg 73µs/call
# spent 154ms making 10072 calls to OCBNET::Spritesets::CSS::Block::head, avg 15µs/call
# spent 87.3ms making 10072 calls to OCBNET::Spritesets::CSS::Parser::CORE:regcomp, avg 9µs/call |
118 | 20072 | 151ms | { $block->{'selector'} = 1; push @{$self->{'selectors'}}, $block } | ||
119 | 72 | 508µs | else { $block->{'selector'} = 0; push @{$self->{'others'}}, $block } | ||
120 | } | ||||
121 | |||||
122 | # now process each block | ||||
123 | # find configured spritesets | ||||
124 | 24 | 151µs | foreach my $block (@blocks) | ||
125 | { | ||||
126 | |||||
127 | # get the block text | ||||
128 | 10072 | 124ms | 10072 | 1.00s | my $body = $block->text; # spent 1.00s making 10072 calls to OCBNET::Spritesets::CSS::Block::text, avg 99µs/call |
129 | |||||
130 | # parse comments for block options | ||||
131 | 10072 | 846ms | 30712 | 209ms | while ($body =~ s/$re_comment//s) # spent 132ms making 15356 calls to OCBNET::Spritesets::CSS::Parser::CORE:subst, avg 9µs/call
# spent 76.1ms making 15356 calls to OCBNET::Spritesets::CSS::Parser::CORE:regcomp, avg 5µs/call |
132 | { | ||||
133 | |||||
134 | # create a new css collection object to store options | ||||
135 | 5296 | 107ms | 5296 | 75.8ms | my $options = new OCBNET::Spritesets::CSS::Collection; # spent 75.8ms making 5296 calls to OCBNET::Spritesets::CSS::Collection::new, avg 14µs/call |
136 | |||||
137 | # parse options for spriteset | ||||
138 | 5296 | 49.1ms | 5296 | 1.21s | $parse_definition->($options, $1); # spent 1.21s making 5296 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82], avg 228µs/call |
139 | |||||
140 | # check if this comment is meant for us | ||||
141 | 5296 | 94.0ms | 5296 | 68.7ms | next unless $options->defined('sprite-image'); # spent 68.7ms making 5296 calls to OCBNET::Spritesets::CSS::Collection::defined, avg 13µs/call |
142 | |||||
143 | # check if the sprite image has an associated id | ||||
144 | 12 | 141µs | 12 | 156µs | die "sprite image has no id" unless $options->defined('css-id'); # spent 156µs making 12 calls to OCBNET::Spritesets::CSS::Collection::defined, avg 13µs/call |
145 | |||||
146 | # get the id of this spriteset | ||||
147 | 12 | 49µs | my $id = $options->{'css-id'}; | ||
148 | |||||
149 | # pass debug mode from config to options | ||||
150 | 12 | 98µs | $options->{'debug'} = $self->{'config'}->{'debug'}; | ||
151 | |||||
152 | # create a new canvas object to hold all sprites | ||||
153 | 12 | 304µs | 12 | 165ms | my $canvas = new OCBNET::Spritesets::Canvas(undef, $options); # spent 165ms making 12 calls to OCBNET::Spritesets::Canvas::new, avg 13.8ms/call |
154 | |||||
155 | # add canvas to global hash object | ||||
156 | 12 | 183µs | 12 | 228µs | $self->spriteset($id) = $canvas; # spent 228µs making 12 calls to OCBNET::Spritesets::CSS::Parser::spriteset, avg 19µs/call |
157 | |||||
158 | # associate canvas with block | ||||
159 | 12 | 45µs | $block->{'canvas'} = $canvas; | ||
160 | |||||
161 | # store the id for canvas | ||||
162 | 12 | 818µs | 24 | 338µs | $canvas->{'id'} = $id; # spent 219µs making 12 calls to OCBNET::Spritesets::CSS::Parser::CORE:subst, avg 18µs/call
# spent 119µs making 12 calls to OCBNET::Spritesets::CSS::Parser::CORE:regcomp, avg 10µs/call |
163 | |||||
164 | } | ||||
165 | # EO each comment | ||||
166 | |||||
167 | } | ||||
168 | # EO each block | ||||
169 | |||||
170 | # now process each selector and parse options | ||||
171 | 24 | 207µs | foreach my $selector (@{$self->{'selectors'}}) | ||
172 | { | ||||
173 | |||||
174 | # get body text to parse | ||||
175 | 10036 | 134ms | 10036 | 833ms | my $body = $selector->text; # spent 833ms making 10036 calls to OCBNET::Spritesets::CSS::Block::text, avg 83µs/call |
176 | |||||
177 | # parse all comments into options hash | ||||
178 | 10036 | 629ms | 20072 | 176ms | while ($body =~ s/$re_comment//s) # spent 117ms making 10036 calls to OCBNET::Spritesets::CSS::Parser::CORE:subst, avg 12µs/call
# spent 58.4ms making 10036 calls to OCBNET::Spritesets::CSS::Parser::CORE:regcomp, avg 6µs/call |
179 | 4952 | 356ms | 14856 | 1.37s | { $parse_definition->($selector->{'options'}, $1); } # spent 1.31s making 4952 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82], avg 265µs/call
# spent 34.0ms making 4952 calls to OCBNET::Spritesets::CSS::Parser::CORE:regcomp, avg 7µs/call
# spent 18.7ms making 4952 calls to OCBNET::Spritesets::CSS::Parser::CORE:subst, avg 4µs/call |
180 | |||||
181 | # now parse remaining style options | ||||
182 | 10036 | 150ms | 10036 | 6.30s | $parse_definition->($selector->{'styles'}, $body); # spent 6.30s making 10036 calls to OCBNET::CSS::Parser::CSS::__ANON__[webmerge/scripts/modules/OCBNET/CSS/Parser/CSS.pm:82], avg 628µs/call |
183 | |||||
184 | } | ||||
185 | # EO each selector | ||||
186 | |||||
187 | # return object | ||||
188 | 24 | 2.89ms | return $self; | ||
189 | |||||
190 | } | ||||
191 | # EO sub read | ||||
192 | |||||
193 | #################################################################################################### | ||||
194 | |||||
195 | # rehash the block references | ||||
196 | # *************************************************************************************** | ||||
197 | sub rehash | ||||
198 | # spent 7.45s (1.79+5.66) within OCBNET::Spritesets::CSS::Parser::rehash which was called 24 times, avg 310ms/call:
# 24 times (1.79s+5.66s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 102 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 310ms/call | ||||
199 | |||||
200 | # get our object | ||||
201 | 24 | 98µs | my ($self) = @_; | ||
202 | |||||
203 | # now process each selector and setup references | ||||
204 | 24 | 210µs | foreach my $selector (@{$self->{'selectors'}}) | ||
205 | { | ||||
206 | # get css id for this block for inheritance | ||||
207 | 10036 | 207ms | 20072 | 988ms | my $css_id = $selector->options->get('css-id'); # spent 874ms making 10036 calls to OCBNET::Spritesets::CSS::Collection::get, avg 87µs/call
# spent 113ms making 10036 calls to OCBNET::Spritesets::CSS::Block::options, avg 11µs/call |
208 | # setup relationships between references blocks | ||||
209 | 10036 | 30.3ms | $self->{'ids'}->{$css_id} = $selector if defined $css_id; | ||
210 | } | ||||
211 | |||||
212 | # now process each selector and setup references | ||||
213 | 24 | 175µs | foreach my $selector (@{$self->{'selectors'}}) | ||
214 | { | ||||
215 | # get own id and reference id | ||||
216 | 10036 | 195ms | 20072 | 1.04s | my $ref_id = $selector->options->get('css-ref'); # spent 924ms making 10036 calls to OCBNET::Spritesets::CSS::Collection::get, avg 92µs/call
# spent 112ms making 10036 calls to OCBNET::Spritesets::CSS::Block::options, avg 11µs/call |
217 | # allow multiple refs per block via comma delimited list | ||||
218 | 10036 | 90.5ms | push @{$selector->{'ref'}}, map { $self->{'ids'}->{$_} } | ||
219 | split(/\s*,\s*/, $ref_id) if (defined $ref_id); | ||||
220 | # remove undefined references (maybe print a warning) | ||||
221 | 10036 | 85.7ms | @{$selector->{'ref'}} = grep { defined $_ } @{$selector->{'ref'}}; | ||
222 | } | ||||
223 | |||||
224 | # now process each selector and setup references | ||||
225 | 24 | 161µs | foreach my $selector (@{$self->{'selectors'}}) | ||
226 | { | ||||
227 | 10036 | 303ms | 27136 | 3.64s | if (! $selector->canvas && $selector->option('css-ref')) # spent 3.33s making 13100 calls to OCBNET::Spritesets::CSS::Block::option, avg 254µs/call
# spent 256ms making 10036 calls to OCBNET::Spritesets::CSS::Block::canvas, avg 25µs/call
# spent 48.1ms making 4000 calls to OCBNET::Spritesets::CSS::Parser::spriteset, avg 12µs/call |
228 | { $selector->{'canvas'} = $self->spriteset($selector->option('css-ref')); } | ||||
229 | } | ||||
230 | |||||
231 | # allow chaining | ||||
232 | 24 | 418µs | return $self; | ||
233 | |||||
234 | } | ||||
235 | # EO sub rehash | ||||
236 | |||||
237 | #################################################################################################### | ||||
238 | |||||
239 | # styles have been readed, so we now can start to | ||||
240 | # load all sprites and setup relation to its css block | ||||
241 | # *************************************************************************************** | ||||
242 | sub load | ||||
243 | # spent 37.8s (3.05+34.8) within OCBNET::Spritesets::CSS::Parser::load which was called 24 times, avg 1.58s/call:
# 24 times (3.05s+34.8s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 102 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 1.58s/call | ||||
244 | |||||
245 | # get our object | ||||
246 | 24 | 126µs | my ($self) = @_; | ||
247 | |||||
248 | # now process each selector and setup sprites | ||||
249 | 24 | 6.51ms | foreach my $selector (@{$self->{'selectors'}}) | ||
250 | { | ||||
251 | |||||
252 | # check if this selector block has a background | ||||
253 | 10036 | 179ms | 10036 | 2.92s | next unless $selector->style('background-image'); # spent 2.92s making 10036 calls to OCBNET::Spritesets::CSS::Block::style, avg 291µs/call |
254 | |||||
255 | # get associated spriteset canvas | ||||
256 | 4928 | 72.9ms | 4928 | 176ms | my $canvas = $selector->canvas || next; # spent 176ms making 4928 calls to OCBNET::Spritesets::CSS::Block::canvas, avg 36µs/call |
257 | |||||
258 | # create a new sprite and setup most options | ||||
259 | 4928 | 1.29s | 83776 | 31.6s | my $sprite = new OCBNET::Spritesets::Sprite({ # spent 20.1s making 44352 calls to OCBNET::Spritesets::CSS::Block::style, avg 452µs/call
# spent 8.92s making 4928 calls to OCBNET::Spritesets::Sprite::new, avg 1.81ms/call
# spent 1.04s making 4928 calls to OCBNET::CSS::Parser::Base::fromUrl, avg 211µs/call
# spent 981ms making 19712 calls to OCBNET::CSS::Parser::Base::fromPx, avg 50µs/call
# spent 582ms making 9856 calls to OCBNET::CSS::Parser::Base::fromPosition, avg 59µs/call |
260 | # pass debug mode from config | ||||
261 | # will draw funky color backgrounds | ||||
262 | 'debug' => $self->{'config'}->{'debug'}, | ||||
263 | # get the filename from the url (must be "normalized") | ||||
264 | 'filename' => fromUrl($selector->style('background-image')), | ||||
265 | # the size the sprite is actually shown in (from css styles) | ||||
266 | 'size-x' => fromPx($selector->style('background-size-x')) || undef, | ||||
267 | 'size-y' => fromPx($selector->style('background-size-y')) || undef, | ||||
268 | # set repeat options to decide where to ditribute | ||||
269 | 'repeat-x' => $selector->style('background-repeat-x') || 0, | ||||
270 | 'repeat-y' => $selector->style('background-repeat-y') || 0, | ||||
271 | # set enclosed options to decide where to ditribute | ||||
272 | 'enclosed-x' => fromPx($selector->style('width') || 0) || 0, | ||||
273 | 'enclosed-y' => fromPx($selector->style('height') || 0) || 0, | ||||
274 | # set position/align options to decide where to ditribute | ||||
275 | 'position-x' => fromPosition($selector->style('background-position-x') || 0), | ||||
276 | 'position-y' => fromPosition($selector->style('background-position-y') || 0) | ||||
277 | }); | ||||
278 | |||||
279 | # store sprite object on selector | ||||
280 | 4928 | 34.2ms | $selector->{'sprite'} = $sprite; | ||
281 | |||||
282 | # and also store the selector on the sprite | ||||
283 | 4928 | 15.4ms | $sprite->{'selector'} = $selector; | ||
284 | |||||
285 | # add sprite to canvas | ||||
286 | 4928 | 122ms | 4928 | 108ms | $canvas->add($sprite); # spent 108ms making 4928 calls to OCBNET::Spritesets::Canvas::add, avg 22µs/call |
287 | |||||
288 | } | ||||
289 | # EO each selector | ||||
290 | |||||
291 | # allow chaining | ||||
292 | 24 | 400µs | return $self; | ||
293 | |||||
294 | } | ||||
295 | # EO sub load | ||||
296 | |||||
297 | #################################################################################################### | ||||
298 | |||||
299 | # sprites have not been distributed, define the paddings | ||||
300 | # and the dimension according to the given css block styles | ||||
301 | # *************************************************************************************** | ||||
302 | sub optimize | ||||
303 | # spent 23.2s (1.28ms+23.2) within OCBNET::Spritesets::CSS::Parser::optimize which was called 24 times, avg 966ms/call:
# 24 times (1.28ms+23.2s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 103 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 966ms/call | ||||
304 | |||||
305 | # get our object | ||||
306 | 24 | 82µs | my ($self) = @_; | ||
307 | |||||
308 | # call optimize for every spriteset | ||||
309 | 24 | 655µs | 36 | 23.2s | $_->optimize foreach $self->spritesets; # spent 23.2s making 12 calls to OCBNET::Spritesets::Canvas::Optimize::optimize, avg 1.93s/call
# spent 453µs making 24 calls to OCBNET::Spritesets::CSS::Parser::spritesets, avg 19µs/call |
310 | |||||
311 | # allow chaining | ||||
312 | 24 | 429µs | return $self; | ||
313 | |||||
314 | } | ||||
315 | # EO sub optimize | ||||
316 | |||||
317 | #################################################################################################### | ||||
318 | |||||
319 | # sprites have been loaded, so we now can now | ||||
320 | # distribute all sprites to their appropriate area | ||||
321 | # *************************************************************************************** | ||||
322 | sub distribute | ||||
323 | # spent 30.4s (1.52ms+30.4) within OCBNET::Spritesets::CSS::Parser::distribute which was called 24 times, avg 1.26s/call:
# 24 times (1.52ms+30.4s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 103 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 1.26s/call | ||||
324 | |||||
325 | # get our object | ||||
326 | 24 | 93µs | my ($self) = @_; | ||
327 | |||||
328 | # call distribute for every spriteset | ||||
329 | 24 | 785µs | 36 | 30.4s | $_->distribute foreach $self->spritesets; # spent 30.4s making 12 calls to OCBNET::Spritesets::Canvas::Distribute::distribute, avg 2.53s/call
# spent 292µs making 24 calls to OCBNET::Spritesets::CSS::Parser::spritesets, avg 12µs/call |
330 | |||||
331 | # allow chaining | ||||
332 | 24 | 454µs | return $self; | ||
333 | |||||
334 | } | ||||
335 | # EO sub distribute | ||||
336 | |||||
337 | #################################################################################################### | ||||
338 | |||||
339 | # sprites have been distributed, we now can start | ||||
340 | # to translate bottom/right positioned sprites within | ||||
341 | # fixed dimension boxes into top/left aligned sprites | ||||
342 | # *************************************************************************************** | ||||
343 | sub finalize | ||||
344 | # spent 2.02s (1.39ms+2.01) within OCBNET::Spritesets::CSS::Parser::finalize which was called 24 times, avg 84.0ms/call:
# 24 times (1.39ms+2.01s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 103 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 84.0ms/call | ||||
345 | |||||
346 | # get our object | ||||
347 | 24 | 94µs | my ($self) = @_; | ||
348 | |||||
349 | # call finalize for every spriteset | ||||
350 | 24 | 657µs | 36 | 2.01s | $_->finalize foreach $self->spritesets; # spent 2.01s making 12 calls to OCBNET::Spritesets::Canvas::Optimize::finalize, avg 168ms/call
# spent 343µs making 24 calls to OCBNET::Spritesets::CSS::Parser::spritesets, avg 14µs/call |
351 | |||||
352 | # allow chaining | ||||
353 | 24 | 535µs | return $self; | ||
354 | |||||
355 | } | ||||
356 | # EO sub finalize | ||||
357 | |||||
358 | #################################################################################################### | ||||
359 | |||||
360 | # just print out some debug messages | ||||
361 | # *************************************************************************************** | ||||
362 | sub debug | ||||
363 | { | ||||
364 | |||||
365 | # get our object | ||||
366 | my ($self) = @_; | ||||
367 | |||||
368 | # call debug for every spriteset | ||||
369 | $_->debug foreach $self->spritesets; | ||||
370 | |||||
371 | # allow chaining | ||||
372 | return $self; | ||||
373 | |||||
374 | } | ||||
375 | # EO sub debug | ||||
376 | |||||
377 | #################################################################################################### | ||||
378 | |||||
379 | # write out all spritesets within stylesheet | ||||
380 | # *************************************************************************************** | ||||
381 | sub write | ||||
382 | # spent 116s (4.72ms+116) within OCBNET::Spritesets::CSS::Parser::write which was called 24 times, avg 4.85s/call:
# 24 times (4.72ms+116s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 104 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 4.85s/call | ||||
383 | |||||
384 | # get passed arguments | ||||
385 | 24 | 116µs | my ($self, $writer) = @_; | ||
386 | |||||
387 | # status variable | ||||
388 | # info about all writes which is | ||||
389 | # used to optimize files afterwards | ||||
390 | 24 | 40µs | my %written; | ||
391 | |||||
392 | # write all registered spritesets | ||||
393 | 24 | 409µs | 24 | 309µs | foreach my $canvas ($self->spritesets) # spent 309µs making 24 calls to OCBNET::Spritesets::CSS::Parser::spritesets, avg 13µs/call |
394 | { | ||||
395 | |||||
396 | # get name of the canvas | ||||
397 | 12 | 91µs | my $id = $canvas->{'id'}; | ||
398 | |||||
399 | # get the css options for canvas | ||||
400 | # they are gathered from block comments | ||||
401 | 12 | 32µs | my $options = $canvas->{'options'}; | ||
402 | |||||
403 | # parse sprite image option and add to options for later use | ||||
404 | 12 | 532µs | 36 | 28.8ms | $options->set('url', fromUrl($options->get('sprite-image'))); # spent 25.3ms making 12 calls to OCBNET::Spritesets::CSS::Collection::set, avg 2.10ms/call
# spent 2.04ms making 12 calls to OCBNET::CSS::Parser::Base::fromUrl, avg 170µs/call
# spent 1.46ms making 12 calls to OCBNET::Spritesets::CSS::Collection::get, avg 121µs/call |
405 | |||||
406 | # assertion that we have gotten some usefull url to store the image | ||||
407 | 12 | 152µs | 12 | 1.02ms | die "no sprite image defined for <$id>" unless $options->get('url'); # spent 1.02ms making 12 calls to OCBNET::Spritesets::CSS::Collection::get, avg 85µs/call |
408 | |||||
409 | # draw image and check for success | ||||
410 | 12 | 569µs | 24 | 103s | if (my $image = $canvas->layout->draw) # spent 92.7s making 12 calls to OCBNET::Spritesets::Canvas::Layout::layout, avg 7.73s/call
# spent 10.1s making 12 calls to OCBNET::Spritesets::Canvas::draw, avg 842ms/call |
411 | { | ||||
412 | # set the output format | ||||
413 | 12 | 811µs | 12 | 530µs | $image->Set(magick => 'png'); # spent 530µs making 12 calls to Graphics::Magick::Set, avg 44µs/call |
414 | # cal image to binary object | ||||
415 | 12 | 13.5s | 12 | 13.5s | my $blob = $image->ImageToBlob(); # spent 13.5s making 12 calls to Graphics::Magick::ImageToBlob, avg 1.13s/call |
416 | # get the filename to store image | ||||
417 | 12 | 376µs | 12 | 1.79ms | my $file = $options->get('url'); # spent 1.79ms making 12 calls to OCBNET::Spritesets::CSS::Collection::get, avg 149µs/call |
418 | # write through given writer function | ||||
419 | 12 | 275µs | 12 | 23.2ms | $writer->($file, $blob, \%written); # spent 23.2ms making 12 calls to RTP::Webmerge::Process::CSS::Spritesets::__ANON__[webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm:98], avg 1.94ms/call |
420 | } | ||||
421 | # EO if successfull drawn | ||||
422 | |||||
423 | } | ||||
424 | # EO each spriteset | ||||
425 | |||||
426 | # return status variable | ||||
427 | 24 | 570µs | return \%written; | ||
428 | |||||
429 | } | ||||
430 | # EO sub write | ||||
431 | |||||
432 | #################################################################################################### | ||||
433 | |||||
434 | # process the css and prepare for write | ||||
435 | # this mangles the original css for rendering | ||||
436 | #************************************************************************************************** | ||||
437 | sub process | ||||
438 | # spent 19.6s (5.11+14.5) within OCBNET::Spritesets::CSS::Parser::process which was called 24 times, avg 815ms/call:
# 24 times (5.11s+14.5s) by RTP::Webmerge::Process::CSS::Spritesets::spritesets at line 105 of webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm, avg 815ms/call | ||||
439 | |||||
440 | # get passed arguments | ||||
441 | 24 | 102µs | my ($self) = @_; | ||
442 | |||||
443 | # now process each selector and setup sprites | ||||
444 | 24 | 222µs | foreach my $selector (@{$self->{'selectors'}}) | ||
445 | { | ||||
446 | |||||
447 | # new styles | ||||
448 | 10036 | 8.53ms | my %styles; | ||
449 | |||||
450 | # selector has a canvas, this means the spriteset | ||||
451 | # has been declares within this block, so render it | ||||
452 | # check this directly and not with the object method | ||||
453 | # this way we will really only check the local block | ||||
454 | 10036 | 55.8ms | if ($selector->{'canvas'}) | ||
455 | { | ||||
456 | |||||
457 | # get canvas directly from selector block | ||||
458 | # this means that the spriteset was defined | ||||
459 | # inline and not in referenced selector block | ||||
460 | 4008 | 10.7ms | my $canvas = $selector->{'canvas'}; | ||
461 | |||||
462 | # get the url of the spriteset image | ||||
463 | 4008 | 72.1ms | 4008 | 666ms | my $url = $canvas->{'options'}->get('url'); # spent 666ms making 4008 calls to OCBNET::Spritesets::CSS::Collection::get, avg 166µs/call |
464 | |||||
465 | # parse css body | ||||
466 | 4008 | 54.7ms | 4008 | 4.78s | $selector->parse(); # spent 4.78s making 4008 calls to OCBNET::Spritesets::CSS::Block::parse, avg 1.19ms/call |
467 | |||||
468 | # push new declarations | ||||
469 | 4008 | 73.3ms | 4008 | 92.1ms | $styles{'background-image'} = toUrl($url); # spent 92.1ms making 4008 calls to OCBNET::Spritesets::CSS::Parser::toUrl, avg 23µs/call |
470 | 4008 | 17.1ms | $styles{'background-repeat'} = 'no-repeat'; | ||
471 | |||||
472 | # remove all background styles from selector | ||||
473 | 4008 | 203ms | 8016 | 1.56s | $selector->clean(qr/background(?:\-[a-z0-9])*/); # spent 1.49s making 4008 calls to OCBNET::Spritesets::CSS::Block::clean, avg 372µs/call
# spent 70.5ms making 4008 calls to OCBNET::Spritesets::CSS::Parser::CORE:qr, avg 18µs/call |
474 | |||||
475 | }; | ||||
476 | # EO each selector | ||||
477 | |||||
478 | # check if this selector is configured for a sprite | ||||
479 | 10036 | 55.2ms | if ($selector->{'sprite'}) | ||
480 | { | ||||
481 | |||||
482 | # get the sprite for selector | ||||
483 | 4928 | 12.2ms | my $sprite = $selector->{'sprite'}; | ||
484 | |||||
485 | # spriteset canvas of block | ||||
486 | 4928 | 70.8ms | 4928 | 178ms | my $canvas = $selector->canvas; # spent 178ms making 4928 calls to OCBNET::Spritesets::CSS::Block::canvas, avg 36µs/call |
487 | |||||
488 | # get the url of the spriteset image | ||||
489 | 4928 | 82.7ms | 4928 | 645ms | my $url = $canvas->{'options'}->get('url'); # spent 645ms making 4928 calls to OCBNET::Spritesets::CSS::Collection::get, avg 131µs/call |
490 | |||||
491 | # get the sprite position within set | ||||
492 | 4928 | 77.2ms | 4928 | 2.25s | my $offset = $sprite->offset; # spent 2.25s making 4928 calls to OCBNET::Spritesets::Sprite::offset, avg 457µs/call |
493 | |||||
494 | # get position offset vars | ||||
495 | 4928 | 14.7ms | my $offset_x = $offset->{'x'}; | ||
496 | 4928 | 9.30ms | my $offset_y = $offset->{'y'}; | ||
497 | |||||
498 | # assertion that the values are defined | ||||
499 | 4928 | 6.92ms | die "no sprite x" unless defined $offset_x; | ||
500 | 4928 | 4.61ms | die "no sprite y" unless defined $offset_y; | ||
501 | |||||
502 | # get pre-caluculated position in spriteset | ||||
503 | 4928 | 16.5ms | my $spriteset_x = $sprite->{'position-x'}; | ||
504 | 4928 | 11.0ms | my $spriteset_y = $sprite->{'position-y'}; | ||
505 | |||||
506 | # assertion that the values are defined | ||||
507 | 4928 | 4.26ms | die "no spriteset x" unless defined $spriteset_x; | ||
508 | 4928 | 4.20ms | die "no spriteset y" unless defined $spriteset_y; | ||
509 | |||||
510 | # calculate the axes for background size | ||||
511 | 4928 | 205ms | 14784 | 320ms | my $background_w = toPx($canvas->width / $sprite->scaleX); # spent 177ms making 4928 calls to OCBNET::Spritesets::CSS::Parser::toPx, avg 36µs/call
# spent 74.8ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleX, avg 15µs/call
# spent 68.1ms making 4928 calls to OCBNET::Spritesets::Block::width, avg 14µs/call |
512 | 4928 | 174ms | 14784 | 243ms | my $background_h = toPx($canvas->height / $sprite->scaleY); # spent 111ms making 4928 calls to OCBNET::Spritesets::CSS::Parser::toPx, avg 22µs/call
# spent 70.9ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleY, avg 14µs/call
# spent 61.6ms making 4928 calls to OCBNET::Spritesets::Block::height, avg 12µs/call |
513 | |||||
514 | # align relative to the top and relative to the left | ||||
515 | 4928 | 292ms | 23872 | 428ms | $spriteset_y = toPx($sprite->positionY - ($offset_y + $sprite->paddingTop) / $sprite->scaleY) if $sprite->alignTop; # spent 183ms making 4928 calls to OCBNET::Spritesets::Sprite::alignTop, avg 37µs/call
# spent 70.9ms making 4736 calls to OCBNET::Spritesets::CSS::Parser::toPx, avg 15µs/call
# spent 59.8ms making 4736 calls to OCBNET::Spritesets::Sprite::scaleY, avg 13µs/call
# spent 57.9ms making 4736 calls to OCBNET::Spritesets::Sprite::positionY, avg 12µs/call
# spent 56.5ms making 4736 calls to OCBNET::Spritesets::Block::paddingTop, avg 12µs/call |
516 | 4928 | 288ms | 23872 | 440ms | $spriteset_x = toPx($sprite->positionX - ($offset_x + $sprite->paddingLeft) / $sprite->scaleX) if $sprite->alignLeft; # spent 198ms making 4928 calls to OCBNET::Spritesets::Sprite::alignLeft, avg 40µs/call
# spent 69.4ms making 4736 calls to OCBNET::Spritesets::CSS::Parser::toPx, avg 15µs/call
# spent 59.8ms making 4736 calls to OCBNET::Spritesets::Sprite::scaleX, avg 13µs/call
# spent 56.5ms making 4736 calls to OCBNET::Spritesets::Block::paddingLeft, avg 12µs/call
# spent 55.9ms making 4736 calls to OCBNET::Spritesets::Sprite::positionX, avg 12µs/call |
517 | |||||
518 | # assertion that the actual background position is always a full integer | ||||
519 | 4928 | 199ms | 4928 | 74.5ms | warn "spriteset_x is not an integer $spriteset_x" unless $spriteset_x =~ m/^(?:\-?[0-9]+px|top|left|right|bottom)$/i; # spent 74.5ms making 4928 calls to OCBNET::Spritesets::CSS::Parser::CORE:match, avg 15µs/call |
520 | 4928 | 161ms | 4928 | 34.1ms | warn "spriteset_y is not an integer $spriteset_y" unless $spriteset_y =~ m/^(?:\-?[0-9]+px|top|left|right|bottom)$/i; # spent 34.1ms making 4928 calls to OCBNET::Spritesets::CSS::Parser::CORE:match, avg 7µs/call |
521 | |||||
522 | # check if sprite was distributed | ||||
523 | # if it has no parent it means the | ||||
524 | # sprite has not been included yet | ||||
525 | 4928 | 84.3ms | unless ($sprite->{'parent'}) | ||
526 | { | ||||
527 | # check for debug mode on canvas or sprite | ||||
528 | 184 | 581µs | if ($canvas->{'debug'} || $sprite->{'debug'}) | ||
529 | { | ||||
530 | # make border dark red and background lightly red | ||||
531 | $styles{'border-color'} = 'rgb(192, 128, 128) !important'; | ||||
532 | $styles{'background-color'} = 'rgba(255, 0, 0, 0.125) !important'; | ||||
533 | } | ||||
534 | } | ||||
535 | |||||
536 | # sprite was distributed | ||||
537 | else | ||||
538 | { | ||||
539 | |||||
540 | # parse css body | ||||
541 | 4744 | 64.6ms | 4744 | 1.03s | $selector->parse; # spent 1.03s making 4744 calls to OCBNET::Spritesets::CSS::Block::parse, avg 217µs/call |
542 | |||||
543 | # add shorthand styles for sprite sizing and position | ||||
544 | 4744 | 53.9ms | $styles{'background-size'} = join(' ', $background_w, $background_h); | ||
545 | 4744 | 27.0ms | $styles{'background-position'} = join(' ', $spriteset_x, $spriteset_y); | ||
546 | |||||
547 | # add repeating if sprite has it configured | ||||
548 | 4744 | 64.5ms | 4976 | 74.2ms | if ($sprite->isRepeatX && $sprite->isFlexibleX) # spent 64.7ms making 4744 calls to OCBNET::Spritesets::Sprite::isRepeatX, avg 14µs/call
# spent 9.55ms making 232 calls to OCBNET::Spritesets::Sprite::isFlexibleX, avg 41µs/call |
549 | { $styles{'background-repeat'} = 'repeat-x'; } | ||||
550 | 4744 | 59.9ms | 4976 | 66.0ms | if ($sprite->isRepeatY && $sprite->isFlexibleY) # spent 57.0ms making 4744 calls to OCBNET::Spritesets::Sprite::isRepeatY, avg 12µs/call
# spent 9.02ms making 232 calls to OCBNET::Spritesets::Sprite::isFlexibleY, avg 39µs/call |
551 | { $styles{'background-repeat'} = 'repeat-y'; } | ||||
552 | |||||
553 | # remove all background styles from selector | ||||
554 | 4744 | 243ms | 9488 | 1.09s | $selector->clean(qr/background(?:\-[a-z0-9])*/); # spent 1.01s making 4744 calls to OCBNET::Spritesets::CSS::Block::clean, avg 213µs/call
# spent 82.2ms making 4744 calls to OCBNET::Spritesets::CSS::Parser::CORE:qr, avg 17µs/call |
555 | |||||
556 | } | ||||
557 | |||||
558 | } | ||||
559 | # EO if has sprite | ||||
560 | |||||
561 | # do we have new styles | ||||
562 | 10036 | 122ms | if (scalar %styles) | ||
563 | { | ||||
564 | |||||
565 | # render the selector bodies | ||||
566 | 4752 | 74.7ms | 4752 | 231ms | my $body = $selector->body; # spent 231ms making 4752 calls to OCBNET::Spritesets::CSS::Block::body, avg 49µs/call |
567 | |||||
568 | # find the first indenting to reuse it | ||||
569 | 4752 | 175ms | 4752 | 69.5ms | my $indent = $body =~ m/^([ ]*)\S/m ? $1 : ' '; # spent 69.5ms making 4752 calls to OCBNET::Spritesets::CSS::Parser::CORE:match, avg 15µs/call |
570 | |||||
571 | # get the traling whitespace on last line | ||||
572 | 4752 | 317ms | 4752 | 169ms | my $footer = $body =~ s/([ ]*)$// ? $1 : ''; # spent 169ms making 4752 calls to OCBNET::Spritesets::CSS::Parser::CORE:subst, avg 35µs/call |
573 | |||||
574 | # add some debugger statements into css | ||||
575 | 4752 | 41.8ms | $selector->{'footer'} .= "\n" . $indent . ";/* added by webmerge */\n"; | ||
576 | |||||
577 | # add these declarations to the footer to be included within block | ||||
578 | 4752 | 254ms | $selector->{'footer'} .= sprintf "%s%s: %s;\n", $indent, $_, $styles{$_} foreach keys %styles; | ||
579 | |||||
580 | # add some debugger statements into css | ||||
581 | 4752 | 27.7ms | $selector->{'footer'} .= $indent . "/* added by webmerge */\n"; | ||
582 | |||||
583 | # append traling whitespace again | ||||
584 | 4752 | 18.6ms | $selector->{'footer'} .= $footer; | ||
585 | |||||
586 | } | ||||
587 | # EO if has styles | ||||
588 | |||||
589 | } | ||||
590 | # EO each selector | ||||
591 | |||||
592 | # make chainable | ||||
593 | 24 | 574µs | return $self; | ||
594 | |||||
595 | } | ||||
596 | # EO sub process | ||||
597 | |||||
598 | #################################################################################################### | ||||
599 | # getter functions for this object | ||||
600 | #################################################################################################### | ||||
601 | |||||
602 | # get the spriteset by the passed key/name | ||||
603 | # ****************************************************************************** | ||||
604 | 4012 | 109ms | sub spriteset : lvalue { $_[0]->{'spritesets'}->{$_[1]}; } | ||
605 | |||||
606 | # get list of all spriteset objects (actualy canvas) | ||||
607 | # ****************************************************************************** | ||||
608 | 96 | 2.27ms | # spent 1.40ms within OCBNET::Spritesets::CSS::Parser::spritesets which was called 96 times, avg 15µs/call:
# 24 times (453µs+0s) by OCBNET::Spritesets::CSS::Parser::optimize at line 309, avg 19µs/call
# 24 times (343µs+0s) by OCBNET::Spritesets::CSS::Parser::finalize at line 350, avg 14µs/call
# 24 times (309µs+0s) by OCBNET::Spritesets::CSS::Parser::write at line 393, avg 13µs/call
# 24 times (292µs+0s) by OCBNET::Spritesets::CSS::Parser::distribute at line 329, avg 12µs/call | ||
609 | |||||
610 | #################################################################################################### | ||||
611 | #################################################################################################### | ||||
612 | 1 | 15µs | 1; | ||
# spent 55.1s within OCBNET::Spritesets::CSS::Parser::CORE:match which was called 24680 times, avg 2.23ms/call:
# 10072 times (55.0s+0s) by OCBNET::Spritesets::CSS::Parser::read at line 117, avg 5.46ms/call
# 4928 times (74.5ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 519, avg 15µs/call
# 4928 times (34.1ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 520, avg 7µs/call
# 4752 times (69.5ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 569, avg 15µs/call | |||||
# spent 153ms within OCBNET::Spritesets::CSS::Parser::CORE:qr which was called 8776 times, avg 17µs/call:
# 4744 times (82.2ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 554, avg 17µs/call
# 4008 times (70.5ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 473, avg 18µs/call
# 24 times (407µs+0s) by OCBNET::Spritesets::CSS::Parser::read at line 95, avg 17µs/call | |||||
# spent 256ms within OCBNET::Spritesets::CSS::Parser::CORE:regcomp which was called 40428 times, avg 6µs/call:
# 15356 times (76.1ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 131, avg 5µs/call
# 10072 times (87.3ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 117, avg 9µs/call
# 10036 times (58.4ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 178, avg 6µs/call
# 4952 times (34.0ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 179, avg 7µs/call
# 12 times (119µs+0s) by OCBNET::Spritesets::CSS::Parser::read at line 162, avg 10µs/call | |||||
# spent 437ms within OCBNET::Spritesets::CSS::Parser::CORE:subst which was called 35108 times, avg 12µs/call:
# 15356 times (132ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 131, avg 9µs/call
# 10036 times (117ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 178, avg 12µs/call
# 4952 times (18.7ms+0s) by OCBNET::Spritesets::CSS::Parser::read at line 179, avg 4µs/call
# 4752 times (169ms+0s) by OCBNET::Spritesets::CSS::Parser::process at line 572, avg 35µs/call
# 12 times (219µs+0s) by OCBNET::Spritesets::CSS::Parser::read at line 162, avg 18µs/call |