Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm |
Statements | Executed 16048 statements in 1.78s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
4928 | 1 | 1 | 108ms | 108ms | add | OCBNET::Spritesets::Canvas::
12 | 1 | 1 | 22.4ms | 10.1s | draw | OCBNET::Spritesets::Canvas::
12 | 1 | 1 | 11.9ms | 165ms | new | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 10.4ms | 58.1ms | BEGIN@18 | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 4.80ms | 5.44ms | BEGIN@21 | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 4.70ms | 10.5ms | BEGIN@19 | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 4.68ms | 5.30ms | BEGIN@20 | OCBNET::Spritesets::Canvas::
60 | 5 | 3 | 3.25ms | 3.25ms | areas | OCBNET::Spritesets::Canvas::
12 | 1 | 1 | 2.67ms | 2.67ms | sprites | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 142µs | 242µs | BEGIN@13 | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 59µs | 6.89ms | BEGIN@25 | OCBNET::Spritesets::Canvas::
1 | 1 | 1 | 58µs | 94µs | BEGIN@14 | OCBNET::Spritesets::Canvas::
0 | 0 | 0 | 0s | 0s | debug | OCBNET::Spritesets::Canvas::
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 the main canvas or root block to be drawn | ||||
6 | # it contains four stacked frames on each side, four | ||||
7 | # more edge areas, four corner areas and one in the | ||||
8 | # center where the sprites are packed into minimal space | ||||
9 | #################################################################################################### | ||||
10 | package OCBNET::Spritesets::Canvas; | ||||
11 | #################################################################################################### | ||||
12 | |||||
13 | 2 | 178µs | 2 | 342µs | # spent 242µs (142+100) within OCBNET::Spritesets::Canvas::BEGIN@13 which was called:
# once (142µs+100µs) by OCBNET::Spritesets::BEGIN@25 at line 13 # spent 242µs making 1 call to OCBNET::Spritesets::Canvas::BEGIN@13
# spent 100µs making 1 call to strict::import |
14 | 2 | 148µs | 2 | 129µs | # spent 94µs (58+35) within OCBNET::Spritesets::Canvas::BEGIN@14 which was called:
# once (58µs+35µs) by OCBNET::Spritesets::BEGIN@25 at line 14 # spent 94µs making 1 call to OCBNET::Spritesets::Canvas::BEGIN@14
# spent 35µs making 1 call to warnings::import |
15 | |||||
16 | #################################################################################################### | ||||
17 | |||||
18 | 2 | 648µs | 2 | 58.4ms | # spent 58.1ms (10.4+47.7) within OCBNET::Spritesets::Canvas::BEGIN@18 which was called:
# once (10.4ms+47.7ms) by OCBNET::Spritesets::BEGIN@25 at line 18 # spent 58.1ms making 1 call to OCBNET::Spritesets::Canvas::BEGIN@18
# spent 248µs making 1 call to Exporter::import |
19 | 2 | 612µs | 2 | 10.7ms | # spent 10.5ms (4.70+5.81) within OCBNET::Spritesets::Canvas::BEGIN@19 which was called:
# once (4.70ms+5.81ms) by OCBNET::Spritesets::BEGIN@25 at line 19 # spent 10.5ms making 1 call to OCBNET::Spritesets::Canvas::BEGIN@19
# spent 226µs making 1 call to Exporter::import |
20 | 2 | 614µs | 2 | 5.49ms | # spent 5.30ms (4.68+616µs) within OCBNET::Spritesets::Canvas::BEGIN@20 which was called:
# once (4.68ms+616µs) by OCBNET::Spritesets::BEGIN@25 at line 20 # spent 5.30ms making 1 call to OCBNET::Spritesets::Canvas::BEGIN@20
# spent 189µs making 1 call to Exporter::import |
21 | 2 | 762µs | 2 | 5.64ms | # spent 5.44ms (4.80+649µs) within OCBNET::Spritesets::Canvas::BEGIN@21 which was called:
# once (4.80ms+649µs) by OCBNET::Spritesets::BEGIN@25 at line 21 # spent 5.44ms making 1 call to OCBNET::Spritesets::Canvas::BEGIN@21
# spent 198µs making 1 call to Exporter::import |
22 | |||||
23 | #################################################################################################### | ||||
24 | |||||
25 | 2 | 4.69ms | 2 | 13.7ms | # spent 6.89ms (59µs+6.83) within OCBNET::Spritesets::Canvas::BEGIN@25 which was called:
# once (59µs+6.83ms) by OCBNET::Spritesets::BEGIN@25 at line 25 # spent 6.89ms making 1 call to OCBNET::Spritesets::Canvas::BEGIN@25
# spent 6.83ms making 1 call to base::import |
26 | |||||
27 | #################################################################################################### | ||||
28 | |||||
29 | # all areas where we can | ||||
30 | # have a child container | ||||
31 | 1 | 21µs | my @areas = | ||
32 | ( | ||||
33 | 'corner-lt', | ||||
34 | 'stack-t', | ||||
35 | 'edge-t', | ||||
36 | 'corner-rt', | ||||
37 | 'stack-l', | ||||
38 | 'middle', | ||||
39 | 'stack-r', | ||||
40 | 'edge-l', | ||||
41 | 'edge-r', | ||||
42 | 'corner-lb', | ||||
43 | 'stack-b', | ||||
44 | 'edge-b', | ||||
45 | 'corner-rb' | ||||
46 | ); | ||||
47 | |||||
48 | #################################################################################################### | ||||
49 | |||||
50 | # create a new object | ||||
51 | # ****************************************************************************** | ||||
52 | sub new | ||||
53 | # spent 165ms (11.9+153) within OCBNET::Spritesets::Canvas::new which was called 12 times, avg 13.8ms/call:
# 12 times (11.9ms+153ms) by OCBNET::Spritesets::CSS::Parser::read at line 153 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 13.8ms/call | ||||
54 | |||||
55 | # get package name, parent and options | ||||
56 | 12 | 67µs | my ($pckg, $parent, $options) = @_; | ||
57 | |||||
58 | # get object by calling super class | ||||
59 | 12 | 542µs | 12 | 122ms | my $self = $pckg->SUPER::new($parent); # spent 122ms making 12 calls to OCBNET::Spritesets::Container::new, avg 10.2ms/call |
60 | |||||
61 | # this is the base container which will be rendered and | ||||
62 | # saved to a file, so we always have 0/0 as coordinates | ||||
63 | 24 | 334µs | 24 | 287µs | $self->left = 0; $self->top = 0; # spent 159µs making 12 calls to OCBNET::Spritesets::Block::left, avg 13µs/call
# spent 128µs making 12 calls to OCBNET::Spritesets::Block::top, avg 11µs/call |
64 | |||||
65 | # initialize the width and the height | ||||
66 | 24 | 364µs | 24 | 322µs | $self->width = 0; $self->height = 0; # spent 190µs making 12 calls to OCBNET::Spritesets::Block::width, avg 16µs/call
# spent 132µs making 12 calls to OCBNET::Spritesets::Block::height, avg 11µs/call |
67 | |||||
68 | # array with all sprites | ||||
69 | 12 | 68µs | $self->{'sprites'} = []; | ||
70 | |||||
71 | # debug mode variable | ||||
72 | 12 | 39µs | $self->{'debug'} = $options->{'debug'}; | ||
73 | |||||
74 | # assign or init the options hash | ||||
75 | 12 | 28µs | $self->{'options'} = $options || {}; | ||
76 | |||||
77 | # create and initialize the fitter area (if used or not) | ||||
78 | 12 | 332µs | 12 | 1.64ms | $self->{'middle'} = new OCBNET::Spritesets::Fit($self); # spent 1.64ms making 12 calls to OCBNET::Spritesets::Container::new, avg 137µs/call |
79 | |||||
80 | # create and initialize the sub areas (if used or not) | ||||
81 | 12 | 301µs | 12 | 2.44ms | $self->{'edge-t'} = new OCBNET::Spritesets::Edge($self, 0, 0); # spent 2.44ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 203µs/call |
82 | 12 | 234µs | 12 | 2.15ms | $self->{'edge-r'} = new OCBNET::Spritesets::Edge($self, 1, 1); # spent 2.15ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 179µs/call |
83 | 12 | 241µs | 12 | 2.10ms | $self->{'edge-b'} = new OCBNET::Spritesets::Edge($self, 0, 1); # spent 2.10ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 175µs/call |
84 | 12 | 225µs | 12 | 2.08ms | $self->{'edge-l'} = new OCBNET::Spritesets::Edge($self, 1, 0); # spent 2.08ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 173µs/call |
85 | |||||
86 | # create and initialize the sub areas (if used or not) | ||||
87 | 12 | 244µs | 12 | 2.13ms | $self->{'stack-t'} = new OCBNET::Spritesets::Stack($self, 0, 0); # spent 2.13ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 177µs/call |
88 | 12 | 235µs | 12 | 2.09ms | $self->{'stack-r'} = new OCBNET::Spritesets::Stack($self, 1, 1); # spent 2.09ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 174µs/call |
89 | 12 | 240µs | 12 | 2.15ms | $self->{'stack-b'} = new OCBNET::Spritesets::Stack($self, 0, 1); # spent 2.15ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 179µs/call |
90 | 12 | 239µs | 12 | 2.19ms | $self->{'stack-l'} = new OCBNET::Spritesets::Stack($self, 1, 0); # spent 2.19ms making 12 calls to OCBNET::Spritesets::Stack::new, avg 183µs/call |
91 | |||||
92 | # create and initialize the sub areas (if used or not) | ||||
93 | 12 | 278µs | 12 | 2.28ms | $self->{'corner-lt'} = new OCBNET::Spritesets::Corner($self, 0, 0); # spent 2.28ms making 12 calls to OCBNET::Spritesets::Corner::new, avg 190µs/call |
94 | 12 | 226µs | 12 | 2.16ms | $self->{'corner-rt'} = new OCBNET::Spritesets::Corner($self, 1, 0); # spent 2.16ms making 12 calls to OCBNET::Spritesets::Corner::new, avg 180µs/call |
95 | 12 | 228µs | 12 | 2.14ms | $self->{'corner-lb'} = new OCBNET::Spritesets::Corner($self, 0, 1); # spent 2.14ms making 12 calls to OCBNET::Spritesets::Corner::new, avg 178µs/call |
96 | 12 | 232µs | 12 | 2.15ms | $self->{'corner-rb'} = new OCBNET::Spritesets::Corner($self, 1, 1); # spent 2.15ms making 12 calls to OCBNET::Spritesets::Corner::new, avg 179µs/call |
97 | |||||
98 | # register the name of each area (debug only) | ||||
99 | 12 | 946µs | $self->{$_}->{'name'} = $_ foreach @areas; | ||
100 | |||||
101 | # if in debug mode we assign background colors | ||||
102 | # this way you can see what got distributed where | ||||
103 | 12 | 34µs | if ($self->{'debug'}) | ||
104 | { | ||||
105 | $self->{'middle'}->{'bg'} = 'xc:rgba(0, 255, 0, 0.25)'; | ||||
106 | $self->{'edge-t'}->{'bg'} = 'xc:rgba(150, 30, 0, 0.25)'; | ||||
107 | $self->{'edge-r'}->{'bg'} = 'xc:rgba(150, 80, 0, 0.25)'; | ||||
108 | $self->{'edge-b'}->{'bg'} = 'xc:rgba(150, 130, 0, 0.25)'; | ||||
109 | $self->{'edge-l'}->{'bg'} = 'xc:rgba(150, 180, 0, 0.25)'; | ||||
110 | $self->{'stack-t'}->{'bg'} = 'xc:rgba(30, 0, 150, 0.25)'; | ||||
111 | $self->{'stack-r'}->{'bg'} = 'xc:rgba(80, 0, 150, 0.25)'; | ||||
112 | $self->{'stack-b'}->{'bg'} = 'xc:rgba(130, 0, 150, 0.25)'; | ||||
113 | $self->{'stack-l'}->{'bg'} = 'xc:rgba(180, 0, 150, 0.25)'; | ||||
114 | $self->{'corner-lt'}->{'bg'} = 'xc:rgba(0, 150, 30, 0.25)'; | ||||
115 | $self->{'corner-rt'}->{'bg'} = 'xc:rgba(0, 150, 80, 0.25)'; | ||||
116 | $self->{'corner-lb'}->{'bg'} = 'xc:rgba(0, 150, 130, 0.25)'; | ||||
117 | $self->{'corner-rb'}->{'bg'} = 'xc:rgba(0, 150, 180, 0.25)'; | ||||
118 | } | ||||
119 | |||||
120 | # add the widgets to parent | ||||
121 | 12 | 208µs | 12 | 472µs | foreach my $area ($self->areas) # spent 472µs making 12 calls to OCBNET::Spritesets::Canvas::areas, avg 39µs/call |
122 | 156 | 3.68ms | 156 | 2.59ms | { $self->SUPER::add($area); } # spent 2.59ms making 156 calls to OCBNET::Spritesets::Container::add, avg 17µs/call |
123 | |||||
124 | # reset the children array | ||||
125 | 12 | 77µs | $self->{'children'} = []; | ||
126 | |||||
127 | # return object | ||||
128 | 12 | 285µs | return $self; | ||
129 | |||||
130 | } | ||||
131 | # EO new | ||||
132 | |||||
133 | #################################################################################################### | ||||
134 | |||||
135 | 60 | 3.61ms | # spent 3.25ms within OCBNET::Spritesets::Canvas::areas which was called 60 times, avg 54µs/call:
# 12 times (909µs+0s) by OCBNET::Spritesets::Canvas::draw at line 177, avg 76µs/call
# 12 times (663µs+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 108 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 55µs/call
# 12 times (622µs+0s) by OCBNET::Spritesets::Canvas::Repeater::repeater at line 35 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Repeater.pm, avg 52µs/call
# 12 times (583µs+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 379 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 49µs/call
# 12 times (472µs+0s) by OCBNET::Spritesets::Canvas::new at line 121, avg 39µs/call | ||
136 | |||||
137 | #################################################################################################### | ||||
138 | # add a sprite to the canvas - put it into the | ||||
139 | # correct area according to its configuration | ||||
140 | #################################################################################################### | ||||
141 | |||||
142 | # ****************************************************************************** | ||||
143 | sub add | ||||
144 | # spent 108ms within OCBNET::Spritesets::Canvas::add which was called 4928 times, avg 22µs/call:
# 4928 times (108ms+0s) by OCBNET::Spritesets::CSS::Parser::load at line 286 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 22µs/call | ||||
145 | |||||
146 | # get method arguments | ||||
147 | 4928 | 19.5ms | my ($self, $sprite) = @_; | ||
148 | |||||
149 | # push the sprite on to the array | ||||
150 | 4928 | 30.4ms | push (@{$self->{'sprites'}}, $sprite); | ||
151 | |||||
152 | # success | ||||
153 | 4928 | 129ms | return 1; | ||
154 | |||||
155 | } | ||||
156 | # EO add | ||||
157 | |||||
158 | #################################################################################################### | ||||
159 | |||||
160 | |||||
161 | #################################################################################################### | ||||
162 | |||||
163 | sub draw | ||||
164 | # spent 10.1s (22.4ms+10.1) within OCBNET::Spritesets::Canvas::draw which was called 12 times, avg 842ms/call:
# 12 times (22.4ms+10.1s) by OCBNET::Spritesets::CSS::Parser::write at line 410 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 842ms/call | ||||
165 | |||||
166 | # get our object | ||||
167 | 12 | 52µs | my ($self) = @_; | ||
168 | |||||
169 | # initialize empty image | ||||
170 | 12 | 1.73ms | 12 | 1.41ms | $self->{'image'}->Set(matte => 'True'); # spent 1.41ms making 12 calls to Graphics::Magick::Set, avg 118µs/call |
171 | 12 | 579µs | 12 | 357µs | $self->{'image'}->Set(magick => 'png'); # spent 357µs making 12 calls to Graphics::Magick::Set, avg 30µs/call |
172 | 12 | 806µs | 24 | 1.38ms | $self->{'image'}->Set(size => $self->size); # spent 933µs making 12 calls to OCBNET::Spritesets::Block::size, avg 78µs/call
# spent 445µs making 12 calls to Graphics::Magick::Set, avg 37µs/call |
173 | 12 | 457ms | 12 | 457ms | $self->{'image'}->ReadImage($self->{'bg'}); # spent 457ms making 12 calls to Graphics::Magick::ReadImage, avg 38.1ms/call |
174 | 12 | 677ms | 12 | 676ms | $self->{'image'}->Quantize(colorspace=>'RGB'); # spent 676ms making 12 calls to Graphics::Magick::Quantize, avg 56.3ms/call |
175 | |||||
176 | # process all possible areas | ||||
177 | 12 | 591µs | 12 | 909µs | foreach my $area ($self->areas) # spent 909µs making 12 calls to OCBNET::Spritesets::Canvas::areas, avg 76µs/call |
178 | { | ||||
179 | |||||
180 | # ignore area if it's empty | ||||
181 | 156 | 2.95ms | 156 | 3.36ms | next if $area->empty; # spent 3.36ms making 156 calls to OCBNET::Spritesets::Container::empty, avg 22µs/call |
182 | |||||
183 | # get our own dimensions | ||||
184 | 108 | 1.81ms | 108 | 1.56ms | my $width = $self->width; # spent 1.56ms making 108 calls to OCBNET::Spritesets::Block::width, avg 14µs/call |
185 | 108 | 1.48ms | 108 | 1.29ms | my $height = $self->height; # spent 1.29ms making 108 calls to OCBNET::Spritesets::Block::height, avg 12µs/call |
186 | |||||
187 | ########################################################## | ||||
188 | # draw main areas on the canvas | ||||
189 | ########################################################## | ||||
190 | |||||
191 | # draw background on canvas | ||||
192 | 108 | 396µs | if ($area->{'img-bg'}) | ||
193 | { | ||||
194 | $self->{'image'}->Composite( | ||||
195 | compose => 'Over', | ||||
196 | x => $area->left, | ||||
197 | y => $area->top, | ||||
198 | image => $area->{'img-bg'} | ||||
199 | ); | ||||
200 | } | ||||
201 | |||||
202 | # draw foreground on canvas | ||||
203 | 108 | 430ms | 432 | 2.28s | $self->{'image'}->Composite( # spent 1.86s making 108 calls to OCBNET::Spritesets::Container::draw, avg 17.2ms/call
# spent 422ms making 108 calls to Graphics::Magick::Composite, avg 3.91ms/call
# spent 1.32ms making 108 calls to OCBNET::Spritesets::Block::left, avg 12µs/call
# spent 1.21ms making 108 calls to OCBNET::Spritesets::Block::top, avg 11µs/call |
204 | compose => 'Over', | ||||
205 | x => $area->left, | ||||
206 | y => $area->top, | ||||
207 | image => $area->draw | ||||
208 | ); | ||||
209 | |||||
210 | } | ||||
211 | # EO each area | ||||
212 | |||||
213 | # call repeater | ||||
214 | 12 | 176µs | 12 | 6.66s | $self->repeater; # spent 6.66s making 12 calls to OCBNET::Spritesets::Canvas::Repeater::repeater, avg 555ms/call |
215 | |||||
216 | # return the image instance | ||||
217 | 12 | 277µs | return $self->{'image'}; | ||
218 | |||||
219 | } | ||||
220 | # EO sub draw | ||||
221 | |||||
222 | #################################################################################################### | ||||
223 | |||||
224 | 12 | 2.84ms | # spent 2.67ms within OCBNET::Spritesets::Canvas::sprites which was called 12 times, avg 222µs/call:
# 12 times (2.67ms+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 118 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 222µs/call | ||
225 | |||||
226 | #################################################################################################### | ||||
227 | |||||
228 | sub debug | ||||
229 | { | ||||
230 | my ($self) = @_; | ||||
231 | print "#" x 78, "\n"; | ||||
232 | printf "DEBUG SPRITESET <%s> (%sx%s)\n", | ||||
233 | $self->{'id'}, $self->width, $self->height; | ||||
234 | print "#" x 78, "\n"; | ||||
235 | foreach my $area ($self->areas) | ||||
236 | { | ||||
237 | print "AREA: ", $area->{'name'}, " ", $area->debug, "\n"; | ||||
238 | foreach my $sprite ($area->children) | ||||
239 | { | ||||
240 | print " SPRITE: ", $sprite->debug, "\n"; | ||||
241 | } | ||||
242 | } | ||||
243 | print "#" x 75, "\n"; | ||||
244 | |||||
245 | } | ||||
246 | |||||
247 | #################################################################################################### | ||||
248 | #################################################################################################### | ||||
249 | 1 | 19µs | 1; |