← Index
NYTProf Performance Profile   « line view »
For webmerge/scripts/webmerge.pl
  Run on Mon Oct 7 02:42:42 2013
Reported on Mon Oct 7 03:03:18 2013

Filename/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm
StatementsExecuted 234912 statements in 3.73s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
12116.01s23.2sOCBNET::Spritesets::Canvas::Optimize::::optimizeOCBNET::Spritesets::Canvas::Optimize::optimize
12111.25s2.01sOCBNET::Spritesets::Canvas::Optimize::::finalizeOCBNET::Spritesets::Canvas::Optimize::finalize
1114.04ms5.15msOCBNET::Spritesets::Canvas::Optimize::::BEGIN@28OCBNET::Spritesets::Canvas::Optimize::BEGIN@28
11186µs200µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@10OCBNET::Spritesets::Canvas::Optimize::BEGIN@10
11163µs63µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@19.2OCBNET::Spritesets::Canvas::Optimize::BEGIN@19.2
11161µs94µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@11OCBNET::Spritesets::Canvas::Optimize::BEGIN@11
11129µs29µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@22OCBNET::Spritesets::Canvas::Optimize::BEGIN@22
11124µs24µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@19OCBNET::Spritesets::Canvas::Optimize::BEGIN@19
11122µs22µsOCBNET::Spritesets::Canvas::Optimize::::BEGIN@16OCBNET::Spritesets::Canvas::Optimize::BEGIN@16
Call graph for these subroutines as a Graphviz dot language file.
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# static helper functions for canvas
6####################################################################################################
7package OCBNET::Spritesets::Canvas::Optimize;
8####################################################################################################
9
102229µs2314µs
# spent 200µs (86+114) within OCBNET::Spritesets::Canvas::Optimize::BEGIN@10 which was called: # once (86µs+114µs) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 10
use strict;
# spent 200µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@10 # spent 114µs making 1 call to strict::import
112204µs2127µs
# spent 94µs (61+33) within OCBNET::Spritesets::Canvas::Optimize::BEGIN@11 which was called: # once (61µs+33µs) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 11
use warnings;
# spent 94µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@11 # spent 33µs making 1 call to warnings::import
12
13###################################################################################################
14
15# define our version string
161146µs122µs
# spent 22µs within OCBNET::Spritesets::Canvas::Optimize::BEGIN@16 which was called: # once (22µs+0s) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 16
BEGIN { $OCBNET::Spritesets::Canvas::Optimize = "0.7.0"; }
# spent 22µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@16
17
18# load exporter and inherit from it
193400µs287µs
# spent 24µs within OCBNET::Spritesets::Canvas::Optimize::BEGIN@19 which was called: # once (24µs+0s) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 19 # spent 63µs within OCBNET::Spritesets::Canvas::Optimize::BEGIN@19.2 which was called: # once (63µs+0s) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 19
BEGIN { use Exporter qw(); our @ISA = qw(Exporter); }
# spent 63µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@19.2 # spent 24µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@19
20
21# define our functions to be exported
221155µs129µs
# spent 29µs within OCBNET::Spritesets::Canvas::Optimize::BEGIN@22 which was called: # once (29µs+0s) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 22
BEGIN { our @EXPORT = qw(optimize finalize); }
# spent 29µs making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@22
23
24####################################################################################################
25
26# load some helper functions for parsing
27# ******************************************************************************
2823.80ms25.55ms
# spent 5.15ms (4.04+1.11) within OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 which was called: # once (4.04ms+1.11ms) by OCBNET::Spritesets::Canvas::BEGIN@19 at line 28
use OCBNET::CSS::Parser::Base qw(fromPx);
# spent 5.15ms making 1 call to OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 # spent 394µs making 1 call to Exporter::import
29
30####################################################################################################
31
32# get the boxes some padding according to the sprite
33# configuration (by looking at the background position)
34# ******************************************************************************
35sub optimize
36
# spent 23.2s (6.01+17.2) within OCBNET::Spritesets::Canvas::Optimize::optimize which was called 12 times, avg 1.93s/call: # 12 times (6.01s+17.2s) by OCBNET::Spritesets::CSS::Parser::optimize at line 309 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 1.93s/call
{
37 # get our object
381255µs my ($self) = shift;
39
40 # process each area in canvas
41 # foreach my $area ($self->areas)
42 {
43
44 # process each sprite from area
4524136µs foreach my $sprite (@{$self->{'sprites'}})
46 {
47
48 # get associated selector from current sprite
49492828.1ms my $selector = $sprite->{'selector'} || next;
50
51 # create dimensions object and fill it with
52 # min, max and actual value set in css styles
53985631.9ms my %dim; foreach my $dim ('width', 'height')
54 {
559856238ms197124.74s my $val = fromPx($selector->style($dim) || 0);
# spent 4.00s making 9856 calls to OCBNET::Spritesets::CSS::Block::style, avg 406µs/call # spent 738ms making 9856 calls to OCBNET::CSS::Parser::Base::fromPx, avg 75µs/call
569856223ms197122.61s my $min = fromPx($selector->style('min-' . $dim));
# spent 2.47s making 9856 calls to OCBNET::Spritesets::CSS::Block::style, avg 251µs/call # spent 140ms making 9856 calls to OCBNET::CSS::Parser::Base::fromPx, avg 14µs/call
579856211ms197122.40s my $max = fromPx($selector->style('max-' . $dim));
# spent 2.30s making 9856 calls to OCBNET::Spritesets::CSS::Block::style, avg 234µs/call # spent 96.4ms making 9856 calls to OCBNET::CSS::Parser::Base::fromPx, avg 10µs/call
5898568.83ms $val = $max if defined $max && $val < $max; # extend
5998567.12ms $val = $max if defined $max && $val > $max; # range
60985610.7ms $val = $min if defined $min && $val < $min; # range
619856194ms $dim{$dim} = { 'min' => $min, 'max' => $max, 'val' => $val };
62 }
63
64 # get the block padding from the css
65 # left/right paddings behave different regarding
66 # background-position, as left acts as an offset but
67 # right does not, since right aligns on the outer edge
68 # and we can only position backgrounds relative to top/left
694928114ms98561.40s my $padding_top = fromPx($selector->style('padding-top') || 0) || 0;
# spent 1.13s making 4928 calls to OCBNET::Spritesets::CSS::Block::style, avg 230µs/call # spent 269ms making 4928 calls to OCBNET::CSS::Parser::Base::fromPx, avg 55µs/call
704928114ms98561.34s my $padding_left = fromPx($selector->style('padding-left') || 0) || 0;
# spent 1.12s making 4928 calls to OCBNET::Spritesets::CSS::Block::style, avg 227µs/call # spent 222ms making 4928 calls to OCBNET::CSS::Parser::Base::fromPx, avg 45µs/call
714928113ms98561.48s my $padding_right = fromPx($selector->style('padding-right') || 0) || 0;
# spent 1.26s making 4928 calls to OCBNET::Spritesets::CSS::Block::style, avg 256µs/call # spent 220ms making 4928 calls to OCBNET::CSS::Parser::Base::fromPx, avg 45µs/call
724928112ms98561.47s my $padding_bottom = fromPx($selector->style('padding-bottom') || 0) || 0;
# spent 1.22s making 4928 calls to OCBNET::Spritesets::CSS::Block::style, avg 247µs/call # spent 252ms making 4928 calls to OCBNET::CSS::Parser::Base::fromPx, avg 51µs/call
73
74 # adjust all three values for padding
75492825.3ms foreach my $key ('min', 'max', 'val')
76 {
77 # add the padding to get the actual outer dimensions
781478468.1ms $dim{'width'}->{$key} += $padding_left + $padding_right;
791478470.9ms $dim{'height'}->{$key} += $padding_top + $padding_bottom;
80 }
81
82 # sprite is left aligned
83492896.7ms6080220ms if ($sprite->alignLeft)
# spent 203ms making 4928 calls to OCBNET::Spritesets::Sprite::alignLeft, avg 41µs/call # spent 6.48ms making 432 calls to OCBNET::Spritesets::Sprite::isFixedX, avg 15µs/call # spent 3.60ms making 240 calls to OCBNET::Spritesets::Sprite::scaleX, avg 15µs/call # spent 3.57ms making 240 calls to OCBNET::Spritesets::Block::width, avg 15µs/call # spent 3.10ms making 240 calls to OCBNET::Spritesets::Block::paddingLeft, avg 13µs/call
84 {
85 # add some padding to offset the actual sprite
864496113ms8992110ms $sprite->paddingLeft = $sprite->positionX;
# spent 55.4ms making 4496 calls to OCBNET::Spritesets::Sprite::positionX, avg 12µs/call # spent 55.0ms making 4496 calls to OCBNET::Spritesets::Block::paddingLeft, avg 12µs/call
87 # add more padding to the right to make sure we will fill out the whole available width (if width is not set, result will be negative)
884496245ms17984221ms $sprite->paddingRight = $dim{'width'}->{'val'} - $sprite->positionX - $sprite->width / $sprite->scaleX if $dim{'width'}->{'val'};
# spent 67.1ms making 4496 calls to OCBNET::Spritesets::Sprite::scaleX, avg 15µs/call # spent 55.4ms making 4496 calls to OCBNET::Spritesets::Block::width, avg 12µs/call # spent 50.7ms making 4496 calls to OCBNET::Spritesets::Block::paddingRight, avg 11µs/call # spent 48.1ms making 4496 calls to OCBNET::Spritesets::Sprite::positionX, avg 11µs/call
89 }
90 # is right but has fixed dimension
91 # we can translate this to left align
92 elsif ($sprite->isFixedX)
93 {
94 # problem is we cannot change position as we are not yet distributed!
95 $sprite->paddingLeft = $dim{'width'}->{'val'} - $sprite->width / $sprite->scaleX;
96 }
97
98 # create padding if it's offset from top
99492887.0ms6080233ms if ($sprite->alignTop)
# spent 218ms making 4928 calls to OCBNET::Spritesets::Sprite::alignTop, avg 44µs/call # spent 5.89ms making 432 calls to OCBNET::Spritesets::Sprite::isFixedY, avg 14µs/call # spent 3.61ms making 240 calls to OCBNET::Spritesets::Sprite::scaleY, avg 15µs/call # spent 3.13ms making 240 calls to OCBNET::Spritesets::Block::height, avg 13µs/call # spent 2.89ms making 240 calls to OCBNET::Spritesets::Block::paddingTop, avg 12µs/call
100 {
101 # add some padding to offset the actual sprite
1024496109ms8992103ms $sprite->paddingTop = $sprite->positionY;
# spent 51.6ms making 4496 calls to OCBNET::Spritesets::Block::paddingTop, avg 11µs/call # spent 51.2ms making 4496 calls to OCBNET::Spritesets::Sprite::positionY, avg 11µs/call
103 # add more padding to the bottom to make sure we will fill out the whole available height (if height is not set, result will be negative)
1044496236ms17984214ms $sprite->paddingBottom = $dim{'height'}->{'val'} - $sprite->positionY - $sprite->height / $sprite->scaleY if $dim{'height'}->{'val'};
# spent 66.3ms making 4496 calls to OCBNET::Spritesets::Sprite::scaleY, avg 15µs/call # spent 50.8ms making 4496 calls to OCBNET::Spritesets::Block::height, avg 11µs/call # spent 50.7ms making 4496 calls to OCBNET::Spritesets::Block::paddingBottom, avg 11µs/call # spent 46.2ms making 4496 calls to OCBNET::Spritesets::Sprite::positionY, avg 10µs/call
105 }
106 # is right but has fixed dimension
107 elsif ($sprite->isFixedY)
108 {
109 # problem is we cannot change position as we are not yet distributed!
110 $sprite->paddingTop = $dim{'height'}->{'val'} - $sprite->height / $sprite->scaleY;
111 }
112
113 # adjust the padding to account for scaling
1144928107ms9856112ms $sprite->paddingTop *= $sprite->scaleY;
# spent 60.4ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call # spent 51.2ms making 4928 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call
1154928105ms9856111ms $sprite->paddingLeft *= $sprite->scaleX;
# spent 60.5ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call # spent 50.4ms making 4928 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call
116492899.9ms9856109ms $sprite->paddingRight *= $sprite->scaleX;
# spent 58.7ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call # spent 50.0ms making 4928 calls to OCBNET::Spritesets::Block::paddingRight, avg 10µs/call
1174928102ms9856109ms $sprite->paddingBottom *= $sprite->scaleY;
# spent 58.8ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call # spent 50.6ms making 4928 calls to OCBNET::Spritesets::Block::paddingBottom, avg 10µs/call
118
119 # make sure we dont have any negative paddings
120 # fixes wrong calculation if no dimension is given
121492870.4ms492848.8ms $sprite->paddingTop = 0 if $sprite->paddingTop < 0;
# spent 48.8ms making 4928 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call
122492852.6ms492850.2ms $sprite->paddingLeft = 0 if $sprite->paddingLeft < 0;
# spent 50.2ms making 4928 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call
123492849.5ms494849.2ms $sprite->paddingRight = 0 if $sprite->paddingRight < 0;
# spent 49.2ms making 4948 calls to OCBNET::Spritesets::Block::paddingRight, avg 10µs/call
1244928151ms494850.0ms $sprite->paddingBottom = 0 if $sprite->paddingBottom < 0;
# spent 50.0ms making 4948 calls to OCBNET::Spritesets::Block::paddingBottom, avg 10µs/call
125
126 }
127 # EO each sprite
128
129 }
130 # Eo each area
131
132 # make chainable
13312225µs return $self;
134
135}
136# EO sub optimize
137
138###################################################################################################
139
140# sprites have been distributed, so we now can
141# start to translate bottom/right positioned sprites
142# in fixed dimension boxes to top/left aligned sprites
143# ******************************************************************************
144sub finalize
145
# spent 2.01s (1.25+768ms) within OCBNET::Spritesets::Canvas::Optimize::finalize which was called 12 times, avg 168ms/call: # 12 times (1.25s+768ms) by OCBNET::Spritesets::CSS::Parser::finalize at line 350 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 168ms/call
{
146
147 # get our object
1481254µs my ($self) = shift;
149
150 # process all sprites on this canvas
15112119µs foreach my $sprite (@{$self->{'sprites'}})
152 {
153
154 # get associated selector from current sprite
155 # my $selector = $sprite->{'selector'} || next;
156
157 # is right aligned and has fixed dimension
158 # this can be translated to a left alignment
159492863.4ms6080163ms if ($sprite->alignRight && $sprite->isFixedX)
# spent 150ms making 4928 calls to OCBNET::Spritesets::Sprite::alignRight, avg 30µs/call # spent 5.08ms making 432 calls to OCBNET::Spritesets::Sprite::isFixedX, avg 12µs/call # spent 2.86ms making 240 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call # spent 2.43ms making 240 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call # spent 2.38ms making 240 calls to OCBNET::Spritesets::Sprite::positionX, avg 10µs/call
160 { $sprite->positionX = $sprite->paddingLeft / $sprite->scaleX; }
161
162 # is bottom aligned and has fixed dimension
163 # this can be translated to a top alignment
164492862.9ms6080166ms if ($sprite->alignBottom && $sprite->isFixedY)
# spent 154ms making 4928 calls to OCBNET::Spritesets::Sprite::alignBottom, avg 31µs/call # spent 4.84ms making 432 calls to OCBNET::Spritesets::Sprite::isFixedY, avg 11µs/call # spent 2.89ms making 240 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call # spent 2.42ms making 240 calls to OCBNET::Spritesets::Sprite::positionY, avg 10µs/call # spent 2.38ms making 240 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call
165 { $sprite->positionY = $sprite->paddingTop / $sprite->scaleY; }
166
167 # add some safety margin
168492899.0ms9856112ms $sprite->paddingTop += $sprite->scaleY;
# spent 61.3ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call # spent 50.6ms making 4928 calls to OCBNET::Spritesets::Block::paddingTop, avg 10µs/call
169492899.1ms9856110ms $sprite->paddingLeft += $sprite->scaleX;
# spent 60.2ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call # spent 50.1ms making 4928 calls to OCBNET::Spritesets::Block::paddingLeft, avg 10µs/call
170 # add some more safety margin
171492897.2ms9856107ms $sprite->paddingRight += $sprite->scaleX;
# spent 58.3ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleX, avg 12µs/call # spent 49.2ms making 4928 calls to OCBNET::Spritesets::Block::paddingRight, avg 10µs/call
1724928116ms9856110ms $sprite->paddingBottom += $sprite->scaleY;
# spent 58.7ms making 4928 calls to OCBNET::Spritesets::Sprite::scaleY, avg 12µs/call # spent 51.1ms making 4928 calls to OCBNET::Spritesets::Block::paddingBottom, avg 10µs/call
173
174 }
175 # EO each sprite
176
177 # make chainable
17812257µs return $self;
179
180}
181# EO sub optimize
182
183####################################################################################################
184####################################################################################################
185113µs1;