mirror of
https://github.com/libretro/RetroArch
synced 2025-02-20 15:40:44 +00:00
(data runloop) Start creating separate message queue for data runloop
This commit is contained in:
parent
77dd981d21
commit
11d75d088c
@ -108,27 +108,29 @@ void msg_queue_push(msg_queue_t *queue, const char *msg,
|
||||
if (!queue || queue->ptr >= queue->size)
|
||||
return;
|
||||
|
||||
new_elem = (struct queue_elem*)calloc(1, sizeof(struct queue_elem));
|
||||
new_elem = (struct queue_elem*)
|
||||
calloc(1, sizeof(struct queue_elem));
|
||||
if (!new_elem)
|
||||
return;
|
||||
|
||||
new_elem->prio = prio;
|
||||
new_elem->duration = duration;
|
||||
new_elem->msg = msg ? strdup(msg) : NULL;
|
||||
new_elem->prio = prio;
|
||||
new_elem->duration = duration;
|
||||
new_elem->msg = msg ? strdup(msg) : NULL;
|
||||
|
||||
queue->elems[queue->ptr] = new_elem;
|
||||
tmp_ptr = queue->ptr++;
|
||||
queue->elems[queue->ptr] = new_elem;
|
||||
|
||||
tmp_ptr = queue->ptr++;
|
||||
|
||||
while (tmp_ptr > 1)
|
||||
{
|
||||
struct queue_elem *parent = queue->elems[tmp_ptr >> 1];
|
||||
struct queue_elem *child = queue->elems[tmp_ptr];
|
||||
struct queue_elem *parent = queue->elems[tmp_ptr >> 1];
|
||||
struct queue_elem *child = queue->elems[tmp_ptr];
|
||||
|
||||
if (child->prio <= parent->prio)
|
||||
break;
|
||||
|
||||
queue->elems[tmp_ptr >> 1] = child;
|
||||
queue->elems[tmp_ptr] = parent;
|
||||
queue->elems[tmp_ptr] = parent;
|
||||
|
||||
tmp_ptr >>= 1;
|
||||
}
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <errno.h>
|
||||
#include "general.h"
|
||||
#include "runloop.h"
|
||||
#include "runloop_data.h"
|
||||
#include "retroarch.h"
|
||||
#include "performance.h"
|
||||
#include "input/keyboard_line.h"
|
||||
@ -149,6 +150,7 @@ static void video_frame(const void *data, unsigned width,
|
||||
recording_dump_frame(data, width, height, pitch);
|
||||
|
||||
msg = rarch_main_msg_queue_pull();
|
||||
|
||||
driver->current_msg = msg;
|
||||
|
||||
if (video_frame_filter(data, width, height, pitch,
|
||||
|
@ -889,7 +889,12 @@ static void rarch_main_iterate_linefeed_overlay(void)
|
||||
const char *rarch_main_msg_queue_pull(void)
|
||||
{
|
||||
runloop_t *runloop = rarch_main_get_ptr();
|
||||
return msg_queue_pull(runloop->msg_queue);
|
||||
const char *msg = rarch_main_data_msg_queue_pull();
|
||||
|
||||
if (!msg && runloop)
|
||||
msg = msg_queue_pull(runloop->msg_queue);
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
void rarch_main_msg_queue_push(const char *msg, unsigned prio, unsigned duration,
|
||||
|
@ -110,6 +110,7 @@ enum
|
||||
|
||||
typedef struct data_runloop
|
||||
{
|
||||
msg_queue_t *msg_queue;
|
||||
#ifdef HAVE_NETWORKING
|
||||
http_handle_t http;
|
||||
#endif
|
||||
@ -163,7 +164,6 @@ static int rarch_main_data_http_iterate_transfer(http_handle_t *http)
|
||||
int percent = 0;
|
||||
if (!net_http_update(http->handle, &pos, &tot))
|
||||
{
|
||||
#if 0
|
||||
char msg[PATH_MAX_LENGTH];
|
||||
|
||||
if(tot != 0)
|
||||
@ -171,14 +171,11 @@ static int rarch_main_data_http_iterate_transfer(http_handle_t *http)
|
||||
else
|
||||
percent=0;
|
||||
|
||||
RARCH_LOG("Download progress: %.d%% \r", percent);
|
||||
|
||||
if(percent > 0)
|
||||
if (percent > 0)
|
||||
{
|
||||
snprintf(msg, sizeof(msg), "Download progress: %d%%", percent);
|
||||
rarch_main_msg_queue_push(msg, 1, 10, true);
|
||||
rarch_main_data_msg_queue_push(DATA_TYPE_MSG, msg, NULL, 1, 10, true);
|
||||
}
|
||||
#endif
|
||||
|
||||
return -1;
|
||||
}
|
||||
@ -872,6 +869,9 @@ void rarch_main_data_deinit(void)
|
||||
if (!data_runloop)
|
||||
return;
|
||||
|
||||
if (data_runloop->msg_queue)
|
||||
msg_queue_free(data_runloop->msg_queue);
|
||||
|
||||
#ifdef HAVE_THREADS
|
||||
if (data_runloop->thread_inited)
|
||||
{
|
||||
@ -1036,6 +1036,14 @@ void rarch_main_data_init_queues(void)
|
||||
rarch_assert(data_runloop->nbio.msg_queue = msg_queue_new(8));
|
||||
if (!data_runloop->nbio.image.msg_queue)
|
||||
rarch_assert(data_runloop->nbio.image.msg_queue = msg_queue_new(8));
|
||||
if (!data_runloop->msg_queue)
|
||||
rarch_assert(data_runloop->msg_queue = msg_queue_new(8));
|
||||
}
|
||||
|
||||
const char *rarch_main_data_msg_queue_pull(void)
|
||||
{
|
||||
data_runloop_t *runloop = (data_runloop_t*)rarch_main_data_get_ptr();
|
||||
return msg_queue_pull(runloop->msg_queue);
|
||||
}
|
||||
|
||||
void rarch_main_data_msg_queue_push(unsigned type,
|
||||
@ -1046,27 +1054,35 @@ void rarch_main_data_msg_queue_push(unsigned type,
|
||||
msg_queue_t *queue = NULL;
|
||||
data_runloop_t *data_runloop = (data_runloop_t*)rarch_main_data_get_ptr();
|
||||
|
||||
snprintf(new_msg, sizeof(new_msg), "%s|%s", msg, msg2);
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case DATA_TYPE_NONE:
|
||||
break;
|
||||
case DATA_TYPE_FILE:
|
||||
queue = data_runloop->nbio.msg_queue;
|
||||
snprintf(new_msg, sizeof(new_msg), "%s|%s", msg, msg2);
|
||||
break;
|
||||
case DATA_TYPE_IMAGE:
|
||||
queue = data_runloop->nbio.image.msg_queue;
|
||||
snprintf(new_msg, sizeof(new_msg), "%s|%s", msg, msg2);
|
||||
break;
|
||||
#ifdef HAVE_NETWORKING
|
||||
case DATA_TYPE_HTTP:
|
||||
queue = data_runloop->http.msg_queue;
|
||||
snprintf(new_msg, sizeof(new_msg), "%s|%s", msg, msg2);
|
||||
break;
|
||||
#endif
|
||||
#ifdef HAVE_OVERLAY
|
||||
case DATA_TYPE_OVERLAY:
|
||||
snprintf(new_msg, sizeof(new_msg), "%s|%s", msg, msg2);
|
||||
break;
|
||||
#endif
|
||||
case DATA_TYPE_MSG:
|
||||
if (data_runloop->thread_inited)
|
||||
return;
|
||||
queue = data_runloop->msg_queue;
|
||||
snprintf(new_msg, sizeof(new_msg), "%s", msg);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!queue)
|
||||
|
@ -28,6 +28,7 @@ extern "C" {
|
||||
enum runloop_data_type
|
||||
{
|
||||
DATA_TYPE_NONE = 0,
|
||||
DATA_TYPE_MSG,
|
||||
DATA_TYPE_FILE,
|
||||
DATA_TYPE_IMAGE,
|
||||
DATA_TYPE_HTTP,
|
||||
@ -40,6 +41,8 @@ void rarch_main_data_msg_queue_push(unsigned type,
|
||||
const char *msg, const char *msg2,
|
||||
unsigned prio, unsigned duration, bool flush);
|
||||
|
||||
const char *rarch_main_data_msg_queue_pull(void);
|
||||
|
||||
void rarch_main_data_clear_state(void);
|
||||
|
||||
void rarch_main_data_iterate(void);
|
||||
|
Loading…
x
Reference in New Issue
Block a user