mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:02:44 +00:00 
			
		
		
		
	 38af4c29e6
			
		
	
	
		38af4c29e6
		
	
	
	
	
		
			
			We regularily need to flush many rectangles, so instead of making many expensive ioctl() calls to the framebuffer driver, collect the rectangles and only make one call. And if we have too many rectangles then it may be cheaper to just update the entire region, in which case we simply convert them all into a union and just flush that one rectangle instead.
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Platform.h>
 | |
| #include <stddef.h>
 | |
| #include <sys/cdefs.h>
 | |
| #include <sys/ioctl.h>
 | |
| 
 | |
| __BEGIN_DECLS
 | |
| 
 | |
| ALWAYS_INLINE int fb_get_size_in_bytes(int fd, size_t* out)
 | |
| {
 | |
|     return ioctl(fd, FB_IOCTL_GET_SIZE_IN_BYTES, out);
 | |
| }
 | |
| 
 | |
| ALWAYS_INLINE int fb_get_resolution(int fd, FBResolution* info)
 | |
| {
 | |
|     return ioctl(fd, FB_IOCTL_GET_RESOLUTION, info);
 | |
| }
 | |
| 
 | |
| ALWAYS_INLINE int fb_set_resolution(int fd, FBResolution* info)
 | |
| {
 | |
|     return ioctl(fd, FB_IOCTL_SET_RESOLUTION, info);
 | |
| }
 | |
| 
 | |
| ALWAYS_INLINE int fb_get_buffer(int fd, int* index)
 | |
| {
 | |
|     return ioctl(fd, FB_IOCTL_GET_BUFFER, index);
 | |
| }
 | |
| 
 | |
| ALWAYS_INLINE int fb_set_buffer(int fd, int index)
 | |
| {
 | |
|     return ioctl(fd, FB_IOCTL_SET_BUFFER, index);
 | |
| }
 | |
| 
 | |
| ALWAYS_INLINE int fb_flush_buffers(int fd, FBRect const* rects, unsigned count)
 | |
| {
 | |
|     FBRects fb_rects;
 | |
|     fb_rects.count = count;
 | |
|     fb_rects.rects = rects;
 | |
|     return ioctl(fd, FB_IOCTL_FLUSH_BUFFERS, &fb_rects);
 | |
| }
 | |
| 
 | |
| __END_DECLS
 |