Loading core/java/android/view/SurfaceControl.java +1 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,7 @@ public final class SurfaceControl implements Parcelable { private String mName; /** * Note: do not rename, this field is used by native code. * @hide */ public long mNativeObject; Loading core/jni/android_view_SurfaceControl.cpp +44 −7 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <android_runtime/android_graphics_GraphicBuffer.h> #include <android_runtime/android_hardware_HardwareBuffer.h> #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_view_SurfaceControl.h> #include <android_runtime/android_view_SurfaceSession.h> #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> Loading Loading @@ -221,8 +222,14 @@ static struct { static struct { jclass clazz; jfieldID mNativeObject; } gTransactionClassInfo; static struct { jclass clazz; jfieldID mNativeObject; jmethodID invokeReleaseCallback; } gInvokeReleaseCallback; } gSurfaceControlClassInfo; constexpr ui::Dataspace pickDataspaceFromColorMode(const ui::ColorMode colorMode) { switch (colorMode) { Loading Loading @@ -511,8 +518,9 @@ static ReleaseBufferCallback genReleaseCallback(JNIEnv* env, jobject releaseCall if (fenceCopy) { fenceCopy->incStrong(0); } globalCallbackRef->env()->CallStaticVoidMethod(gInvokeReleaseCallback.clazz, gInvokeReleaseCallback.invokeReleaseCallback, globalCallbackRef->env() ->CallStaticVoidMethod(gSurfaceControlClassInfo.clazz, gSurfaceControlClassInfo.invokeReleaseCallback, globalCallbackRef->object(), reinterpret_cast<jlong>(fenceCopy)); }; Loading Loading @@ -1906,6 +1914,28 @@ static jobject nativeGetDefaultApplyToken(JNIEnv* env, jclass clazz) { // ---------------------------------------------------------------------------- SurfaceControl* android_view_SurfaceControl_getNativeSurfaceControl(JNIEnv* env, jobject surfaceControlObj) { if (!!surfaceControlObj && env->IsInstanceOf(surfaceControlObj, gSurfaceControlClassInfo.clazz)) { return reinterpret_cast<SurfaceControl*>( env->GetLongField(surfaceControlObj, gSurfaceControlClassInfo.mNativeObject)); } else { return nullptr; } } SurfaceComposerClient::Transaction* android_view_SurfaceTransaction_getNativeSurfaceTransaction( JNIEnv* env, jobject surfaceTransactionObj) { if (!!surfaceTransactionObj && env->IsInstanceOf(surfaceTransactionObj, gTransactionClassInfo.clazz)) { return reinterpret_cast<SurfaceComposerClient::Transaction*>( env->GetLongField(surfaceTransactionObj, gTransactionClassInfo.mNativeObject)); } else { return nullptr; } } static const JNINativeMethod sSurfaceControlMethods[] = { // clang-format off {"nativeCreate", "(Landroid/view/SurfaceSession;Ljava/lang/String;IIIIJLandroid/os/Parcel;)J", Loading Loading @@ -2306,11 +2336,18 @@ int register_android_view_SurfaceControl(JNIEnv* env) GetFieldIDOrDie(env, displayDecorationSupportClazz, "alphaInterpretation", "I"); jclass surfaceControlClazz = FindClassOrDie(env, "android/view/SurfaceControl"); gInvokeReleaseCallback.clazz = MakeGlobalRefOrDie(env, surfaceControlClazz); gInvokeReleaseCallback.invokeReleaseCallback = gSurfaceControlClassInfo.clazz = MakeGlobalRefOrDie(env, surfaceControlClazz); gSurfaceControlClassInfo.mNativeObject = GetFieldIDOrDie(env, gSurfaceControlClassInfo.clazz, "mNativeObject", "J"); gSurfaceControlClassInfo.invokeReleaseCallback = GetStaticMethodIDOrDie(env, surfaceControlClazz, "invokeReleaseCallback", "(Ljava/util/function/Consumer;J)V"); jclass surfaceTransactionClazz = FindClassOrDie(env, "android/view/SurfaceControl$Transaction"); gTransactionClassInfo.clazz = MakeGlobalRefOrDie(env, surfaceTransactionClazz); gTransactionClassInfo.mNativeObject = GetFieldIDOrDie(env, gTransactionClassInfo.clazz, "mNativeObject", "J"); return err; } Loading core/jni/include/android_runtime/android_view_SurfaceControl.h 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * Copyright 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _ANDROID_VIEW_SURFACECONTROL_H #define _ANDROID_VIEW_SURFACECONTROL_H #include <gui/SurfaceComposerClient.h> #include <gui/SurfaceControl.h> #include "jni.h" namespace android { /* Gets the underlying native SurfaceControl for a java SurfaceControl. */ extern SurfaceControl* android_view_SurfaceControl_getNativeSurfaceControl( JNIEnv* env, jobject surfaceControlObj); /* Gets the underlying native SurfaceControl for a java SurfaceControl. */ extern SurfaceComposerClient::Transaction* android_view_SurfaceTransaction_getNativeSurfaceTransaction(JNIEnv* env, jobject surfaceTransactionObj); } // namespace android #endif // _ANDROID_VIEW_SURFACECONTROL_H native/android/libandroid.map.txt +2 −0 Original line number Diff line number Diff line Loading @@ -238,6 +238,7 @@ LIBANDROID { ASurfaceControl_createFromWindow; # introduced=29 ASurfaceControl_acquire; # introduced=31 ASurfaceControl_release; # introduced=29 ASurfaceControl_fromSurfaceControl; # introduced=34 ASurfaceTexture_acquireANativeWindow; # introduced=28 ASurfaceTexture_attachToGLContext; # introduced=28 ASurfaceTexture_detachFromGLContext; # introduced=28 Loading @@ -255,6 +256,7 @@ LIBANDROID { ASurfaceTransaction_apply; # introduced=29 ASurfaceTransaction_create; # introduced=29 ASurfaceTransaction_delete; # introduced=29 ASurfaceTransaction_fromTransaction; # introduced=34 ASurfaceTransaction_reparent; # introduced=29 ASurfaceTransaction_setBuffer; # introduced=29 ASurfaceTransaction_setBufferAlpha; # introduced=29 Loading native/android/surface_control.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #include <android/native_window.h> #include <android/surface_control.h> #include <android/surface_control_jni.h> #include <android_runtime/android_view_SurfaceControl.h> #include <configstore/Utils.h> #include <gui/HdrMetadata.h> #include <gui/ISurfaceComposer.h> Loading @@ -28,6 +30,8 @@ #include <ui/DynamicDisplayInfo.h> #include <utils/Timers.h> #include <utility> using namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; using namespace android; Loading Loading @@ -134,6 +138,11 @@ void ASurfaceControl_release(ASurfaceControl* aSurfaceControl) { SurfaceControl_release(surfaceControl); } ASurfaceControl* ASurfaceControl_fromSurfaceControl(JNIEnv* env, jobject surfaceControlObj) { return reinterpret_cast<ASurfaceControl*>( android_view_SurfaceControl_getNativeSurfaceControl(env, surfaceControlObj)); } struct ASurfaceControlStats { std::variant<int64_t, sp<Fence>> acquireTimeOrFence; sp<Fence> previousReleaseFence; Loading Loading @@ -190,6 +199,11 @@ void ASurfaceTransaction_delete(ASurfaceTransaction* aSurfaceTransaction) { delete transaction; } ASurfaceTransaction* ASurfaceTransaction_fromTransaction(JNIEnv* env, jobject transactionObj) { return reinterpret_cast<ASurfaceTransaction*>( android_view_SurfaceTransaction_getNativeSurfaceTransaction(env, transactionObj)); } void ASurfaceTransaction_apply(ASurfaceTransaction* aSurfaceTransaction) { CHECK_NOT_NULL(aSurfaceTransaction); Loading Loading
core/java/android/view/SurfaceControl.java +1 −0 Original line number Diff line number Diff line Loading @@ -449,6 +449,7 @@ public final class SurfaceControl implements Parcelable { private String mName; /** * Note: do not rename, this field is used by native code. * @hide */ public long mNativeObject; Loading
core/jni/android_view_SurfaceControl.cpp +44 −7 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ #include <android_runtime/android_graphics_GraphicBuffer.h> #include <android_runtime/android_hardware_HardwareBuffer.h> #include <android_runtime/android_view_Surface.h> #include <android_runtime/android_view_SurfaceControl.h> #include <android_runtime/android_view_SurfaceSession.h> #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> Loading Loading @@ -221,8 +222,14 @@ static struct { static struct { jclass clazz; jfieldID mNativeObject; } gTransactionClassInfo; static struct { jclass clazz; jfieldID mNativeObject; jmethodID invokeReleaseCallback; } gInvokeReleaseCallback; } gSurfaceControlClassInfo; constexpr ui::Dataspace pickDataspaceFromColorMode(const ui::ColorMode colorMode) { switch (colorMode) { Loading Loading @@ -511,8 +518,9 @@ static ReleaseBufferCallback genReleaseCallback(JNIEnv* env, jobject releaseCall if (fenceCopy) { fenceCopy->incStrong(0); } globalCallbackRef->env()->CallStaticVoidMethod(gInvokeReleaseCallback.clazz, gInvokeReleaseCallback.invokeReleaseCallback, globalCallbackRef->env() ->CallStaticVoidMethod(gSurfaceControlClassInfo.clazz, gSurfaceControlClassInfo.invokeReleaseCallback, globalCallbackRef->object(), reinterpret_cast<jlong>(fenceCopy)); }; Loading Loading @@ -1906,6 +1914,28 @@ static jobject nativeGetDefaultApplyToken(JNIEnv* env, jclass clazz) { // ---------------------------------------------------------------------------- SurfaceControl* android_view_SurfaceControl_getNativeSurfaceControl(JNIEnv* env, jobject surfaceControlObj) { if (!!surfaceControlObj && env->IsInstanceOf(surfaceControlObj, gSurfaceControlClassInfo.clazz)) { return reinterpret_cast<SurfaceControl*>( env->GetLongField(surfaceControlObj, gSurfaceControlClassInfo.mNativeObject)); } else { return nullptr; } } SurfaceComposerClient::Transaction* android_view_SurfaceTransaction_getNativeSurfaceTransaction( JNIEnv* env, jobject surfaceTransactionObj) { if (!!surfaceTransactionObj && env->IsInstanceOf(surfaceTransactionObj, gTransactionClassInfo.clazz)) { return reinterpret_cast<SurfaceComposerClient::Transaction*>( env->GetLongField(surfaceTransactionObj, gTransactionClassInfo.mNativeObject)); } else { return nullptr; } } static const JNINativeMethod sSurfaceControlMethods[] = { // clang-format off {"nativeCreate", "(Landroid/view/SurfaceSession;Ljava/lang/String;IIIIJLandroid/os/Parcel;)J", Loading Loading @@ -2306,11 +2336,18 @@ int register_android_view_SurfaceControl(JNIEnv* env) GetFieldIDOrDie(env, displayDecorationSupportClazz, "alphaInterpretation", "I"); jclass surfaceControlClazz = FindClassOrDie(env, "android/view/SurfaceControl"); gInvokeReleaseCallback.clazz = MakeGlobalRefOrDie(env, surfaceControlClazz); gInvokeReleaseCallback.invokeReleaseCallback = gSurfaceControlClassInfo.clazz = MakeGlobalRefOrDie(env, surfaceControlClazz); gSurfaceControlClassInfo.mNativeObject = GetFieldIDOrDie(env, gSurfaceControlClassInfo.clazz, "mNativeObject", "J"); gSurfaceControlClassInfo.invokeReleaseCallback = GetStaticMethodIDOrDie(env, surfaceControlClazz, "invokeReleaseCallback", "(Ljava/util/function/Consumer;J)V"); jclass surfaceTransactionClazz = FindClassOrDie(env, "android/view/SurfaceControl$Transaction"); gTransactionClassInfo.clazz = MakeGlobalRefOrDie(env, surfaceTransactionClazz); gTransactionClassInfo.mNativeObject = GetFieldIDOrDie(env, gTransactionClassInfo.clazz, "mNativeObject", "J"); return err; } Loading
core/jni/include/android_runtime/android_view_SurfaceControl.h 0 → 100644 +38 −0 Original line number Diff line number Diff line /* * Copyright 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _ANDROID_VIEW_SURFACECONTROL_H #define _ANDROID_VIEW_SURFACECONTROL_H #include <gui/SurfaceComposerClient.h> #include <gui/SurfaceControl.h> #include "jni.h" namespace android { /* Gets the underlying native SurfaceControl for a java SurfaceControl. */ extern SurfaceControl* android_view_SurfaceControl_getNativeSurfaceControl( JNIEnv* env, jobject surfaceControlObj); /* Gets the underlying native SurfaceControl for a java SurfaceControl. */ extern SurfaceComposerClient::Transaction* android_view_SurfaceTransaction_getNativeSurfaceTransaction(JNIEnv* env, jobject surfaceTransactionObj); } // namespace android #endif // _ANDROID_VIEW_SURFACECONTROL_H
native/android/libandroid.map.txt +2 −0 Original line number Diff line number Diff line Loading @@ -238,6 +238,7 @@ LIBANDROID { ASurfaceControl_createFromWindow; # introduced=29 ASurfaceControl_acquire; # introduced=31 ASurfaceControl_release; # introduced=29 ASurfaceControl_fromSurfaceControl; # introduced=34 ASurfaceTexture_acquireANativeWindow; # introduced=28 ASurfaceTexture_attachToGLContext; # introduced=28 ASurfaceTexture_detachFromGLContext; # introduced=28 Loading @@ -255,6 +256,7 @@ LIBANDROID { ASurfaceTransaction_apply; # introduced=29 ASurfaceTransaction_create; # introduced=29 ASurfaceTransaction_delete; # introduced=29 ASurfaceTransaction_fromTransaction; # introduced=34 ASurfaceTransaction_reparent; # introduced=29 ASurfaceTransaction_setBuffer; # introduced=29 ASurfaceTransaction_setBufferAlpha; # introduced=29 Loading
native/android/surface_control.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ #include <android/hardware/configstore/1.0/ISurfaceFlingerConfigs.h> #include <android/native_window.h> #include <android/surface_control.h> #include <android/surface_control_jni.h> #include <android_runtime/android_view_SurfaceControl.h> #include <configstore/Utils.h> #include <gui/HdrMetadata.h> #include <gui/ISurfaceComposer.h> Loading @@ -28,6 +30,8 @@ #include <ui/DynamicDisplayInfo.h> #include <utils/Timers.h> #include <utility> using namespace android::hardware::configstore; using namespace android::hardware::configstore::V1_0; using namespace android; Loading Loading @@ -134,6 +138,11 @@ void ASurfaceControl_release(ASurfaceControl* aSurfaceControl) { SurfaceControl_release(surfaceControl); } ASurfaceControl* ASurfaceControl_fromSurfaceControl(JNIEnv* env, jobject surfaceControlObj) { return reinterpret_cast<ASurfaceControl*>( android_view_SurfaceControl_getNativeSurfaceControl(env, surfaceControlObj)); } struct ASurfaceControlStats { std::variant<int64_t, sp<Fence>> acquireTimeOrFence; sp<Fence> previousReleaseFence; Loading Loading @@ -190,6 +199,11 @@ void ASurfaceTransaction_delete(ASurfaceTransaction* aSurfaceTransaction) { delete transaction; } ASurfaceTransaction* ASurfaceTransaction_fromTransaction(JNIEnv* env, jobject transactionObj) { return reinterpret_cast<ASurfaceTransaction*>( android_view_SurfaceTransaction_getNativeSurfaceTransaction(env, transactionObj)); } void ASurfaceTransaction_apply(ASurfaceTransaction* aSurfaceTransaction) { CHECK_NOT_NULL(aSurfaceTransaction); Loading