2021-04-02 10:34:07 -05:00
|
|
|
@startuml
|
2021-04-06 16:14:25 -05:00
|
|
|
title: Metrics Types and Scopes in SyncAction
|
2021-04-02 10:34:07 -05:00
|
|
|
|
|
|
|
Participant Input as i
|
|
|
|
Participant Thread as t
|
|
|
|
Participant Action as a
|
|
|
|
Participant Activity as at
|
|
|
|
Participant "Native\nDriver" as d
|
|
|
|
|
|
|
|
== acquire input ==
|
|
|
|
|
|
|
|
group TIMER read-input
|
|
|
|
t -> i : get segment(stride)
|
|
|
|
activate i
|
|
|
|
t <- i : <cycle segment>[stride]
|
|
|
|
deactivate i
|
|
|
|
end
|
|
|
|
|
|
|
|
group BLOCK striderate
|
|
|
|
t -> t: block until\nunthrottled
|
|
|
|
end
|
|
|
|
|
|
|
|
group TIMER strides
|
|
|
|
|
|
|
|
loop over cycle values in segment
|
|
|
|
|
|
|
|
group BLOCK cyclerate
|
|
|
|
t -> t: block until\nunthrottled
|
|
|
|
end
|
|
|
|
|
|
|
|
group TIMER cycle
|
|
|
|
t -> a : runCycle(cycle)
|
|
|
|
activate a
|
|
|
|
|
|
|
|
group TIMER bind
|
|
|
|
a -> at: bind
|
|
|
|
activate at
|
|
|
|
|
|
|
|
at -> d: ... [if needed]
|
|
|
|
at <- d: ...
|
|
|
|
a <- at: op
|
|
|
|
deactivate at
|
|
|
|
end
|
|
|
|
|
|
|
|
group HISTOGRAM tries
|
|
|
|
loop over tries
|
2021-04-06 16:14:25 -05:00
|
|
|
== for blocking APIs ==
|
2021-04-02 10:34:07 -05:00
|
|
|
|
2021-04-06 16:14:25 -05:00
|
|
|
group TIMERS\nexecute\nresult\nresult-success[result-success\nwhen no error]
|
|
|
|
a -> d: execute
|
2021-04-02 10:34:07 -05:00
|
|
|
activate d
|
2021-04-06 16:14:25 -05:00
|
|
|
a <- d: result
|
2021-04-02 10:34:07 -05:00
|
|
|
deactivate d
|
|
|
|
end
|
2021-04-06 16:14:25 -05:00
|
|
|
note right
|
|
|
|
When the underlying native
|
|
|
|
driver does not expose an async
|
|
|
|
API, execute and result must be updated
|
|
|
|
with the same measurements.
|
|
|
|
|
|
|
|
result-success contains the
|
|
|
|
same measurements as result,
|
|
|
|
but ONLY for non-exceptional
|
|
|
|
native driver results.
|
|
|
|
end note
|
|
|
|
|
2021-04-02 10:34:07 -05:00
|
|
|
|
2021-04-06 16:14:25 -05:00
|
|
|
== for async APIs ==
|
|
|
|
|
|
|
|
group TIMER execute
|
2021-04-02 10:34:07 -05:00
|
|
|
a -> d: execute
|
|
|
|
activate d
|
2021-04-06 16:14:25 -05:00
|
|
|
d -> future **: create
|
2021-04-02 10:34:07 -05:00
|
|
|
a <- d: future
|
|
|
|
deactivate d
|
|
|
|
end
|
|
|
|
|
2021-04-06 16:14:25 -05:00
|
|
|
note right
|
|
|
|
When the underlying native
|
|
|
|
driver DOES expose an async
|
|
|
|
API, execute measures
|
|
|
|
submission of an op to the
|
|
|
|
native driver, while result
|
|
|
|
measures the completion
|
|
|
|
of the op.
|
|
|
|
|
|
|
|
result-success contains the
|
|
|
|
same measurements as result,
|
|
|
|
but ONLY for non-exceptional
|
|
|
|
native driver results.
|
|
|
|
end note
|
|
|
|
|
|
|
|
group TIMERS\nresult\nresult-success[result-success\nwhen no error]
|
|
|
|
a -> future: get
|
|
|
|
activate future
|
|
|
|
a <- future: result
|
|
|
|
deactivate future
|
|
|
|
end
|
|
|
|
|
2021-04-02 10:34:07 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
t <- a : result
|
|
|
|
deactivate a
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end # strides
|
|
|
|
|
|
|
|
@enduml
|