blob: 44883cc498d77ced76ee0248d1a31386694b9a3e [file] [log] [blame]
Michael Wrightf5eee402015-12-07 15:26:38 -05001/*
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
Santos Cordon908d0082019-02-20 18:08:02 +000029#include <stdint.h>
Michael Wrightfb911b22016-01-26 16:05:54 -080030#include <sys/cdefs.h>
31
Michael Wrightf5eee402015-12-07 15:26:38 -050032__BEGIN_DECLS
33
34struct AChoreographer;
35typedef 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 */
45typedef void (*AChoreographer_frameCallback)(long frameTimeNanos, void* data);
46
Santos Cordon908d0082019-02-20 18:08:02 +000047/**
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 */
55typedef void (*AChoreographer_frameCallback64)(int64_t frameTimeNanos, void* data);
56
Ryan Prichard92b1ebe2018-07-19 20:32:19 -070057#if __ANDROID_API__ >= 24
58
Michael Wrightf5eee402015-12-07 15:26:38 -050059/**
60 * Get the AChoreographer instance for the current thread. This must be called
61 * on an ALooper thread.
62 */
Elliott Hughes9db409b2018-06-18 12:28:46 -070063AChoreographer* AChoreographer_getInstance() __INTRODUCED_IN(24);
Michael Wrightf5eee402015-12-07 15:26:38 -050064
65/**
Santos Cordon908d0082019-02-20 18:08:02 +000066 * Deprecated: Use AChoreographer_postFrameCallback64 instead.
Michael Wrightf5eee402015-12-07 15:26:38 -050067 */
68void AChoreographer_postFrameCallback(AChoreographer* choreographer,
Santos Cordon908d0082019-02-20 18:08:02 +000069 AChoreographer_frameCallback callback, void* data) __INTRODUCED_IN(24) __DEPRECATED_IN(29);
Elliott Hughes9db409b2018-06-18 12:28:46 -070070
Michael Wrightf5eee402015-12-07 15:26:38 -050071/**
Santos Cordon908d0082019-02-20 18:08:02 +000072 * Deprecated: Use AChoreographer_postFrameCallbackDelayed64 instead.
Michael Wrightf5eee402015-12-07 15:26:38 -050073 */
74void AChoreographer_postFrameCallbackDelayed(AChoreographer* choreographer,
Elliott Hughes9db409b2018-06-18 12:28:46 -070075 AChoreographer_frameCallback callback, void* data,
Santos Cordon908d0082019-02-20 18:08:02 +000076 long delayMillis) __INTRODUCED_IN(24) __DEPRECATED_IN(29);
Dan Albert494ed552016-09-23 15:57:45 -070077
Ryan Prichard92b1ebe2018-07-19 20:32:19 -070078#endif /* __ANDROID_API__ >= 24 */
79
Santos Cordon908d0082019-02-20 18:08:02 +000080#if __ANDROID_API__ >= 29
81
82/**
83 * Power a callback to be run on the next frame. The data pointer provided will
84 * be passed to the callback function when it's called.
85 */
86void AChoreographer_postFrameCallback64(AChoreographer* chroreographer,
87 AChoreographer_frameCallback64 callback, void* data) __INTRODUCED_IN(29);
88
89/**
90 * Post a callback to be run on the frame following the specified delay. The
91 * data pointer provided will be passed to the callback function when it's
92 * called.
93 */
94void AChoreographer_postFrameCallbackDelayed64(AChoreographer* choreographer,
95 AChoreographer_frameCallback64 callback, void* data, uint32_t delayMillis) __INTRODUCED_IN(29);
96
97#endif /* __ANDROID_API__ >= 29 */
98
Michael Wrightf5eee402015-12-07 15:26:38 -050099__END_DECLS
100
101#endif // ANDROID_CHOREOGRAPHER_H
102
103/** @} */