| 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 | OCBNET::Spritesets::Container::draw |
| 108 | 2 | 2 | 571ms | 3.94s | OCBNET::Spritesets::Container::layout |
| 9488 | 1 | 1 | 260ms | 428ms | OCBNET::Spritesets::Container::lcm |
| 312 | 2 | 1 | 222ms | 650ms | OCBNET::Spritesets::Container::multilcm |
| 4868 | 6 | 2 | 202ms | 592ms | OCBNET::Spritesets::Container::scaleX |
| 4868 | 6 | 2 | 183ms | 565ms | OCBNET::Spritesets::Container::scaleY |
| 9488 | 1 | 1 | 168ms | 168ms | OCBNET::Spritesets::Container::gcf |
| 4900 | 2 | 2 | 98.3ms | 98.3ms | OCBNET::Spritesets::Container::add |
| 736 | 7 | 3 | 15.4ms | 15.4ms | OCBNET::Spritesets::Container::children |
| 168 | 4 | 3 | 9.56ms | 142ms | OCBNET::Spritesets::Container::new |
| 528 | 5 | 5 | 8.83ms | 8.83ms | OCBNET::Spritesets::Container::empty |
| 312 | 2 | 1 | 5.16ms | 5.16ms | OCBNET::Spritesets::Container::CORE:match (opcode) |
| 32 | 1 | 1 | 397µs | 397µs | OCBNET::Spritesets::Container::length |
| 1 | 1 | 1 | 90µs | 189µs | OCBNET::Spritesets::Container::BEGIN@11 |
| 1 | 1 | 1 | 69µs | 346µs | OCBNET::Spritesets::Container::BEGIN@153 |
| 1 | 1 | 1 | 53µs | 84µs | OCBNET::Spritesets::Container::BEGIN@12 |
| 1 | 1 | 1 | 52µs | 486µs | OCBNET::Spritesets::Container::BEGIN@16 |
| 0 | 0 | 0 | 0s | 0s | OCBNET::Spritesets::Container::multigcf |
| 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 |