gfxstream: guest: introduce QemuPipeStream stub

For non-Android builds, this stub can be used for
the QemuPipeStream.

Reviewed-by: Aaron Ruby <aruby@blackberry.com>
Acked-by: Yonggang Luo <luoyonggang@gmail.com>
Acked-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27246>
This commit is contained in:
Gurchetan Singh
2024-08-29 13:02:29 -07:00
committed by Marge Bot
parent 31ceda8bdc
commit 18b6c72cb0
4 changed files with 73 additions and 20 deletions

View File

@@ -28,12 +28,7 @@ static const size_t kReadSize = 512 * 1024;
static const size_t kWriteOffset = kReadSize;
QemuPipeStream::QemuPipeStream(size_t bufSize)
: IOStream(bufSize),
m_sock((QEMU_PIPE_HANDLE)(-1)),
m_bufsize(bufSize),
m_buf(NULL),
m_read(0),
m_readLeft(0) {}
: IOStream(bufSize), m_sock(-1), m_bufsize(bufSize), m_buf(NULL), m_read(0), m_readLeft(0) {}
QemuPipeStream::QemuPipeStream(QEMU_PIPE_HANDLE sock, size_t bufSize)
: IOStream(bufSize), m_sock(sock), m_bufsize(bufSize), m_buf(NULL), m_read(0), m_readLeft(0) {}
@@ -41,7 +36,7 @@ QemuPipeStream::QemuPipeStream(QEMU_PIPE_HANDLE sock, size_t bufSize)
QemuPipeStream::~QemuPipeStream() {
if (valid()) {
flush();
qemu_pipe_close(m_sock);
qemu_pipe_close((QEMU_PIPE_HANDLE)m_sock);
}
if (m_buf != NULL) {
free(m_buf);
@@ -49,7 +44,7 @@ QemuPipeStream::~QemuPipeStream() {
}
int QemuPipeStream::connect(const char* serviceName) {
m_sock = qemu_pipe_open("opengles");
m_sock = (int)qemu_pipe_open("opengles");
if (!valid()) {
mesa_loge("%s: failed to connect to opengles pipe", __FUNCTION__);
qemu_pipe_print_error(m_sock);
@@ -121,8 +116,6 @@ int QemuPipeStream::writeFully(const void* buf, size_t len) {
return qemu_pipe_write_fully(m_sock, buf, len);
}
QEMU_PIPE_HANDLE QemuPipeStream::getSocket() const { return m_sock; }
const unsigned char* QemuPipeStream::readFully(void* buf, size_t len) {
return commitBufferAndReadFully(0, buf, len);
}
@@ -236,6 +229,8 @@ const unsigned char* QemuPipeStream::read(void* buf, size_t* inout_len) {
return NULL;
}
bool QemuPipeStream::valid() { return qemu_pipe_valid(m_sock); }
int QemuPipeStream::recv(void* buf, size_t len) {
if (!valid()) return int(ERR_INVALID_SOCKET);
char* p = (char*)buf;

View File

@@ -20,7 +20,6 @@
* to communicate with the emulator's 'opengles' service. See
* <hardware/qemu_pipe.h> for more details.
*/
#include <qemu_pipe_bp.h>
#include <stdlib.h>
#include <memory>
@@ -43,20 +42,18 @@ class QemuPipeStream : public gfxstream::guest::IOStream {
virtual const unsigned char* commitBufferAndReadFully(size_t size, void* buf, size_t len);
virtual const unsigned char* read(void* buf, size_t* inout_len);
bool valid() { return qemu_pipe_valid(m_sock); }
bool valid();
int recv(void* buf, size_t len);
virtual int writeFully(const void* buf, size_t len);
QEMU_PIPE_HANDLE getSocket() const;
private:
QEMU_PIPE_HANDLE m_sock;
int m_sock;
size_t m_bufsize;
unsigned char* m_buf;
size_t m_read;
size_t m_readLeft;
QemuPipeStream(QEMU_PIPE_HANDLE sock, size_t bufSize);
QemuPipeStream(int sock, size_t bufSize);
};
#endif

View File

@@ -0,0 +1,62 @@
/*
* Copyright 2024 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
#include "QemuPipeStream.h"
QemuPipeStream::QemuPipeStream(size_t bufSize) : IOStream(bufSize) { (void)bufSize; }
QemuPipeStream::~QemuPipeStream() {}
int QemuPipeStream::connect(const char* serviceName) {
(void)serviceName;
return 0;
}
uint64_t QemuPipeStream::processPipeInit() { return 0; }
void* QemuPipeStream::allocBuffer(size_t minSize) {
(void)minSize;
return nullptr;
};
int QemuPipeStream::commitBuffer(size_t size) {
(void)size;
return 0;
}
int QemuPipeStream::writeFully(const void* buf, size_t len) {
(void)buf;
(void)len;
return 0;
}
const unsigned char* QemuPipeStream::readFully(void* buf, size_t len) {
(void)buf;
(void)len;
return nullptr;
}
const unsigned char* QemuPipeStream::commitBufferAndReadFully(size_t writeSize,
void* userReadBufPtr,
size_t totalReadSize) {
(void)writeSize;
(void)userReadBufPtr;
(void)totalReadSize;
return nullptr;
}
const unsigned char* QemuPipeStream::read(void* buf, size_t* inout_len) {
(void)buf;
(void)inout_len;
return nullptr;
}
bool QemuPipeStream::valid() { return false; }
int QemuPipeStream::recv(void* buf, size_t len) {
(void)buf;
(void)len;
return 0;
}

View File

@@ -6,7 +6,7 @@ inc_connection_manager = include_directories('.')
files_libconnection_manager = files(
'GfxStreamConnectionManager.cpp',
'GfxStreamConnection.cpp',
'QemuPipeStream.cpp',
'QemuPipeStreamStub.cpp',
'VirtioGpuPipeStream.cpp',
)
@@ -15,10 +15,9 @@ libconnection_manager = static_library(
files_libconnection_manager,
cpp_args: gfxstream_guest_args,
include_directories: [inc_connection_manager, inc_guest_iostream,
inc_guest_iostream, inc_qemu_pipe,
inc_qemu_pipe_types, inc_goldfish_address_space,
inc_guest_iostream, inc_goldfish_address_space,
inc_platform_virtgpu, inc_src],
link_with: [lib_guest_iostream, lib_goldfish_address_space, lib_qemu_pipe,
link_with: [lib_guest_iostream, lib_goldfish_address_space,
libplatform_virtgpu],
dependencies: drm_dep
)