| Filename | /home/ocbnet/domain/ocbnet.ch/vhost/webmerge/htdocs/webmerge/scripts/modules/OCBNET/CSS/Parser/Base.pm |
| Statements | Executed 182714 statements in 6.58s |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 68992 | 8 | 2 | 2.41s | 2.92s | OCBNET::CSS::Parser::Base::fromPx |
| 73848 | 8 | 1 | 798ms | 798ms | OCBNET::CSS::Parser::Base::CORE:match (opcode) |
| 9880 | 3 | 2 | 652ms | 1.04s | OCBNET::CSS::Parser::Base::fromUrl (recurses: max depth 1, inclusive time 577ms) |
| 10072 | 1 | 1 | 498ms | 732ms | OCBNET::CSS::Parser::Base::uncomment |
| 9856 | 1 | 1 | 485ms | 582ms | OCBNET::CSS::Parser::Base::fromPosition |
| 53009 | 4 | 1 | 263ms | 263ms | OCBNET::CSS::Parser::Base::CORE:regcomp (opcode) |
| 10072 | 1 | 1 | 171ms | 171ms | OCBNET::CSS::Parser::Base::CORE:subst (opcode) |
| 1 | 1 | 1 | 202µs | 232µs | OCBNET::CSS::Parser::Base::BEGIN@9 |
| 7 | 7 | 1 | 92µs | 92µs | OCBNET::CSS::Parser::Base::CORE:qr (opcode) |
| 1 | 1 | 1 | 82µs | 180µs | OCBNET::CSS::Parser::Base::BEGIN@8 |
| 1 | 1 | 1 | 52µs | 52µs | OCBNET::CSS::Parser::Base::BEGIN@17.3 |
| 1 | 1 | 1 | 32µs | 32µs | OCBNET::CSS::Parser::Base::BEGIN@14 |
| 1 | 1 | 1 | 29µs | 29µs | OCBNET::CSS::Parser::Base::BEGIN@20 |
| 1 | 1 | 1 | 27µs | 27µs | OCBNET::CSS::Parser::Base::BEGIN@23 |
| 1 | 1 | 1 | 24µs | 24µs | OCBNET::CSS::Parser::Base::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 | package OCBNET::CSS::Parser::Base; | ||||
| 6 | #################################################################################################### | ||||
| 7 | |||||
| 8 | 2 | 150µs | 2 | 279µs | # spent 180µs (82+99) within OCBNET::CSS::Parser::Base::BEGIN@8 which was called:
# once (82µs+99µs) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 8 # spent 180µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@8
# spent 99µs making 1 call to strict::import |
| 9 | 2 | 338µs | 2 | 262µs | # spent 232µs (202+30) within OCBNET::CSS::Parser::Base::BEGIN@9 which was called:
# once (202µs+30µs) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 9 # spent 232µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@9
# spent 30µs making 1 call to warnings::import |
| 10 | |||||
| 11 | #################################################################################################### | ||||
| 12 | |||||
| 13 | # define our version string | ||||
| 14 | 1 | 183µs | 1 | 32µs | # spent 32µs within OCBNET::CSS::Parser::Base::BEGIN@14 which was called:
# once (32µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 14 # spent 32µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@14 |
| 15 | |||||
| 16 | # load exporter and inherit from it | ||||
| 17 | 3 | 400µs | 2 | 76µs | # spent 24µs within OCBNET::CSS::Parser::Base::BEGIN@17 which was called:
# once (24µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 17
# spent 52µs within OCBNET::CSS::Parser::Base::BEGIN@17.3 which was called:
# once (52µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 17 # spent 52µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@17.3
# spent 24µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@17 |
| 18 | |||||
| 19 | # define our functions that will be exported | ||||
| 20 | 1 | 176µs | 1 | 29µs | # spent 29µs within OCBNET::CSS::Parser::Base::BEGIN@20 which was called:
# once (29µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 20 # spent 29µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@20 |
| 21 | |||||
| 22 | # define our functions than can be exported | ||||
| 23 | 1 | 2.36ms | 1 | 27µs | # spent 27µs within OCBNET::CSS::Parser::Base::BEGIN@23 which was called:
# once (27µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 23 # spent 27µs making 1 call to OCBNET::CSS::Parser::Base::BEGIN@23 |
| 24 | |||||
| 25 | #################################################################################################### | ||||
| 26 | # base regular expressions | ||||
| 27 | #################################################################################################### | ||||
| 28 | |||||
| 29 | # match text in apos or quotes | ||||
| 30 | #************************************************************************************************** | ||||
| 31 | 1 | 77µs | 1 | 37µs | our $re_apo = qr/(?:[^\'\\]+|\\.)*/s; # spent 37µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 32 | 1 | 26µs | 1 | 9µs | our $re_quot = qr/(?:[^\"\\]+|\\.)*/s; # spent 9µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 33 | |||||
| 34 | # match a multiline comment | ||||
| 35 | #************************************************************************************************** | ||||
| 36 | 1 | 24µs | 1 | 8µs | our $re_comment = qr/\/\*\s*(.*?)\s*\*\//s; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 37 | |||||
| 38 | # match a css identifier name | ||||
| 39 | #************************************************************************************************** | ||||
| 40 | 1 | 25µs | 1 | 8µs | our $re_css_name = qr/[_a-zA-Z][_a-zA-Z0-9\-]*/; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 41 | |||||
| 42 | # match (floating point) numbers | ||||
| 43 | #************************************************************************************************** | ||||
| 44 | 1 | 30µs | 1 | 14µs | our $re_number = qr/[\-\+]?[0-9]*\.?[0-9]+/s; # spent 14µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 45 | # our $re_number_neg = qr/\-[0-9]*\.?[0-9]+/s; | ||||
| 46 | # our $re_number_pos = qr/\+?[0-9]*\.?[0-9]+/s; | ||||
| 47 | |||||
| 48 | # match a percent value | ||||
| 49 | #************************************************************************************************** | ||||
| 50 | 1 | 104µs | 2 | 58µs | our $re_percent = qr/$re_number\%/s; # spent 50µs making 1 call to OCBNET::CSS::Parser::Base::CORE:regcomp
# spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 51 | |||||
| 52 | # match a number from 0 to 255 (strict match) | ||||
| 53 | #************************************************************************************************** | ||||
| 54 | 1 | 30µs | 1 | 8µs | our $re_byte = qr/(?:0|[1-9]\d?|1\d{2}|2(?:[0-4]\d|5[0-5]))/s; # spent 8µs making 1 call to OCBNET::CSS::Parser::Base::CORE:qr |
| 55 | |||||
| 56 | #################################################################################################### | ||||
| 57 | # some helper functions | ||||
| 58 | #################################################################################################### | ||||
| 59 | |||||
| 60 | # parse dimension from pixel | ||||
| 61 | #************************************************************************************************** | ||||
| 62 | sub uncomment | ||||
| 63 | # spent 732ms (498+234) within OCBNET::CSS::Parser::Base::uncomment which was called 10072 times, avg 73µs/call:
# 10072 times (498ms+234ms) by OCBNET::Spritesets::CSS::Parser::read at line 117 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 73µs/call | ||||
| 64 | # remove comment from actual value | ||||
| 65 | 10072 | 606ms | 20144 | 234ms | $_[0] =~ s/$re_comment//gm; # spent 171ms making 10072 calls to OCBNET::CSS::Parser::Base::CORE:subst, avg 17µs/call
# spent 63.3ms making 10072 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 6µs/call |
| 66 | # return the given value | ||||
| 67 | 10072 | 292ms | return $_[0]; | ||
| 68 | } | ||||
| 69 | # EO sub uncomment | ||||
| 70 | |||||
| 71 | # parse dimension from pixel | ||||
| 72 | #************************************************************************************************** | ||||
| 73 | sub fromPx | ||||
| 74 | # spent 2.92s (2.41+510ms) within OCBNET::CSS::Parser::Base::fromPx which was called 68992 times, avg 42µs/call:
# 19712 times (799ms+182ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 50µs/call
# 9856 times (569ms+169ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 55 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 75µs/call
# 9856 times (125ms+14.7ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 56 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 14µs/call
# 9856 times (96.4ms+0s) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 57 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 10µs/call
# 4928 times (230ms+39.1ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 69 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 55µs/call
# 4928 times (217ms+35.2ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 72 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 51µs/call
# 4928 times (187ms+34.8ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 70 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 45µs/call
# 4928 times (186ms+34.7ms) by OCBNET::Spritesets::Canvas::Optimize::optimize at line 71 of webmerge/scripts/modules/OCBNET/Spritesets/Canvas/Optimize.pm, avg 45µs/call | ||||
| 75 | # return undef if nothing passed | ||||
| 76 | 68992 | 721ms | return unless defined $_[0]; | ||
| 77 | # parse number via regular expression | ||||
| 78 | 41080 | 3.14s | 82160 | 510ms | $_[0] =~ m/($re_number)px/i ? $1 : $_[0]; # spent 319ms making 41080 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 8µs/call
# spent 190ms making 41080 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 5µs/call |
| 79 | } | ||||
| 80 | |||||
| 81 | # parse an url | ||||
| 82 | #************************************************************************************************** | ||||
| 83 | sub fromUrl | ||||
| 84 | # spent 1.04s (652ms+392ms) within OCBNET::CSS::Parser::Base::fromUrl which was called 9880 times, avg 106µs/call:
# 4940 times (429ms+-429ms) by OCBNET::CSS::Parser::Base::fromUrl at line 86, avg 0s/call
# 4928 times (222ms+819ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 211µs/call
# 12 times (488µs+1.55ms) by OCBNET::Spritesets::CSS::Parser::write at line 404 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 170µs/call | ||||
| 85 | # check for css url pattern (call again to unwrap quotes) | ||||
| 86 | 9880 | 638ms | 14820 | 297ms | return fromUrl($1) if $_[0] =~ m/^\s*url\(\s*(.*?)\s*\)\s*$/m; # spent 297ms making 9880 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 30µs/call
# spent 577ms making 4940 calls to OCBNET::CSS::Parser::Base::fromUrl, avg 117µs/call, recursion: max depth 1, sum of overlapping time 577ms |
| 87 | # unwrap quotes if there are any | ||||
| 88 | 4940 | 191ms | 4940 | 28.5ms | return $1 if $_[0] =~ m/^\"(.*?)\"\z/m; # spent 28.5ms making 4940 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 6µs/call |
| 89 | 4940 | 274ms | 4940 | 65.9ms | return $1 if $_[0] =~ m/^\'(.*?)\'\z/m; # spent 65.9ms making 4940 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 13µs/call |
| 90 | # return same as given | ||||
| 91 | return $_[0]; | ||||
| 92 | } | ||||
| 93 | |||||
| 94 | # parse background position | ||||
| 95 | #************************************************************************************************** | ||||
| 96 | sub fromPosition | ||||
| 97 | # spent 582ms (485+96.9) within OCBNET::CSS::Parser::Base::fromPosition which was called 9856 times, avg 59µs/call:
# 9856 times (485ms+96.9ms) by OCBNET::Spritesets::CSS::Parser::load at line 259 of webmerge/scripts/modules/OCBNET/Spritesets/CSS/Parser.pm, avg 59µs/call | ||||
| 98 | |||||
| 99 | # get position string | ||||
| 100 | 9856 | 37.2ms | my ($position) = @_; | ||
| 101 | |||||
| 102 | # default to left/top position | ||||
| 103 | 9856 | 9.64ms | return 0 unless (defined $position); | ||
| 104 | |||||
| 105 | # allow keywords for left and top position | ||||
| 106 | 9856 | 465ms | 9856 | 59.5ms | return 0 if ($position =~ m/^(?:top|left)$/i); # spent 59.5ms making 9856 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 6µs/call |
| 107 | |||||
| 108 | # return the parsed pixel number if matched | ||||
| 109 | 1856 | 150ms | 3712 | 31.0ms | return $1 if ($position =~ m/^($re_number)(?:px)?$/i); # spent 21.4ms making 1856 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 12µs/call
# spent 9.58ms making 1856 calls to OCBNET::CSS::Parser::Base::CORE:regcomp, avg 5µs/call |
| 110 | |||||
| 111 | # right/bottom are the only valid keywords | ||||
| 112 | # for the position for most other functions | ||||
| 113 | 864 | 41.6ms | 864 | 4.35ms | return 'right' if ($position =~ m/^right$/i); # spent 4.35ms making 864 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 5µs/call |
| 114 | 432 | 13.9ms | 432 | 2.09ms | return 'bottom' if ($position =~ m/^bottom$/i); # spent 2.09ms making 432 calls to OCBNET::CSS::Parser::Base::CORE:match, avg 5µs/call |
| 115 | |||||
| 116 | # die with a fatal error for invalid positions | ||||
| 117 | die "unknown background position: <$position>"; | ||||
| 118 | |||||
| 119 | } | ||||
| 120 | |||||
| 121 | #################################################################################################### | ||||
| 122 | #################################################################################################### | ||||
| 123 | 1 | 36µs | 1; | ||
# spent 798ms within OCBNET::CSS::Parser::Base::CORE:match which was called 73848 times, avg 11µs/call:
# 41080 times (319ms+0s) by OCBNET::CSS::Parser::Base::fromPx at line 78, avg 8µs/call
# 9880 times (297ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 86, avg 30µs/call
# 9856 times (59.5ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 106, avg 6µs/call
# 4940 times (65.9ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 89, avg 13µs/call
# 4940 times (28.5ms+0s) by OCBNET::CSS::Parser::Base::fromUrl at line 88, avg 6µs/call
# 1856 times (21.4ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 109, avg 12µs/call
# 864 times (4.35ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 113, avg 5µs/call
# 432 times (2.09ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 114, avg 5µs/call | |||||
# spent 92µs within OCBNET::CSS::Parser::Base::CORE:qr which was called 7 times, avg 13µs/call:
# once (37µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 31
# once (14µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 44
# once (9µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 32
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 50
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 54
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 36
# once (8µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 40 | |||||
# spent 263ms within OCBNET::CSS::Parser::Base::CORE:regcomp which was called 53009 times, avg 5µs/call:
# 41080 times (190ms+0s) by OCBNET::CSS::Parser::Base::fromPx at line 78, avg 5µs/call
# 10072 times (63.3ms+0s) by OCBNET::CSS::Parser::Base::uncomment at line 65, avg 6µs/call
# 1856 times (9.58ms+0s) by OCBNET::CSS::Parser::Base::fromPosition at line 109, avg 5µs/call
# once (50µs+0s) by OCBNET::Spritesets::Canvas::Optimize::BEGIN@28 at line 50 | |||||
# spent 171ms within OCBNET::CSS::Parser::Base::CORE:subst which was called 10072 times, avg 17µs/call:
# 10072 times (171ms+0s) by OCBNET::CSS::Parser::Base::uncomment at line 65, avg 17µs/call |