// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_GFX_ANDROID_ACHOREOGRAPHER_COMPAT_H_
#define UI_GFX_ANDROID_ACHOREOGRAPHER_COMPAT_H_
#include <sys/types.h>
#include "ui/gfx/gfx_export.h"
extern "C" {
typedef struct AChoreographer AChoreographer;
typedef void (*AChoreographer_frameCallback64)(int64_t, void*);
typedef void (*AChoreographer_refreshRateCallback)(int64_t, void*);
using pAChoreographer_getInstance = AChoreographer* (*)();
using pAChoreographer_postFrameCallback64 =
void (*)(AChoreographer*, AChoreographer_frameCallback64, void*);
using pAChoreographer_registerRefreshRateCallback =
void (*)(AChoreographer*, AChoreographer_refreshRateCallback, void*);
using pAChoreographer_unregisterRefreshRateCallback =
void (*)(AChoreographer*, AChoreographer_refreshRateCallback, void*);
typedef struct AChoreographerFrameCallbackData AChoreographerFrameCallbackData;
typedef void (*AChoreographer_vsyncCallback)(
const AChoreographerFrameCallbackData*,
void*);
using pAChoreographer_postVsyncCallback =
void (*)(AChoreographer* choreographer,
AChoreographer_vsyncCallback callback,
void* data);
using pAChoreographerFrameCallbackData_getFrameTimeNanos =
int64_t (*)(const AChoreographerFrameCallbackData*);
using pAChoreographerFrameCallbackData_getFrameTimelinesLength =
size_t (*)(const AChoreographerFrameCallbackData*);
using pAChoreographerFrameCallbackData_getPreferredFrameTimelineIndex =
size_t (*)(const AChoreographerFrameCallbackData*);
using pAChoreographerFrameCallbackData_getFrameTimelineVsyncId =
int64_t (*)(const AChoreographerFrameCallbackData*, size_t);
using pAChoreographerFrameCallbackData_getFrameTimelineExpectedPresentationTimeNanos =
int64_t (*)(const AChoreographerFrameCallbackData*, size_t);
using pAChoreographerFrameCallbackData_getFrameTimelineDeadlineNanos =
int64_t (*)(const AChoreographerFrameCallbackData*, size_t);
} // extern "C"
namespace gfx {
struct GFX_EXPORT AChoreographerCompat {
static GFX_EXPORT const AChoreographerCompat& Get();
bool supported = true;
pAChoreographer_getInstance AChoreographer_getInstanceFn = nullptr;
pAChoreographer_postFrameCallback64 AChoreographer_postFrameCallback64Fn =
nullptr;
pAChoreographer_registerRefreshRateCallback
AChoreographer_registerRefreshRateCallbackFn = nullptr;
pAChoreographer_unregisterRefreshRateCallback
AChoreographer_unregisterRefreshRateCallbackFn = nullptr;
private:
AChoreographerCompat();
};
struct GFX_EXPORT AChoreographerCompat33 {
static GFX_EXPORT const AChoreographerCompat33& Get();
bool supported = true;
pAChoreographer_postVsyncCallback AChoreographer_postVsyncCallbackFn =
nullptr;
pAChoreographerFrameCallbackData_getFrameTimeNanos
AChoreographerFrameCallbackData_getFrameTimeNanosFn = nullptr;
pAChoreographerFrameCallbackData_getFrameTimelinesLength
AChoreographerFrameCallbackData_getFrameTimelinesLengthFn = nullptr;
pAChoreographerFrameCallbackData_getPreferredFrameTimelineIndex
AChoreographerFrameCallbackData_getPreferredFrameTimelineIndexFn =
nullptr;
pAChoreographerFrameCallbackData_getFrameTimelineVsyncId
AChoreographerFrameCallbackData_getFrameTimelineVsyncIdFn = nullptr;
pAChoreographerFrameCallbackData_getFrameTimelineExpectedPresentationTimeNanos
AChoreographerFrameCallbackData_getFrameTimelineExpectedPresentationTimeNanosFn =
nullptr;
pAChoreographerFrameCallbackData_getFrameTimelineDeadlineNanos
AChoreographerFrameCallbackData_getFrameTimelineDeadlineNanosFn = nullptr;
private:
AChoreographerCompat33();
};
} // namespace gfx
#endif // UI_GFX_ANDROID_ACHOREOGRAPHER_COMPAT_H_