Merge "minui: Use android::base::unique_fd in MinuiBackendFbdev."

am: f2a9152408

Change-Id: Ib53ef3c08f14f815769cd4cb72ba0303183abc1f
This commit is contained in:
Tao Bao 2018-11-02 15:17:20 -07:00 committed by android-build-merger
commit f0cf952082
2 changed files with 9 additions and 14 deletions

View file

@ -28,6 +28,8 @@
#include <memory> #include <memory>
#include <android-base/unique_fd.h>
#include "minui/minui.h" #include "minui/minui.h"
std::unique_ptr<GRSurfaceFbdev> GRSurfaceFbdev::Create(int width, int height, int row_bytes, std::unique_ptr<GRSurfaceFbdev> GRSurfaceFbdev::Create(int width, int height, int row_bytes,
@ -54,7 +56,7 @@ void MinuiBackendFbdev::SetDisplayedFramebuffer(size_t n) {
} }
GRSurface* MinuiBackendFbdev::Init() { GRSurface* MinuiBackendFbdev::Init() {
int fd = open("/dev/graphics/fb0", O_RDWR); android::base::unique_fd fd(open("/dev/graphics/fb0", O_RDWR));
if (fd == -1) { if (fd == -1) {
perror("cannot open fb0"); perror("cannot open fb0");
return nullptr; return nullptr;
@ -63,13 +65,11 @@ GRSurface* MinuiBackendFbdev::Init() {
fb_fix_screeninfo fi; fb_fix_screeninfo fi;
if (ioctl(fd, FBIOGET_FSCREENINFO, &fi) < 0) { if (ioctl(fd, FBIOGET_FSCREENINFO, &fi) < 0) {
perror("failed to get fb0 info"); perror("failed to get fb0 info");
close(fd);
return nullptr; return nullptr;
} }
if (ioctl(fd, FBIOGET_VSCREENINFO, &vi) < 0) { if (ioctl(fd, FBIOGET_VSCREENINFO, &vi) < 0) {
perror("failed to get fb0 info"); perror("failed to get fb0 info");
close(fd);
return nullptr; return nullptr;
} }
@ -96,7 +96,6 @@ GRSurface* MinuiBackendFbdev::Init() {
void* bits = mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); void* bits = mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (bits == MAP_FAILED) { if (bits == MAP_FAILED) {
perror("failed to mmap framebuffer"); perror("failed to mmap framebuffer");
close(fd);
return nullptr; return nullptr;
} }
@ -128,10 +127,10 @@ GRSurface* MinuiBackendFbdev::Init() {
gr_draw = gr_framebuffer[1].get(); gr_draw = gr_framebuffer[1].get();
memset(gr_draw->buffer_, 0, gr_draw->height * gr_draw->row_bytes); memset(gr_draw->buffer_, 0, gr_draw->height * gr_draw->row_bytes);
fb_fd = fd; fb_fd = std::move(fd);
SetDisplayedFramebuffer(0); SetDisplayedFramebuffer(0);
printf("framebuffer: %d (%d x %d)\n", fb_fd, gr_draw->width, gr_draw->height); printf("framebuffer: %d (%d x %d)\n", fb_fd.get(), gr_draw->width, gr_draw->height);
Blank(true); Blank(true);
Blank(false); Blank(false);
@ -151,9 +150,3 @@ GRSurface* MinuiBackendFbdev::Flip() {
} }
return gr_draw; return gr_draw;
} }
MinuiBackendFbdev::~MinuiBackendFbdev() {
if (fb_fd != -1) {
close(fb_fd);
}
}

View file

@ -22,6 +22,8 @@
#include <memory> #include <memory>
#include <vector> #include <vector>
#include <android-base/unique_fd.h>
#include "graphics.h" #include "graphics.h"
#include "minui/minui.h" #include "minui/minui.h"
@ -48,7 +50,7 @@ class GRSurfaceFbdev : public GRSurface {
class MinuiBackendFbdev : public MinuiBackend { class MinuiBackendFbdev : public MinuiBackend {
public: public:
MinuiBackendFbdev() = default; MinuiBackendFbdev() = default;
~MinuiBackendFbdev() override; ~MinuiBackendFbdev() override = default;
GRSurface* Init() override; GRSurface* Init() override;
GRSurface* Flip() override; GRSurface* Flip() override;
@ -64,5 +66,5 @@ class MinuiBackendFbdev : public MinuiBackend {
std::vector<uint8_t> memory_buffer; std::vector<uint8_t> memory_buffer;
size_t displayed_buffer{ 0 }; size_t displayed_buffer{ 0 };
fb_var_screeninfo vi; fb_var_screeninfo vi;
int fb_fd{ -1 }; android::base::unique_fd fb_fd;
}; };