Loading core/java/android/os/Binder.java +13 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,19 @@ public class Binder implements IBinder { @CriticalNative public static final native void restoreCallingWorkSource(long token); /** * Mark as being built with VINTF-level stability promise. This API should * only ever be invoked by the build system. It means that the interface * represented by this binder is guaranteed to be kept stable for several * years, and the build system also keeps snapshots of these APIs and * invokes the AIDL compiler to make sure that these snapshots are * backwards compatible. Instead of using this API, use an @VintfStability * interface. * * @hide */ public final native void markVintfStability(); /** * Flush any Binder commands pending in the current thread to the kernel * driver. This can be Loading core/jni/android_util_Binder.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -30,12 +30,13 @@ #include <unistd.h> #include <android-base/stringprintf.h> #include <binder/BpBinder.h> #include <binder/IInterface.h> #include <binder/IServiceManager.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/Parcel.h> #include <binder/BpBinder.h> #include <binder/ProcessState.h> #include <binder/Stability.h> #include <cutils/atomic.h> #include <log/log.h> #include <utils/KeyedVector.h> Loading Loading @@ -459,6 +460,9 @@ public: sp<JavaBBinder> b = mBinder.promote(); if (b == NULL) { b = new JavaBBinder(env, obj); if (mVintf) { ::android::internal::Stability::markVintf(b.get()); } mBinder = b; ALOGV("Creating JavaBinder %p (refs %p) for Object %p, weakCount=%" PRId32 "\n", b.get(), b->getWeakRefs(), obj, b->getWeakRefs()->getWeakCount()); Loading @@ -473,9 +477,18 @@ public: return mBinder.promote(); } void markVintf() { mVintf = true; } private: Mutex mLock; wp<JavaBBinder> mBinder; // in the future, we might condense this into int32_t stability, or if there // is too much binder state here, we can think about making JavaBBinder an // sp here (avoid recreating it) bool mVintf = false; }; // ---------------------------------------------------------------------------- Loading Loading @@ -962,6 +975,12 @@ static void android_os_Binder_restoreCallingWorkSource(jlong token) IPCThreadState::self()->restoreCallingWorkSource(token); } static void android_os_Binder_markVintfStability(JNIEnv* env, jobject clazz) { JavaBBinderHolder* jbh = (JavaBBinderHolder*) env->GetLongField(clazz, gBinderOffsets.mObject); jbh->markVintf(); } static void android_os_Binder_flushPendingCommands(JNIEnv* env, jobject clazz) { IPCThreadState::self()->flushCommands(); Loading Loading @@ -1038,6 +1057,7 @@ static const JNINativeMethod gBinderMethods[] = { // @CriticalNative { "clearCallingWorkSource", "()J", (void*)android_os_Binder_clearCallingWorkSource }, { "restoreCallingWorkSource", "(J)V", (void*)android_os_Binder_restoreCallingWorkSource }, { "markVintfStability", "()V", (void*)android_os_Binder_markVintfStability}, { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands }, { "getNativeBBinderHolder", "()J", (void*)android_os_Binder_getNativeBBinderHolder }, { "getNativeFinalizer", "()J", (void*)android_os_Binder_getNativeFinalizer }, Loading Loading
core/java/android/os/Binder.java +13 −0 Original line number Diff line number Diff line Loading @@ -501,6 +501,19 @@ public class Binder implements IBinder { @CriticalNative public static final native void restoreCallingWorkSource(long token); /** * Mark as being built with VINTF-level stability promise. This API should * only ever be invoked by the build system. It means that the interface * represented by this binder is guaranteed to be kept stable for several * years, and the build system also keeps snapshots of these APIs and * invokes the AIDL compiler to make sure that these snapshots are * backwards compatible. Instead of using this API, use an @VintfStability * interface. * * @hide */ public final native void markVintfStability(); /** * Flush any Binder commands pending in the current thread to the kernel * driver. This can be Loading
core/jni/android_util_Binder.cpp +22 −2 Original line number Diff line number Diff line Loading @@ -30,12 +30,13 @@ #include <unistd.h> #include <android-base/stringprintf.h> #include <binder/BpBinder.h> #include <binder/IInterface.h> #include <binder/IServiceManager.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/Parcel.h> #include <binder/BpBinder.h> #include <binder/ProcessState.h> #include <binder/Stability.h> #include <cutils/atomic.h> #include <log/log.h> #include <utils/KeyedVector.h> Loading Loading @@ -459,6 +460,9 @@ public: sp<JavaBBinder> b = mBinder.promote(); if (b == NULL) { b = new JavaBBinder(env, obj); if (mVintf) { ::android::internal::Stability::markVintf(b.get()); } mBinder = b; ALOGV("Creating JavaBinder %p (refs %p) for Object %p, weakCount=%" PRId32 "\n", b.get(), b->getWeakRefs(), obj, b->getWeakRefs()->getWeakCount()); Loading @@ -473,9 +477,18 @@ public: return mBinder.promote(); } void markVintf() { mVintf = true; } private: Mutex mLock; wp<JavaBBinder> mBinder; // in the future, we might condense this into int32_t stability, or if there // is too much binder state here, we can think about making JavaBBinder an // sp here (avoid recreating it) bool mVintf = false; }; // ---------------------------------------------------------------------------- Loading Loading @@ -962,6 +975,12 @@ static void android_os_Binder_restoreCallingWorkSource(jlong token) IPCThreadState::self()->restoreCallingWorkSource(token); } static void android_os_Binder_markVintfStability(JNIEnv* env, jobject clazz) { JavaBBinderHolder* jbh = (JavaBBinderHolder*) env->GetLongField(clazz, gBinderOffsets.mObject); jbh->markVintf(); } static void android_os_Binder_flushPendingCommands(JNIEnv* env, jobject clazz) { IPCThreadState::self()->flushCommands(); Loading Loading @@ -1038,6 +1057,7 @@ static const JNINativeMethod gBinderMethods[] = { // @CriticalNative { "clearCallingWorkSource", "()J", (void*)android_os_Binder_clearCallingWorkSource }, { "restoreCallingWorkSource", "(J)V", (void*)android_os_Binder_restoreCallingWorkSource }, { "markVintfStability", "()V", (void*)android_os_Binder_markVintfStability}, { "flushPendingCommands", "()V", (void*)android_os_Binder_flushPendingCommands }, { "getNativeBBinderHolder", "()J", (void*)android_os_Binder_getNativeBBinderHolder }, { "getNativeFinalizer", "()J", (void*)android_os_Binder_getNativeFinalizer }, Loading