red-qxl: Better encapsulation of device display information

Do not expose multiple functions to fetch different parts of
internal structure.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Snir Sheriber <ssheribe@redhat.com>
This commit is contained in:
Frediano Ziglio 2019-07-05 16:33:47 +01:00
parent fdf104fe28
commit 4f5c342eea
3 changed files with 22 additions and 33 deletions

View File

@ -809,22 +809,30 @@ void spice_qxl_set_device_info(QXLInstance *instance,
reds_send_device_display_info(red_qxl_get_server(instance->st));
}
const char* red_qxl_get_device_address(const QXLInstance *qxl)
uint32_t red_qxl_marshall_device_display_info(const QXLInstance *qxl, SpiceMarshaller *m)
{
const QXLState *qxl_state = qxl->st;
return qxl_state->device_address;
}
uint32_t device_count = 0;
const char *const device_address = qxl_state->device_address;
const size_t device_address_len = strlen(device_address) + 1;
const uint32_t* red_qxl_get_device_display_ids(const QXLInstance *qxl)
{
const QXLState *qxl_state = qxl->st;
return qxl_state->device_display_ids;
}
if (device_address_len == 1) {
return 0;
}
for (size_t i = 0; i < qxl_state->monitors_count; ++i) {
spice_marshaller_add_uint32(m, qxl->id);
spice_marshaller_add_uint32(m, i);
spice_marshaller_add_uint32(m, qxl_state->device_display_ids[i]);
spice_marshaller_add_uint32(m, device_address_len);
spice_marshaller_add(m, (void*) device_address, device_address_len);
++device_count;
size_t red_qxl_get_monitors_count(const QXLInstance *qxl)
{
const QXLState *qxl_state = qxl->st;
return qxl_state->monitors_count;
g_debug(" (qxl) channel_id: %u monitor_id: %zu, device_address: %s, "
"device_display_id: %u",
qxl->id, i, device_address,
qxl_state->device_display_ids[i]);
}
return device_count;
}
void red_qxl_init(RedsState *reds, QXLInstance *qxl)

View File

@ -40,9 +40,7 @@ void red_qxl_put_gl_scanout(QXLInstance *qxl, SpiceMsgDisplayGlScanoutUnix *scan
void red_qxl_gl_draw_async_complete(QXLInstance *qxl);
int red_qxl_check_qxl_version(QXLInstance *qxl, int major, int minor);
SpiceServer* red_qxl_get_server(QXLState *qxl);
const char* red_qxl_get_device_address(const QXLInstance *qxl);
const uint32_t* red_qxl_get_device_display_ids(const QXLInstance *qxl);
size_t red_qxl_get_monitors_count(const QXLInstance *qxl);
uint32_t red_qxl_marshall_device_display_info(const QXLInstance *qxl, SpiceMarshaller *m);
/* Wrappers around QXLInterface vfuncs */
void red_qxl_get_init_info(QXLInstance *qxl, QXLDevInitInfo *info);

View File

@ -920,24 +920,7 @@ void reds_marshall_device_display_info(RedsState *reds, SpiceMarshaller *m)
// add the qxl devices to the message
FOREACH_QXL_INSTANCE(reds, qxl) {
const char *const device_address = red_qxl_get_device_address(qxl);
const size_t device_address_len = strlen(device_address) + 1;
if (device_address_len == 1) {
continue;
}
for (size_t i = 0; i < red_qxl_get_monitors_count(qxl); ++i) {
spice_marshaller_add_uint32(m, qxl->id);
spice_marshaller_add_uint32(m, i);
spice_marshaller_add_uint32(m, red_qxl_get_device_display_ids(qxl)[i]);
spice_marshaller_add_uint32(m, device_address_len);
spice_marshaller_add(m, (void*) device_address, device_address_len);
++device_count;
g_debug(" (qxl) channel_id: %u monitor_id: %zu, device_address: %s, "
"device_display_id: %u",
qxl->id, i, device_address,
red_qxl_get_device_display_ids(qxl)[i]);
}
device_count += red_qxl_marshall_device_display_info(qxl, m);
}
// add the stream devices to the message