← Index
NYTProf Performance Profile   « line view »
For /usr/sbin/pkg_info
  Run on Fri Aug 4 10:15:59 2017
Reported on Fri Aug 4 10:16:18 2017

Filename/usr/libdata/perl5/OpenBSD/PackageInfo.pm
StatementsExecuted 5985 statements in 18.5ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
984119.39ms20.3msOpenBSD::PackageInfo::::add_installed OpenBSD::PackageInfo::add_installed
1118.80ms30.2msOpenBSD::PackageInfo::::_init_list OpenBSD::PackageInfo::_init_list
3112.53ms4.32msOpenBSD::PackageInfo::::installed_name OpenBSD::PackageInfo::installed_name
1112.22ms2.25msOpenBSD::PackageInfo::::BEGIN@29 OpenBSD::PackageInfo::BEGIN@29
1111.31ms2.13msOpenBSD::PackageInfo::::BEGIN@31 OpenBSD::PackageInfo::BEGIN@31
1111.28ms1.32msOpenBSD::PackageInfo::::BEGIN@30 OpenBSD::PackageInfo::BEGIN@30
98711986µs986µsOpenBSD::PackageInfo::::CORE:readdir OpenBSD::PackageInfo::CORE:readdir (opcode)
111574µs3.14msOpenBSD::PackageInfo::::BEGIN@39 OpenBSD::PackageInfo::BEGIN@39
31150µs34.5msOpenBSD::PackageInfo::::is_installed OpenBSD::PackageInfo::is_installed
11136µs36µsOpenBSD::PackageInfo::::CORE:open OpenBSD::PackageInfo::CORE:open (opcode)
11135µs84µsOpenBSD::PackageInfo::::lock_db OpenBSD::PackageInfo::lock_db
154123µs23µsOpenBSD::PackageInfo::::CORE:subst OpenBSD::PackageInfo::CORE:subst (opcode)
11119µs19µsOpenBSD::PackageInfo::::CORE:open_dir OpenBSD::PackageInfo::CORE:open_dir (opcode)
11117µs21µsOpenBSD::PkgInfo::State::::BEGIN@18OpenBSD::PkgInfo::State::BEGIN@18
11117µs17µsOpenBSD::PackageInfo::::CORE:regcomp OpenBSD::PackageInfo::CORE:regcomp (opcode)
11113µs13µsOpenBSD::PackageInfo::::CORE:flock OpenBSD::PackageInfo::CORE:flock (opcode)
11113µs30.2msOpenBSD::PackageInfo::::installed_packages OpenBSD::PackageInfo::installed_packages
1119µs17µsOpenBSD::PkgInfo::State::::BEGIN@19OpenBSD::PkgInfo::State::BEGIN@19
1111µs1µsOpenBSD::PackageInfo::::CORE:close OpenBSD::PackageInfo::CORE:close (opcode)
0000s0sOpenBSD::PackageInfo::::borked_package OpenBSD::PackageInfo::borked_package
0000s0sOpenBSD::PackageInfo::::delete_installed OpenBSD::PackageInfo::delete_installed
0000s0sOpenBSD::PackageInfo::::info_names OpenBSD::PackageInfo::info_names
0000s0sOpenBSD::PackageInfo::::installed_contents OpenBSD::PackageInfo::installed_contents
0000s0sOpenBSD::PackageInfo::::installed_info OpenBSD::PackageInfo::installed_info
0000s0sOpenBSD::PackageInfo::::installed_stems OpenBSD::PackageInfo::installed_stems
0000s0sOpenBSD::PackageInfo::::is_info_name OpenBSD::PackageInfo::is_info_name
0000s0sOpenBSD::PackageInfo::::libs_package OpenBSD::PackageInfo::libs_package
0000s0sOpenBSD::PackageInfo::::unlock_db OpenBSD::PackageInfo::unlock_db
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# ex:ts=8 sw=4:
2# $OpenBSD: PackageInfo.pm,v 1.60 2014/01/11 11:51:01 espie Exp $
3#
4# Copyright (c) 2003-2014 Marc Espie <espie@openbsd.org>
5#
6# Permission to use, copy, modify, and distribute this software for any
7# purpose with or without fee is hereby granted, provided that the above
8# copyright notice and this permission notice appear in all copies.
9#
10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18240µs225µs
# spent 21µs (17+4) within OpenBSD::PkgInfo::State::BEGIN@18 which was called: # once (17µs+4µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 18
use strict;
# spent 21µs making 1 call to OpenBSD::PkgInfo::State::BEGIN@18 # spent 4µs making 1 call to strict::import
19260µs224µs
# spent 17µs (9+8) within OpenBSD::PkgInfo::State::BEGIN@19 which was called: # once (9µs+8µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 19
use warnings;
# spent 17µs making 1 call to OpenBSD::PkgInfo::State::BEGIN@19 # spent 8µs making 1 call to warnings::import
20
21package OpenBSD::PackageInfo;
2211µsrequire Exporter;
2317µsour @ISA=qw(Exporter);
2414µsour @EXPORT=qw(installed_packages installed_info installed_name info_names is_info_name installed_stems
25 lock_db unlock_db
26 add_installed delete_installed is_installed borked_package
27 CONTENTS DESC REQUIRED_BY REQUIRING DISPLAY UNDISPLAY);
28
292174µs12.25ms
# spent 2.25ms (2.22+37µs) within OpenBSD::PackageInfo::BEGIN@29 which was called: # once (2.22ms+37µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 29
use OpenBSD::PackageName;
# spent 2.25ms making 1 call to OpenBSD::PackageInfo::BEGIN@29
302183µs11.32ms
# spent 1.32ms (1.28+39µs) within OpenBSD::PackageInfo::BEGIN@30 which was called: # once (1.28ms+39µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 30
use OpenBSD::Paths;
# spent 1.32ms making 1 call to OpenBSD::PackageInfo::BEGIN@30
31
# spent 2.13ms (1.31+822µs) within OpenBSD::PackageInfo::BEGIN@31 which was called: # once (1.31ms+822µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 37
use constant {
321108µs CONTENTS => '+CONTENTS',
33 DESC => '+DESC',
34 REQUIRED_BY => '+REQUIRED_BY',
35 REQUIRING => '+REQUIRING',
36 DISPLAY => '+DISPLAY',
37144µs22.35ms UNDISPLAY => '+UNDISPLAY'};
# spent 2.13ms making 1 call to OpenBSD::PackageInfo::BEGIN@31 # spent 224µs making 1 call to constant::import
38
3921.05ms25.37ms
# spent 3.14ms (574µs+2.57) within OpenBSD::PackageInfo::BEGIN@39 which was called: # once (574µs+2.57ms) by OpenBSD::PkgInfo::State::BEGIN@65 at line 39
use Fcntl qw/:flock/;
# spent 3.14ms making 1 call to OpenBSD::PackageInfo::BEGIN@39 # spent 2.23ms making 1 call to Exporter::import
40112µs12µsmy $pkg_db = $ENV{"PKG_DBDIR"} || OpenBSD::Paths->pkgdb;
# spent 2µs making 1 call to OpenBSD::Paths::pkgdb
41
421700nsmy ($list, $stemlist);
43
4412µsour @info = (CONTENTS, DESC, REQUIRED_BY, REQUIRING, DISPLAY, UNDISPLAY);
45
4611µsour %info = ();
4711µsfor my $i (@info) {
4864µs my $j = $i;
49629µs68µs $j =~ s/\+/F/o;
# spent 8µs making 6 calls to OpenBSD::PackageInfo::CORE:subst, avg 1µs/call
50611µs $info{$i} = $j;
51}
52
53sub _init_list
54
# spent 30.2ms (8.80+21.4) within OpenBSD::PackageInfo::_init_list which was called: # once (8.80ms+21.4ms) by OpenBSD::PackageInfo::installed_packages at line 99
{
5514µs $list = {};
5614µs110µs $stemlist = OpenBSD::PackageName::compile_stemlist();
# spent 10µs making 1 call to OpenBSD::PackageName::compile_stemlist
57
58130µs119µs opendir(my $dir, $pkg_db) or die "Bad pkg_db: $!";
# spent 19µs making 1 call to OpenBSD::PackageInfo::CORE:open_dir
5916.34ms987986µs while (my $e = readdir($dir)) {
# spent 986µs making 987 calls to OpenBSD::PackageInfo::CORE:readdir, avg 999ns/call
60986635µs next if $e eq '.' or $e eq '..';
619842.09ms98420.3ms add_installed($e);
# spent 20.3ms making 984 calls to OpenBSD::PackageInfo::add_installed, avg 21µs/call
62 }
63129µs11µs close($dir);
# spent 1µs making 1 call to OpenBSD::PackageInfo::CORE:close
64}
65
66sub add_installed
67
# spent 20.3ms (9.39+10.9) within OpenBSD::PackageInfo::add_installed which was called 984 times, avg 21µs/call: # 984 times (9.39ms+10.9ms) by OpenBSD::PackageInfo::_init_list at line 61, avg 21µs/call
{
68984588µs if (!defined $list) {
69 _init_list();
70 }
719842.74ms for my $p (@_) {
72984993µs $list->{$p} = 1;
739842.78ms98410.9ms $stemlist->add($p);
# spent 10.9ms making 984 calls to OpenBSD::PackageLocator::_compiled_stemlist::add, avg 11µs/call
74 }
75}
76
77sub delete_installed
78{
79 if (!defined $list) {
80 _init_list();
81 }
82 for my $p (@_) {
83 delete $list->{$p};
84 $stemlist->delete($p);
85
86 }
87}
88
89sub installed_stems
90{
91 if (!defined $list) {
92 _init_list();
93 }
94 return $stemlist;
95}
96
97sub installed_packages
98
# spent 30.2ms (13µs+30.2) within OpenBSD::PackageInfo::installed_packages which was called: # once (13µs+30.2ms) by OpenBSD::PackageInfo::is_installed at line 160
{
9916µs130.2ms if (!defined $list) {
# spent 30.2ms making 1 call to OpenBSD::PackageInfo::_init_list
100 _init_list();
101 }
10211µs if ($_[0]) {
103 return grep { !/^\./o } keys %$list;
104 } else {
10516µs return keys %$list;
106 }
107}
108
109sub installed_info
110{
111 my $name = shift;
112
113 # XXX remove the o if we allow pkg_db to change dynamically
114 if ($name =~ m|^\Q$pkg_db\E/?|o) {
115 return "$name/";
116 } else {
117 return "$pkg_db/$name/";
118 }
119}
120
121sub installed_contents
122{
123 my $name = shift;
124 return installed_info($name).CONTENTS;
125}
126
127sub borked_package
128{
129 my $pkgname = shift;
130 $pkgname = "partial-$pkgname" unless $pkgname =~ m/^partial\-/;
131 unless (-e "$pkg_db/$pkgname") {
132 return $pkgname;
133 }
134 my $i = 1;
135
136 while (-e "$pkg_db/$pkgname.$i") {
137 $i++;
138 }
139 return "$pkgname.$i";
140}
141
142sub libs_package
143{
144 my $pkgname = shift;
145 $pkgname =~ s/^\.libs\d*\-//;
146 unless (-e "$pkg_db/.libs-$pkgname") {
147 return ".libs-$pkgname";
148 }
149 my $i = 1;
150
151 while (-e "$pkg_db/.libs$i-$pkgname") {
152 $i++;
153 }
154 return ".libs$i-$pkgname";
155}
156
157sub is_installed
158
# spent 34.5ms (50µs+34.5) within OpenBSD::PackageInfo::is_installed which was called 3 times, avg 11.5ms/call: # 3 times (50µs+34.5ms) by OpenBSD::PkgInfo::parse_and_run at line 604 of OpenBSD/PkgInfo.pm, avg 11.5ms/call
{
159312µs34.32ms my $name = installed_name(shift);
# spent 4.32ms making 3 calls to OpenBSD::PackageInfo::installed_name, avg 1.44ms/call
16038µs130.2ms if (!defined $list) {
# spent 30.2ms making 1 call to OpenBSD::PackageInfo::installed_packages
161 installed_packages();
162 }
163323µs return defined $list->{$name};
164}
165
166sub installed_name
167
# spent 4.32ms (2.53+1.78) within OpenBSD::PackageInfo::installed_name which was called 3 times, avg 1.44ms/call: # 3 times (2.53ms+1.78ms) by OpenBSD::PackageInfo::is_installed at line 159, avg 1.44ms/call
{
1683225µs require File::Spec;
169350µs329µs my $name = File::Spec->canonpath(shift);
# spent 29µs making 3 calls to File::Spec::Unix::canonpath, avg 10µs/call
170320µs39µs $name =~ s|/$||o;
# spent 9µs making 3 calls to OpenBSD::PackageInfo::CORE:subst, avg 3µs/call
171 # XXX remove the o if we allow pkg_db to change dynamically
172335µs419µs $name =~ s|^\Q$pkg_db\E/?||o;
# spent 17µs making 1 call to OpenBSD::PackageInfo::CORE:regcomp # spent 2µs making 3 calls to OpenBSD::PackageInfo::CORE:subst, avg 800ns/call
173312µs33µs $name =~ s|/\+CONTENTS$||o;
# spent 3µs making 3 calls to OpenBSD::PackageInfo::CORE:subst, avg 967ns/call
174313µs return $name;
175}
176
177sub info_names()
178{
179 return @info;
180}
181
182sub is_info_name
183{
184 my $name = shift;
185 return $info{$name};
186}
187
1881700nsmy $dlock;
189
190sub lock_db($;$)
191
# spent 84µs (35+49) within OpenBSD::PackageInfo::lock_db which was called: # once (35µs+49µs) by OpenBSD::PkgInfo::State::lock at line 72 of OpenBSD/PkgInfo.pm
{
1921700ns my ($shared, $state) = @_;
1931800ns my $mode = $shared ? LOCK_SH : LOCK_EX;
194162µs136µs open($dlock, '<', $pkg_db) or return;
# spent 36µs making 1 call to OpenBSD::PackageInfo::CORE:open
195123µs113µs if (flock($dlock, $mode | LOCK_NB)) {
# spent 13µs making 1 call to OpenBSD::PackageInfo::CORE:flock
196 return;
197 }
198 $state->errprint("Package database already locked... awaiting release... ")
199 if defined $state;
200 while (!flock($dlock, $mode)) {
201 }
202 $state->errsay("done!") if defined $state;
203 return;
204}
205
206sub unlock_db()
207{
208 if (defined $dlock) {
209 flock($dlock, LOCK_UN);
210 close($dlock);
211 }
212}
213
214112µs1;
 
