| Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/Stack.pm |
| Statements | Executed 9107 statements in 157ms |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 96 | 2 | 2 | 189ms | 724ms | OCBNET::Spritesets::Stack::layout |
| 1604 | 5 | 2 | 16.4ms | 16.4ms | OCBNET::Spritesets::Stack::stackVert |
| 96 | 8 | 1 | 4.89ms | 17.3ms | OCBNET::Spritesets::Stack::new |
| 404 | 4 | 2 | 4.21ms | 4.21ms | OCBNET::Spritesets::Stack::alignOpp |
| 1 | 1 | 1 | 90µs | 191µs | OCBNET::Spritesets::Stack::BEGIN@11 |
| 1 | 1 | 1 | 52µs | 85µs | OCBNET::Spritesets::Stack::BEGIN@12 |
| 1 | 1 | 1 | 50µs | 454µs | OCBNET::Spritesets::Stack::BEGIN@17 |
| 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 block stacks the sprites vertically | ||||
| 6 | # or horizontally together (and aligned) | ||||
| 7 | #################################################################################################### | ||||
| 8 | package OCBNET::Spritesets::Stack; | ||||
| 9 | #################################################################################################### | ||||
| 10 | |||||
| 11 | 2 | 148µs | 2 | 293µs | # spent 191µs (90+101) within OCBNET::Spritesets::Stack::BEGIN@11 which was called:
# once (90µs+101µs) by OCBNET::Spritesets::BEGIN@28 at line 11 # spent 191µs making 1 call to OCBNET::Spritesets::Stack::BEGIN@11
# spent 101µs making 1 call to strict::import |
| 12 | 2 | 158µs | 2 | 117µs | # spent 85µs (52+32) within OCBNET::Spritesets::Stack::BEGIN@12 which was called:
# once (52µs+32µs) by OCBNET::Spritesets::BEGIN@28 at line 12 # spent 85µs making 1 call to OCBNET::Spritesets::Stack::BEGIN@12
# spent 32µs making 1 call to warnings::import |
| 13 | |||||
| 14 | #################################################################################################### | ||||
| 15 | |||||
| 16 | # a container is also a block | ||||
| 17 | 2 | 2.38ms | 2 | 859µs | # spent 454µs (50+405) within OCBNET::Spritesets::Stack::BEGIN@17 which was called:
# once (50µs+405µs) by OCBNET::Spritesets::BEGIN@28 at line 17 # spent 454µs making 1 call to OCBNET::Spritesets::Stack::BEGIN@17
# spent 405µs making 1 call to base::import |
| 18 | |||||
| 19 | #################################################################################################### | ||||
| 20 | |||||
| 21 | # create a new object | ||||
| 22 | # ****************************************************************************** | ||||
| 23 | sub new | ||||
| 24 | # spent 17.3ms (4.89+12.4) within OCBNET::Spritesets::Stack::new which was called 96 times, avg 180µs/call:
# 12 times (812µs+1.62ms) by OCBNET::Spritesets::Canvas::new at line 81 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 203µs/call
# 12 times (596µs+1.60ms) by OCBNET::Spritesets::Canvas::new at line 90 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 183µs/call
# 12 times (579µs+1.57ms) by OCBNET::Spritesets::Canvas::new at line 89 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 179µs/call
# 12 times (594µs+1.55ms) by OCBNET::Spritesets::Canvas::new at line 82 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 179µs/call
# 12 times (575µs+1.55ms) by OCBNET::Spritesets::Canvas::new at line 87 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 177µs/call
# 12 times (579µs+1.52ms) by OCBNET::Spritesets::Canvas::new at line 83 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 175µs/call
# 12 times (578µs+1.51ms) by OCBNET::Spritesets::Canvas::new at line 88 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 174µs/call
# 12 times (577µs+1.50ms) by OCBNET::Spritesets::Canvas::new at line 84 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas.pm, avg 173µs/call | ||||
| 25 | |||||
| 26 | # get package name, parent and options | ||||
| 27 | 96 | 360µs | my ($pckg, $parent, $stack_vert, $align_opp) = @_; | ||
| 28 | |||||
| 29 | # get object by calling super class | ||||
| 30 | 96 | 2.58ms | 96 | 12.4ms | my $self = $pckg->SUPER::new($parent); # spent 12.4ms making 96 calls to OCBNET::Spritesets::Container::new, avg 129µs/call |
| 31 | |||||
| 32 | # align the the oppositioning side? | ||||
| 33 | 96 | 310µs | $self->{'align-opp'} = $align_opp; | ||
| 34 | |||||
| 35 | # stack vertically or horizontally? | ||||
| 36 | 96 | 176µs | $self->{'stack-vert'} = $stack_vert; | ||
| 37 | |||||
| 38 | # return object | ||||
| 39 | 96 | 1.43ms | return $self; | ||
| 40 | |||||
| 41 | } | ||||
| 42 | |||||
| 43 | #################################################################################################### | ||||
| 44 | |||||
| 45 | # getter methods for the specific options | ||||
| 46 | # ****************************************************************************** | ||||
| 47 | 404 | 6.49ms | # spent 4.21ms within OCBNET::Spritesets::Stack::alignOpp which was called 404 times, avg 10µs/call:
# 128 times (1.31ms+0s) by OCBNET::Spritesets::Stack::layout at line 89, avg 10µs/call
# 116 times (1.19ms+0s) by OCBNET::Spritesets::Stack::layout at line 72, avg 10µs/call
# 96 times (1.06ms+0s) by OCBNET::Spritesets::Stack::layout at line 154, avg 11µs/call
# 64 times (650µs+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 389 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 10µs/call | ||
| 48 | 1604 | 71.2ms | # spent 16.4ms within OCBNET::Spritesets::Stack::stackVert which was called 1604 times, avg 10µs/call:
# 436 times (4.59ms+0s) by OCBNET::Spritesets::Stack::layout at line 119, avg 11µs/call
# 436 times (4.49ms+0s) by OCBNET::Spritesets::Stack::layout at line 64, avg 10µs/call
# 436 times (4.31ms+0s) by OCBNET::Spritesets::Stack::layout at line 142, avg 10µs/call
# 264 times (2.71ms+0s) by OCBNET::Spritesets::Stack::layout at line 160, avg 10µs/call
# 32 times (339µs+0s) by OCBNET::Spritesets::Canvas::Layout::layout at line 389 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 11µs/call | ||
| 49 | |||||
| 50 | #################################################################################################### | ||||
| 51 | |||||
| 52 | # calculate the dimensions and inner positions | ||||
| 53 | # ****************************************************************************** | ||||
| 54 | sub layout | ||||
| 55 | # spent 724ms (189+535) within OCBNET::Spritesets::Stack::layout which was called 96 times, avg 7.54ms/call:
# 48 times (134ms+398ms) by OCBNET::Spritesets::Edge::layout at line 31 of webmerge/scripts/modules/OCBNET/Spritesets/Edge.pm, avg 11.1ms/call
# 48 times (55.5ms+137ms) by OCBNET::Spritesets::Canvas::Layout::layout at line 108 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Layout.pm, avg 4.01ms/call | ||||
| 56 | |||||
| 57 | # get our object | ||||
| 58 | 96 | 304µs | my ($self) = @_; | ||
| 59 | |||||
| 60 | # process all sprites in this stack | ||||
| 61 | 96 | 1.58ms | 96 | 1.37ms | foreach my $sprite ($self->children) # spent 1.37ms making 96 calls to OCBNET::Spritesets::Container::children, avg 14µs/call |
| 62 | { | ||||
| 63 | # top/bottom edge/stack | ||||
| 64 | 436 | 6.16ms | 436 | 4.49ms | if ($self->stackVert) # spent 4.49ms making 436 calls to OCBNET::Spritesets::Stack::stackVert, avg 10µs/call |
| 65 | { | ||||
| 66 | # sprite has px position | ||||
| 67 | 212 | 2.29ms | 212 | 6.44ms | if ($sprite->alignLeft) # spent 6.44ms making 212 calls to OCBNET::Spritesets::Sprite::alignLeft, avg 30µs/call |
| 68 | { | ||||
| 69 | # never needs right margin | ||||
| 70 | 116 | 1.16ms | 116 | 1.21ms | $sprite->paddingRight = 0; # spent 1.21ms making 116 calls to OCBNET::Spritesets::Block::paddingRight, avg 10µs/call |
| 71 | # only optimize top edge/stack | ||||
| 72 | 116 | 1.30ms | 116 | 1.19ms | unless ($self->alignOpp) # spent 1.19ms making 116 calls to OCBNET::Spritesets::Stack::alignOpp, avg 10µs/call |
| 73 | { | ||||
| 74 | # keep left margin if repeating | ||||
| 75 | # unless ($sprite->isRepeatX) | ||||
| 76 | 92 | 1.00ms | 92 | 948µs | { $sprite->paddingLeft = 0; } # spent 948µs making 92 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call |
| 77 | } | ||||
| 78 | } | ||||
| 79 | } | ||||
| 80 | # left/right edge/stack | ||||
| 81 | else | ||||
| 82 | { | ||||
| 83 | # sprite has px position | ||||
| 84 | 224 | 2.36ms | 224 | 6.53ms | if ($sprite->alignTop) # spent 6.53ms making 224 calls to OCBNET::Spritesets::Sprite::alignTop, avg 29µs/call |
| 85 | { | ||||
| 86 | # never needs bottom margin | ||||
| 87 | 128 | 1.25ms | 128 | 1.38ms | $sprite->paddingBottom = 0; # spent 1.38ms making 128 calls to OCBNET::Spritesets::Block::paddingBottom, avg 11µs/call |
| 88 | # only optimize top edge/stack | ||||
| 89 | 128 | 1.42ms | 128 | 1.31ms | unless ($self->alignOpp) # spent 1.31ms making 128 calls to OCBNET::Spritesets::Stack::alignOpp, avg 10µs/call |
| 90 | { | ||||
| 91 | # keep top margin if repeating | ||||
| 92 | # unless ($sprite->isRepeatY) | ||||
| 93 | 80 | 841µs | 80 | 825µs | { $sprite->paddingTop = 0; } # spent 825µs making 80 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call |
| 94 | } | ||||
| 95 | } | ||||
| 96 | } | ||||
| 97 | } | ||||
| 98 | # EO each sprite | ||||
| 99 | |||||
| 100 | # call container layout | ||||
| 101 | # calls layout on sprites | ||||
| 102 | 96 | 2.95ms | 96 | 369ms | $self->SUPER::layout; # spent 369ms making 96 calls to OCBNET::Spritesets::Container::layout, avg 3.84ms/call |
| 103 | |||||
| 104 | # declare positions | ||||
| 105 | 96 | 247µs | my ($top, $left) = (0, 0); | ||
| 106 | |||||
| 107 | # declare dimensions | ||||
| 108 | 96 | 168µs | my ($width, $height) = (0, 0); | ||
| 109 | |||||
| 110 | # process all sprites for layout | ||||
| 111 | 96 | 1.57ms | 96 | 1.25ms | foreach my $sprite ($self->children) # spent 1.25ms making 96 calls to OCBNET::Spritesets::Container::children, avg 13µs/call |
| 112 | { | ||||
| 113 | |||||
| 114 | # get the sprite outer dimensions | ||||
| 115 | 436 | 4.73ms | 436 | 35.3ms | my $sprite_width = $sprite->outerWidth; # spent 35.3ms making 436 calls to OCBNET::Spritesets::Block::outerWidth, avg 81µs/call |
| 116 | 436 | 4.66ms | 436 | 34.8ms | my $sprite_height = $sprite->outerHeight; # spent 34.8ms making 436 calls to OCBNET::Spritesets::Block::outerHeight, avg 80µs/call |
| 117 | |||||
| 118 | # stack sprites vertically | ||||
| 119 | 436 | 5.04ms | 436 | 4.59ms | if ($self->stackVert) # spent 4.59ms making 436 calls to OCBNET::Spritesets::Stack::stackVert, avg 11µs/call |
| 120 | { | ||||
| 121 | # increase the stack height | ||||
| 122 | 212 | 293µs | $height += $sprite_height; | ||
| 123 | # search biggest sprite width | ||||
| 124 | 212 | 387µs | if ($width < $sprite_width) | ||
| 125 | { $width = $sprite_width; } | ||||
| 126 | } | ||||
| 127 | # or stack sprites horizontally | ||||
| 128 | else | ||||
| 129 | { | ||||
| 130 | # increase the stack width | ||||
| 131 | 224 | 328µs | $width += $sprite_width; | ||
| 132 | # search biggest sprite height | ||||
| 133 | 224 | 388µs | if ($height < $sprite_height) | ||
| 134 | { $height = $sprite_height; } | ||||
| 135 | } | ||||
| 136 | |||||
| 137 | # store sprite position | ||||
| 138 | 436 | 4.39ms | 436 | 4.45ms | $sprite->left = $left; # spent 4.45ms making 436 calls to OCBNET::Spritesets::Block::left, avg 10µs/call |
| 139 | 436 | 4.33ms | 436 | 4.39ms | $sprite->top = $top; # spent 4.39ms making 436 calls to OCBNET::Spritesets::Block::top, avg 10µs/call |
| 140 | |||||
| 141 | # increase the offset | ||||
| 142 | 436 | 6.09ms | 436 | 4.31ms | if ($self->stackVert) # spent 4.31ms making 436 calls to OCBNET::Spritesets::Stack::stackVert, avg 10µs/call |
| 143 | { $top += $sprite_height; } | ||||
| 144 | 224 | 419µs | else { $left += $sprite_width; } | ||
| 145 | |||||
| 146 | } | ||||
| 147 | # EO each sprite | ||||
| 148 | |||||
| 149 | # store dimensions | ||||
| 150 | 96 | 1.12ms | 96 | 1.05ms | $self->width = $width; # spent 1.05ms making 96 calls to OCBNET::Spritesets::Block::width, avg 11µs/call |
| 151 | 96 | 1.04ms | 96 | 976µs | $self->height = $height; # spent 976µs making 96 calls to OCBNET::Spritesets::Block::height, avg 10µs/call |
| 152 | |||||
| 153 | # return here if no alignment is set | ||||
| 154 | 96 | 1.69ms | 96 | 1.06ms | return $self unless $self->alignOpp; # spent 1.06ms making 96 calls to OCBNET::Spritesets::Stack::alignOpp, avg 11µs/call |
| 155 | |||||
| 156 | # process all sprites for alignment | ||||
| 157 | 48 | 777µs | 48 | 620µs | foreach my $sprite ($self->children) # spent 620µs making 48 calls to OCBNET::Spritesets::Container::children, avg 13µs/call |
| 158 | { | ||||
| 159 | # stacks sprites vertically | ||||
| 160 | 264 | 6.82ms | 624 | 22.8ms | if ($self->stackVert) # spent 18.9ms making 240 calls to OCBNET::Spritesets::Block::outerWidth, avg 79µs/call
# spent 2.71ms making 264 calls to OCBNET::Spritesets::Stack::stackVert, avg 10µs/call
# spent 1.18ms making 120 calls to OCBNET::Spritesets::Block::left, avg 10µs/call |
| 161 | { | ||||
| 162 | # align this sprite to the oppositioning side | ||||
| 163 | $sprite->left = $self->outerWidth - $sprite->outerWidth; | ||||
| 164 | } | ||||
| 165 | # stacks sprites horizontally | ||||
| 166 | else | ||||
| 167 | { | ||||
| 168 | # align this sprite to the oppositioning side | ||||
| 169 | 144 | 4.17ms | 432 | 24.2ms | $sprite->top = $self->outerHeight - $sprite->outerHeight; # spent 22.8ms making 288 calls to OCBNET::Spritesets::Block::outerHeight, avg 79µs/call
# spent 1.47ms making 144 calls to OCBNET::Spritesets::Block::top, avg 10µs/call |
| 170 | } | ||||
| 171 | } | ||||
| 172 | |||||
| 173 | # allow chaining | ||||
| 174 | 48 | 768µs | return $self; | ||
| 175 | |||||
| 176 | } | ||||
| 177 | # EO sub layout | ||||
| 178 | |||||
| 179 | #################################################################################################### | ||||
| 180 | #################################################################################################### | ||||
| 181 | 1 | 14µs | 1; |