1#include "include/private/dvr/display_manager_client.h" 2 3#include <pdx/default_transport/client_channel_factory.h> 4#include <private/dvr/buffer_hub_client.h> 5#include <private/dvr/buffer_hub_queue_client.h> 6#include <private/dvr/display_protocol.h> 7#include <utils/Log.h> 8 9using android::pdx::ErrorStatus; 10using android::pdx::LocalChannelHandle; 11using android::pdx::Transaction; 12 13namespace android { 14namespace dvr { 15namespace display { 16 17DisplayManagerClient::DisplayManagerClient() 18 : BASE(pdx::default_transport::ClientChannelFactory::Create( 19 DisplayManagerProtocol::kClientPath)) {} 20 21DisplayManagerClient::~DisplayManagerClient() {} 22 23pdx::Status<std::vector<display::SurfaceState>> 24DisplayManagerClient::GetSurfaceState() { 25 auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceState>(); 26 if (!status) { 27 ALOGE( 28 "DisplayManagerClient::GetSurfaceState: Failed to get surface info: %s", 29 status.GetErrorMessage().c_str()); 30 } 31 32 return status; 33} 34 35pdx::Status<std::unique_ptr<IonBuffer>> DisplayManagerClient::SetupNamedBuffer( 36 const std::string& name, size_t size, uint64_t usage) { 37 auto status = InvokeRemoteMethod<DisplayManagerProtocol::SetupNamedBuffer>( 38 name, size, usage); 39 if (!status) { 40 ALOGE( 41 "DisplayManagerClient::SetupPoseBuffer: Failed to create the named " 42 "buffer %s", 43 status.GetErrorMessage().c_str()); 44 return status.error_status(); 45 } 46 47 auto ion_buffer = std::make_unique<IonBuffer>(); 48 auto native_buffer_handle = status.take(); 49 const int ret = native_buffer_handle.Import(ion_buffer.get()); 50 if (ret < 0) { 51 ALOGE( 52 "DisplayClient::GetNamedBuffer: Failed to import named buffer: " 53 "name=%s; error=%s", 54 name.c_str(), strerror(-ret)); 55 return ErrorStatus(-ret); 56 } 57 58 return {std::move(ion_buffer)}; 59} 60 61pdx::Status<std::unique_ptr<ConsumerQueue>> 62DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) { 63 auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>( 64 surface_id, queue_id); 65 if (!status) { 66 ALOGE( 67 "DisplayManagerClient::GetSurfaceQueue: Failed to get queue for " 68 "surface_id=%d queue_id=%d: %s", 69 surface_id, queue_id, status.GetErrorMessage().c_str()); 70 return status.error_status(); 71 } 72 73 return {ConsumerQueue::Import(status.take())}; 74} 75 76} // namespace display 77} // namespace dvr 78} // namespace android 79