WindowServer: Use rectangular framebuffer syncs
This commit is contained in:
@@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/banan-os.h>
|
#include <sys/banan-os.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
@@ -1599,9 +1599,13 @@ void WindowServer::sync()
|
|||||||
|
|
||||||
for (size_t i = 0; i < m_damaged_area_count; i++)
|
for (size_t i = 0; i < m_damaged_area_count; i++)
|
||||||
{
|
{
|
||||||
const auto area = m_damaged_areas[i];
|
const fb_msync_region region {
|
||||||
for (int32_t y = area.min_y; y < area.max_y; y++)
|
.min_x = static_cast<uint32_t>(m_damaged_areas[i].min_x),
|
||||||
msync(&m_framebuffer.mmap[y * m_framebuffer.width + area.min_x], area.width() * sizeof(uint32_t), MS_SYNC);
|
.min_y = static_cast<uint32_t>(m_damaged_areas[i].min_y),
|
||||||
|
.max_x = static_cast<uint32_t>(m_damaged_areas[i].max_x),
|
||||||
|
.max_y = static_cast<uint32_t>(m_damaged_areas[i].max_y),
|
||||||
|
};
|
||||||
|
ioctl(m_framebuffer.fd, FB_MSYNC_RECTANGLE, ®ion);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_damaged_area_count = 0;
|
m_damaged_area_count = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user