← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:37 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Content.pm
StatementsExecuted 56 statements in 1.24ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11150µs53µsModule::Runtime::::BEGIN@1.316 Module::Runtime::BEGIN@1.316
11148µs74µsModule::Runtime::::BEGIN@2.317 Module::Runtime::BEGIN@2.317
11135µs71µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@13JSON::Schema::Modern::Vocabulary::Content::BEGIN@13
11133µs41µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@16JSON::Schema::Modern::Vocabulary::Content::BEGIN@16
11120µs1.26msJSON::Schema::Modern::Vocabulary::Content::::BEGIN@11JSON::Schema::Modern::Vocabulary::Content::BEGIN@11
11120µs25µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentEncodingJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding
22114µs14µsJSON::Schema::Modern::Vocabulary::Content::::keywordsJSON::Schema::Modern::Vocabulary::Content::keywords
11114µs14µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@9JSON::Schema::Modern::Vocabulary::Content::BEGIN@9
11114µs86µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentSchemaJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema
11113µs554µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@10JSON::Schema::Modern::Vocabulary::Content::BEGIN@10
11112µs32µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@14JSON::Schema::Modern::Vocabulary::Content::BEGIN@14
1119µs18µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@15JSON::Schema::Modern::Vocabulary::Content::BEGIN@15
1119µs41µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@19JSON::Schema::Modern::Vocabulary::Content::BEGIN@19
1118µs114µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@12JSON::Schema::Modern::Vocabulary::Content::BEGIN@12
1117µs33µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@17JSON::Schema::Modern::Vocabulary::Content::BEGIN@17
1116µs168µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@20JSON::Schema::Modern::Vocabulary::Content::BEGIN@20
1115µs28µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@18JSON::Schema::Modern::Vocabulary::Content::BEGIN@18
1114µs29µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentMediaTypeJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType
3113µs3µsJSON::Schema::Modern::Vocabulary::Content::::evaluation_orderJSON::Schema::Modern::Vocabulary::Content::evaluation_order
1112µs2µ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
1265µs256µs
# spent 53µs (50+3) within Module::Runtime::BEGIN@1.316 which was called: # once (50µs+3µs) by Module::Runtime::require_module at line 1
use strict;
# spent 53µs making 1 call to Module::Runtime::BEGIN@1.316 # spent 3µs making 1 call to strict::import
2286µs2100µs
# spent 74µs (48+26) within Module::Runtime::BEGIN@2.317 which was called: # once (48µs+26µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 74µs making 1 call to Module::Runtime::BEGIN@2.317 # spent 26µ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
711µsour $VERSION = '0.556';
8
9275µs114µs
# spent 14µs within JSON::Schema::Modern::Vocabulary::Content::BEGIN@9 which was called: # once (14µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10250µs21.09ms
# spent 554µs (13+541) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 which was called: # once (13µs+541µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 554µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 # spent 541µs making 1 call to Moo::import
11396µs32.50ms
# spent 1.26ms (20µs+1.24) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 which was called: # once (20µs+1.24ms) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 1.26ms making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 # spent 1.22ms making 1 call to strictures::import # spent 25µs making 1 call to strictures::VERSION
122118µs2220µs
# spent 114µs (8+106) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 which was called: # once (8µs+106µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 114µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 # spent 106µs making 1 call to experimental::import
13265µs275µs
# spent 71µs (35+36) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 which was called: # once (35µs+36µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 71µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 # spent 4µs making 1 call to if::import
14227µs235µs
# spent 32µs (12+20) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 which was called: # once (12µs+20µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 32µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 # spent 3µs making 1 call to if::unimport
15243µs218µs
# spent 18µs (9+9) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 which was called: # once (9µs+9µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 18µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 # spent 0s making 1 call to if::unimport
16215µs242µs
# spent 41µs (33+8) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 which was called: # once (33µs+8µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 41µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 # spent 1µs making 1 call to if::unimport
17217µs259µs
# spent 33µs (7+26) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 which was called: # once (7µs+26µs) by Module::Runtime::require_module at line 17
use Storable 'dclone';
# spent 33µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 # spent 26µs making 1 call to Exporter::import
18218µs251µs
# spent 28µs (5+23) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 which was called: # once (5µs+23µs) by Module::Runtime::require_module at line 18
use Feature::Compat::Try;
# spent 28µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 # spent 23µs making 1 call to Feature::Compat::Try::import
19218µs273µs
# spent 41µs (9+32) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 which was called: # once (9µ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 41µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 # spent 32µs making 1 call to Exporter::import
202465µs2330µs
# spent 168µs (6+162) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 which was called: # once (6µs+162µs) by Module::Runtime::require_module at line 20
use namespace::clean;
# spent 168µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 # spent 162µs making 1 call to namespace::clean::import
21
2211µs1317µswith 'JSON::Schema::Modern::Vocabulary';
# spent 317µs making 1 call to Moo::with
23
24
# spent 2µs within JSON::Schema::Modern::Vocabulary::Content::vocabulary which was called: # once (2µs+0s) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:696] at line 692 of JSON/Schema/Modern.pm
sub vocabulary {
2513µ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 3µs within JSON::Schema::Modern::Vocabulary::Content::evaluation_order which was called 3 times, avg 1µs/call: # 3 times (3µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 331 of JSON/Schema/Modern/Vocabulary/Core.pm, avg 1µs/call
sub evaluation_order { 4 }
30
3161µs
# spent 14µs within JSON::Schema::Modern::Vocabulary::Content::keywords which was called 2 times, avg 7µs/call: # once (10µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 471 of JSON/Schema/Modern.pm # once (4µs+0s) by JSON::Schema::Modern::_eval_subschema at line 559 of JSON/Schema/Modern.pm
sub keywords ($self, $spec_version) {
32 return (
33217µs qw(contentEncoding contentMediaType),
34 $spec_version ne 'draft7' ? 'contentSchema' : (),
35 );
36}
37
38413µs
# spent 25µs (20+5) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding which was called: # once (20µs+5µs) by JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType at line 59
sub _traverse_keyword_contentEncoding ($self, $schema, $state) {
3911µs15µs return if not assert_keyword_type($state, $schema, 'string');
4013µ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
5914µs125µs
# spent 29µs (4+25) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType which was called: # once (4µs+25µs) by JSON::Schema::Modern::_traverse_subschema at line 483 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
8040s
# spent 86µs (14+72) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema which was called: # once (14µs+72µs) by JSON::Schema::Modern::_traverse_subschema at line 483 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.
8418µs172µ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
10016µs1;
101
102120µs1264µs__END__