← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 16:10:05 2022
Reported on Wed Dec 14 16:12:58 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm
StatementsExecuted 48513 statements in 156ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
4784611161ms261msJSON::Schema::Modern::Document::::dataJSON::Schema::Modern::Document::data
22111.02ms28.0msJSON::Schema::Modern::Document::::__ANON__[:135]JSON::Schema::Modern::Document::__ANON__[:135]
1522930µs94.3sJSON::Schema::Modern::Document::::BUILDJSON::Schema::Modern::Document::BUILD (recurses: max depth 1, inclusive time 160ms)
1411497µs126msJSON::Schema::Modern::Document::::traverseJSON::Schema::Modern::Document::traverse
1211123µs425µsJSON::Schema::Modern::Document::::__ANON__[:90]JSON::Schema::Modern::Document::__ANON__[:90]
1522112µs1.29msJSON::Schema::Modern::Document::::__ANON__[:45]JSON::Schema::Modern::Document::__ANON__[:45]
2544105µs656µsJSON::Schema::Modern::Document::::__ANON__[:39]JSON::Schema::Modern::Document::__ANON__[:39]
81157µs118µsJSON::Schema::Modern::Document::::__ANON__[:38]JSON::Schema::Modern::Document::__ANON__[:38]
152252µs52µsJSON::Schema::Modern::Document::::FOREIGNBUILDARGSJSON::Schema::Modern::Document::FOREIGNBUILDARGS
11145µs72µsJSON::Schema::Modern::Document::::BEGIN@19JSON::Schema::Modern::Document::BEGIN@19
11138µs83µsJSON::Schema::Modern::Document::::BEGIN@20JSON::Schema::Modern::Document::BEGIN@20
11137µs42µsJSON::Schema::Modern::Document::::BEGIN@17JSON::Schema::Modern::Document::BEGIN@17
151134µs34µsJSON::Schema::Modern::Document::::__ANON__[:78]JSON::Schema::Modern::Document::__ANON__[:78]
11130µs32µsJSON::Schema::Modern::::BEGIN@1.113 JSON::Schema::Modern::BEGIN@1.113
151127µs27µsJSON::Schema::Modern::Document::::__ANON__[:110]JSON::Schema::Modern::Document::__ANON__[:110]
11119µs37µsJSON::Schema::Modern::Document::::BEGIN@16JSON::Schema::Modern::Document::BEGIN@16
361118µs18µsJSON::Schema::Modern::Document::::CORE:matchJSON::Schema::Modern::Document::CORE:match (opcode)
11115µs973µsJSON::Schema::Modern::Document::::BEGIN@11JSON::Schema::Modern::Document::BEGIN@11
11114µs44µsJSON::Schema::Modern::Document::::BEGIN@13JSON::Schema::Modern::Document::BEGIN@13
11113µs30µsJSON::Schema::Modern::Document::::BEGIN@15JSON::Schema::Modern::Document::BEGIN@15
11112µs1.06msJSON::Schema::Modern::Document::::BEGIN@24JSON::Schema::Modern::Document::BEGIN@24
11111µs11µsJSON::Schema::Modern::Document::::BEGIN@9JSON::Schema::Modern::Document::BEGIN@9
11110µs174µsJSON::Schema::Modern::Document::::BEGIN@21JSON::Schema::Modern::Document::BEGIN@21
1119µs223µsJSON::Schema::Modern::Document::::BEGIN@12JSON::Schema::Modern::Document::BEGIN@12
1118µs197µsJSON::Schema::Modern::Document::::BEGIN@10JSON::Schema::Modern::Document::BEGIN@10
1118µs22µsJSON::Schema::Modern::Document::::BEGIN@14JSON::Schema::Modern::Document::BEGIN@14
1117µs379µsJSON::Schema::Modern::Document::::BEGIN@22JSON::Schema::Modern::Document::BEGIN@22
1116µs35µsJSON::Schema::Modern::::BEGIN@2.114 JSON::Schema::Modern::BEGIN@2.114
1116µs31µsJSON::Schema::Modern::Document::::BEGIN@18JSON::Schema::Modern::Document::BEGIN@18
1116µs194µsJSON::Schema::Modern::Document::::BEGIN@25JSON::Schema::Modern::Document::BEGIN@25
1115µs49µsJSON::Schema::Modern::Document::::BEGIN@23JSON::Schema::Modern::Document::BEGIN@23
0000s0sJSON::Schema::Modern::Document::::TO_JSONJSON::Schema::Modern::Document::TO_JSON
0000s0sJSON::Schema::Modern::Document::::validateJSON::Schema::Modern::Document::validate
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1227µs234µs
# spent 32µs (30+2) within JSON::Schema::Modern::BEGIN@1.113 which was called: # once (30µs+2µs) by JSON::Schema::Modern::BEGIN@35 at line 1
use strict;
# spent 32µs making 1 call to JSON::Schema::Modern::BEGIN@1.113 # spent 2µs making 1 call to strict::import
2286µs264µs
# spent 35µs (6+29) within JSON::Schema::Modern::BEGIN@2.114 which was called: # once (6µs+29µs) by JSON::Schema::Modern::BEGIN@35 at line 2
use warnings;
# spent 35µs making 1 call to JSON::Schema::Modern::BEGIN@2.114 # spent 29µs making 1 call to warnings::import
3package JSON::Schema::Modern::Document;
4# vim: set ts=8 sts=2 sw=2 tw=100 et :
5# ABSTRACT: One JSON Schema document
6
711µsour $VERSION = '0.558';
8
9279µs111µs
# spent 11µs within JSON::Schema::Modern::Document::BEGIN@9 which was called: # once (11µs+0s) by JSON::Schema::Modern::BEGIN@35 at line 9
use 5.020;
# spent 11µs making 1 call to JSON::Schema::Modern::Document::BEGIN@9
10223µs2386µs
# spent 197µs (8+189) within JSON::Schema::Modern::Document::BEGIN@10 which was called: # once (8µs+189µs) by JSON::Schema::Modern::BEGIN@35 at line 10
use Moo;
# spent 197µs making 1 call to JSON::Schema::Modern::Document::BEGIN@10 # spent 189µs making 1 call to Moo::import
11356µs31.93ms
# spent 973µs (15+958) within JSON::Schema::Modern::Document::BEGIN@11 which was called: # once (15µs+958µs) by JSON::Schema::Modern::BEGIN@35 at line 11
use strictures 2;
# spent 973µs making 1 call to JSON::Schema::Modern::Document::BEGIN@11 # spent 941µs making 1 call to strictures::import # spent 16µs making 1 call to strictures::VERSION
12257µs2437µs
# spent 223µs (9+214) within JSON::Schema::Modern::Document::BEGIN@12 which was called: # once (9µs+214µs) by JSON::Schema::Modern::BEGIN@35 at line 12
use experimental qw(signatures postderef);
# spent 223µs making 1 call to JSON::Schema::Modern::Document::BEGIN@12 # spent 214µs making 1 call to experimental::import
13228µs247µs
# spent 44µs (14+30) within JSON::Schema::Modern::Document::BEGIN@13 which was called: # once (14µs+30µs) by JSON::Schema::Modern::BEGIN@35 at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 44µs making 1 call to JSON::Schema::Modern::Document::BEGIN@13 # spent 3µs making 1 call to if::import
14219µs224µs
# spent 22µs (8+14) within JSON::Schema::Modern::Document::BEGIN@14 which was called: # once (8µs+14µs) by JSON::Schema::Modern::BEGIN@35 at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 22µs making 1 call to JSON::Schema::Modern::Document::BEGIN@14 # spent 2µs making 1 call to if::unimport
15241µs230µs
# spent 30µs (13+17) within JSON::Schema::Modern::Document::BEGIN@15 which was called: # once (13µs+17µs) by JSON::Schema::Modern::BEGIN@35 at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 30µs making 1 call to JSON::Schema::Modern::Document::BEGIN@15 # spent 0s making 1 call to if::unimport
16282µs238µs
# spent 37µs (19+18) within JSON::Schema::Modern::Document::BEGIN@16 which was called: # once (19µs+18µs) by JSON::Schema::Modern::BEGIN@35 at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 37µs making 1 call to JSON::Schema::Modern::Document::BEGIN@16 # spent 1µs making 1 call to if::unimport
17220µs247µs
# spent 42µs (37+5) within JSON::Schema::Modern::Document::BEGIN@17 which was called: # once (37µs+5µs) by JSON::Schema::Modern::BEGIN@35 at line 17
use Mojo::URL;
# spent 42µs making 1 call to JSON::Schema::Modern::Document::BEGIN@17 # spent 5µs making 1 call to Mojo::Base::import
18246µs256µs
# spent 31µs (6+25) within JSON::Schema::Modern::Document::BEGIN@18 which was called: # once (6µs+25µs) by JSON::Schema::Modern::BEGIN@35 at line 18
use Carp 'croak';
# spent 31µs making 1 call to JSON::Schema::Modern::Document::BEGIN@18 # spent 25µs making 1 call to Exporter::import
19392µs387µs
# spent 72µs (45+27) within JSON::Schema::Modern::Document::BEGIN@19 which was called: # once (45µs+27µs) by JSON::Schema::Modern::BEGIN@35 at line 19
use List::Util 1.29 'pairs';
# spent 72µs making 1 call to JSON::Schema::Modern::Document::BEGIN@19 # spent 8µs making 1 call to UNIVERSAL::VERSION # spent 7µs making 1 call to List::Util::import
20322µs3128µs
# spent 83µs (38+45) within JSON::Schema::Modern::Document::BEGIN@20 which was called: # once (38µs+45µs) by JSON::Schema::Modern::BEGIN@35 at line 20
use Ref::Util 0.100 'is_plain_hashref';
# spent 83µs making 1 call to JSON::Schema::Modern::Document::BEGIN@20 # spent 41µs making 1 call to Exporter::import # spent 4µs making 1 call to UNIVERSAL::VERSION
21329µs3338µs
# spent 174µs (10+164) within JSON::Schema::Modern::Document::BEGIN@21 which was called: # once (10µs+164µs) by JSON::Schema::Modern::BEGIN@35 at line 21
use Safe::Isa 1.000008;
# spent 174µs making 1 call to JSON::Schema::Modern::Document::BEGIN@21 # spent 158µs making 1 call to Exporter::import # spent 6µs making 1 call to UNIVERSAL::VERSION
22217µs2751µs
# spent 379µs (7+372) within JSON::Schema::Modern::Document::BEGIN@22 which was called: # once (7µs+372µs) by JSON::Schema::Modern::BEGIN@35 at line 22
use MooX::TypeTiny;
# spent 379µs making 1 call to JSON::Schema::Modern::Document::BEGIN@22 # spent 372µs making 1 call to MooX::TypeTiny::import
23222µs293µs
# spent 49µs (5+44) within JSON::Schema::Modern::Document::BEGIN@23 which was called: # once (5µs+44µs) by JSON::Schema::Modern::BEGIN@35 at line 23
use MooX::HandlesVia;
# spent 49µs making 1 call to JSON::Schema::Modern::Document::BEGIN@23 # spent 44µs making 1 call to MooX::HandlesVia::import
24334µs32.11ms
# spent 1.06ms (12µs+1.05) within JSON::Schema::Modern::Document::BEGIN@24 which was called: # once (12µs+1.05ms) by JSON::Schema::Modern::BEGIN@35 at line 24
use Types::Standard 1.016003 qw(InstanceOf HashRef Str Dict ArrayRef Enum ClassName Undef Slurpy);
# spent 1.06ms making 1 call to JSON::Schema::Modern::Document::BEGIN@24 # spent 1.04ms making 1 call to Exporter::Tiny::import # spent 5µs making 1 call to UNIVERSAL::VERSION
252927µs2382µs
# spent 194µs (6+188) within JSON::Schema::Modern::Document::BEGIN@25 which was called: # once (6µs+188µs) by JSON::Schema::Modern::BEGIN@35 at line 25
use namespace::clean;
# spent 194µs making 1 call to JSON::Schema::Modern::Document::BEGIN@25 # spent 188µs making 1 call to namespace::clean::import
26
2712µs12.51msextends 'Mojo::JSON::Pointer';
# spent 2.51ms making 1 call to JSON::Schema::Modern::Document::extends
28
2913µs1469µshas schema => (
# spent 469µs making 1 call to MooX::HandlesVia::has
30 is => 'ro',
31 required => 1,
32);
33
34has canonical_uri => (
35 is => 'rwp',
36 isa => (InstanceOf['Mojo::URL'])->where(q{not defined $_->fragment}),
37 lazy => 1,
38837µs861µs
# spent 118µs (57+61) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:38] which was called 8 times, avg 15µs/call: # 8 times (57µs+61µs) by JSON::Schema::Modern::Document::canonical_uri at line 33 of (eval 267)[Sub/Quote.pm:3], avg 15µs/call
default => sub { Mojo::URL->new },
# spent 61µs making 8 calls to Mojo::URL::new, avg 8µs/call
3925109µs26551µs
# spent 656µs (105+551) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:39] which was called 25 times, avg 26µs/call: # 10 times (43µs+98µs) by JSON::Schema::Modern::Document::_set_canonical_uri at line 28 of (eval 268)[Sub/Quote.pm:3], avg 14µs/call # 8 times (28µs+130µs) by JSON::Schema::Modern::Document::canonical_uri at line 33 of (eval 267)[Sub/Quote.pm:3], avg 20µs/call # 6 times (25µs+68µs) by JSON::Schema::Modern::Document::new at line 65 of (eval 428)[Sub/Quote.pm:3], avg 16µs/call # once (9µs+255µs) by JSON::Schema::Modern::Document::OpenAPI::new at line 68 of (eval 421)[Sub/Quote.pm:3]
coerce => sub { $_[0]->$_isa('Mojo::URL') ? $_[0] : Mojo::URL->new($_[0]) },
# spent 308µs making 25 calls to Safe::Isa::__ANON__[Safe/Isa.pm:23], avg 12µs/call # spent 243µs making 1 call to Mojo::URL::new
40114µs33.05ms);
# spent 2.69ms making 1 call to MooX::HandlesVia::has # spent 285µs making 1 call to Type::Tiny::where # spent 75µs making 1 call to Types::Standard::InstanceOf
41
42has metaschema_uri => (
43 is => 'rwp',
44 isa => InstanceOf['Mojo::URL'],
4515102µs301.18ms
# spent 1.29ms (112µs+1.18) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:45] which was called 15 times, avg 86µs/call: # 14 times (99µs+1.07ms) by JSON::Schema::Modern::Document::_set_metaschema_uri at line 28 of (eval 270)[Sub/Quote.pm:3], avg 84µs/call # once (13µs+106µs) by JSON::Schema::Modern::Document::OpenAPI::new at line 128 of (eval 421)[Sub/Quote.pm:3]
coerce => sub { $_[0]->$_isa('Mojo::URL') ? $_[0] : Mojo::URL->new($_[0]) },
# spent 1.02ms making 15 calls to Mojo::URL::new, avg 68µs/call # spent 157µs making 15 calls to Safe::Isa::__ANON__[Safe/Isa.pm:23], avg 10µs/call
4619µs21.86ms);
# spent 1.75ms making 1 call to MooX::HandlesVia::has # spent 116µs making 1 call to Types::Standard::InstanceOf
47
4815µs21.73mshas evaluator => (
# spent 1.33ms making 1 call to MooX::HandlesVia::has # spent 397µs making 1 call to Types::Standard::InstanceOf
49 is => 'rwp',
50 isa => InstanceOf['JSON::Schema::Modern'],
51 weak_ref => 1,
52);
53
54# "A JSON Schema resource is a schema which is canonically identified by an absolute URI."
55# https://json-schema.org/draft/2020-12/json-schema-core.html#rfc.section.4.3.5
56has resource_index => (
57 is => 'bare',
58 isa => HashRef[my $resource_type = Dict[
59 canonical_uri => InstanceOf['Mojo::URL'],
60 path => Str, # always a JSON pointer, relative to the document root
61 specification_version => Str, # not an Enum due to module load ordering
62 # the vocabularies used when evaluating instance data against schema
63 vocabularies => ArrayRef[ClassName->where(q{$_->DOES('JSON::Schema::Modern::Vocabulary')})],
64 configs => HashRef,
65 Slurpy[HashRef[Undef]], # no other fields allowed
66 ]],
67 handles_via => 'Hash',
68 handles => {
69 resource_index => 'elements',
70 resource_pairs => 'kv',
71 _add_resources => 'set',
72 _get_resource => 'get',
73 _remove_resource => 'delete',
74 _canonical_resources => 'values',
75 },
76 init_arg => undef,
77 lazy => 1,
781562µs
# spent 34µs within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:78] which was called 15 times, avg 2µs/call: # 15 times (34µs+0s) by JSON::Schema::Modern::Document::_assert_resource_index at line 23 of (eval 301)[Sub/Quote.pm:3], avg 2µs/call
default => sub { {} },
79148µs1329.8ms);
# spent 12.1ms making 1 call to MooX::HandlesVia::has # spent 8.98ms making 1 call to Types::Standard::Dict # spent 6.62ms making 3 calls to Types::Standard::HashRef, avg 2.21ms/call # spent 1.30ms making 1 call to Types::Standard::Slurpy # spent 588µs making 1 call to Types::Standard::ArrayRef # spent 162µs making 1 call to Type::Tiny::where # spent 90µs making 1 call to Types::Standard::InstanceOf # spent 3µs making 1 call to Types::Standard::ClassName # spent 2µs making 1 call to Types::Standard::Undef # spent 1µs making 2 calls to Types::Standard::Str, avg 500ns/call
80
81has _path_to_resource => (
82 is => 'bare',
83 isa => HashRef[$resource_type],
84 handles_via => 'Hash',
85 handles => {
86 path_to_resource => 'get',
87 },
88 init_arg => undef,
89 lazy => 1,
9012100µs12302µs
# spent 425µs (123+302) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:90] which was called 12 times, avg 35µs/call: # 12 times (123µs+302µs) by JSON::Schema::Modern::Document::_assert__path_to_resource at line 23 of (eval 303)[Sub/Quote.pm:3], avg 35µs/call
default => sub { +{ map +($_->{path} => $_), shift->_canonical_resources } },
# spent 302µs making 12 calls to JSON::Schema::Modern::Document::_canonical_resources, avg 25µs/call
91110µs23.88ms);
# spent 3.81ms making 1 call to MooX::HandlesVia::has # spent 65µs making 1 call to Types::Standard::HashRef
92
93# for internal use only
94114µs21.19mshas _serialized_schema => (
# spent 1.19ms making 1 call to MooX::HandlesVia::has # spent 3µs making 1 call to Types::Standard::Str
95 is => 'rw',
96 isa => Str,
97 init_arg => undef,
98);
99
100has errors => (
101 is => 'bare',
102 handles_via => 'Array',
103 handles => {
104 errors => 'elements',
105 has_errors => 'count',
106 },
107 writer => '_set_errors',
108 isa => ArrayRef[InstanceOf['JSON::Schema::Modern::Error']],
109 lazy => 1,
1101532µs
# spent 27µs within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:110] which was called 15 times, avg 2µs/call: # 15 times (27µs+0s) by JSON::Schema::Modern::Document::_assert_errors at line 23 of (eval 308)[Sub/Quote.pm:3], avg 2µs/call
default => sub { [] },
111113µs33.28ms);
# spent 3.15ms making 1 call to MooX::HandlesVia::has # spent 86µs making 1 call to Types::Standard::InstanceOf # spent 43µs making 1 call to Types::Standard::ArrayRef
112
113
# spent 28.0ms (1.02+27.0) within JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:135] which was called 22 times, avg 1.27ms/call: # 22 times (1.02ms+27.0ms) by JSON::Schema::Modern::Document::__ANON__[(eval 310)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Class/Method/Modifiers.pm:89]:1] at line 1 of (eval 310)[Class/Method/Modifiers.pm:89], avg 1.27ms/call
around _add_resources => sub {
114227µs my $orig = shift;
115228µs my $self = shift;
116
11722377µs22153µs foreach my $pair (pairs @_) {
# spent 153µs making 22 calls to List::Util::pairs, avg 7µs/call
1183621µs my ($key, $value) = @$pair;
119
12036267µs1087.44ms $resource_type->($value); # check type of hash value against Dict
# spent 4.26ms making 36 calls to Sub::Defer::__ANON__[Sub/Defer.pm:178], avg 118µs/call # spent 3.18ms making 72 calls to Type::Tiny::__ANON__[Type/Tiny.pm:89], avg 44µs/call
121
12236135µs446.67ms if (my $existing = $self->_get_resource($key)) {
# spent 6.12ms making 36 calls to JSON::Schema::Modern::Document::_get_resource, avg 170µs/call # spent 548µs making 8 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 68µs/call
123 croak 'uri "'.$key.'" conflicts with an existing schema resource'
124 if $existing->{path} ne $value->{path}
125 or $existing->{canonical_uri} ne $value->{canonical_uri}
126 or $existing->{specification_version} ne $value->{specification_version};
127 }
128
129 # this will never happen, if we parsed $id correctly
130 croak sprintf('a resource canonical uri cannot contain a plain-name fragment (%s)', $value->{canonical_uri})
13136104µs7237µs if ($value->{canonical_uri}->fragment // '') =~ m{^[^/]};
# spent 19µs making 36 calls to Mojo::URL::fragment, avg 528ns/call # spent 18µs making 36 calls to JSON::Schema::Modern::Document::CORE:match, avg 500ns/call
132
1333688µs369.33ms $self->$orig($key, $value);
# spent 9.33ms making 36 calls to JSON::Schema::Modern::Document::_add_resources, avg 259µs/call
134 }
13516µs1231µs};
# spent 231µs making 1 call to Moo::around
136
137# shims for Mojo::JSON::Pointer
13847846152ms47846100.0ms
# spent 261ms (161+100.0) within JSON::Schema::Modern::Document::data which was called 47846 times, avg 5µs/call: # 47846 times (161ms+100.0ms) by Mojo::JSON::Pointer::_pointer at line 14 of Mojo/JSON/Pointer.pm, avg 5µs/call
sub data { shift->schema(@_) }
# spent 100.0ms making 47846 calls to JSON::Schema::Modern::Document::schema, avg 2µs/call
1391543µs
# spent 52µs within JSON::Schema::Modern::Document::FOREIGNBUILDARGS which was called 15 times, avg 3µs/call: # 14 times (51µs+0s) by JSON::Schema::Modern::Document::new at line 53 of (eval 428)[Sub/Quote.pm:3], avg 4µs/call # once (1µs+0s) by JSON::Schema::Modern::Document::OpenAPI::new at line 56 of (eval 421)[Sub/Quote.pm:3]
sub FOREIGNBUILDARGS { () }
140
141# for JSON serializers
142sub TO_JSON { shift->schema }
143
1444517µs
# spent 94.3s (930µs+94.3) within JSON::Schema::Modern::Document::BUILD which was called 15 times, avg 6.28s/call: # 14 times (781µs+-781µs) by JSON::Schema::Modern::Document::new at line 114 of (eval 428)[Sub/Quote.pm:3], avg 0s/call # once (149µs+94.3s) by JSON::Schema::Modern::Document::OpenAPI::new at line 149 of (eval 421)[Sub/Quote.pm:3]
sub BUILD ($self, $args) {
1451564µs30753µs my $original_uri = $self->canonical_uri->clone;
# spent 490µs making 15 calls to JSON::Schema::Modern::Document::canonical_uri, avg 33µs/call # spent 263µs making 15 calls to Mojo::URL::clone, avg 18µs/call
1461565µs3094.4s my $state = $self->traverse($self->evaluator // JSON::Schema::Modern->new);
# spent 94.3s making 1 call to JSON::Schema::Modern::Document::OpenAPI::traverse # spent 126ms making 14 calls to JSON::Schema::Modern::Document::traverse, avg 9.02ms/call # spent 30µs making 14 calls to JSON::Schema::Modern::Document::evaluator, avg 2µs/call # spent 3µs making 1 call to JSON::Schema::Modern::Document::OpenAPI::evaluator
147
148 # if the schema identified a canonical uri for itself, it overrides the initial value
14915125µs403.69ms $self->_set_canonical_uri($state->{initial_schema_uri}) if $state->{initial_schema_uri} ne $original_uri;
# spent 3.35ms making 30 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 112µs/call # spent 337µs making 10 calls to JSON::Schema::Modern::Document::_set_canonical_uri, avg 34µs/call
150
1511512µs if ($state->{errors}->@*) {
152 foreach my $error ($state->{errors}->@*) {
153 $error->mode('traverse') if not defined $error->mode;
154 }
155
156 $self->_set_errors($state->{errors});
157 return;
158 }
159
160 # make sure the root schema is always indexed against *something*.
161 $self->_add_resources($original_uri => {
162 path => '',
163 canonical_uri => $self->canonical_uri,
164 specification_version => $state->{spec_version},
165 vocabularies => $state->{vocabularies},
166 configs => $state->{configs},
167 })
16815250µs6811.9ms if (not "$original_uri" and $original_uri eq $self->canonical_uri)
# spent 8.86ms making 7 calls to JSON::Schema::Modern::Document::_add_resources, avg 1.27ms/call # spent 2.98ms making 46 calls to Mojo::URL::__ANON__[Mojo/URL.pm:3], avg 65µs/call # spent 39µs making 15 calls to JSON::Schema::Modern::Document::canonical_uri, avg 3µs/call
169 or "$original_uri";
170
17115209µs1519.4ms $self->_add_resources($state->{identifiers}->@*);
# spent 19.4ms making 15 calls to JSON::Schema::Modern::Document::_add_resources, avg 1.29ms/call
172}
173
174427µs
# spent 126ms (497µs+126) within JSON::Schema::Modern::Document::traverse which was called 14 times, avg 9.02ms/call: # 14 times (497µs+126ms) by JSON::Schema::Modern::Document::BUILD at line 146, avg 9.02ms/call
sub traverse ($self, $evaluator) {
175 die 'wrong class - use JSON::Schema::Modern::Document::OpenAPI instead'
1761444µs2834µs if is_plain_hashref($self->schema) and exists $self->schema->{openapi};
# spent 34µs making 28 calls to JSON::Schema::Modern::Document::schema, avg 1µs/call
177
17814158µs70124ms my $state = $evaluator->traverse($self->schema,
# spent 124ms making 14 calls to JSON::Schema::Modern::traverse, avg 8.85ms/call # spent 139µs making 14 calls to Mojo::URL::clone, avg 10µs/call # spent 30µs making 14 calls to JSON::Schema::Modern::Document::metaschema_uri, avg 2µs/call # spent 11µs making 14 calls to JSON::Schema::Modern::Document::schema, avg 786ns/call # spent 7µs making 14 calls to JSON::Schema::Modern::Document::canonical_uri, avg 500ns/call
179 {
180 initial_schema_uri => $self->canonical_uri->clone,
181 $self->metaschema_uri ? ( metaschema_uri => $self->metaschema_uri) : (),
182 }
183 );
184
1851414µs return $state if $state->{errors}->@*;
186
187 # we don't store the metaschema_uri in $state nor in resource_index, but we can figure it out
188 # easily enough.
189 my $metaschema_uri = (is_plain_hashref($self->schema) ? $self->schema->{'$schema'} : undef)
1901485µs2835µs // $self->metaschema_uri // $evaluator->METASCHEMA_URIS->{$state->{spec_version}};
# spent 35µs making 28 calls to JSON::Schema::Modern::Document::schema, avg 1µs/call
191
1921464µs281.63ms $self->_set_metaschema_uri($metaschema_uri) if $metaschema_uri ne ($self->metaschema_uri//'');
# spent 1.60ms making 14 calls to JSON::Schema::Modern::Document::_set_metaschema_uri, avg 114µs/call # spent 25µs making 14 calls to JSON::Schema::Modern::Document::metaschema_uri, avg 2µs/call
193
1941437µs return $state;
195}
196
197sub validate ($self) {
198 my $js = $self->$_call_if_can('evaluator') // JSON::Schema::Modern->new;
199
200 return $js->evaluate($self->schema, $self->metaschema_uri);
201}
202
203161µs1;
204
2051100µs1596µs__END__
 
# spent 18µs within JSON::Schema::Modern::Document::CORE:match which was called 36 times, avg 500ns/call: # 36 times (18µs+0s) by JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:135] at line 131, avg 500ns/call
sub JSON::Schema::Modern::Document::CORE:match; # opcode