From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:33457) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QgdRf-0004tW-E7 for qemu-devel@nongnu.org; Tue, 12 Jul 2011 09:56:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QgdRd-0008Lm-EB for qemu-devel@nongnu.org; Tue, 12 Jul 2011 09:56:15 -0400 Received: from mx1.redhat.com ([209.132.183.28]:49242) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QgdRc-0008LO-L8 for qemu-devel@nongnu.org; Tue, 12 Jul 2011 09:56:13 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p6CDuBvJ009160 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 12 Jul 2011 09:56:11 -0400 From: Alon Levy Date: Tue, 12 Jul 2011 16:55:26 +0300 Message-Id: <1310478932-25370-14-git-send-email-alevy@redhat.com> In-Reply-To: <1310478932-25370-1-git-send-email-alevy@redhat.com> References: <1310478932-25370-1-git-send-email-alevy@redhat.com> Subject: [Qemu-devel] [PATCHv3] qxl-render/qxl: split out qxl_save_ppm List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kraxel@redhat.com Later the save will happen asynchronously on surface_updated callback. --- hw/qxl-render.c | 10 ++++++++++ hw/qxl.c | 2 +- hw/qxl.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletions(-) diff --git a/hw/qxl-render.c b/hw/qxl-render.c index 60b822d..e64b646 100644 --- a/hw/qxl-render.c +++ b/hw/qxl-render.c @@ -70,6 +70,15 @@ void qxl_render_resize(PCIQXLDevice *qxl) } } +static void qxl_save_ppm(PCIQXLDevice *qxl) +{ + if (qxl->ppm_save_filename) { + ppm_save(qxl->ppm_save_filename, qxl->ssd.ds->surface); + free(qxl->ppm_save_filename); + qxl->ppm_save_filename = NULL; + } +} + void qxl_render_update(PCIQXLDevice *qxl) { VGACommonState *vga = &qxl->vga; @@ -139,6 +148,7 @@ void qxl_render_update(PCIQXLDevice *qxl) dirty[i].right - dirty[i].left, dirty[i].bottom - dirty[i].top); } + qxl_save_ppm(qxl); } static QEMUCursor *qxl_cursor(PCIQXLDevice *qxl, QXLCursor *cursor) diff --git a/hw/qxl.c b/hw/qxl.c index bd540c0..de93efa 100644 --- a/hw/qxl.c +++ b/hw/qxl.c @@ -1462,8 +1462,8 @@ static void qxl_hw_screen_dump(void *opaque, const char *filename) switch (qxl->mode) { case QXL_MODE_COMPAT: case QXL_MODE_NATIVE: + qxl->ppm_save_filename = qemu_strdup(filename); qxl_render_update(qxl); - ppm_save(filename, qxl->ssd.ds->surface); break; case QXL_MODE_VGA: vga->screen_dump(vga, filename); diff --git a/hw/qxl.h b/hw/qxl.h index 064311a..2c7f94a 100644 --- a/hw/qxl.h +++ b/hw/qxl.h @@ -32,6 +32,8 @@ typedef struct PCIQXLDevice { int32_t num_memslots; int32_t num_surfaces; + char *ppm_save_filename; + #if SPICE_INTERFACE_QXL_MINOR >= 1 uint32_t current_async; QemuMutex async_lock; -- 1.7.6