Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/Container.pm |
Statements | Executed 120785 statements in 2.90s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
108 | 1 | 1 | 654ms | 1.86s | draw | OCBNET::Spritesets::Container::
108 | 2 | 2 | 571ms | 3.94s | layout | OCBNET::Spritesets::Container::
9488 | 1 | 1 | 260ms | 428ms | lcm | OCBNET::Spritesets::Container::
312 | 2 | 1 | 222ms | 650ms | multilcm | OCBNET::Spritesets::Container::
4868 | 6 | 2 | 202ms | 592ms | scaleX | OCBNET::Spritesets::Container::
4868 | 6 | 2 | 183ms | 565ms | scaleY | OCBNET::Spritesets::Container::
9488 | 1 | 1 | 168ms | 168ms | gcf | OCBNET::Spritesets::Container::
4900 | 2 | 2 | 98.3ms | 98.3ms | add | OCBNET::Spritesets::Container::
736 | 7 | 3 | 15.4ms | 15.4ms | children | OCBNET::Spritesets::Container::
168 | 4 | 3 | 9.56ms | 142ms | new | OCBNET::Spritesets::Container::
528 | 5 | 5 | 8.83ms | 8.83ms | empty | OCBNET::Spritesets::Container::
312 | 2 | 1 | 5.16ms | 5.16ms | CORE:match (opcode) | OCBNET::Spritesets::Container::
32 | 1 | 1 | 397µs | 397µs | length | OCBNET::Spritesets::Container::
1 | 1 | 1 | 90µs | 189µs | BEGIN@11 | OCBNET::Spritesets::Container::
1 | 1 | 1 | 69µs | 346µs | BEGIN@153 | OCBNET::Spritesets::Container::
1 | 1 | 1 | 53µs | 84µs | BEGIN@12 | OCBNET::Spritesets::Container::
1 | 1 | 1 | 52µs | 486µs | BEGIN@16 | OCBNET::Spritesets::Container::
0 | 0 | 0 | 0s | 0s | multigcf | OCBNET::Spritesets::Container::
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 base class for all children containers | ||||
6 | # it can be drawn (is a block) and can have child nodes | ||||
7 | #################################################################################################### | ||||
8 | package OCBNET::Spritesets::Container; | ||||
9 | #################################################################################################### | ||||
10 | |||||
11 | 2 | 151µs | 2 | 289µs | # spent 189µs (90+99) within OCBNET::Spritesets::Container::BEGIN@11 which was called:
# once (90µs+99µs) by base::import at line 11 # spent 189µs making 1 call to OCBNET::Spritesets::Container::BEGIN@11
# spent 99µs making 1 call to strict::import |
12 | 2 | 159µs | 2 | 116µs | # spent 84µs (53+32) within OCBNET::Spritesets::Container::BEGIN@12 which was called:
# once (53µs+32µs) by base::import at line 12 # spent 84µs making 1 call to OCBNET::Spritesets::Container::BEGIN@12
# spent 32µs making 1 call to warnings::import |
13 | |||||
14 | #################################################################################################### | ||||
15 | |||||
16 | 2 | 2.24ms | 2 | 486µs | # spent 486µs (52+434) within OCBNET::Spritesets::Container::BEGIN@16 which was called:
# once (52µs+434µs) by base::import at line 16 # spent 486µs making 1 call to OCBNET::Spritesets::Container::BEGIN@16
# spent 434µs making 1 call to base::import, recursion: max depth 1, sum of overlapping time 434µs |
17 | |||||
18 | #################################################################################################### | ||||
19 | |||||
20 | # try to optimize slow functions | ||||
21 | # with memoize oly if available | ||||
22 | # eval | ||||
23 | # { | ||||
24 | # # try to load | ||||
25 | # use Memoize qw(memoize); | ||||
26 | # # memoize functions | ||||
27 | # memoize('gcf', LIST_CACHE => 'MERGE'); | ||||
28 | # memoize('lcm', LIST_CACHE => 'MERGE'); | ||||
29 | # memoize('multigcf', LIST_CACHE => 'MERGE'); | ||||
30 | # memoize('multilcm', LIST_CACHE => 'MERGE'); | ||||
31 | # }; | ||||
32 | |||||
33 | #################################################################################################### | ||||
34 | # stolen from http://www.perlmonks.org/?node_id=56906 | ||||
35 | #################################################################################################### | ||||
36 | |||||
37 | # greatest common factor | ||||
38 | sub gcf($$) | ||||
39 | # spent 168ms within OCBNET::Spritesets::Container::gcf which was called 9488 times, avg 18µs/call:
# 9488 times (168ms+0s) by OCBNET::Spritesets::Container::lcm at line 48, avg 18µs/call | ||||
40 | 9488 | 25.3ms | my ($x, $y) = @_; | ||
41 | 9488 | 74.6ms | ($x, $y) = ($y, $x % $y) while $y; | ||
42 | 9488 | 164ms | return $x; | ||
43 | } | ||||
44 | |||||
45 | # least common multiple | ||||
46 | sub lcm($$) | ||||
47 | # spent 428ms (260+168) within OCBNET::Spritesets::Container::lcm which was called 9488 times, avg 45µs/call:
# 9488 times (260ms+168ms) by OCBNET::Spritesets::Container::multilcm at line 63, avg 45µs/call | ||||
48 | 9488 | 279ms | 9488 | 168ms | return $_[0] * $_[1] / gcf($_[0], $_[1]); # spent 168ms making 9488 calls to OCBNET::Spritesets::Container::gcf, avg 18µs/call |
49 | } | ||||
50 | |||||
51 | # greatest common factor | ||||
52 | sub multigcf(@) | ||||
53 | { | ||||
54 | my $x = shift; | ||||
55 | $x = gcf($x, shift) while @_; | ||||
56 | return $x; | ||||
57 | } | ||||
58 | |||||
59 | # least common multiple | ||||
60 | sub multilcm(@) | ||||
61 | # spent 650ms (222+428) within OCBNET::Spritesets::Container::multilcm which was called 312 times, avg 2.08ms/call:
# 156 times (131ms+196ms) by OCBNET::Spritesets::Container::scaleX at line 181, avg 2.10ms/call
# 156 times (90.8ms+231ms) by OCBNET::Spritesets::Container::scaleY at line 194, avg 2.07ms/call | ||||
62 | 312 | 644µs | my $x = shift; | ||
63 | 312 | 103ms | 9488 | 428ms | $x = lcm($x, shift) while @_; # spent 428ms making 9488 calls to OCBNET::Spritesets::Container::lcm, avg 45µs/call |
64 | 312 | 4.00ms | return $x; | ||
65 | } | ||||
66 | |||||
67 | #################################################################################################### | ||||
68 | |||||
69 | # create a new object | ||||
70 | # called from children | ||||
71 | # ****************************************************************************** | ||||
72 | sub new | ||||
73 | # spent 142ms (9.56+133) within OCBNET::Spritesets::Container::new which was called 168 times, avg 848µs/call:
# 96 times (5.32ms+7.10ms) by OCBNET::Spritesets::Stack::new at line 30 of webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm, avg 129µs/call
# 48 times (2.70ms+3.62ms) by OCBNET::Spritesets::Corner::new at line 29 of webmerge/scripts/modules/OCBNET/Spritesets/Corner.pm, avg 132µs/call
# 12 times (848µs+121ms) by OCBNET::Spritesets::Canvas::new at line 59 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 10.2ms/call
# 12 times (692µs+950µs) by OCBNET::Spritesets::Canvas::new at line 78 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 137µs/call | ||||
74 | |||||
75 | 168 | 556µs | my ($pckg, $parent) = @_; | ||
76 | |||||
77 | 168 | 4.32ms | 168 | 133ms | my $self = $pckg->SUPER::new($parent); # spent 133ms making 168 calls to OCBNET::Spritesets::Block::new, avg 791µs/call |
78 | |||||
79 | # only for debugging purposes | ||||
80 | 168 | 785µs | $self->{'bg'} = "xc:transparent"; | ||
81 | |||||
82 | 168 | 617µs | $self->{'children'} = []; | ||
83 | |||||
84 | 168 | 3.21ms | return bless $self, $pckg; | ||
85 | |||||
86 | } | ||||
87 | # EO sub new | ||||
88 | |||||
89 | #################################################################################################### | ||||
90 | |||||
91 | # getter for all children in list context | ||||
92 | # ****************************************************************************** | ||||
93 | # sub children { return @{$_[0]->{'children'}}; } | ||||
94 | |||||
95 | #################################################################################################### | ||||
96 | |||||
97 | # add more children to this block | ||||
98 | # ****************************************************************************** | ||||
99 | sub add | ||||
100 | # spent 98.3ms within OCBNET::Spritesets::Container::add which was called 4900 times, avg 20µs/call:
# 4744 times (95.7ms+0s) by OCBNET::Spritesets::Canvas::Distribute::distribute at line 133 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Distribute.pm, avg 20µs/call
# 156 times (2.59ms+0s) by OCBNET::Spritesets::Canvas::new at line 122 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 17µs/call | ||||
101 | |||||
102 | 4900 | 16.7ms | my ($self, $child) = @_; | ||
103 | |||||
104 | # add new child to our array | ||||
105 | 4900 | 19.9ms | push(@{$self->{'children'}}, $child); | ||
106 | |||||
107 | # attach ourself as parent | ||||
108 | 4900 | 9.42ms | $child->{'parent'} = $self; | ||
109 | |||||
110 | # return new number of children | ||||
111 | 4900 | 96.8ms | return scalar @{$self->{'children'}}; | ||
112 | |||||
113 | } | ||||
114 | # EO sub add | ||||
115 | |||||
116 | #################################################################################################### | ||||
117 | |||||
118 | # getter for all children in list context | ||||
119 | # ****************************************************************************** | ||||
120 | 736 | 20.1ms | # spent 15.4ms within OCBNET::Spritesets::Container::children which was called 736 times, avg 21µs/call:
# 156 times (3.04ms+0s) by OCBNET::Spritesets::Container::scaleY at line 192, avg 19µs/call
# 156 times (2.92ms+0s) by OCBNET::Spritesets::Container::scaleX at line 179, avg 19µs/call
# 108 times (3.07ms+0s) by OCBNET::Spritesets::Container::layout at line 157, avg 28µs/call
# 96 times (1.37ms+0s) by OCBNET::Spritesets::Stack::layout at line 61 of webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm, avg 14µs/call
# 96 times (1.25ms+0s) by OCBNET::Spritesets::Stack::layout at line 111 of webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm, avg 13µs/call
# 76 times (3.08ms+0s) by OCBNET::Spritesets::Canvas::Repeater::repeater at line 59 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Repeater.pm, avg 41µs/call
# 48 times (620µs+0s) by OCBNET::Spritesets::Stack::layout at line 157 of webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm, avg 13µs/call | ||
121 | |||||
122 | # getter for number of childrens | ||||
123 | # ****************************************************************************** | ||||
124 | 32 | 613µs | # spent 397µs within OCBNET::Spritesets::Container::length which was called 32 times, avg 12µs/call:
# 32 times (397µs+0s) by OCBNET::Spritesets::Corner::layout at line 61 of webmerge/scripts/modules/OCBNET/Spritesets/Corner.pm, avg 12µs/call | ||
125 | |||||
126 | #################################################################################################### | ||||
127 | |||||
128 | # check if this block is empty | ||||
129 | # ****************************************************************************** | ||||
130 | sub empty | ||||
131 | # spent 8.83ms within OCBNET::Spritesets::Container::empty which was called 528 times, avg 17µs/call:
# 156 times (3.36ms+0s) by OCBNET::Spritesets::Canvas::draw at line 181 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 22µs/call
# 156 times (2.58ms+0s) by OCBNET::Spritesets::Canvas::Repeater::repeater at line 39 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Repeater.pm, avg 17µs/call
# 156 times (2.02ms+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 383 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 13µs/call
# 48 times (717µs+0s) by OCBNET::Spritesets::Corner::layout at line 58 of webmerge/scripts/modules/OCBNET/Spritesets/Corner.pm, avg 15µs/call
# 12 times (154µs+0s) by OCBNET::Spritesets::Fit::layout at line 30 of webmerge/scripts/modules/OCBNET/Spritesets/Fit.pm, avg 13µs/call | ||||
132 | |||||
133 | # check if the number of children is zero | ||||
134 | 528 | 11.6ms | return scalar @{$_[0]->{'children'}} == 0; | ||
135 | |||||
136 | } | ||||
137 | # EO sub empty | ||||
138 | |||||
139 | #################################################################################################### | ||||
140 | |||||
141 | # layout all child nodes | ||||
142 | # updates dimensions and positions | ||||
143 | # ****************************************************************************** | ||||
144 | sub layout | ||||
145 | # spent 3.94s (571ms+3.36) within OCBNET::Spritesets::Container::layout which was called 108 times, avg 36.4ms/call:
# 96 times (38.7ms+330ms) by OCBNET::Spritesets::Stack::layout at line 102 of webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm, avg 3.84ms/call
# 12 times (533ms+3.03s) by OCBNET::Spritesets::Fit::layout at line 32 of webmerge/scripts/modules/OCBNET/Spritesets/Fit.pm, avg 297ms/call | ||||
146 | |||||
147 | # get our object | ||||
148 | 108 | 341µs | my ($self) = @_; | ||
149 | |||||
150 | # layout all children | ||||
151 | 108 | 51.1ms | 4712 | 2.13s | $_->layout foreach (@{$self->{'children'}}); # spent 2.13s making 4712 calls to OCBNET::Spritesets::Block::layout, avg 451µs/call |
152 | |||||
153 | 2 | 2.50ms | 2 | 623µs | # spent 346µs (69+277) within OCBNET::Spritesets::Container::BEGIN@153 which was called:
# once (69µs+277µs) by base::import at line 153 # spent 346µs making 1 call to OCBNET::Spritesets::Container::BEGIN@153
# spent 277µs making 1 call to Exporter::import |
154 | |||||
155 | # we scale by our common scale factor | ||||
156 | # so this has to be here and not in block | ||||
157 | 108 | 2.78ms | 108 | 3.07ms | foreach my $sprite ($self->children) # spent 3.07ms making 108 calls to OCBNET::Spritesets::Container::children, avg 28µs/call |
158 | { | ||||
159 | 4712 | 89.6ms | 9424 | 631ms | snap ($sprite->{'width'}, $self->scaleX); # spent 577ms making 4712 calls to OCBNET::Spritesets::Container::scaleX, avg 123µs/call
# spent 54.0ms making 4712 calls to OCBNET::Spritesets::Canvas::Layout::snap, avg 11µs/call |
160 | 4712 | 101ms | 9424 | 604ms | snap ($sprite->{'height'}, $self->scaleY); # spent 552ms making 4712 calls to OCBNET::Spritesets::Container::scaleY, avg 117µs/call
# spent 52.2ms making 4712 calls to OCBNET::Spritesets::Canvas::Layout::snap, avg 11µs/call |
161 | |||||
162 | } | ||||
163 | |||||
164 | # return success | ||||
165 | 108 | 1.52ms | return $self; | ||
166 | |||||
167 | } | ||||
168 | # EO sub layout | ||||
169 | |||||
170 | |||||
171 | #################################################################################################### | ||||
172 | |||||
173 | sub scaleX | ||||
174 | # spent 592ms (202+390) within OCBNET::Spritesets::Container::scaleX which was called 4868 times, avg 122µs/call:
# 4712 times (193ms+384ms) by OCBNET::Spritesets::Container::layout at line 159, avg 123µs/call
# 48 times (3.49ms+2.60ms) by OCBNET::Spritesets::Canvas::Layout::layout at line 166 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 127µs/call
# 48 times (3.12ms+2.33ms) by OCBNET::Spritesets::Canvas::Layout::layout at line 195 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 113µs/call
# 36 times (1.18ms+257µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 179 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 40µs/call
# 12 times (469µs+124µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 190 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 49µs/call
# 12 times (460µs+121µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 192 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 48µs/call | ||||
175 | 4868 | 11.0ms | my ($self) = @_; | ||
176 | 4868 | 15.3ms | my @factors = (1); | ||
177 | 4868 | 149ms | if (defined $self->{'scale-x'}) | ||
178 | { return $self->{'scale-x'}; } | ||||
179 | 156 | 3.06ms | 156 | 2.92ms | foreach my $sprite ($self->children) # spent 2.92ms making 156 calls to OCBNET::Spritesets::Container::children, avg 19µs/call |
180 | 4744 | 61.4ms | 4744 | 56.4ms | { push(@factors, $sprite->scaleX); } # spent 56.4ms making 4744 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call |
181 | 156 | 1.76ms | 156 | 328ms | my $rv = multilcm(@factors); # spent 328ms making 156 calls to OCBNET::Spritesets::Container::multilcm, avg 2.10ms/call |
182 | 156 | 4.82ms | 156 | 2.92ms | die $rv unless $rv =~ m/^\d+$/; # spent 2.92ms making 156 calls to OCBNET::Spritesets::Container::CORE:match, avg 19µs/call |
183 | 156 | 6.16ms | return $self->{'scale-x'} = $rv; | ||
184 | } | ||||
185 | |||||
186 | sub scaleY | ||||
187 | # spent 565ms (183+382) within OCBNET::Spritesets::Container::scaleY which was called 4868 times, avg 116µs/call:
# 4712 times (175ms+377ms) by OCBNET::Spritesets::Container::layout at line 160, avg 117µs/call
# 48 times (3.00ms+2.27ms) by OCBNET::Spritesets::Canvas::Layout::layout at line 172 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 110µs/call
# 48 times (2.88ms+2.20ms) by OCBNET::Spritesets::Canvas::Layout::layout at line 202 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 106µs/call
# 36 times (1.10ms+241µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 184 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 37µs/call
# 12 times (437µs+123µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 191 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 47µs/call
# 12 times (438µs+120µs) by OCBNET::Spritesets::Canvas::Layout::layout at line 193 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 47µs/call | ||||
188 | 4868 | 10.6ms | my ($self) = @_; | ||
189 | 4868 | 15.3ms | my @factors = (1); | ||
190 | 4868 | 153ms | if (defined $self->{'scale-y'}) | ||
191 | { return $self->{'scale-y'}; } | ||||
192 | 156 | 2.95ms | 156 | 3.04ms | foreach my $sprite ($self->children) # spent 3.04ms making 156 calls to OCBNET::Spritesets::Container::children, avg 19µs/call |
193 | 4744 | 60.1ms | 4744 | 54.6ms | { push(@factors, $sprite->scaleY); } # spent 54.6ms making 4744 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call |
194 | 156 | 1.60ms | 156 | 322ms | my $rv = multilcm(@factors); # spent 322ms making 156 calls to OCBNET::Spritesets::Container::multilcm, avg 2.07ms/call |
195 | 156 | 4.07ms | 156 | 2.24ms | die $rv unless $rv =~ m/^\d+$/; # spent 2.24ms making 156 calls to OCBNET::Spritesets::Container::CORE:match, avg 14µs/call |
196 | 156 | 4.91ms | return $self->{'scale-y'} = $rv; | ||
197 | } | ||||
198 | |||||
199 | #################################################################################################### | ||||
200 | |||||
201 | # draw and return image instance | ||||
202 | # ****************************************************************************** | ||||
203 | sub draw | ||||
204 | # spent 1.86s (654ms+1.21) within OCBNET::Spritesets::Container::draw which was called 108 times, avg 17.2ms/call:
# 108 times (654ms+1.21s) by OCBNET::Spritesets::Canvas::draw at line 203 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 17.2ms/call | ||||
205 | |||||
206 | # get our object | ||||
207 | 108 | 453µs | my ($self) = @_; | ||
208 | |||||
209 | # initialize empty image | ||||
210 | 108 | 11.6ms | 108 | 9.17ms | $self->{'image'}->Set(matte => 'True'); # spent 9.17ms making 108 calls to Graphics::Magick::Set, avg 85µs/call |
211 | 108 | 5.13ms | 108 | 3.17ms | $self->{'image'}->Set(magick => 'png'); # spent 3.17ms making 108 calls to Graphics::Magick::Set, avg 29µs/call |
212 | 108 | 7.00ms | 216 | 12.4ms | $self->{'image'}->Set(size => $self->size); # spent 8.62ms making 108 calls to OCBNET::Spritesets::Block::size, avg 80µs/call
# spent 3.78ms making 108 calls to Graphics::Magick::Set, avg 35µs/call |
213 | 108 | 78.5ms | 108 | 75.2ms | $self->{'image'}->ReadImage($self->{'bg'}); # spent 75.2ms making 108 calls to Graphics::Magick::ReadImage, avg 697µs/call |
214 | 108 | 106ms | 108 | 103ms | $self->{'image'}->Quantize(colorspace=>'RGB'); # spent 103ms making 108 calls to Graphics::Magick::Quantize, avg 951µs/call |
215 | |||||
216 | # process all sprites to paint them | ||||
217 | 108 | 1.38ms | foreach my $sprite (@{$self->{'children'}}) | ||
218 | { | ||||
219 | # draw background on canvas | ||||
220 | 4744 | 14.6ms | if ($sprite->{'bg'}) | ||
221 | { | ||||
222 | $self->{'image'}->Composite( | ||||
223 | compose => 'over', | ||||
224 | y => $sprite->top + $sprite->paddingTop, | ||||
225 | x => $sprite->left + $sprite->paddingLeft, | ||||
226 | image => $sprite->{'img-bg'} | ||||
227 | ); | ||||
228 | } | ||||
229 | # draw image on canvas | ||||
230 | 4744 | 1.08s | 28464 | 1.00s | $self->{'image'}->Composite( # spent 755ms making 4744 calls to Graphics::Magick::Composite, avg 159µs/call
# spent 55.0ms making 4744 calls to OCBNET::Spritesets::Block::top, avg 12µs/call
# spent 50.6ms making 4744 calls to OCBNET::Spritesets::Block::draw, avg 11µs/call
# spent 48.2ms making 4744 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call
# spent 47.3ms making 4744 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call
# spent 46.6ms making 4744 calls to OCBNET::Spritesets::Block::left, avg 10µs/call |
231 | compose => 'over', | ||||
232 | y => $sprite->top + $sprite->paddingTop, | ||||
233 | x => $sprite->left + $sprite->paddingLeft, | ||||
234 | image => $sprite->draw | ||||
235 | ); | ||||
236 | } | ||||
237 | # EO each sprite | ||||
238 | |||||
239 | # return the image instance | ||||
240 | 108 | 2.43ms | return $self->{'image'}; | ||
241 | |||||
242 | } | ||||
243 | # EO sub draw | ||||
244 | |||||
245 | #################################################################################################### | ||||
246 | #################################################################################################### | ||||
247 | 1 | 14µs | 1; | ||
sub OCBNET::Spritesets::Container::CORE:match; # opcode |