← Index
NYTProf Performance Profile   « line view »
For /usr/sbin/pkg_info
  Run on Fri Aug 4 10:12:01 2017
Reported on Fri Aug 4 10:12:17 2017

Filename/usr/libdata/perl5/OpenBSD/PackageInfo.pm
StatementsExecuted 6025 statements in 18.5ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
984119.32ms20.2msOpenBSD::PackageInfo::::add_installed OpenBSD::PackageInfo::add_installed
1118.87ms30.0msOpenBSD::PackageInfo::::_init_list OpenBSD::PackageInfo::_init_list
7222.70ms4.54msOpenBSD::PackageInfo::::installed_name OpenBSD::PackageInfo::installed_name
1112.16ms2.20msOpenBSD::PackageInfo::::BEGIN@29 OpenBSD::PackageInfo::BEGIN@29
1111.43ms2.28msOpenBSD::PackageInfo::::BEGIN@31 OpenBSD::PackageInfo::BEGIN@31
111961µs1.00msOpenBSD::PackageInfo::::BEGIN@30 OpenBSD::PackageInfo::BEGIN@30
98711928µs928µsOpenBSD::PackageInfo::::CORE:readdir OpenBSD::PackageInfo::CORE:readdir (opcode)
111473µs3.03msOpenBSD::PackageInfo::::BEGIN@39 OpenBSD::PackageInfo::BEGIN@39
62273µs34.6msOpenBSD::PackageInfo::::is_installed OpenBSD::PackageInfo::is_installed
274141µs41µsOpenBSD::PackageInfo::::CORE:subst OpenBSD::PackageInfo::CORE:subst (opcode)
22138µs38µsOpenBSD::PackageInfo::::CORE:regcomp OpenBSD::PackageInfo::CORE:regcomp (opcode)
11136µs83µsOpenBSD::PackageInfo::::lock_db OpenBSD::PackageInfo::lock_db
11133µs33µsOpenBSD::PackageInfo::::CORE:open OpenBSD::PackageInfo::CORE:open (opcode)
11131µs55µsOpenBSD::PackageInfo::::installed_info OpenBSD::PackageInfo::installed_info
11126µs31µsOpenBSD::PkgInfo::State::::BEGIN@18OpenBSD::PkgInfo::State::BEGIN@18
21119µs19µsOpenBSD::PackageInfo::::is_info_name OpenBSD::PackageInfo::is_info_name
11114µs14µsOpenBSD::PackageInfo::::CORE:flock OpenBSD::PackageInfo::CORE:flock (opcode)
11113µs13µsOpenBSD::PackageInfo::::CORE:open_dir OpenBSD::PackageInfo::CORE:open_dir (opcode)
11113µs30.0msOpenBSD::PackageInfo::::installed_packages OpenBSD::PackageInfo::installed_packages
11110µs22µsOpenBSD::PkgInfo::State::::BEGIN@19OpenBSD::PkgInfo::State::BEGIN@19
1111µs1µsOpenBSD::PackageInfo::::CORE:close OpenBSD::PackageInfo::CORE:close (opcode)
111900ns900nsOpenBSD::PackageInfo::::CORE:match OpenBSD::PackageInfo::CORE:match (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_stems OpenBSD::PackageInfo::installed_stems
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
18242µs235µs
# spent 31µs (26+5) within OpenBSD::PkgInfo::State::BEGIN@18 which was called: # once (26µs+5µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 18
use strict;
# spent 31µs making 1 call to OpenBSD::PkgInfo::State::BEGIN@18 # spent 5µs making 1 call to strict::import
19270µs233µs
# spent 22µs (10+12) within OpenBSD::PkgInfo::State::BEGIN@19 which was called: # once (10µs+12µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 19
use warnings;
# spent 22µs making 1 call to OpenBSD::PkgInfo::State::BEGIN@19 # spent 12µs making 1 call to warnings::import
20
21package OpenBSD::PackageInfo;
2211µsrequire Exporter;
2317µsour @ISA=qw(Exporter);
2413µ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
292161µs12.20ms
# spent 2.20ms (2.16+37µs) within OpenBSD::PackageInfo::BEGIN@29 which was called: # once (2.16ms+37µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 29
use OpenBSD::PackageName;
# spent 2.20ms making 1 call to OpenBSD::PackageInfo::BEGIN@29
302150µs11.00ms
# spent 1.00ms (961µs+39µs) within OpenBSD::PackageInfo::BEGIN@30 which was called: # once (961µs+39µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 30
use OpenBSD::Paths;
# spent 1.00ms making 1 call to OpenBSD::PackageInfo::BEGIN@30
31
# spent 2.28ms (1.43+858µs) within OpenBSD::PackageInfo::BEGIN@31 which was called: # once (1.43ms+858µs) by OpenBSD::PkgInfo::State::BEGIN@65 at line 37
use constant {
32195µs CONTENTS => '+CONTENTS',
33 DESC => '+DESC',
34 REQUIRED_BY => '+REQUIRED_BY',
35 REQUIRING => '+REQUIRING',
36 DISPLAY => '+DISPLAY',
37148µs22.53ms UNDISPLAY => '+UNDISPLAY'};
# spent 2.28ms making 1 call to OpenBSD::PackageInfo::BEGIN@31 # spent 248µs making 1 call to constant::import
38
3921.05ms25.23ms
# spent 3.03ms (473µs+2.56) within OpenBSD::PackageInfo::BEGIN@39 which was called: # once (473µs+2.56ms) by OpenBSD::PkgInfo::State::BEGIN@65 at line 39
use Fcntl qw/:flock/;
# spent 3.03ms making 1 call to OpenBSD::PackageInfo::BEGIN@39 # spent 2.20ms 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
421600nsmy ($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
50614µs $info{$i} = $j;
51}
52
53sub _init_list
54
# spent 30.0ms (8.87+21.1) within OpenBSD::PackageInfo::_init_list which was called: # once (8.87ms+21.1ms) by OpenBSD::PackageInfo::installed_packages at line 99
{
5514µs $list = {};
5614µs19µs $stemlist = OpenBSD::PackageName::compile_stemlist();
# spent 9µs making 1 call to OpenBSD::PackageName::compile_stemlist
57
58124µs113µs opendir(my $dir, $pkg_db) or die "Bad pkg_db: $!";
# spent 13µs making 1 call to OpenBSD::PackageInfo::CORE:open_dir
5913.79ms987928µs while (my $e = readdir($dir)) {
# spent 928µs making 987 calls to OpenBSD::PackageInfo::CORE:readdir, avg 940ns/call
60986633µs next if $e eq '.' or $e eq '..';
619842.05ms98420.2ms add_installed($e);
# spent 20.2ms making 984 calls to OpenBSD::PackageInfo::add_installed, avg 21µs/call
62 }
63127µs11µs close($dir);
# spent 1µs making 1 call to OpenBSD::PackageInfo::CORE:close
64}
65
66sub add_installed
67
# spent 20.2ms (9.32+10.9) within OpenBSD::PackageInfo::add_installed which was called 984 times, avg 21µs/call: # 984 times (9.32ms+10.9ms) by OpenBSD::PackageInfo::_init_list at line 61, avg 21µs/call
{
68984579µs if (!defined $list) {
69 _init_list();
70 }
719845.28ms for my $p (@_) {
729841.02ms $list->{$p} = 1;
739842.69ms98410.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.0ms (13µs+30.0) within OpenBSD::PackageInfo::installed_packages which was called: # once (13µs+30.0ms) by OpenBSD::PackageInfo::is_installed at line 160
{
9915µs130.0ms if (!defined $list) {
# spent 30.0ms making 1 call to OpenBSD::PackageInfo::_init_list
100 _init_list();
101 }
10211µs if ($_[0]) {
103 return grep { !/^\./o } keys %$list;
104 } else {
10515µs return keys %$list;
106 }
107}
108
109sub installed_info
110
# spent 55µs (31+24) within OpenBSD::PackageInfo::installed_info which was called: # once (31µs+24µs) by OpenBSD::PackageRepository::Installed::find at line 235 of OpenBSD/PackageRepository/Installed.pm
{
11111µs my $name = shift;
112
113 # XXX remove the o if we allow pkg_db to change dynamically
114146µs224µs if ($name =~ m|^\Q$pkg_db\E/?|o) {
# spent 23µs making 1 call to OpenBSD::PackageInfo::CORE:regcomp # spent 900ns making 1 call to OpenBSD::PackageInfo::CORE:match
115 return "$name/";
116 } else {
117112µs 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.6ms (73µs+34.5) within OpenBSD::PackageInfo::is_installed which was called 6 times, avg 5.77ms/call: # 3 times (44µs+34.4ms) by OpenBSD::PackageRepository::Installed::find at line 231 of OpenBSD/PackageRepository/Installed.pm, avg 11.5ms/call # 3 times (30µs+105µs) by OpenBSD::PkgInfo::print_info at line 409 of OpenBSD/PkgInfo.pm, avg 45µs/call
{
159624µs64.52ms my $name = installed_name(shift);
# spent 4.52ms making 6 calls to OpenBSD::PackageInfo::installed_name, avg 754µs/call
160610µs130.0ms if (!defined $list) {
# spent 30.0ms making 1 call to OpenBSD::PackageInfo::installed_packages
161 installed_packages();
162 }
163628µs return defined $list->{$name};
164}
165
166sub installed_name
167
# spent 4.54ms (2.70+1.84) within OpenBSD::PackageInfo::installed_name which was called 7 times, avg 649µs/call: # 6 times (2.69ms+1.84ms) by OpenBSD::PackageInfo::is_installed at line 159, avg 754µs/call # once (13µs+3µs) by OpenBSD::PackageRepository::Installed::canonicalize at line 223 of OpenBSD/PackageRepository/Installed.pm
{
1687200µs require File::Spec;
169797µs739µs my $name = File::Spec->canonpath(shift);
# spent 39µs making 7 calls to File::Spec::Unix::canonpath, avg 6µs/call
170743µs720µs $name =~ s|/$||o;
# spent 20µs making 7 calls to OpenBSD::PackageInfo::CORE:subst, avg 3µs/call
171 # XXX remove the o if we allow pkg_db to change dynamically
172749µs822µs $name =~ s|^\Q$pkg_db\E/?||o;
# spent 15µs making 1 call to OpenBSD::PackageInfo::CORE:regcomp # spent 6µs making 7 calls to OpenBSD::PackageInfo::CORE:subst, avg 900ns/call
173735µs76µs $name =~ s|/\+CONTENTS$||o;
# spent 6µs making 7 calls to OpenBSD::PackageInfo::CORE:subst, avg 929ns/call
174738µs return $name;
175}
176
177sub info_names()
178{
179 return @info;
180}
181
182sub is_info_name
183
# spent 19µs within OpenBSD::PackageInfo::is_info_name which was called 2 times, avg 10µs/call: # 2 times (19µs+0s) by OpenBSD::PackageLocation::find_contents at line 116 of OpenBSD/PackageLocation.pm, avg 10µs/call
{
18422µs my $name = shift;
185212µs return $info{$name};
186}
187
1881600nsmy $dlock;
189
190sub lock_db($;$)
191
# spent 83µs (36+47) within OpenBSD::PackageInfo::lock_db which was called: # once (36µs+47µs) by OpenBSD::PkgInfo::State::lock at line 72 of OpenBSD/PkgInfo.pm
{
1921700ns my ($shared, $state) = @_;
1931900ns my $mode = $shared ? LOCK_SH : LOCK_EX;
194159µs133µs open($dlock, '<', $pkg_db) or return;
# spent 33µs making 1 call to OpenBSD::PackageInfo::CORE:open
195124µs114µs if (flock($dlock, $mode | LOCK_NB)) {
# spent 14µ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 14µs within OpenBSD::PackageInfo::CORE:flock which was called: # once (14µs+0s) by OpenBSD::PackageInfo::lock_db at line 195
sub OpenBSD::PackageInfo::CORE:flock; # opcode
# spent 900ns within OpenBSD::PackageInfo::CORE:match which was called: # once (900ns+0s) by OpenBSD::PackageInfo::installed_info at line 114
sub OpenBSD::PackageInfo::CORE:match; # opcode
# spent 33µs within OpenBSD::PackageInfo::CORE:open which was called: # once (33µs+0s) by OpenBSD::PackageInfo::lock_db at line 194
sub OpenBSD::PackageInfo::CORE:open; # opcode
# spent 13µs within OpenBSD::PackageInfo::CORE:open_dir which was called: # once (13µs+0s) by OpenBSD::PackageInfo::_init_list at line 58
sub OpenBSD::PackageInfo::CORE:open_dir; # opcode
# spent 928µs within OpenBSD::PackageInfo::CORE:readdir which was called 987 times, avg 940ns/call: # 987 times (928µs+0s) by OpenBSD::PackageInfo::_init_list at line 59, avg 940ns/call
sub OpenBSD::PackageInfo::CORE:readdir; # opcode
# spent 38µs within OpenBSD::PackageInfo::CORE:regcomp which was called 2 times, avg 19µs/call: # once (23µs+0s) by OpenBSD::PackageInfo::installed_info at line 114 # once (15µs+0s) by OpenBSD::PackageInfo::installed_name at line 172
sub OpenBSD::PackageInfo::CORE:regcomp; # opcode
# spent 41µs within OpenBSD::PackageInfo::CORE:subst which was called 27 times, avg 2µs/call: # 7 times (20µs+0s) by OpenBSD::PackageInfo::installed_name at line 170, avg 3µs/call # 7 times (6µs+0s) by OpenBSD::PackageInfo::installed_name at line 173, avg 929ns/call # 7 times (6µs+0s) by OpenBSD::PackageInfo::installed_name at line 172, avg 900ns/call # 6 times (8µs+0s) by OpenBSD::PkgInfo::State::BEGIN@65 at line 49, avg 1µs/call
sub OpenBSD::PackageInfo::CORE:subst; # opcode