diff options
author | Scott Lobdell <slobdell@google.com> | 2021-02-23 11:55:26 -0800 |
---|---|---|
committer | Daniel Norman <danielnorman@google.com> | 2021-03-01 15:24:51 -0800 |
commit | 24818fca475a6726f5ef0cae42149615079af6e9 (patch) | |
tree | 1a3163ac7ce01c335d8d1c05cacddf47c0a30bfd /native/android/surface_control.cpp | |
parent | 8deb6bda58c7ecd95285f4dc934269e0c98c989a (diff) | |
parent | 0f50c486e59546c32acf3f2cdf6667897600de5c (diff) |
Merge SP1A.210222.001
Change-Id: If3509f3a660e820f4c8c0b29e007faa868e1f089
Diffstat (limited to 'native/android/surface_control.cpp')
-rw-r--r-- | native/android/surface_control.cpp | 58 |
1 files changed, 51 insertions, 7 deletions
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp index 189be800e018..e51add276647 100644 --- a/native/android/surface_control.cpp +++ b/native/android/surface_control.cpp @@ -17,6 +17,7 @@ #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #include <android/native_window.h> #include <android/surface_control.h> +#include <surface_control_private.h> #include <configstore/Utils.h> @@ -185,10 +186,58 @@ ASurfaceControl* ASurfaceControl_create(ASurfaceControl* parent, const char* deb return reinterpret_cast<ASurfaceControl*>(surfaceControl.get()); } +void ASurfaceControl_acquire(ASurfaceControl* aSurfaceControl) { + SurfaceControl* surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl); + + SurfaceControl_acquire(surfaceControl); +} + void ASurfaceControl_release(ASurfaceControl* aSurfaceControl) { - sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl); + SurfaceControl* surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl); + + SurfaceControl_release(surfaceControl); +} + +struct ASurfaceControlStats { + int64_t acquireTime; + sp<Fence> previousReleaseFence; + uint64_t frameNumber; +}; + +void ASurfaceControl_registerSurfaceStatsListener(ASurfaceControl* control, void* context, + ASurfaceControl_SurfaceStatsListener func) { + SurfaceStatsCallback callback = [func](void* callback_context, + nsecs_t, + const sp<Fence>&, + const SurfaceStats& surfaceStats) { + + ASurfaceControlStats aSurfaceControlStats; - SurfaceControl_release(surfaceControl.get()); + ASurfaceControl* aSurfaceControl = + reinterpret_cast<ASurfaceControl*>(surfaceStats.surfaceControl.get()); + aSurfaceControlStats.acquireTime = surfaceStats.acquireTime; + aSurfaceControlStats.previousReleaseFence = surfaceStats.previousReleaseFence; + aSurfaceControlStats.frameNumber = surfaceStats.eventStats.frameNumber; + + (*func)(callback_context, aSurfaceControl, &aSurfaceControlStats); + }; + TransactionCompletedListener::getInstance()->addSurfaceStatsListener(context, + reinterpret_cast<void*>(func), ASurfaceControl_to_SurfaceControl(control), callback); +} + + +void ASurfaceControl_unregisterSurfaceStatsListener(void* context, + ASurfaceControl_SurfaceStatsListener func) { + TransactionCompletedListener::getInstance()->removeSurfaceStatsListener(context, + reinterpret_cast<void*>(func)); +} + +int64_t ASurfaceControlStats_getAcquireTime(ASurfaceControlStats* stats) { + return stats->acquireTime; +} + +uint64_t ASurfaceControlStats_getFrameNumber(ASurfaceControlStats* stats) { + return stats->frameNumber; } ASurfaceTransaction* ASurfaceTransaction_create() { @@ -209,11 +258,6 @@ void ASurfaceTransaction_apply(ASurfaceTransaction* aSurfaceTransaction) { transaction->apply(); } -typedef struct ASurfaceControlStats { - int64_t acquireTime; - sp<Fence> previousReleaseFence; -} ASurfaceControlStats; - struct ASurfaceTransactionStats { std::unordered_map<ASurfaceControl*, ASurfaceControlStats> aSurfaceControlStats; int64_t latchTime; |