#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