Merge "Recovery mode UI flicker" am: 629bde8c6c
am: a5734c2ad8
Change-Id: I11e00d7502d32db5567a6fa99106d8983c048c24
This commit is contained in:
@@ -11,6 +11,7 @@ LOCAL_SRC_FILES := \
|
|||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES += libadf
|
LOCAL_WHOLE_STATIC_LIBRARIES += libadf
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES += libdrm
|
LOCAL_WHOLE_STATIC_LIBRARIES += libdrm
|
||||||
|
LOCAL_WHOLE_STATIC_LIBRARIES += libsync_recovery
|
||||||
LOCAL_STATIC_LIBRARIES += libpng
|
LOCAL_STATIC_LIBRARIES += libpng
|
||||||
|
|
||||||
LOCAL_MODULE := libminui
|
LOCAL_MODULE := libminui
|
||||||
|
|||||||
@@ -26,11 +26,13 @@
|
|||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
#include <adf/adf.h>
|
#include <adf/adf.h>
|
||||||
|
#include <sync/sync.h>
|
||||||
|
|
||||||
#include "graphics.h"
|
#include "graphics.h"
|
||||||
|
|
||||||
struct adf_surface_pdata {
|
struct adf_surface_pdata {
|
||||||
GRSurface base;
|
GRSurface base;
|
||||||
|
int fence_fd;
|
||||||
int fd;
|
int fd;
|
||||||
__u32 offset;
|
__u32 offset;
|
||||||
__u32 pitch;
|
__u32 pitch;
|
||||||
@@ -55,6 +57,7 @@ static void adf_blank(minui_backend *backend, bool blank);
|
|||||||
static int adf_surface_init(adf_pdata *pdata, drm_mode_modeinfo *mode, adf_surface_pdata *surf) {
|
static int adf_surface_init(adf_pdata *pdata, drm_mode_modeinfo *mode, adf_surface_pdata *surf) {
|
||||||
memset(surf, 0, sizeof(*surf));
|
memset(surf, 0, sizeof(*surf));
|
||||||
|
|
||||||
|
surf->fence_fd = -1;
|
||||||
surf->fd = adf_interface_simple_buffer_alloc(pdata->intf_fd, mode->hdisplay,
|
surf->fd = adf_interface_simple_buffer_alloc(pdata->intf_fd, mode->hdisplay,
|
||||||
mode->vdisplay, pdata->format, &surf->offset, &surf->pitch);
|
mode->vdisplay, pdata->format, &surf->offset, &surf->pitch);
|
||||||
if (surf->fd < 0)
|
if (surf->fd < 0)
|
||||||
@@ -194,6 +197,23 @@ static GRSurface* adf_init(minui_backend *backend)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void adf_sync(adf_surface_pdata *surf)
|
||||||
|
{
|
||||||
|
unsigned int warningTimeout = 3000;
|
||||||
|
|
||||||
|
if (surf == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (surf->fence_fd >= 0){
|
||||||
|
int err = sync_wait(surf->fence_fd, warningTimeout);
|
||||||
|
if (err < 0)
|
||||||
|
perror("adf sync fence wait error\n");
|
||||||
|
|
||||||
|
close(surf->fence_fd);
|
||||||
|
surf->fence_fd = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static GRSurface* adf_flip(minui_backend *backend)
|
static GRSurface* adf_flip(minui_backend *backend)
|
||||||
{
|
{
|
||||||
adf_pdata *pdata = (adf_pdata *)backend;
|
adf_pdata *pdata = (adf_pdata *)backend;
|
||||||
@@ -203,9 +223,10 @@ static GRSurface* adf_flip(minui_backend *backend)
|
|||||||
surf->base.width, surf->base.height, pdata->format, surf->fd,
|
surf->base.width, surf->base.height, pdata->format, surf->fd,
|
||||||
surf->offset, surf->pitch, -1);
|
surf->offset, surf->pitch, -1);
|
||||||
if (fence_fd >= 0)
|
if (fence_fd >= 0)
|
||||||
close(fence_fd);
|
surf->fence_fd = fence_fd;
|
||||||
|
|
||||||
pdata->current_surface = (pdata->current_surface + 1) % pdata->n_surfaces;
|
pdata->current_surface = (pdata->current_surface + 1) % pdata->n_surfaces;
|
||||||
|
adf_sync(&pdata->surfaces[pdata->current_surface]);
|
||||||
return &pdata->surfaces[pdata->current_surface].base;
|
return &pdata->surfaces[pdata->current_surface].base;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,6 +240,7 @@ static void adf_blank(minui_backend *backend, bool blank)
|
|||||||
static void adf_surface_destroy(adf_surface_pdata *surf)
|
static void adf_surface_destroy(adf_surface_pdata *surf)
|
||||||
{
|
{
|
||||||
munmap(surf->base.data, surf->pitch * surf->base.height);
|
munmap(surf->base.data, surf->pitch * surf->base.height);
|
||||||
|
close(surf->fence_fd);
|
||||||
close(surf->fd);
|
close(surf->fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user