1e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include "include/private/dvr/vsync_client.h" 2e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 34fe60582f314e381098f8f3bc2e39c5880e9243aAlex Vakulenko#include <log/log.h> 4e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 5e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/default_transport/client_channel_factory.h> 63f82d31341f66d0c58e1ec3360ea5f528ffe0ea4Corey Tabaka#include <private/dvr/display_protocol.h> 7e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 82251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabakausing android::dvr::display::VSyncProtocol; 9e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkousing android::pdx::Transaction; 10e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 11e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace android { 12e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace dvr { 13e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 14e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoVSyncClient::VSyncClient(long timeout_ms) 15e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko : BASE(pdx::default_transport::ClientChannelFactory::Create( 162251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka VSyncProtocol::kClientPath), 17e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko timeout_ms) {} 18e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 19e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex VakulenkoVSyncClient::VSyncClient() 20e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko : BASE(pdx::default_transport::ClientChannelFactory::Create( 212251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka VSyncProtocol::kClientPath)) {} 22e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 23e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint VSyncClient::Wait(int64_t* timestamp_ns) { 242251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = InvokeRemoteMethod<VSyncProtocol::Wait>(); 25e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko if (!status) { 26e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ALOGE("VSyncClient::Wait: Failed to wait for vsync: %s", 27e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko status.GetErrorMessage().c_str()); 28e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return -status.error(); 29e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 30b4213f7539a3172eed55dbee75f0a0d4ea747ffaOkan Arikan 31b4213f7539a3172eed55dbee75f0a0d4ea747ffaOkan Arikan if (timestamp_ns != nullptr) { 32b4213f7539a3172eed55dbee75f0a0d4ea747ffaOkan Arikan *timestamp_ns = status.get(); 33b4213f7539a3172eed55dbee75f0a0d4ea747ffaOkan Arikan } 34e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return 0; 35e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 36e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 37e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint VSyncClient::GetFd() { return event_fd(); } 38e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 39e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint VSyncClient::GetLastTimestamp(int64_t* timestamp_ns) { 402251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = InvokeRemoteMethod<VSyncProtocol::GetLastTimestamp>(); 41e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko if (!status) { 42e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ALOGE("VSyncClient::GetLastTimestamp: Failed to get vsync timestamp: %s", 43e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko status.GetErrorMessage().c_str()); 44e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return -status.error(); 45e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 46e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko *timestamp_ns = status.get(); 47e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return 0; 48e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 49e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 50e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint VSyncClient::GetSchedInfo(int64_t* vsync_period_ns, int64_t* timestamp_ns, 51e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint32_t* next_vsync_count) { 52e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko if (!vsync_period_ns || !timestamp_ns || !next_vsync_count) 53e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return -EINVAL; 54e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 552251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = InvokeRemoteMethod<VSyncProtocol::GetSchedInfo>(); 56e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko if (!status) { 57e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ALOGE("VSyncClient::GetSchedInfo:: Failed to get warp timestamp: %s", 58e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko status.GetErrorMessage().c_str()); 59e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return -status.error(); 60e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko } 61e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 62e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko *vsync_period_ns = status.get().vsync_period_ns; 63e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko *timestamp_ns = status.get().timestamp_ns; 64e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko *next_vsync_count = status.get().next_vsync_count; 65e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return 0; 66e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 67e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 68e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint VSyncClient::Acknowledge() { 692251d822dac2a96aad4184a6fdc2690f0a58af7cCorey Tabaka auto status = InvokeRemoteMethod<VSyncProtocol::Acknowledge>(); 70e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko ALOGE_IF(!status, "VSuncClient::Acknowledge: Failed to ack vsync because: %s", 71e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko status.GetErrorMessage().c_str()); 72e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko return ReturnStatusOrError(status); 73e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} 74e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 75e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // namespace dvr 76e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // namespace android 77