# spent 1µs within OpenBSD::PackageInfo::CORE:close which was called: # once (1µs+0s) by OpenBSD::PackageInfo::_init_list at line 63
sub OpenBSD::PackageInfo::CORE:close; # opcode
# spent 13µs within OpenBSD::PackageInfo::CORE:flock which was called: # once (13µs+0s) by OpenBSD::PackageInfo::lock_db at line 195
sub OpenBSD::PackageInfo::CORE:flock; # opcode
# spent 36µs within OpenBSD::PackageInfo::CORE:open which was called: # once (36µs+0s) by OpenBSD::PackageInfo::lock_db at line 194
sub OpenBSD::PackageInfo::CORE:open; # opcode
# spent 19µs within OpenBSD::PackageInfo::CORE:open_dir which was called: # once (19µs+0s) by OpenBSD::PackageInfo::_init_list at line 58
sub OpenBSD::PackageInfo::CORE:open_dir; # opcode
# spent 986µs within OpenBSD::PackageInfo::CORE:readdir which was called 987 times, avg 999ns/call: # 987 times (986µs+0s) by OpenBSD::PackageInfo::_init_list at line 59, avg 999ns/call
sub OpenBSD::PackageInfo::CORE:readdir; # opcode
# spent 17µs within OpenBSD::PackageInfo::CORE:regcomp which was called: # once (17µs+0s) by OpenBSD::PackageInfo::installed_name at line 172
sub OpenBSD::PackageInfo::CORE:regcomp; # opcode
# spent 23µs within OpenBSD::PackageInfo::CORE:subst which was called 15 times, avg 2µs/call: # 6 times (8µs+0s) by OpenBSD::PkgInfo::State::BEGIN@65 at line 49, avg 1µs/call # 3 times (9µs+0s) by OpenBSD::PackageInfo::installed_name at line 170, avg 3µs/call # 3 times (3µs+0s) by OpenBSD::PackageInfo::installed_name at line 173, avg 967ns/call # 3 times (2µs+0s) by OpenBSD::PackageInfo::installed_name at line 172, avg 800ns/call
sub OpenBSD::PackageInfo::CORE:subst; # opcode