← 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/usr/lib64/perl5/vendor_perl/5.16.0/File/BaseDir.pm
StatementsExecuted 54 statements in 6.46ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
211579µs3.04msFile::BaseDir::::_find_filesFile::BaseDir::_find_files
611198µs355µsFile::BaseDir::::_fileFile::BaseDir::_file
611156µs156µsFile::BaseDir::::CORE:ftfileFile::BaseDir::CORE:ftfile (opcode)
222139µs3.24msFile::BaseDir::::data_filesFile::BaseDir::data_files
11181µs179µsFile::BaseDir::::BEGIN@3File::BaseDir::BEGIN@3
11154µs318µsFile::BaseDir::::BEGIN@4File::BaseDir::BEGIN@4
21142µs42µsFile::BaseDir::::CORE:ftereadFile::BaseDir::CORE:fteread (opcode)
21133µs33µsFile::BaseDir::::xdg_data_dirsFile::BaseDir::xdg_data_dirs
21130µs30µsFile::BaseDir::::xdg_data_homeFile::BaseDir::xdg_data_home
21111µs11µsFile::BaseDir::::CORE:matchFile::BaseDir::CORE:match (opcode)
0000s0sFile::BaseDir::::_adaptFile::BaseDir::_adapt
0000s0sFile::BaseDir::::_catfileFile::BaseDir::_catfile
0000s0sFile::BaseDir::::_dirFile::BaseDir::_dir
0000s0sFile::BaseDir::::cache_homeFile::BaseDir::cache_home
0000s0sFile::BaseDir::::config_dirsFile::BaseDir::config_dirs
0000s0sFile::BaseDir::::config_filesFile::BaseDir::config_files
0000s0sFile::BaseDir::::config_homeFile::BaseDir::config_home
0000s0sFile::BaseDir::::data_dirsFile::BaseDir::data_dirs
0000s0sFile::BaseDir::::data_homeFile::BaseDir::data_home
0000s0sFile::BaseDir::::newFile::BaseDir::new
0000s0sFile::BaseDir::::xdg_cache_homeFile::BaseDir::xdg_cache_home
0000s0sFile::BaseDir::::xdg_config_dirsFile::BaseDir::xdg_config_dirs
0000s0sFile::BaseDir::::xdg_config_filesFile::BaseDir::xdg_config_files
0000s0sFile::BaseDir::::xdg_config_homeFile::BaseDir::xdg_config_home
0000s0sFile::BaseDir::::xdg_data_filesFile::BaseDir::xdg_data_files
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::BaseDir;
2
32150µs2277µs
# spent 179µs (81+98) within File::BaseDir::BEGIN@3 which was called: # once (81µs+98µs) by File::MimeInfo::Magic::BEGIN@7 at line 3
use strict;
# spent 179µs making 1 call to File::BaseDir::BEGIN@3 # spent 98µs making 1 call to strict::import
424.82ms2582µs
# spent 318µs (54+264) within File::BaseDir::BEGIN@4 which was called: # once (54µs+264µs) by File::MimeInfo::Magic::BEGIN@7 at line 4
use Carp;
# spent 318µs making 1 call to File::BaseDir::BEGIN@4 # spent 264µs making 1 call to Exporter::import
516µsrequire File::Spec;
612µsrequire Exporter;
7
812µsour $VERSION = 0.03;
9
10136µsour @ISA = qw(Exporter);
11122µsour %EXPORT_TAGS = (
12 vars => [ qw(
13 xdg_data_home xdg_data_dirs
14 xdg_config_home xdg_config_dirs
15 xdg_cache_home
16 ) ],
17 lookup => [ qw(
18 data_home data_dirs data_files
19 config_home config_dirs config_files
20 cache_home
21 ) ],
22);
23132µsour @EXPORT_OK = (
24 qw(xdg_data_files xdg_config_files),
25 map @$_, values %EXPORT_TAGS
26);
27
28# Set root and home directories
29130µs118µsmy $rootdir = File::Spec->rootdir();
# spent 18µs making 1 call to File::Spec::Unix::rootdir
3017µsif ($^O eq 'MSWin32') {
31 $rootdir = 'C:\\'; # File::Spec default depends on CWD
32 $ENV{HOME} ||= $ENV{USERPROFILE} || $ENV{HOMEDRIVE}.$ENV{HOMEPATH};
33 # logic from File::HomeDir::Windows
34}
3518µsmy $home = $ENV{HOME};
361600nsunless ($home) {
37 warn "WARNING: HOME is not set, using root: $rootdir\n";
38 $home = $rootdir;
39}
40
41# Set defaults
42119µs1164µsour $xdg_data_home = File::Spec->catdir($home, qw/.local share/);
# spent 164µs making 1 call to File::Spec::Unix::catdir
43133µs2257µsour @xdg_data_dirs = (
# spent 257µs making 2 calls to File::Spec::Unix::catdir, avg 128µs/call
44 File::Spec->catdir($rootdir, qw/usr local share/),
45 File::Spec->catdir($rootdir, qw/usr share/),
46);
47114µs1123µsour $xdg_config_home = File::Spec->catdir($home, '.config');
# spent 123µs making 1 call to File::Spec::Unix::catdir
48118µs1127µsour @xdg_config_dirs = ( File::Spec->catdir($rootdir, qw/etc xdg/) );
# spent 127µs making 1 call to File::Spec::Unix::catdir
49116µs1188µsour $xdg_cache_home = File::Spec->catdir($home, '.cache');
# spent 188µs making 1 call to File::Spec::Unix::catdir
50
51# OO method
52sub new { bless \$VERSION, shift } # what else is there to bless ?
53
54# Variable methods
55252µs
# spent 30µs within File::BaseDir::xdg_data_home which was called 2 times, avg 15µs/call: # 2 times (30µs+0s) by File::BaseDir::data_files at line 85, avg 15µs/call
sub xdg_data_home { $ENV{XDG_DATA_HOME} || $xdg_data_home }
56
57
# spent 33µs within File::BaseDir::xdg_data_dirs which was called 2 times, avg 16µs/call: # 2 times (33µs+0s) by File::BaseDir::data_files at line 85, avg 16µs/call
sub xdg_data_dirs {
58250µs ( $ENV{XDG_DATA_DIRS}
59 ? _adapt($ENV{XDG_DATA_DIRS})
60 : @xdg_data_dirs
61 )
62}
63
64sub xdg_config_home {$ENV{XDG_CONFIG_HOME} || $xdg_config_home }
65
66sub xdg_config_dirs {
67 ( $ENV{XDG_CONFIG_DIRS}
68 ? _adapt($ENV{XDG_CONFIG_DIRS})
69 : @xdg_config_dirs
70 )
71}
72
73sub xdg_cache_home { $ENV{XDG_CACHE_HOME} || $xdg_cache_home }
74
75sub _adapt {
76 map { File::Spec->catdir( split('/', $_) ) } split /[:;]/, shift;
77 # ':' defined in the spec, but ';' is standard on win32
78}
79
80# Lookup methods
81sub data_home { _catfile(xdg_data_home, @_) }
82
83sub data_dirs { _find_files(\&_dir, \@_, xdg_data_home, xdg_data_dirs) }
84
852118µs63.10ms
# spent 3.24ms (139µs+3.10) within File::BaseDir::data_files which was called 2 times, avg 1.62ms/call: # once (83µs+1.96ms) by File::MimeInfo::Magic::_rehash at line 128 of File/MimeInfo/Magic.pm # once (56µs+1.15ms) by File::MimeInfo::rehash at line 140 of File/MimeInfo.pm
sub data_files { _find_files(\&_file, \@_, xdg_data_home, xdg_data_dirs) }
# spent 3.04ms making 2 calls to File::BaseDir::_find_files, avg 1.52ms/call # spent 33µs making 2 calls to File::BaseDir::xdg_data_dirs, avg 16µs/call # spent 30µs making 2 calls to File::BaseDir::xdg_data_home, avg 15µs/call
86
87sub xdg_data_files { my @dirs = data_files(@_); return @dirs }
88
89sub config_home { _catfile(xdg_config_home, @_) }
90
91sub config_dirs { _find_files(\&_dir, \@_, xdg_config_home, xdg_config_dirs) }
92
93sub config_files { _find_files(\&_file, \@_, xdg_config_home, xdg_config_dirs) }
94
95sub xdg_config_files { my @dirs = config_files(@_); return @dirs }
96
97sub cache_home { _catfile(xdg_cache_home, @_) }
98
99sub _catfile {
100 my $dir = shift;
101 shift if ref $_[0] or $_[0] =~ /::/; # OO call
102 return File::Spec->catfile($dir, @_);
103}
104
105
# spent 3.04ms (579µs+2.46) within File::BaseDir::_find_files which was called 2 times, avg 1.52ms/call: # 2 times (579µs+2.46ms) by File::BaseDir::data_files at line 85, avg 1.52ms/call
sub _find_files {
10625µs my $type = shift;
10723µs my $file = shift;
108255µs211µs shift @$file if ref $$file[0] or $$file[0] =~ /::/; # OO call
# spent 11µs making 2 calls to File::BaseDir::CORE:match, avg 5µs/call
109 #warn "Looking for: @$file\n in: @_\n";
11025µs if (wantarray) {
11112337µs142.45ms return grep { &$type( $_ ) && -r $_ }
# spent 2.06ms making 6 calls to File::Spec::Unix::catfile, avg 343µs/call # spent 355µs making 6 calls to File::BaseDir::_file, avg 59µs/call # spent 42µs making 2 calls to File::BaseDir::CORE:fteread, avg 21µs/call
1122112µs map { File::Spec->catfile($_, @$file) } @_;
113 }
114 else { # prevent unnessecary stats by returning early
115 for (@_) {
116 my $path = File::Spec->catfile($_, @$file);
117 return $path if &$type($path) && -r $path;
118 }
119 }
120 return ();
121}
122
123sub _dir { -d $_[0] }
124
1256442µs6156µs
# spent 355µs (198+156) within File::BaseDir::_file which was called 6 times, avg 59µs/call: # 6 times (198µs+156µs) by File::BaseDir::_find_files at line 111, avg 59µs/call
sub _file { -f $_[0] }
# spent 156µs making 6 calls to File::BaseDir::CORE:ftfile, avg 26µs/call
126
127170µs1;
128
129__END__
 
# spent 42µs within File::BaseDir::CORE:fteread which was called 2 times, avg 21µs/call: # 2 times (42µs+0s) by File::BaseDir::_find_files at line 111, avg 21µs/call
sub File::BaseDir::CORE:fteread; # opcode
# spent 156µs within File::BaseDir::CORE:ftfile which was called 6 times, avg 26µs/call: # 6 times (156µs+0s) by File::BaseDir::_file at line 125, avg 26µs/call
sub File::BaseDir::CORE:ftfile; # opcode
# spent 11µs within File::BaseDir::CORE:match which was called 2 times, avg 5µs/call: # 2 times (11µs+0s) by File::BaseDir::_find_files at line 108, avg 5µs/call
sub File::BaseDir::CORE:match; # opcode