diff --git a/libsync/include/android/sync.h b/libsync/include/android/sync.h index 68f74a0b2..32bb878ba 100644 --- a/libsync/include/android/sync.h +++ b/libsync/include/android/sync.h @@ -41,28 +41,8 @@ __BEGIN_DECLS -struct sync_fence_info_data { - uint32_t len; - char name[32]; - int32_t status; - uint8_t pt_info[0]; -}; - -struct sync_pt_info { - uint32_t len; - char obj_name[32]; - char driver_name[32]; - int32_t status; - uint64_t timestamp_ns; - uint8_t driver_data[0]; -}; - /* timeout in msecs */ int sync_wait(int fd, int timeout); -struct sync_fence_info_data *sync_fence_info(int fd); -struct sync_pt_info *sync_pt_info(struct sync_fence_info_data *info, - struct sync_pt_info *itr); -void sync_fence_info_free(struct sync_fence_info_data *info); __END_DECLS diff --git a/libsync/sync.c b/libsync/sync.c index 6b187faed..b8c48c7f7 100644 --- a/libsync/sync.c +++ b/libsync/sync.c @@ -30,6 +30,29 @@ #include +/* Prototypes for deprecated functions that used to be declared in the legacy + * android/sync.h. They've been moved here to make sure new code does not use + * them, but the functions are still defined to avoid breaking existing + * binaries. Eventually they can be removed altogether. + */ +struct sync_fence_info_data { + uint32_t len; + char name[32]; + int32_t status; + uint8_t pt_info[0]; +}; +struct sync_pt_info { + uint32_t len; + char obj_name[32]; + char driver_name[32]; + int32_t status; + uint64_t timestamp_ns; + uint8_t driver_data[0]; +}; +struct sync_fence_info_data* sync_fence_info(int fd); +struct sync_pt_info* sync_pt_info(struct sync_fence_info_data* info, struct sync_pt_info* itr); +void sync_fence_info_free(struct sync_fence_info_data* info); + /* Legacy Sync API */ struct sync_legacy_merge_data { diff --git a/libsync/tests/sync_test.cpp b/libsync/tests/sync_test.cpp index 0fb86d6fc..011b09d00 100644 --- a/libsync/tests/sync_test.cpp +++ b/libsync/tests/sync_test.cpp @@ -15,6 +15,35 @@ #include #include +/* These deprecated declarations were in the legacy android/sync.h. They've been removed to + * encourage code to move to the modern equivalents. But they are still implemented in libsync.so + * to avoid breaking existing binaries; as long as that's true we should keep testing them here. + * That means making local copies of the declarations. + */ +extern "C" { + +struct sync_fence_info_data { + uint32_t len; + char name[32]; + int32_t status; + uint8_t pt_info[0]; +}; + +struct sync_pt_info { + uint32_t len; + char obj_name[32]; + char driver_name[32]; + int32_t status; + uint64_t timestamp_ns; + uint8_t driver_data[0]; +}; + +struct sync_fence_info_data* sync_fence_info(int fd); +struct sync_pt_info* sync_pt_info(struct sync_fence_info_data* info, struct sync_pt_info* itr); +void sync_fence_info_free(struct sync_fence_info_data* info); + +} // extern "C" + // TODO: better stress tests? // Handle more than 64 fd's simultaneously, i.e. fix sync_fence_info's 4k limit. // Handle wraparound in timelines like nvidia.