← 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:24 2013

Filename/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm
StatementsExecuted 338 statements in 16.5ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
24118.46ms326sRTP::Webmerge::Process::CSS::Spritesets::::spritesetsRTP::Webmerge::Process::CSS::Spritesets::spritesets
12115.35ms23.2msRTP::Webmerge::Process::CSS::Spritesets::::__ANON__[:98]RTP::Webmerge::Process::CSS::Spritesets::__ANON__[:98]
11191µs355µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@8RTP::Webmerge::Process::CSS::Spritesets::BEGIN@8
11180µs570µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@140RTP::Webmerge::Process::CSS::Spritesets::BEGIN@140
11160µs296µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@29RTP::Webmerge::Process::CSS::Spritesets::BEGIN@29
11156µs86µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@10RTP::Webmerge::Process::CSS::Spritesets::BEGIN@10
11156µs56µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@18.30RTP::Webmerge::Process::CSS::Spritesets::BEGIN@18.30
11156µs239µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@35RTP::Webmerge::Process::CSS::Spritesets::BEGIN@35
11155µs231µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@26RTP::Webmerge::Process::CSS::Spritesets::BEGIN@26
11153µs139µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@9RTP::Webmerge::Process::CSS::Spritesets::BEGIN@9
11143µs43µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@32RTP::Webmerge::Process::CSS::Spritesets::BEGIN@32
11129µs29µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@21RTP::Webmerge::Process::CSS::Spritesets::BEGIN@21
11127µs27µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@15RTP::Webmerge::Process::CSS::Spritesets::BEGIN@15
11123µs23µsRTP::Webmerge::Process::CSS::Spritesets::::BEGIN@18RTP::Webmerge::Process::CSS::Spritesets::BEGIN@18
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###################################################################################################
5package RTP::Webmerge::Process::CSS::Spritesets;
6###################################################################################################
7
82162µs2619µs
# spent 355µs (91+264) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@8 which was called: # once (91µs+264µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 8
use Carp;
# spent 355µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@8 # spent 264µs making 1 call to Exporter::import
92141µs2225µs
# spent 139µs (53+86) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@9 which was called: # once (53µs+86µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 9
use strict;
# spent 139µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@9 # spent 86µs making 1 call to strict::import
102213µs2116µs
# spent 86µs (56+30) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@10 which was called: # once (56µs+30µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 10
use warnings;
# spent 86µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@10 # spent 30µs making 1 call to warnings::import
11
12###################################################################################################
13
14# define our version string
151149µs127µs
# spent 27µs within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@15 which was called: # once (27µs+0s) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 15
BEGIN { $RTP::Webmerge::Process::CSS::Spritesets::VERSION = "0.8.2" }
# spent 27µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@15
16
17# load exporter and inherit from it
183416µs279µs
# spent 23µs within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@18 which was called: # once (23µs+0s) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 18 # spent 56µs within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@18.30 which was called: # once (56µs+0s) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 18
BEGIN { use Exporter qw(); our @ISA = qw(Exporter) }
19
20# define our functions to be exported
211152µs129µs
# spent 29µs within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@21 which was called: # once (29µs+0s) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 21
BEGIN { our @EXPORT = qw(spritesets); }
# spent 29µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@21
22
23###################################################################################################
24
25# load some constants
262185µs2406µs
# spent 231µs (55+175) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@26 which was called: # once (55µs+175µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 26
use Fcntl qw(LOCK_UN O_RDWR);
# spent 231µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@26 # spent 176µs making 1 call to Exporter::import
27
28# import program runner function
292176µs2533µs
# spent 296µs (60+236) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@29 which was called: # once (60µs+236µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 29
use RTP::Webmerge qw(runProgram);
# spent 296µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@29 # spent 236µs making 1 call to Exporter::import
30
31# load image spriteset class
322163µs143µs
# spent 43µs within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@32 which was called: # once (43µs+0s) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 32
use OCBNET::Spritesets::CSS::Parser;
# spent 43µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@32
33
34# import webmerge IO file reader and writer
3522.27ms2422µs
# spent 239µs (56+183) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@35 which was called: # once (56µs+183µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 35
use RTP::Webmerge::IO qw(readfile writefile);
# spent 239µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@35 # spent 183µs making 1 call to Exporter::import
36
37###################################################################################################
38
39# process spritesets with additional modules
40# try to keep them as standalone as possible
41# ***************************************************************************************
42sub spritesets
43
# spent 326s (8.46ms+326) within RTP::Webmerge::Process::CSS::Spritesets::spritesets which was called 24 times, avg 13.6s/call: # 24 times (8.46ms+326s) by RTP::Webmerge::callProcessor at line 555 of webmerge/scripts/modules/RTP/Webmerge.pm, avg 13.6s/call
{
44
45 # get input variables
4624112µs my ($data, $config, $output) = @_;
47
48 # create a new ocbnet spriteset css parser object
4924806µs241.38ms my $css = OCBNET::Spritesets::CSS::Parser->new($config);
# spent 1.38ms making 24 calls to OCBNET::Spritesets::CSS::Parser::new, avg 57µs/call
50
51 # declare writer sub
52 my $writer = sub
53
# spent 23.2ms (5.35+17.9) within RTP::Webmerge::Process::CSS::Spritesets::__ANON__[/home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/RTP/Webmerge/Process/CSS/Spritesets.pm:98] which was called 12 times, avg 1.94ms/call: # 12 times (5.35ms+17.9ms) by OCBNET::Spritesets::CSS::Parser::write at line 419 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 1.94ms/call
{
54
55 # get input varibles
56121.85ms my ($file, $blob, $written) = @_;
57
58 # get data for atomic file handling
5912101µs my $atomic = $config->{'atomic'};
60
61 # check if file is known
6212646µs if ($atomic->{$file})
63 {
64
65 # content has changed between writes
66 # what should we do in this situation?
6791.38ms if (${$atomic->{$file}->[0]} ne $blob)
68 {
69 # this seems that it can happen with spritesets
70 # the differences are very subtile, but no idea why
71 # so far we haven't had an issue with it in a long time
72 warn "\nERROR: Writing to same file more than once (different content):\n";
73 warn substr($file, - 65), "\n";
74 die "PLEASE REVIEW YOUR CONFIGURATION!\n";
75 }
76 else
77 {
78 # this is really just a warning, nothing more
79 # remove this once we add a proper implementation
809966µs warn "\nWARNING: Writing to the same file more than once (same content):\n";
819535µs warn substr($file, - 65), "\n";
82 }
83 }
84 # first write on file
85 else
86 {
87 # write out the file and get the file handle
88365µs317.9ms my $handle = writefile($file, \$blob, $atomic, 1);
# spent 17.9ms making 3 calls to RTP::Webmerge::IO::writefile, avg 5.97ms/call
89 # assertion for any write errors
9034µs die "error write $file" unless $handle;
91 # create data structure to remember ...
92334µs unless (exists $written->{'png'})
93 { $written->{'png'} = []; }
94 # ... which files have been written
95329µs push(@{$written->{'png'}}, $handle);
96 }
97
9824702µs };
99 # EO sub $writer
100
101 # read stylesheet and process spritesets
102241.03ms72133s $css->read($data)->rehash->load;
# spent 87.4s making 24 calls to OCBNET::Spritesets::CSS::Parser::read, avg 3.64s/call # spent 37.8s making 24 calls to OCBNET::Spritesets::CSS::Parser::load, avg 1.58s/call # spent 7.45s making 24 calls to OCBNET::Spritesets::CSS::Parser::rehash, avg 310ms/call
10324969µs7255.6s $css->optimize->distribute->finalize;
# spent 30.4s making 24 calls to OCBNET::Spritesets::CSS::Parser::distribute, avg 1.26s/call # spent 23.2s making 24 calls to OCBNET::Spritesets::CSS::Parser::optimize, avg 966ms/call # spent 2.02s making 24 calls to OCBNET::Spritesets::CSS::Parser::finalize, avg 84.0ms/call
10424400µs24116s my $written = $css->write($writer);
# spent 116s making 24 calls to OCBNET::Spritesets::CSS::Parser::write, avg 4.85s/call
10524967µs4821.1s ${$data} = $css->process->render;
# spent 19.6s making 24 calls to OCBNET::Spritesets::CSS::Parser::process, avg 815ms/call # spent 1.55s making 24 calls to OCBNET::Spritesets::CSS::Block::render, avg 64.4ms/call
106
107 # print debug messages if wished
1082489µs $css->debug if $config->{'debug'};
109
110 # optimize spriteset images
1112481µs if ($config->{'optimize'})
112 {
113 # call all possible optimizers
114 foreach my $program (keys %{$written})
115 {
116 # check if this program should run or not
117 next unless $config->{'optimize-' . $program};
118 # close file finehandle now to flush out changes
119 CORE::close($_) foreach (@{$written->{$program}});
120 # fetch all temporary file paths to be optimized by next step
121 my @files = map { ${*$_}{'io_atomicfile_temp'} } @{$written->{$program}};
122 # call the external optimizer program on all temporary files
123 runProgram($config, $program . 'opt', \@files, $program . ' sprites');
124 # re-open the file handles after the optimizers have done their work
125 sysopen($_, ${*$_}{'io_atomicfile_temp'}, O_RDWR) foreach (@{$written->{$program}});
126 }
127 # EO each program
128 }
129 # EO if optimize
130
131 # return success
132241.49ms return 1;
133
134}
135# EO sub dejquery
136
137###################################################################################################
138
139# import registered processors
1402232µs21.06ms
# spent 570µs (80+490) within RTP::Webmerge::Process::CSS::Spritesets::BEGIN@140 which was called: # once (80µs+490µs) by RTP::Webmerge::Process::CSS::BEGIN@21 at line 140
use RTP::Webmerge qw(%processors);
# spent 570µs making 1 call to RTP::Webmerge::Process::CSS::Spritesets::BEGIN@140 # spent 490µs making 1 call to Exporter::import
141
142# register the processor function
14317µs$processors{'spritesets'} = \& spritesets;
144
145###################################################################################################
146###################################################################################################
147116µs1;