node: improve scheduling

This commit is contained in:
Wim Taymans 2018-07-02 12:14:23 +02:00
parent 6b10b0784f
commit 0122e15611
3 changed files with 21 additions and 27 deletions

View file

@ -646,9 +646,8 @@ static void node_event(void *data, struct spa_event *event)
spa_hook_list_call(&node->listener_list, struct pw_node_events, event, event); spa_hook_list_call(&node->listener_list, struct pw_node_events, event, event);
} }
static void node_process(void *data, int status) void pw_node_process(struct pw_node *node, int status)
{ {
struct pw_node *node = data;
struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this); struct impl *impl = SPA_CONTAINER_OF(node, struct impl, this);
pw_log_trace("node %p: process driver:%d exported:%d", node, node->driver, node->exported); pw_log_trace("node %p: process driver:%d exported:%d", node, node->driver, node->exported);
@ -656,7 +655,6 @@ static void node_process(void *data, int status)
spa_hook_list_call(&node->listener_list, struct pw_node_events, process); spa_hook_list_call(&node->listener_list, struct pw_node_events, process);
if (node->driver) { if (node->driver) {
if (!node->exported) {
if (node->rt.driver->state->pending == 0 || !node->remote) { if (node->rt.driver->state->pending == 0 || !node->remote) {
struct timespec ts; struct timespec ts;
struct pw_driver_quantum *q; struct pw_driver_quantum *q;
@ -673,11 +671,16 @@ static void node_process(void *data, int status)
else else
spa_graph_node_trigger(&node->rt.node); spa_graph_node_trigger(&node->rt.node);
} }
}
else else
spa_graph_node_trigger(&node->rt.node); spa_graph_node_trigger(&node->rt.node);
} }
static void node_process(void *data, int status)
{
struct pw_node *node = data;
pw_node_process(node, status);
}
static void node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id) static void node_reuse_buffer(void *data, uint32_t port_id, uint32_t buffer_id)
{ {
struct pw_node *node = data; struct pw_node *node = data;

View file

@ -620,9 +620,9 @@ int pw_node_initialized(struct pw_node *node);
int pw_node_set_driver(struct pw_node *node, struct pw_node *driver); int pw_node_set_driver(struct pw_node *node, struct pw_node *driver);
/** Activate a link \memberof pw_link void pw_node_process(struct pw_node *node, int status);
* Starts the negotiation of formats and buffers on \a link and then
* starts data streaming */ /** starts streaming on a link */
int pw_link_activate(struct pw_link *link); int pw_link_activate(struct pw_link *link);
/** Deactivate a link \memberof pw_link */ /** Deactivate a link \memberof pw_link */

View file

@ -504,14 +504,6 @@ static void unhandle_socket(struct node_data *data)
do_remove_source, 1, NULL, 0, true, data); do_remove_source, 1, NULL, 0, true, data);
} }
static void node_process(void *data)
{
struct node_data *d = data;
uint64_t cmd = 1;
pw_log_trace("remote %p: send process", data);
write(d->rtwritefd, &cmd, 8);
}
static void node_finish(void *data) static void node_finish(void *data)
{ {
struct node_data *d = data; struct node_data *d = data;
@ -1334,7 +1326,6 @@ static const struct pw_node_events node_events = {
.destroy = node_destroy, .destroy = node_destroy,
.info_changed = node_info_changed, .info_changed = node_info_changed,
.active_changed = node_active_changed, .active_changed = node_active_changed,
.process = node_process,
.finish = node_finish, .finish = node_finish,
}; };