summaryrefslogtreecommitdiffstats
path: root/src/libply/ply-frame-buffer.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-05-29 14:34:35 -0400
committerRay Strode <rstrode@redhat.com>2008-05-29 14:34:35 -0400
commit3493c2919fb84c201303459afc6c6bcdf855185b (patch)
treef0e95aad03020e4df1a527a92b3a25684ea64a26 /src/libply/ply-frame-buffer.c
parent697dc98ebbff84354f90ad88ba9cab4c96b7c0bd (diff)
downloadplymouth-3493c2919fb84c201303459afc6c6bcdf855185b.tar.gz
plymouth-3493c2919fb84c201303459afc6c6bcdf855185b.tar.xz
plymouth-3493c2919fb84c201303459afc6c6bcdf855185b.zip
Add an optimization for full width fills on some hardware
If we know the rowstride is the same width as the frame buffer then we can memcpy multiple rows at one time.
Diffstat (limited to 'src/libply/ply-frame-buffer.c')
-rw-r--r--src/libply/ply-frame-buffer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/libply/ply-frame-buffer.c b/src/libply/ply-frame-buffer.c
index 288f7e7..dbf6f11 100644
--- a/src/libply/ply-frame-buffer.c
+++ b/src/libply/ply-frame-buffer.c
@@ -188,6 +188,12 @@ flush_xrgb32 (ply_frame_buffer_t *buffer)
dst = &buffer->map_address[(y1 * buffer->row_stride + x1) * 4];
src = (char *) &buffer->shadow_buffer[y1 * buffer->row_stride + x1];
+ if (buffer->area_to_flush.width == buffer->row_stride)
+ {
+ memcpy (dst, src, buffer->area_to_flush.width * buffer->area_to_flush.height * 4);
+ return;
+ }
+
for (y = y1; y < y2; y++)
{
memcpy (dst, src, buffer->area_to_flush.width * 4);