mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
impl-node: refactor gettime
This commit is contained in:
parent
5e6dc48013
commit
4df2982ba1
1 changed files with 14 additions and 16 deletions
|
|
@ -1078,16 +1078,21 @@ static void dump_states(struct pw_impl_node *driver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline uint64_t get_time_ns(struct spa_system *system)
|
||||||
|
{
|
||||||
|
struct timespec ts;
|
||||||
|
spa_system_clock_gettime(system, CLOCK_MONOTONIC, &ts);
|
||||||
|
return SPA_TIMESPEC_TO_NSEC(&ts);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int resume_node(struct pw_impl_node *this, int status)
|
static inline int resume_node(struct pw_impl_node *this, int status)
|
||||||
{
|
{
|
||||||
struct pw_node_target *t;
|
struct pw_node_target *t;
|
||||||
struct timespec ts;
|
|
||||||
struct pw_node_activation *activation = this->rt.activation;
|
struct pw_node_activation *activation = this->rt.activation;
|
||||||
struct spa_system *data_system = this->context->data_system;
|
struct spa_system *data_system = this->context->data_system;
|
||||||
uint64_t nsec;
|
uint64_t nsec;
|
||||||
|
|
||||||
spa_system_clock_gettime(data_system, CLOCK_MONOTONIC, &ts);
|
nsec = get_time_ns(data_system);
|
||||||
nsec = SPA_TIMESPEC_TO_NSEC(&ts);
|
|
||||||
activation->status = PW_NODE_ACTIVATION_FINISHED;
|
activation->status = PW_NODE_ACTIVATION_FINISHED;
|
||||||
activation->finish_time = nsec;
|
activation->finish_time = nsec;
|
||||||
|
|
||||||
|
|
@ -1124,15 +1129,13 @@ static inline void calculate_stats(struct pw_impl_node *this, struct pw_node_ac
|
||||||
static inline int process_node(void *data)
|
static inline int process_node(void *data)
|
||||||
{
|
{
|
||||||
struct pw_impl_node *this = data;
|
struct pw_impl_node *this = data;
|
||||||
struct timespec ts;
|
struct pw_impl_port *p;
|
||||||
struct pw_impl_port *p;
|
|
||||||
struct pw_node_activation *a = this->rt.activation;
|
struct pw_node_activation *a = this->rt.activation;
|
||||||
struct spa_system *data_system = this->context->data_system;
|
struct spa_system *data_system = this->context->data_system;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
spa_system_clock_gettime(data_system, CLOCK_MONOTONIC, &ts);
|
|
||||||
a->status = PW_NODE_ACTIVATION_AWAKE;
|
a->status = PW_NODE_ACTIVATION_AWAKE;
|
||||||
a->awake_time = SPA_TIMESPEC_TO_NSEC(&ts);
|
a->awake_time = get_time_ns(data_system);
|
||||||
|
|
||||||
pw_log_trace_fp("%p: %s process %"PRIu64, this, this->name, a->awake_time);
|
pw_log_trace_fp("%p: %s process %"PRIu64, this, this->name, a->awake_time);
|
||||||
|
|
||||||
|
|
@ -1160,10 +1163,9 @@ static inline int process_node(void *data)
|
||||||
a->state[0].status = status;
|
a->state[0].status = status;
|
||||||
|
|
||||||
if (SPA_UNLIKELY(this == this->driver_node && !this->exported)) {
|
if (SPA_UNLIKELY(this == this->driver_node && !this->exported)) {
|
||||||
spa_system_clock_gettime(data_system, CLOCK_MONOTONIC, &ts);
|
|
||||||
a->status = PW_NODE_ACTIVATION_FINISHED;
|
a->status = PW_NODE_ACTIVATION_FINISHED;
|
||||||
a->signal_time = a->finish_time;
|
a->signal_time = a->finish_time;
|
||||||
a->finish_time = SPA_TIMESPEC_TO_NSEC(&ts);
|
a->finish_time = get_time_ns(data_system);
|
||||||
|
|
||||||
/* calculate CPU time */
|
/* calculate CPU time */
|
||||||
calculate_stats(this, a);
|
calculate_stats(this, a);
|
||||||
|
|
@ -1655,6 +1657,8 @@ static int node_ready(void *data, int status)
|
||||||
{
|
{
|
||||||
struct pw_impl_node *node = data, *reposition_node = NULL;
|
struct pw_impl_node *node = data, *reposition_node = NULL;
|
||||||
struct pw_impl_node *driver = node->driver_node;
|
struct pw_impl_node *driver = node->driver_node;
|
||||||
|
struct pw_node_activation *a = node->rt.activation;
|
||||||
|
struct spa_system *data_system = node->context->data_system;
|
||||||
struct pw_node_target *t;
|
struct pw_node_target *t;
|
||||||
struct pw_impl_port *p;
|
struct pw_impl_port *p;
|
||||||
|
|
||||||
|
|
@ -1671,7 +1675,6 @@ static int node_ready(void *data, int status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SPA_UNLIKELY(node == driver)) {
|
if (SPA_UNLIKELY(node == driver)) {
|
||||||
struct pw_node_activation *a = node->rt.activation;
|
|
||||||
struct pw_node_activation_state *state = &a->state[0];
|
struct pw_node_activation_state *state = &a->state[0];
|
||||||
int sync_type, all_ready, update_sync, target_sync;
|
int sync_type, all_ready, update_sync, target_sync;
|
||||||
uint32_t owner[2], reposition_owner;
|
uint32_t owner[2], reposition_owner;
|
||||||
|
|
@ -1756,13 +1759,8 @@ again:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!node->driver) {
|
if (!node->driver) {
|
||||||
struct timespec ts;
|
|
||||||
struct pw_node_activation *a = node->rt.activation;
|
|
||||||
struct spa_system *data_system = node->context->data_system;
|
|
||||||
|
|
||||||
spa_system_clock_gettime(data_system, CLOCK_MONOTONIC, &ts);
|
|
||||||
a->status = PW_NODE_ACTIVATION_AWAKE;
|
a->status = PW_NODE_ACTIVATION_AWAKE;
|
||||||
a->signal_time = a->awake_time = SPA_TIMESPEC_TO_NSEC(&ts);
|
a->signal_time = a->awake_time = get_time_ns(data_system);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & SPA_STATUS_HAVE_DATA) {
|
if (status & SPA_STATUS_HAVE_DATA) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue