← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:04 2022

Filename/Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Content.pm
StatementsExecuted 56 statements in 963µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11128µs30µsModule::Runtime::::BEGIN@1.317 Module::Runtime::BEGIN@1.317
11120µs63µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentEncodingJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding
11120µs83µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentMediaTypeJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType
11119µs90µsJSON::Schema::Modern::Vocabulary::Content::::_traverse_keyword_contentSchemaJSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema
11110µs600µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@11JSON::Schema::Modern::Vocabulary::Content::BEGIN@11
11110µs28µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@13JSON::Schema::Modern::Vocabulary::Content::BEGIN@13
1118µs19µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@14JSON::Schema::Modern::Vocabulary::Content::BEGIN@14
1118µs16µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@16JSON::Schema::Modern::Vocabulary::Content::BEGIN@16
1118µs8µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@9JSON::Schema::Modern::Vocabulary::Content::BEGIN@9
1117µs16µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@15JSON::Schema::Modern::Vocabulary::Content::BEGIN@15
1115µs202µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@10JSON::Schema::Modern::Vocabulary::Content::BEGIN@10
1115µs22µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@17JSON::Schema::Modern::Vocabulary::Content::BEGIN@17
1115µs16µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@18JSON::Schema::Modern::Vocabulary::Content::BEGIN@18
1115µs30µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@19JSON::Schema::Modern::Vocabulary::Content::BEGIN@19
2215µs5µsJSON::Schema::Modern::Vocabulary::Content::::keywordsJSON::Schema::Modern::Vocabulary::Content::keywords
1114µs70µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@12JSON::Schema::Modern::Vocabulary::Content::BEGIN@12
1114µs176µsJSON::Schema::Modern::Vocabulary::Content::::BEGIN@20JSON::Schema::Modern::Vocabulary::Content::BEGIN@20
1114µs23µsModule::Runtime::::BEGIN@2.318 Module::Runtime::BEGIN@2.318
3111µs1µ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
1225µs232µs
# spent 30µs (28+2) within Module::Runtime::BEGIN@1.317 which was called: # once (28µs+2µs) by Module::Runtime::require_module at line 1
use strict;
# spent 30µs making 1 call to Module::Runtime::BEGIN@1.317 # spent 2µs making 1 call to strict::import
2233µs242µs
# spent 23µs (4+19) within Module::Runtime::BEGIN@2.318 which was called: # once (4µs+19µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 23µs making 1 call to Module::Runtime::BEGIN@2.318 # spent 19µ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.559';
8
9226µs18µs
# spent 8µs within JSON::Schema::Modern::Vocabulary::Content::BEGIN@9 which was called: # once (8µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10220µs2399µs
# spent 202µs (5+197) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 which was called: # once (5µs+197µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 202µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@10 # spent 197µs making 1 call to Moo::import
11323µs31.19ms
# spent 600µs (10+590) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 which was called: # once (10µs+590µs) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 600µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@11 # spent 577µs making 1 call to strictures::import # spent 12µs making 1 call to strictures::VERSION
12231µs2136µs
# spent 70µs (4+66) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 which was called: # once (4µs+66µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 70µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@12 # spent 66µs making 1 call to experimental::import
13221µs230µs
# spent 28µs (10+18) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 which was called: # once (10µs+18µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 28µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@13 # spent 2µs making 1 call to if::import
14220µs220µs
# spent 19µs (8+11) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 which was called: # once (8µs+11µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 19µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@14 # spent 1µs making 1 call to if::unimport
15218µs216µs
# spent 16µs (7+9) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 which was called: # once (7µs+9µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 16µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@15 # spent 0s making 1 call to if::unimport
16213µs217µs
# spent 16µs (8+8) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 which was called: # once (8µs+8µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 16µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@16 # spent 1µs making 1 call to if::unimport
17215µs239µs
# spent 22µs (5+17) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 which was called: # once (5µs+17µs) by Module::Runtime::require_module at line 17
use Storable 'dclone';
# spent 22µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@17 # spent 17µs making 1 call to Exporter::import
18215µs227µs
# spent 16µs (5+11) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 which was called: # once (5µs+11µs) by Module::Runtime::require_module at line 18
use Feature::Compat::Try;
# spent 16µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@18 # spent 11µs making 1 call to Feature::Compat::Try::import
19215µs255µs
# spent 30µs (5+25) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 which was called: # once (5µs+25µs) by Module::Runtime::require_module at line 19
use JSON::Schema::Modern::Utilities qw(is_type A assert_keyword_type E abort);
# spent 30µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@19 # spent 25µs making 1 call to Exporter::import
202585µs2348µs
# spent 176µs (4+172) within JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 which was called: # once (4µs+172µs) by Module::Runtime::require_module at line 20
use namespace::clean;
# spent 176µs making 1 call to JSON::Schema::Modern::Vocabulary::Content::BEGIN@20 # spent 172µs making 1 call to namespace::clean::import
21
2211µs1321µswith 'JSON::Schema::Modern::Vocabulary';
# spent 321µ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/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm:709] at line 705 of /Users/ether/git/JSON-Schema-Modern/lib/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
2934µs
# spent 1µs within JSON::Schema::Modern::Vocabulary::Content::evaluation_order which was called 3 times, avg 333ns/call: # 3 times (1µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 337 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Core.pm, avg 333ns/call
sub evaluation_order { 4 }
30
3161µs
# spent 5µs within JSON::Schema::Modern::Vocabulary::Content::keywords which was called 2 times, avg 2µs/call: # once (3µs+0s) by JSON::Schema::Modern::_eval_subschema at line 572 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (2µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 480 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub keywords ($self, $spec_version) {
32 return (
3326µs qw(contentEncoding contentMediaType),
34 $spec_version ne 'draft7' ? 'contentSchema' : (),
35 );
36}
37
3846µs
# spent 63µs (20+43) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentEncoding which was called: # once (20µs+43µs) by JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType at line 66
sub _traverse_keyword_contentEncoding ($self, $schema, $state) {
39131µs143µ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 A($state, $schema->{$state->{keyword}});
47
48 if ($state->{validate_content_schemas}) {
49 my $decoder = $state->{evaluator}->get_encoding($schema->{contentEncoding});
50 abort($state, 'cannot find decoder for contentEncoding "%s"', $schema->{contentEncoding})
51 if not $decoder;
52
53 # decode the data now, so we can report errors for the right keyword
54 try {
55 $state->{_content_ref} = $decoder->(\$data);
56 }
57 catch ($e) {
58 chomp $e;
59 return E($state, 'could not decode %s string: %s', $schema->{contentEncoding}, $e);
60 };
61 }
62
63 return 1;
64}
65
66113µs163µs
# spent 83µs (20+63) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentMediaType which was called: # once (20µs+63µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_contentMediaType { shift->_traverse_keyword_contentEncoding(@_) }
67
68sub _eval_keyword_contentMediaType ($self, $data, $schema, $state) {
69 return 1 if not is_type('string', $data);
70
71 A($state, $schema->{$state->{keyword}});
72
73 if ($state->{validate_content_schemas}) {
74 my $decoder = $state->{evaluator}->get_media_type($schema->{contentMediaType});
75 abort($state, 'cannot find decoder for contentMediaType "%s"', $schema->{contentMediaType})
76 if not $decoder;
77
78 # contentEncoding failed to decode the content
79 return 1 if exists $schema->{contentEncoding} and not exists $state->{_content_ref};
80
81 # decode the data now, so we can report errors for the right keyword
82 try {
83 $state->{_content_ref} = $decoder->($state->{_content_ref} // \$data);
84 }
85 catch ($e) {
86 chomp $e;
87 delete $state->{_content_ref};
88 return E($state, 'could not decode %s string: %s', $schema->{contentMediaType}, $e);
89 }
90 }
91
92 return 1;
93}
94
9542µs
# spent 90µs (19+71) within JSON::Schema::Modern::Vocabulary::Content::_traverse_keyword_contentSchema which was called: # once (19µs+71µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_contentSchema ($self, $schema, $state) {
96 # since contentSchema should never be assumed to be evaluated in the context of the containing
97 # schema, it is not appropriate to gather identifiers found therein -- but we can still validate
98 # the subschema.
99110µs171µs $self->traverse_subschema($schema, +{ %$state, identifiers => [] });
100}
101
102sub _eval_keyword_contentSchema ($self, $data, $schema, $state) {
103 return 1 if not exists $schema->{contentMediaType};
104 return 1 if not is_type('string', $data);
105
106 A($state, dclone($schema->{contentSchema}));
107 return 1 if not $state->{validate_content_schemas};
108
109 return 1 if not exists $state->{_content_ref}; # contentMediaType failed to decode the content
110
111 return 1 if $self->eval($state->{_content_ref}->$*, $schema->{contentSchema},
112 { %$state, schema_path => $state->{schema_path}.'/contentSchema' });
113 return E($state, 'subschema is not valid');
114}
115
11616µs1;
117118µs1253µs__END__