| #include "include/private/dvr/vsync_client.h" | 
 |  | 
 | #include <log/log.h> | 
 |  | 
 | #include <pdx/default_transport/client_channel_factory.h> | 
 | #include <private/dvr/display_protocol.h> | 
 |  | 
 | using android::dvr::display::VSyncProtocol; | 
 | using android::pdx::Transaction; | 
 |  | 
 | namespace android { | 
 | namespace dvr { | 
 |  | 
 | VSyncClient::VSyncClient(long timeout_ms) | 
 |     : BASE(pdx::default_transport::ClientChannelFactory::Create( | 
 |                VSyncProtocol::kClientPath), | 
 |            timeout_ms) {} | 
 |  | 
 | VSyncClient::VSyncClient() | 
 |     : BASE(pdx::default_transport::ClientChannelFactory::Create( | 
 |           VSyncProtocol::kClientPath)) {} | 
 |  | 
 | int VSyncClient::Wait(int64_t* timestamp_ns) { | 
 |   auto status = InvokeRemoteMethod<VSyncProtocol::Wait>(); | 
 |   if (!status) { | 
 |     ALOGE("VSyncClient::Wait: Failed to wait for vsync: %s", | 
 |           status.GetErrorMessage().c_str()); | 
 |     return -status.error(); | 
 |   } | 
 |  | 
 |   if (timestamp_ns != nullptr) { | 
 |     *timestamp_ns = status.get(); | 
 |   } | 
 |   return 0; | 
 | } | 
 |  | 
 | int VSyncClient::GetFd() { return event_fd(); } | 
 |  | 
 | int VSyncClient::GetLastTimestamp(int64_t* timestamp_ns) { | 
 |   auto status = InvokeRemoteMethod<VSyncProtocol::GetLastTimestamp>(); | 
 |   if (!status) { | 
 |     ALOGE("VSyncClient::GetLastTimestamp: Failed to get vsync timestamp: %s", | 
 |           status.GetErrorMessage().c_str()); | 
 |     return -status.error(); | 
 |   } | 
 |   *timestamp_ns = status.get(); | 
 |   return 0; | 
 | } | 
 |  | 
 | int VSyncClient::GetSchedInfo(int64_t* vsync_period_ns, int64_t* timestamp_ns, | 
 |                               uint32_t* next_vsync_count) { | 
 |   if (!vsync_period_ns || !timestamp_ns || !next_vsync_count) | 
 |     return -EINVAL; | 
 |  | 
 |   auto status = InvokeRemoteMethod<VSyncProtocol::GetSchedInfo>(); | 
 |   if (!status) { | 
 |     ALOGE("VSyncClient::GetSchedInfo:: Failed to get warp timestamp: %s", | 
 |           status.GetErrorMessage().c_str()); | 
 |     return -status.error(); | 
 |   } | 
 |  | 
 |   *vsync_period_ns = status.get().vsync_period_ns; | 
 |   *timestamp_ns = status.get().timestamp_ns; | 
 |   *next_vsync_count = status.get().next_vsync_count; | 
 |   return 0; | 
 | } | 
 |  | 
 | int VSyncClient::Acknowledge() { | 
 |   auto status = InvokeRemoteMethod<VSyncProtocol::Acknowledge>(); | 
 |   ALOGE_IF(!status, "VSuncClient::Acknowledge: Failed to ack vsync because: %s", | 
 |            status.GetErrorMessage().c_str()); | 
 |   return ReturnStatusOrError(status); | 
 | } | 
 |  | 
 | }  // namespace dvr | 
 | }  // namespace android |