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
9 using android::pdx::ErrorStatus;
10 using android::pdx::LocalChannelHandle;
11 using android::pdx::Transaction;
12
13 namespace android {
14 namespace dvr {
15 namespace display {
16
DisplayManagerClient()17 DisplayManagerClient::DisplayManagerClient()
18 : BASE(pdx::default_transport::ClientChannelFactory::Create(
19 DisplayManagerProtocol::kClientPath)) {}
20
~DisplayManagerClient()21 DisplayManagerClient::~DisplayManagerClient() {}
22
23 pdx::Status<std::vector<display::SurfaceState>>
GetSurfaceState()24 DisplayManagerClient::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
SetupNamedBuffer(const std::string & name,size_t size,uint64_t usage)35 pdx::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
61 pdx::Status<std::unique_ptr<ConsumerQueue>>
GetSurfaceQueue(int surface_id,int queue_id)62 DisplayManagerClient::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