← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:33:55 2022
Reported on Wed Dec 14 15:40:04 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Content.pm
StatementsExecuted 376348 statements in 222ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
9407521160ms160msJSON::Schema::Modern::Vocabulary::Content::::keywordsJSON::Schema::Modern::Vocabulary::Content::keywords
11134µs37µsModule::Runtime::::BEGIN@1.316 Module::Runtime::BEGIN@1.316
11127µs181µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentSchemaJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema
11123µs963µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@11JSON::Schema::Modern::Vocabulary::Content::BEGIN@11
11120µs50µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@13JSON::Schema::Modern::Vocabulary::Content::BEGIN@13
11115µs25µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentEncodingJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding
11114µs31µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@14JSON::Schema::Modern::Vocabulary::Content::BEGIN@14
11112µs24µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@15JSON::Schema::Modern::Vocabulary::Content::BEGIN@15
11112µs12µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@9JSON::Schema::Modern::Vocabulary::Content::BEGIN@9
11111µs36µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentMediaTypeJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType
11110µs23µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@16JSON::Schema::Modern::Vocabulary::Content::BEGIN@16
1119µs151µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@12JSON::Schema::Modern::Vocabulary::Content::BEGIN@12
1119µs34µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@18JSON::Schema::Modern::Vocabulary::Content::BEGIN@18
1118µs37µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@17JSON::Schema::Modern::Vocabulary::Content::BEGIN@17
1118µs37µsModule::Runtime::::BEGIN@2.317 Module::Runtime::BEGIN@2.317
1117µs261µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@10JSON::Schema::Modern::Vocabulary::Content::BEGIN@10
1117µs39µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@19JSON::Schema::Modern::Vocabulary::Content::BEGIN@19
1117µs240µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@20JSON::Schema::Modern::Vocabulary::Content::BEGIN@20
3112µs2µsJSON::Schema::Modern::Vocabulary::Content::::evaluation_orderJSON::Schema::Modern::Vocabulary::Content::evaluation_order
1111µs1µsJSON::Schema::Modern::Vocabulary::Content::::vocabularyJSON::Schema::Modern::Vocabulary::Content::vocabulary
0000s0sJSON::Schema::Modern::Vocabulary::Content::::_eval_keyword_contentEncodingJSON::Schema::Modern::Vocabulary::Content::_eval_keyword_contentEncoding
0000s0sJSON::Schema::Modern::Vocabulary::Content::::_eval_keyword_contentMediaTypeJSON::Schema::Modern::Vocabulary::Content::_eval_keyword_contentMediaType
0000s0sJSON::Schema::Modern::Vocabulary::Content::::_eval_keyword_contentSchemaJSON::Schema::Modern::Vocabulary::Content::_eval_keyword_contentSchema
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1235µs240µs
# spent 37µs (34+3) within Module::Runtime::BEGIN@1.316 which was called: # once (34µs+3µs) by Module::Runtime::require_module at line 1
use strict;
# spent 37µs making 1 call to Module::Runtime::BEGIN@1.316 # spent 3µs making 1 call to strict::import
2252µs266µs
# spent 37µs (8+29) within Module::Runtime::BEGIN@2.317 which was called: # once (8µs+29µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 37µs making 1 call to Module::Runtime::BEGIN@2.317 # spent 29µs making 1 call to warnings::import
3package JSON::Schema::Modern::Vocabulary::Content;
4# vim: set ts=8 sts=2 sw=2 tw=100 et :
5# ABSTRACT: Implementation of the JSON Schema Content vocabulary
6
710sour $VERSION = '0.552';
8
9238µs112µs
# spent 12µs within JSON::Schema::Modern::Vocabulary::Content::BEGIN@9 which was called: # once (12µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10231µs2515µs
# spent 261µs (7+254) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 which was called: # once (7µs+254µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 261µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 # spent 254µs making 1 call to Moo::import
11336µs31.90ms
# spent 963µs (23+940) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 which was called: # once (23µs+940µs) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 963µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 # spent 920µs making 1 call to strictures::import # spent 19µs making 1 call to strictures::VERSION
12244µs2293µs
# spent 151µs (9+142) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 which was called: # once (9µs+142µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 151µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 # spent 142µs making 1 call to experimental::import
13234µs253µs
# spent 50µs (20+30) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 which was called: # once (20µs+30µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 50µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 # spent 3µs making 1 call to if::import
14233µs233µs
# spent 31µs (14+17) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 which was called: # once (14µs+17µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 31µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 # spent 2µs making 1 call to if::unimport
15225µs226µs
# spent 24µs (12+12) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 which was called: # once (12µs+12µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 24µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 # spent 2µs making 1 call to if::unimport
16220µs224µs
# spent 23µs (10+13) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 which was called: # once (10µs+13µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 23µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 # spent 1µs making 1 call to if::unimport
17227µs266µs
# spent 37µs (8+29) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 which was called: # once (8µs+29µs) by Module::Runtime::require_module at line 17
use Storable 'dclone';
# spent 37µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 # spent 29µs making 1 call to Exporter::import
18223µs259µs
# spent 34µs (9+25) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 which was called: # once (9µs+25µs) by Module::Runtime::require_module at line 18
use Feature::Compat::Try;
# spent 34µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 # spent 25µs making 1 call to Feature::Compat::Try::import
19221µs271µs
# spent 39µs (7+32) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 which was called: # once (7µs+32µs) by Module::Runtime::require_module at line 19
use JSON::Schema::Modern::Utilities qw(is_type A assert_keyword_type E abort);
# spent 39µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 # spent 32µs making 1 call to Exporter::import
202660µs2473µs
# spent 240µs (7+233) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 which was called: # once (7µs+233µs) by Module::Runtime::require_module at line 20
use namespace::clean;
# spent 240µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 # spent 233µs making 1 call to namespace::clean::import
21
2212µs1512µswith 'JSON::Schema::Modern::Vocabulary';
# spent 512µs making 1 call to Moo::with
23
24
# spent 1µs within JSON::Schema::Modern::Vocabulary::Content::vocabulary which was called: # once (1µs+0s) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:670] at line 666 of JSON/Schema/Modern.pm
sub vocabulary {
2512µs 'https://json-schema.org/draft/2019-09/vocab/content' => 'draft2019-09',
26 'https://json-schema.org/draft/2020-12/vocab/content' => 'draft2020-12';
27}
28
2936µs
# spent 2µs within JSON::Schema::Modern::Vocabulary::Content::evaluation_order which was called 3 times, avg 667ns/call: # 3 times (2µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 322 of JSON/Schema/Modern/Vocabulary/Core.pm, avg 667ns/call
sub evaluation_order { 4 }
30
3128222542.1ms
# spent 160ms within JSON::Schema::Modern::Vocabulary::Content::keywords which was called 94075 times, avg 2µs/call: # 91595 times (155ms+0s) by JSON::Schema::Modern::_eval_subschema at line 535 of JSON/Schema/Modern.pm, avg 2µs/call # 2480 times (5.03ms+0s) by JSON::Schema::Modern::_traverse_subschema at line 447 of JSON/Schema/Modern.pm, avg 2µs/call
sub keywords ($self, $spec_version) {
32 return (
3394075179ms qw(contentEncoding contentMediaType),
34 $spec_version ne 'draft7' ? 'contentSchema' : (),
35 );
36}
37
3841µs
# spent 25µs (15+10) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding which was called: # once (15µs+10µs) by JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType at line 59
sub _traverse_keyword_contentEncoding ($self, $schema, $state) {
3911µs110µs return if not assert_keyword_type($state, $schema, 'string');
4018µs return 1;
41}
42
43sub _eval_keyword_contentEncoding ($self, $data, $schema, $state) {
44 return 1 if not is_type('string', $data);
45
46 if ($state->{validate_content_schemas}) {
47 my $decoder = $state->{evaluator}->get_encoding($schema->{contentEncoding});
48 abort($state, 'cannot find decoder for contentEncoding "%s"', $schema->{contentEncoding})
49 if not $decoder;
50
51 # decode the data now, so we can report errors for the right keyword
52 try { $state->{_content_ref} = $decoder->(\$data) }
53 catch ($e) { return E($state, $e) }
54 }
55
56 return A($state, $schema->{$state->{keyword}})
57}
58
59114µs125µs
# spent 36µs (11+25) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType which was called: # once (11µs+25µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_contentMediaType { shift->_traverse_keyword_contentEncoding(@_) }
60
61sub _eval_keyword_contentMediaType ($self, $data, $schema, $state) {
62 return 1 if not is_type('string', $data);
63
64 if ($state->{validate_content_schemas}) {
65 my $decoder = $state->{evaluator}->get_media_type($schema->{contentMediaType});
66 abort($state, 'cannot find decoder for contentMediaType "%s"', $schema->{contentMediaType})
67 if not $decoder;
68
69 # contentEncoding failed to decode the content
70 return 1 if exists $schema->{contentEncoding} and not exists $state->{_content_ref};
71
72 # decode the data now, so we can report errors for the right keyword
73 try { $state->{_content_ref} = $decoder->($state->{_content_ref} // \$data) }
74 catch ($e) { return E($state, $e) }
75 }
76
77 return A($state, $schema->{$state->{keyword}})
78}
79
8042µs
# spent 181µs (27+154) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema which was called: # once (27µs+154µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_contentSchema ($self, $schema, $state) {
81 # since contentSchema should never be assumed to be evaluated in the context of the containing
82 # schema, it is not appropriate to gather identifiers found therein -- but we can still validate
83 # the subschema.
84118µs1154µs $self->traverse_subschema($schema, +{ %$state, identifiers => [] });
85}
86
87sub _eval_keyword_contentSchema ($self, $data, $schema, $state) {
88 return 1 if not exists $schema->{contentMediaType};
89 return 1 if not is_type('string', $data);
90
91 return A($state, dclone($schema->{contentSchema})) if not $state->{validate_content_schemas};
92
93 return 1 if not exists $state->{_content_ref}; # contentMediaType failed to decode the content
94
95 return 1 if $self->eval($state->{_content_ref}->$*, $schema->{contentSchema},
96 { %$state, schema_path => $state->{schema_path}.'/contentSchema' });
97 return E($state, 'subschema is not valid');
98}
99
10018µs1;
101
102131µs1375µs__END__