summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-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);