From nobody Tue Nov 26 19:58:53 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1705712102; cv=none; d=zohomail.com; s=zohoarc; b=PFr8oNysL85ZdFC8rnIxvTQSHpbkttQ6e0+e2u8jI1kZUhKvWe23MtxCDBzE07rNydtnCswU8zS/vJQXNG2MZ0quqxSbWLmm0Djv8HLibEsjXrQfQmzn9K2P8qqeF1O2ZzDkK2MbXuuysS3a4cCj6HL2HYcEEKx+G5ycoteG25Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1705712102; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vw+gHb6ZSoqnYwTeXx34xqiEL70yO1+wnz54vnIbke0=; b=Q3J3dQvPpMIBeNAHxbySP1lIrixskj9T6aE2asE20sU0SrHlDP4I0RUy2/N2tF9KTS43XH8+pE/MbIjk3qj3+fYYu3PlAZazG5iwXMBUT+9fvuft9WX1NgqIS9TRKsoPRk32Jxa3XfAUw/nn5QsTgO8fQ/EQyUBm4j2qxuARmL0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1705712102197875.9166781864564; Fri, 19 Jan 2024 16:55:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rQzbf-0001sn-Av; Fri, 19 Jan 2024 19:53:07 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rQzbd-0001ri-32 for qemu-devel@nongnu.org; Fri, 19 Jan 2024 19:53:05 -0500 Received: from mgamail.intel.com ([192.55.52.120]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rQzba-0000Hu-NP for qemu-devel@nongnu.org; Fri, 19 Jan 2024 19:53:04 -0500 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jan 2024 16:52:52 -0800 Received: from vkasired-desk2.fm.intel.com ([10.105.128.132]) by fmsmga002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Jan 2024 16:52:52 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1705711982; x=1737247982; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kCCgPG2+hBw8fqMp3Qo56Mmdj33nLHntNW1mtEsJTKU=; b=STi+O1SAemSybpxBkFcljss2C19vUusAMrhrY4zQBBQMduge/Y5XOwRf rkbyKmOOffDY08sfME7HVY3btus/dMGtWVkm6zWJff8U+eTBKTu9TdIRJ cp4IRxVLzz8WRiuvJM8jssxvppa2B83rabvpix6zpVlG6wh2duEFtIivf sVOmyfMup4BiLiijF+324PjDdJJ1pUrrXcwab+AVsyANuTvNGG+KQtc+2 3hUbD719RwHmUx0KMMNtGJnCKSqbL6yCdRK+3j1rDtFoYDX5sGsjyB9uv 5rhLJDNDGFGgWS2WsK8EFRO9/5tNc1Rn3eYgW1/DQhCe2NftFXPsAl6SX Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10957"; a="399763758" X-IronPort-AV: E=Sophos;i="6.05,206,1701158400"; d="scan'208";a="399763758" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10957"; a="904297442" X-IronPort-AV: E=Sophos;i="6.05,206,1701158400"; d="scan'208";a="904297442" From: Vivek Kasireddy To: qemu-devel@nongnu.org Cc: Vivek Kasireddy , Gerd Hoffmann , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Frediano Ziglio , Dongwon Kim Subject: [PATCH v1 3/7] ui/spice: Submit the gl_draw requests at 60 FPS for remote clients Date: Fri, 19 Jan 2024 16:30:09 -0800 Message-Id: <20240120003013.1829757-4-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240120003013.1829757-1-vivek.kasireddy@intel.com> References: <20240120003013.1829757-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.55.52.120; envelope-from=vivek.kasireddy@intel.com; helo=mgamail.intel.com X-Spam_score_int: -68 X-Spam_score: -6.9 X-Spam_bar: ------ X-Spam_report: (-6.9 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.519, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1705712102492100001 In the specific case where the display layer (virtio-gpu) is using dmabuf, and if remote clients are enabled (-spice gl=3Don,port=3Dxxxx), it makes sense to limit the maximum (streaming) rate to 60 FPS using the GUI timer. This matches the behavior of GTK UI where the display updates are submitted at 60 FPS (assuming the underlying mode is WxY@60). Cc: Gerd Hoffmann Cc: Marc-Andr=C3=A9 Lureau Cc: Frediano Ziglio Cc: Dongwon Kim Signed-off-by: Vivek Kasireddy --- ui/spice-display.c | 38 ++++++++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/ui/spice-display.c b/ui/spice-display.c index 384b8508d4..90c04623ec 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -841,12 +841,31 @@ static void qemu_spice_gl_block_timer(void *opaque) warn_report("spice: no gl-draw-done within one second"); } =20 +static void spice_gl_draw(SimpleSpiceDisplay *ssd, + uint32_t x, uint32_t y, uint32_t w, uint32_t h) +{ + uint64_t cookie; + + cookie =3D (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE, 0); + spice_qxl_gl_draw_async(&ssd->qxl, x, y, w, h, cookie); +} + static void spice_gl_refresh(DisplayChangeListener *dcl) { SimpleSpiceDisplay *ssd =3D container_of(dcl, SimpleSpiceDisplay, dcl); - uint64_t cookie; + QemuDmaBuf *dmabuf =3D ssd->guest_dmabuf; =20 - if (!ssd->ds || qemu_console_is_gl_blocked(ssd->dcl.con)) { + if (!ssd->ds) { + return; + } + + if (qemu_console_is_gl_blocked(ssd->dcl.con)) { + if (remote_client && ssd->gl_updates && dmabuf) { + spice_gl_draw(ssd, 0, 0, dmabuf->width, dmabuf->height); + ssd->gl_updates =3D 0; + /* To stream at 60 FPS, the (GUI) timer delay needs to be ~17 = ms */ + dcl->update_interval =3D 1000 / (2 * GUI_REFRESH_INTERVAL_DEFA= ULT) + 1; + } return; } =20 @@ -854,11 +873,8 @@ static void spice_gl_refresh(DisplayChangeListener *dc= l) if (ssd->gl_updates && ssd->have_surface) { qemu_spice_gl_block(ssd, true); glFlush(); - cookie =3D (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE,= 0); - spice_qxl_gl_draw_async(&ssd->qxl, 0, 0, - surface_width(ssd->ds), - surface_height(ssd->ds), - cookie); + spice_gl_draw(ssd, 0, 0, + surface_width(ssd->ds), surface_height(ssd->ds)); ssd->gl_updates =3D 0; } } @@ -1025,7 +1041,6 @@ static void qemu_spice_gl_update(DisplayChangeListene= r *dcl, EGLint stride =3D 0, fourcc =3D 0; bool render_cursor =3D false; bool y_0_top =3D false; /* FIXME */ - uint64_t cookie; int fd; =20 if (!ssd->have_scanout) { @@ -1098,8 +1113,11 @@ static void qemu_spice_gl_update(DisplayChangeListen= er *dcl, trace_qemu_spice_gl_update(ssd->qxl.id, w, h, x, y); qemu_spice_gl_block(ssd, true); glFlush(); - cookie =3D (uintptr_t)qxl_cookie_new(QXL_COOKIE_TYPE_GL_DRAW_DONE, 0); - spice_qxl_gl_draw_async(&ssd->qxl, x, y, w, h, cookie); + if (remote_client) { + ssd->gl_updates++; + } else { + spice_gl_draw(ssd, x, y, w, h); + } } =20 static const DisplayChangeListenerOps display_listener_gl_ops =3D { --=20 2.39.2