From patchwork Sat Jan 3 20:04:44 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 1231 Return-Path: X-Original-To: u-boot-concept@u-boot.org Delivered-To: u-boot-concept@u-boot.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767470789; bh=AkRPa07ncdV17Y6ntQSJvVEeA2ebRELuUCh/4SzgFeM=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=NkW1V4mhdJ5UN9GeILykUjr1Yy/N2HRlNYjEt38h/aTuyV7iO7wOo6KLmtVwP8RDW L0pFGCBiDkq5hodKTHQbGX1j0Fn5VWfZR0xN9Tr6w1wraFAHRGJUUFlVUY9abxx3yE jYBc9gtHSkqQ7qF4PkpFBejFGtXOvOlp6NFCAwLZluwNxicuuamrgCbcayvU5foHJX N5vtiL/Myf+GIEijYnPAzEfRMmuINN4PxBM18LxhKrde4q9nb7DterR5BVkQSQDJJG q/4Mk4lRzrzr+RtIh512xFA5zwD2C6wNRRs3ft7LxaehpGTQYwSXAi1J1p39zO8CeC Hv+o3gnU6KUnQ== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 271E169097 for ; Sat, 3 Jan 2026 13:06:29 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id DB8CvE3JNRJs for ; Sat, 3 Jan 2026 13:06:29 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767470789; bh=AkRPa07ncdV17Y6ntQSJvVEeA2ebRELuUCh/4SzgFeM=; h=From:To:Date:In-Reply-To:References:CC:Subject:List-Id: List-Archive:List-Help:List-Owner:List-Post:List-Subscribe: List-Unsubscribe:From; b=NkW1V4mhdJ5UN9GeILykUjr1Yy/N2HRlNYjEt38h/aTuyV7iO7wOo6KLmtVwP8RDW L0pFGCBiDkq5hodKTHQbGX1j0Fn5VWfZR0xN9Tr6w1wraFAHRGJUUFlVUY9abxx3yE jYBc9gtHSkqQ7qF4PkpFBejFGtXOvOlp6NFCAwLZluwNxicuuamrgCbcayvU5foHJX N5vtiL/Myf+GIEijYnPAzEfRMmuINN4PxBM18LxhKrde4q9nb7DterR5BVkQSQDJJG q/4Mk4lRzrzr+RtIh512xFA5zwD2C6wNRRs3ft7LxaehpGTQYwSXAi1J1p39zO8CeC Hv+o3gnU6KUnQ== Received: from mail.u-boot.org (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id 173B869095 for ; Sat, 3 Jan 2026 13:06:29 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767470786; bh=W9dUv0C9tsV9mQeOhzoopPoxxNHwOHbpgZkybKRCYAw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZY9EMP/eCciy+qW9UdDFjDD6BCTk+WQchrJA8NrwsKUAENXibzChs6AWw5tbxAhF0 1O71H6ybYbFs4Rg9TkXAGU5phzhm3RTYVVhFRSLheI77Nh+ngc4I1s7cP9+jy4AMIj ZxCn+GBCBga8dQsV6Uy3cDK/agBGa/moLEPgyU1Acjo9T58a55USd6i5/0lYkAlL0l D6zkbVEt29CIal8Y55CDeHn8GMcLjQlvoWLHlfPxqIAmLdgE+ARzk9vJmqCYIBIhmK zfFnYts/q2Xxr+RqZ/cFggWeac4qTsEDjErg3BEd80a2pKy0ce8fqHd91QqiE6dznW P90ByKIK4xhtg== Received: from localhost (localhost [127.0.0.1]) by mail.u-boot.org (Postfix) with ESMTP id B4B7068FCC; Sat, 3 Jan 2026 13:06:26 -0700 (MST) X-Virus-Scanned: Debian amavis at Received: from mail.u-boot.org ([127.0.0.1]) by localhost (mail.u-boot.org [127.0.0.1]) (amavis, port 10026) with ESMTP id QeGQ9AJnfKnX; Sat, 3 Jan 2026 13:06:26 -0700 (MST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=u-boot.org; s=default; t=1767470782; bh=BHuYviJ3t4hS+pU6vZVdVtbOapcD9y7b9qLlH2kS2dA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jbaQK7oamwfrpCz8T9pQvvKq/9u/WAvCHMiUs3eL/0Gbx9X5QxDQ9pWxMHbOkPMFU 2k+BsZnIqrs0UjrBHZmQFioH1QH36tvvYCj47xYYSt+zE6RHE9Vgb6ounXIJ/5UsN4 +0o1ir8sdXXQr2d7JfgT8ec9KOBNR6cvJF0NYa4V+47XphxeeiAjtkZN+JwvAZmy0f /j2K1UaeQXehfkoR4QLlo+Gx7ecf4rxaVx03qK22tBhaqOeIIx/mhwBRwHD4vWWW42 yhTioRf6e/SKN9qBYTf7LgGzll4LcTCyfXn7UEWvi4e1g8OOEtLJ6cFtfxeA8a6MA/ 4SYGPRe1YQB2w== Received: from u-boot.org (unknown [73.34.74.121]) by mail.u-boot.org (Postfix) with ESMTPSA id 5E06968FD2; Sat, 3 Jan 2026 13:06:22 -0700 (MST) From: Simon Glass To: U-Boot Concept Date: Sat, 3 Jan 2026 13:04:44 -0700 Message-ID: <20260103200510.3605009-14-sjg@u-boot.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260103200510.3605009-1-sjg@u-boot.org> References: <20260103200510.3605009-1-sjg@u-boot.org> MIME-Version: 1.0 Message-ID-Hash: JQAY6EBKVYL6L4YIBMQI7MR3FQEFOXM4 X-Message-ID-Hash: JQAY6EBKVYL6L4YIBMQI7MR3FQEFOXM4 X-MailFrom: sjg@u-boot.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Heinrich Schuchardt , Simon Glass , Claude X-Mailman-Version: 3.3.10 Precedence: list Subject: [Concept] [PATCH v2 13/29] video: Optimise video_flush_copy() for full-line damage List-Id: Discussion and patches related to U-Boot Concept Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Simon Glass When copying partial framebuffer regions line by line, there is overhead from multiple memcpy() calls. Optimise video_flush_copy() to detect when entire lines are being copied (damage spans full width) and perform a single memcpy() for the whole region instead of looping line by line. Also invert the early-exit check to reduce nesting. Co-developed-by: Claude Signed-off-by: Simon Glass --- (no changes since v1) drivers/video/video-uclass.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/video/video-uclass.c b/drivers/video/video-uclass.c index 2789c352113..75b13481380 100644 --- a/drivers/video/video-uclass.c +++ b/drivers/video/video-uclass.c @@ -507,16 +507,25 @@ static void video_flush_copy(struct udevice *vid) if (!priv->copy_fb) return; - if (damage->x1 && damage->y1) { - int lstart = damage->x0 * VNBYTES(priv->bpix); - int lend = damage->x1 * VNBYTES(priv->bpix); + if (!damage->x1 || !damage->y1) + return; + + int lstart = damage->x0 * VNBYTES(priv->bpix); + int llen = damage->x1 * VNBYTES(priv->bpix) - lstart; + + /* Copy entire region at once if full lines are damaged */ + if (!lstart && llen == priv->line_length) { + ulong offset = damage->y0 * priv->line_length; + ulong len = (damage->y1 - damage->y0) * priv->line_length; + + memcpy(priv->copy_fb + offset, priv->fb + offset, len); + } else { int y; for (y = damage->y0; y < damage->y1; y++) { - ulong offset = (y * priv->line_length) + lstart; - ulong len = lend - lstart; + ulong offset = y * priv->line_length + lstart; - memcpy(priv->copy_fb + offset, priv->fb + offset, len); + memcpy(priv->copy_fb + offset, priv->fb + offset, llen); } } }