1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 /** 18 * @addtogroup Choreographer 19 * @{ 20 */ 21 22 /** 23 * @file choreographer.h 24 */ 25 26 #ifndef ANDROID_CHOREOGRAPHER_H 27 #define ANDROID_CHOREOGRAPHER_H 28 29 #include <stdint.h> 30 #include <sys/cdefs.h> 31 32 __BEGIN_DECLS 33 34 struct AChoreographer; 35 typedef struct AChoreographer AChoreographer; 36 37 /** 38 * Prototype of the function that is called when a new frame is being rendered. 39 * It's passed the time that the frame is being rendered as nanoseconds in the 40 * CLOCK_MONOTONIC time base, as well as the data pointer provided by the 41 * application that registered a callback. All callbacks that run as part of 42 * rendering a frame will observe the same frame time, so it should be used 43 * whenever events need to be synchronized (e.g. animations). 44 */ 45 typedef void (*AChoreographer_frameCallback)(long frameTimeNanos, void* data); 46 47 /** 48 * Prototype of the function that is called when a new frame is being rendered. 49 * It's passed the time that the frame is being rendered as nanoseconds in the 50 * CLOCK_MONOTONIC time base, as well as the data pointer provided by the 51 * application that registered a callback. All callbacks that run as part of 52 * rendering a frame will observe the same frame time, so it should be used 53 * whenever events need to be synchronized (e.g. animations). 54 */ 55 typedef void (*AChoreographer_frameCallback64)(int64_t frameTimeNanos, void* data); 56 57 #if __ANDROID_API__ >= 24 58 59 /** 60 * Get the AChoreographer instance for the current thread. This must be called 61 * on an ALooper thread. 62 * 63 * Available since API level 24. 64 */ 65 AChoreographer* AChoreographer_getInstance() __INTRODUCED_IN(24); 66 67 /** 68 * Deprecated: Use AChoreographer_postFrameCallback64 instead. 69 */ 70 void AChoreographer_postFrameCallback(AChoreographer* choreographer, 71 AChoreographer_frameCallback callback, void* data) __INTRODUCED_IN(24) __DEPRECATED_IN(29); 72 73 /** 74 * Deprecated: Use AChoreographer_postFrameCallbackDelayed64 instead. 75 */ 76 void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer, 77 AChoreographer_frameCallback callback, void* data, 78 long delayMillis) __INTRODUCED_IN(24) __DEPRECATED_IN(29); 79 80 #endif /* __ANDROID_API__ >= 24 */ 81 82 #if __ANDROID_API__ >= 29 83 84 /** 85 * Power a callback to be run on the next frame. The data pointer provided will 86 * be passed to the callback function when it's called. 87 * 88 * Available since API level 29. 89 */ 90 void AChoreographer_postFrameCallback64(AChoreographer* chroreographer, 91 AChoreographer_frameCallback64 callback, void* data) __INTRODUCED_IN(29); 92 93 /** 94 * Post a callback to be run on the frame following the specified delay. The 95 * data pointer provided will be passed to the callback function when it's 96 * called. 97 * 98 * Available since API level 29. 99 */ 100 void AChoreographer_postFrameCallbackDelayed64(AChoreographer* choreographer, 101 AChoreographer_frameCallback64 callback, void* data, uint32_t delayMillis) __INTRODUCED_IN(29); 102 103 #endif /* __ANDROID_API__ >= 29 */ 104 105 __END_DECLS 106 107 #endif // ANDROID_CHOREOGRAPHER_H 108 109 /** @} */ 110