Current section
Files
Jump to
Current section
Files
src/protocol@profiler.erl
-module(protocol@profiler).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([encode__position_tick_info/1, encode__profile_node/1, encode__profile/1, decode__position_tick_info/1, decode__profile_node/1, decode__profile/1, encode__coverage_range/1, decode__coverage_range/1, encode__function_coverage/1, decode__function_coverage/1, encode__script_coverage/1, decode__script_coverage/1, decode__get_best_effort_coverage_response/1, decode__start_precise_coverage_response/1, decode__stop_response/1, decode__take_precise_coverage_response/1, disable/1, enable/1, get_best_effort_coverage/1, set_sampling_interval/2, start/1, start_precise_coverage/4, stop/1, stop_precise_coverage/1, take_precise_coverage/1]).
-export_type([profile_node/0, profile/0, position_tick_info/0, coverage_range/0, function_coverage/0, script_coverage/0, get_best_effort_coverage_response/0, start_precise_coverage_response/0, stop_response/0, take_precise_coverage_response/0]).
-type profile_node() :: {profile_node,
integer(),
protocol@runtime:call_frame(),
gleam@option:option(integer()),
gleam@option:option(list(integer())),
gleam@option:option(binary()),
gleam@option:option(list(position_tick_info()))}.
-type profile() :: {profile,
list(profile_node()),
float(),
float(),
gleam@option:option(list(integer())),
gleam@option:option(list(integer()))}.
-type position_tick_info() :: {position_tick_info, integer(), integer()}.
-type coverage_range() :: {coverage_range, integer(), integer(), integer()}.
-type function_coverage() :: {function_coverage,
binary(),
list(coverage_range()),
boolean()}.
-type script_coverage() :: {script_coverage,
protocol@runtime:script_id(),
binary(),
list(function_coverage())}.
-type get_best_effort_coverage_response() :: {get_best_effort_coverage_response,
list(script_coverage())}.
-type start_precise_coverage_response() :: {start_precise_coverage_response,
float()}.
-type stop_response() :: {stop_response, profile()}.
-type take_precise_coverage_response() :: {take_precise_coverage_response,
list(script_coverage()),
float()}.
-spec encode__position_tick_info(position_tick_info()) -> gleam@json:json().
encode__position_tick_info(Value__) ->
gleam@json:object(
[{<<"line"/utf8>>, gleam@json:int(erlang:element(2, Value__))},
{<<"ticks"/utf8>>, gleam@json:int(erlang:element(3, Value__))}]
).
-spec encode__profile_node(profile_node()) -> gleam@json:json().
encode__profile_node(Value__) ->
gleam@json:object(
begin
_pipe = [{<<"id"/utf8>>, gleam@json:int(erlang:element(2, Value__))},
{<<"callFrame"/utf8>>,
protocol@runtime:encode__call_frame(
erlang:element(3, Value__)
)}],
_pipe@1 = chrobot@internal@utils:add_optional(
_pipe,
erlang:element(4, Value__),
fun(Inner_value__) ->
{<<"hitCount"/utf8>>, gleam@json:int(Inner_value__)}
end
),
_pipe@2 = chrobot@internal@utils:add_optional(
_pipe@1,
erlang:element(5, Value__),
fun(Inner_value__@1) ->
{<<"children"/utf8>>,
gleam@json:array(Inner_value__@1, fun gleam@json:int/1)}
end
),
_pipe@3 = chrobot@internal@utils:add_optional(
_pipe@2,
erlang:element(6, Value__),
fun(Inner_value__@2) ->
{<<"deoptReason"/utf8>>, gleam@json:string(Inner_value__@2)}
end
),
chrobot@internal@utils:add_optional(
_pipe@3,
erlang:element(7, Value__),
fun(Inner_value__@3) ->
{<<"positionTicks"/utf8>>,
gleam@json:array(
Inner_value__@3,
fun encode__position_tick_info/1
)}
end
)
end
).
-spec encode__profile(profile()) -> gleam@json:json().
encode__profile(Value__) ->
gleam@json:object(
begin
_pipe = [{<<"nodes"/utf8>>,
gleam@json:array(
erlang:element(2, Value__),
fun encode__profile_node/1
)},
{<<"startTime"/utf8>>,
gleam@json:float(erlang:element(3, Value__))},
{<<"endTime"/utf8>>,
gleam@json:float(erlang:element(4, Value__))}],
_pipe@1 = chrobot@internal@utils:add_optional(
_pipe,
erlang:element(5, Value__),
fun(Inner_value__) ->
{<<"samples"/utf8>>,
gleam@json:array(Inner_value__, fun gleam@json:int/1)}
end
),
chrobot@internal@utils:add_optional(
_pipe@1,
erlang:element(6, Value__),
fun(Inner_value__@1) ->
{<<"timeDeltas"/utf8>>,
gleam@json:array(Inner_value__@1, fun gleam@json:int/1)}
end
)
end
).
-spec decode__position_tick_info(gleam@dynamic:dynamic_()) -> {ok,
position_tick_info()} |
{error, list(gleam@dynamic:decode_error())}.
decode__position_tick_info(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"line"/utf8>>, fun gleam@dynamic:int/1))(Value__),
fun(Line) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"ticks"/utf8>>, fun gleam@dynamic:int/1))(
Value__
),
fun(Ticks) -> {ok, {position_tick_info, Line, Ticks}} end
)
end
).
-spec decode__profile_node(gleam@dynamic:dynamic_()) -> {ok, profile_node()} |
{error, list(gleam@dynamic:decode_error())}.
decode__profile_node(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:int/1))(Value__),
fun(Id) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"callFrame"/utf8>>,
fun protocol@runtime:decode__call_frame/1
))(Value__),
fun(Call_frame) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"hitCount"/utf8>>,
fun gleam@dynamic:int/1
))(Value__),
fun(Hit_count) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"children"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:int/1)
))(Value__),
fun(Children) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"deoptReason"/utf8>>,
fun gleam@dynamic:string/1
))(Value__),
fun(Deopt_reason) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"positionTicks"/utf8>>,
gleam@dynamic:list(
fun decode__position_tick_info/1
)
))(Value__),
fun(Position_ticks) ->
{ok,
{profile_node,
Id,
Call_frame,
Hit_count,
Children,
Deopt_reason,
Position_ticks}}
end
)
end
)
end
)
end
)
end
)
end
).
-spec decode__profile(gleam@dynamic:dynamic_()) -> {ok, profile()} |
{error, list(gleam@dynamic:decode_error())}.
decode__profile(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"nodes"/utf8>>,
gleam@dynamic:list(fun decode__profile_node/1)
))(Value__),
fun(Nodes) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"startTime"/utf8>>,
fun gleam@dynamic:float/1
))(Value__),
fun(Start_time) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"endTime"/utf8>>,
fun gleam@dynamic:float/1
))(Value__),
fun(End_time) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"samples"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:int/1)
))(Value__),
fun(Samples) ->
gleam@result:'try'(
(gleam@dynamic:optional_field(
<<"timeDeltas"/utf8>>,
gleam@dynamic:list(
fun gleam@dynamic:int/1
)
))(Value__),
fun(Time_deltas) ->
{ok,
{profile,
Nodes,
Start_time,
End_time,
Samples,
Time_deltas}}
end
)
end
)
end
)
end
)
end
).
-spec encode__coverage_range(coverage_range()) -> gleam@json:json().
encode__coverage_range(Value__) ->
gleam@json:object(
[{<<"startOffset"/utf8>>, gleam@json:int(erlang:element(2, Value__))},
{<<"endOffset"/utf8>>, gleam@json:int(erlang:element(3, Value__))},
{<<"count"/utf8>>, gleam@json:int(erlang:element(4, Value__))}]
).
-spec decode__coverage_range(gleam@dynamic:dynamic_()) -> {ok, coverage_range()} |
{error, list(gleam@dynamic:decode_error())}.
decode__coverage_range(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"startOffset"/utf8>>, fun gleam@dynamic:int/1))(
Value__
),
fun(Start_offset) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"endOffset"/utf8>>,
fun gleam@dynamic:int/1
))(Value__),
fun(End_offset) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"count"/utf8>>,
fun gleam@dynamic:int/1
))(Value__),
fun(Count) ->
{ok,
{coverage_range,
Start_offset,
End_offset,
Count}}
end
)
end
)
end
).
-spec encode__function_coverage(function_coverage()) -> gleam@json:json().
encode__function_coverage(Value__) ->
gleam@json:object(
[{<<"functionName"/utf8>>,
gleam@json:string(erlang:element(2, Value__))},
{<<"ranges"/utf8>>,
gleam@json:array(
erlang:element(3, Value__),
fun encode__coverage_range/1
)},
{<<"isBlockCoverage"/utf8>>,
gleam@json:bool(erlang:element(4, Value__))}]
).
-spec decode__function_coverage(gleam@dynamic:dynamic_()) -> {ok,
function_coverage()} |
{error, list(gleam@dynamic:decode_error())}.
decode__function_coverage(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"functionName"/utf8>>,
fun gleam@dynamic:string/1
))(Value__),
fun(Function_name) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"ranges"/utf8>>,
gleam@dynamic:list(fun decode__coverage_range/1)
))(Value__),
fun(Ranges) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"isBlockCoverage"/utf8>>,
fun gleam@dynamic:bool/1
))(Value__),
fun(Is_block_coverage) ->
{ok,
{function_coverage,
Function_name,
Ranges,
Is_block_coverage}}
end
)
end
)
end
).
-spec encode__script_coverage(script_coverage()) -> gleam@json:json().
encode__script_coverage(Value__) ->
gleam@json:object(
[{<<"scriptId"/utf8>>,
protocol@runtime:encode__script_id(erlang:element(2, Value__))},
{<<"url"/utf8>>, gleam@json:string(erlang:element(3, Value__))},
{<<"functions"/utf8>>,
gleam@json:array(
erlang:element(4, Value__),
fun encode__function_coverage/1
)}]
).
-spec decode__script_coverage(gleam@dynamic:dynamic_()) -> {ok,
script_coverage()} |
{error, list(gleam@dynamic:decode_error())}.
decode__script_coverage(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"scriptId"/utf8>>,
fun protocol@runtime:decode__script_id/1
))(Value__),
fun(Script_id) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"url"/utf8>>, fun gleam@dynamic:string/1))(
Value__
),
fun(Url) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"functions"/utf8>>,
gleam@dynamic:list(fun decode__function_coverage/1)
))(Value__),
fun(Functions) ->
{ok, {script_coverage, Script_id, Url, Functions}}
end
)
end
)
end
).
-spec decode__get_best_effort_coverage_response(gleam@dynamic:dynamic_()) -> {ok,
get_best_effort_coverage_response()} |
{error, list(gleam@dynamic:decode_error())}.
decode__get_best_effort_coverage_response(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"result"/utf8>>,
gleam@dynamic:list(fun decode__script_coverage/1)
))(Value__),
fun(Result) -> {ok, {get_best_effort_coverage_response, Result}} end
).
-spec decode__start_precise_coverage_response(gleam@dynamic:dynamic_()) -> {ok,
start_precise_coverage_response()} |
{error, list(gleam@dynamic:decode_error())}.
decode__start_precise_coverage_response(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"timestamp"/utf8>>, fun gleam@dynamic:float/1))(
Value__
),
fun(Timestamp) -> {ok, {start_precise_coverage_response, Timestamp}} end
).
-spec decode__stop_response(gleam@dynamic:dynamic_()) -> {ok, stop_response()} |
{error, list(gleam@dynamic:decode_error())}.
decode__stop_response(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(<<"profile"/utf8>>, fun decode__profile/1))(
Value__
),
fun(Profile) -> {ok, {stop_response, Profile}} end
).
-spec decode__take_precise_coverage_response(gleam@dynamic:dynamic_()) -> {ok,
take_precise_coverage_response()} |
{error, list(gleam@dynamic:decode_error())}.
decode__take_precise_coverage_response(Value__) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"result"/utf8>>,
gleam@dynamic:list(fun decode__script_coverage/1)
))(Value__),
fun(Result) ->
gleam@result:'try'(
(gleam@dynamic:field(
<<"timestamp"/utf8>>,
fun gleam@dynamic:float/1
))(Value__),
fun(Timestamp) ->
{ok, {take_precise_coverage_response, Result, Timestamp}}
end
)
end
).
-spec disable(fun((binary(), gleam@option:option(any())) -> ADQP)) -> ADQP.
disable(Callback__) ->
Callback__(<<"Profiler.disable"/utf8>>, none).
-spec enable(fun((binary(), gleam@option:option(any())) -> ADQT)) -> ADQT.
enable(Callback__) ->
Callback__(<<"Profiler.enable"/utf8>>, none).
-spec get_best_effort_coverage(
fun((binary(), gleam@option:option(any())) -> {ok, gleam@dynamic:dynamic_()} |
{error, chrome:request_error()})
) -> {ok, get_best_effort_coverage_response()} | {error, chrome:request_error()}.
get_best_effort_coverage(Callback__) ->
gleam@result:'try'(
Callback__(<<"Profiler.getBestEffortCoverage"/utf8>>, none),
fun(Result__) ->
_pipe = decode__get_best_effort_coverage_response(Result__),
gleam@result:replace_error(_pipe, protocol_error)
end
).
-spec set_sampling_interval(
fun((binary(), gleam@option:option(gleam@json:json())) -> ADRI),
integer()
) -> ADRI.
set_sampling_interval(Callback__, Interval) ->
Callback__(
<<"Profiler.setSamplingInterval"/utf8>>,
{some,
gleam@json:object([{<<"interval"/utf8>>, gleam@json:int(Interval)}])}
).
-spec start(fun((binary(), gleam@option:option(any())) -> ADRN)) -> ADRN.
start(Callback__) ->
Callback__(<<"Profiler.start"/utf8>>, none).
-spec start_precise_coverage(
fun((binary(), gleam@option:option(gleam@json:json())) -> {ok,
gleam@dynamic:dynamic_()} |
{error, chrome:request_error()}),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean())
) -> {ok, start_precise_coverage_response()} | {error, chrome:request_error()}.
start_precise_coverage(
Callback__,
Call_count,
Detailed,
Allow_triggered_updates
) ->
gleam@result:'try'(
Callback__(
<<"Profiler.startPreciseCoverage"/utf8>>,
{some,
gleam@json:object(
begin
_pipe = [],
_pipe@1 = chrobot@internal@utils:add_optional(
_pipe,
Call_count,
fun(Inner_value__) ->
{<<"callCount"/utf8>>,
gleam@json:bool(Inner_value__)}
end
),
_pipe@2 = chrobot@internal@utils:add_optional(
_pipe@1,
Detailed,
fun(Inner_value__@1) ->
{<<"detailed"/utf8>>,
gleam@json:bool(Inner_value__@1)}
end
),
chrobot@internal@utils:add_optional(
_pipe@2,
Allow_triggered_updates,
fun(Inner_value__@2) ->
{<<"allowTriggeredUpdates"/utf8>>,
gleam@json:bool(Inner_value__@2)}
end
)
end
)}
),
fun(Result__) ->
_pipe@3 = decode__start_precise_coverage_response(Result__),
gleam@result:replace_error(_pipe@3, protocol_error)
end
).
-spec stop(
fun((binary(), gleam@option:option(any())) -> {ok, gleam@dynamic:dynamic_()} |
{error, chrome:request_error()})
) -> {ok, stop_response()} | {error, chrome:request_error()}.
stop(Callback__) ->
gleam@result:'try'(
Callback__(<<"Profiler.stop"/utf8>>, none),
fun(Result__) -> _pipe = decode__stop_response(Result__),
gleam@result:replace_error(_pipe, protocol_error) end
).
-spec stop_precise_coverage(fun((binary(), gleam@option:option(any())) -> ADSU)) -> ADSU.
stop_precise_coverage(Callback__) ->
Callback__(<<"Profiler.stopPreciseCoverage"/utf8>>, none).
-spec take_precise_coverage(
fun((binary(), gleam@option:option(any())) -> {ok, gleam@dynamic:dynamic_()} |
{error, chrome:request_error()})
) -> {ok, take_precise_coverage_response()} | {error, chrome:request_error()}.
take_precise_coverage(Callback__) ->
gleam@result:'try'(
Callback__(<<"Profiler.takePreciseCoverage"/utf8>>, none),
fun(Result__) ->
_pipe = decode__take_precise_coverage_response(Result__),
gleam@result:replace_error(_pipe, protocol_error)
end
).