| #include "include/private/dvr/display_manager_client.h" |
| |
| #include <pdx/default_transport/client_channel_factory.h> |
| #include <private/dvr/buffer_hub_client.h> |
| #include <private/dvr/buffer_hub_queue_client.h> |
| #include <private/dvr/display_protocol.h> |
| #include <utils/Log.h> |
| |
| using android::pdx::ErrorStatus; |
| using android::pdx::LocalChannelHandle; |
| using android::pdx::Transaction; |
| |
| namespace android { |
| namespace dvr { |
| namespace display { |
| |
| DisplayManagerClient::DisplayManagerClient() |
| : BASE(pdx::default_transport::ClientChannelFactory::Create( |
| DisplayManagerProtocol::kClientPath)) {} |
| |
| DisplayManagerClient::~DisplayManagerClient() {} |
| |
| pdx::Status<std::vector<display::SurfaceState>> |
| DisplayManagerClient::GetSurfaceState() { |
| auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceState>(); |
| if (!status) { |
| ALOGE( |
| "DisplayManagerClient::GetSurfaceState: Failed to get surface info: %s", |
| status.GetErrorMessage().c_str()); |
| } |
| |
| return status; |
| } |
| |
| pdx::Status<std::unique_ptr<IonBuffer>> DisplayManagerClient::SetupNamedBuffer( |
| const std::string& name, size_t size, uint64_t usage) { |
| auto status = InvokeRemoteMethod<DisplayManagerProtocol::SetupNamedBuffer>( |
| name, size, usage); |
| if (!status) { |
| ALOGE( |
| "DisplayManagerClient::SetupPoseBuffer: Failed to create the named " |
| "buffer %s", |
| status.GetErrorMessage().c_str()); |
| return status.error_status(); |
| } |
| |
| auto ion_buffer = std::make_unique<IonBuffer>(); |
| auto native_buffer_handle = status.take(); |
| const int ret = native_buffer_handle.Import(ion_buffer.get()); |
| if (ret < 0) { |
| ALOGE( |
| "DisplayClient::GetNamedBuffer: Failed to import named buffer: " |
| "name=%s; error=%s", |
| name.c_str(), strerror(-ret)); |
| return ErrorStatus(-ret); |
| } |
| |
| return {std::move(ion_buffer)}; |
| } |
| |
| pdx::Status<std::unique_ptr<ConsumerQueue>> |
| DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) { |
| auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>( |
| surface_id, queue_id); |
| if (!status) { |
| ALOGE( |
| "DisplayManagerClient::GetSurfaceQueue: Failed to get queue for " |
| "surface_id=%d queue_id=%d: %s", |
| surface_id, queue_id, status.GetErrorMessage().c_str()); |
| return status.error_status(); |
| } |
| |
| return {ConsumerQueue::Import(status.take())}; |
| } |
| |
| } // namespace display |
| } // namespace dvr |
| } // namespace android |