Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a96d445a authored by Tim Murray's avatar Tim Murray Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'fifo' into nyc-mr1-dev

* changes:
  Add new mode for SCHED_FIFO on UI and RenderThreads.
  Add isThreadInProcess.
parents a1b026ea 33eb07f5
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -3003,6 +3003,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            reply.writeNoException();
            return true;
        }
        case SET_RENDER_THREAD_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            final int tid = data.readInt();
            setRenderThread(tid);
            reply.writeNoException();
            return true;
        }
        }

        return super.onTransact(code, data, reply, flags);
@@ -7052,5 +7059,18 @@ class ActivityManagerProxy implements IActivityManager
        return;
    }

    public void setRenderThread(int tid)
        throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeInt(tid);
        mRemote.transact(SET_RENDER_THREAD_TRANSACTION, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
        return;
    }

    private IBinder mRemote;
}
+4 −0
Original line number Diff line number Diff line
@@ -659,6 +659,7 @@ public interface IActivityManager extends IInterface {
            throws RemoteException;

    public void setVrThread(int tid) throws RemoteException;
    public void setRenderThread(int tid) throws RemoteException;

    /*
     * Private non-Binder interfaces
@@ -1046,5 +1047,8 @@ public interface IActivityManager extends IInterface {
    int START_CONFIRM_DEVICE_CREDENTIAL_INTENT = IBinder.FIRST_CALL_TRANSACTION + 374;
    int SEND_IDLE_JOB_TRIGGER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 375;
    int SEND_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 376;

    // Start of N MR1 transactions
    int SET_VR_THREAD_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 377;
    int SET_RENDER_THREAD_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 378;
}
+19 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.os;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.system.Os;
import android.system.OsConstants;
import android.util.Log;
import com.android.internal.os.Zygote;
import dalvik.system.VMRuntime;
@@ -328,7 +329,6 @@ public class Process {
     */
    public static final int SCHED_RESET_ON_FORK = 0x40000000;


    // Keep in sync with SP_* constants of enum type SchedPolicy
    // declared in system/core/include/cutils/sched_policy.h,
    // except THREAD_GROUP_DEFAULT does not correspond to any SP_* value.
@@ -1250,4 +1250,22 @@ public class Process {
     * @hide
     */
    public static final native void removeAllProcessGroups();

    /**
     * Check to see if a thread belongs to a given process. This may require
     * more permissions than apps generally have.
     * @return true if this thread belongs to a process
     * @hide
     */
    public static final boolean isThreadInProcess(int tid, int pid) {
        try {
            if (Os.access("/proc/" + tid + "/task/" + pid, OsConstants.F_OK)) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        }
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.view;

import android.app.ActivityManagerNative;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.content.Context;
@@ -917,10 +918,20 @@ public final class ThreadedRenderer {
        synchronized void init(Context context, long renderProxy) {
            if (mInitialized) return;
            mInitialized = true;
            initSched(context, renderProxy);
            initGraphicsStats(context, renderProxy);
            initAssetAtlas(context, renderProxy);
        }

        private static void initSched(Context context, long renderProxy) {
            try {
                int tid = nGetRenderThreadTid(renderProxy);
                ActivityManagerNative.getDefault().setRenderThread(tid);
            } catch (Throwable t) {
                Log.w(LOG_TAG, "Failed to set scheduler for RenderThread", t);
            }
        }

        private static void initGraphicsStats(Context context, long renderProxy) {
            try {
                IBinder binder = ServiceManager.getService("graphicsstats");
@@ -979,6 +990,7 @@ public final class ThreadedRenderer {

    private static native void nSetAtlas(long nativeProxy, GraphicBuffer buffer, long[] map);
    private static native void nSetProcessStatsBuffer(long nativeProxy, int fd);
    private static native int nGetRenderThreadTid(long nativeProxy);

    private static native long nCreateRootRenderNode();
    private static native long nCreateProxy(boolean translucent, long rootRenderNode);
+7 −0
Original line number Diff line number Diff line
@@ -543,6 +543,12 @@ static void android_view_ThreadedRenderer_setProcessStatsBuffer(JNIEnv* env, job
    proxy->setProcessStatsBuffer(fd);
}

static jint android_view_ThreadedRenderer_getRenderThreadTid(JNIEnv* env, jobject clazz,
        jlong proxyPtr) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
    return proxy->getRenderThreadTid();
}

static jlong android_view_ThreadedRenderer_createRootRenderNode(JNIEnv* env, jobject clazz) {
    RootRenderNode* node = new RootRenderNode(env);
    node->incStrong(0);
@@ -858,6 +864,7 @@ const char* const kClassPathName = "android/view/ThreadedRenderer";
static const JNINativeMethod gMethods[] = {
    { "nSetAtlas", "(JLandroid/view/GraphicBuffer;[J)V",   (void*) android_view_ThreadedRenderer_setAtlas },
    { "nSetProcessStatsBuffer", "(JI)V", (void*) android_view_ThreadedRenderer_setProcessStatsBuffer },
    { "nGetRenderThreadTid", "(J)I", (void*) android_view_ThreadedRenderer_getRenderThreadTid },
    { "nCreateRootRenderNode", "()J", (void*) android_view_ThreadedRenderer_createRootRenderNode },
    { "nCreateProxy", "(ZJ)J", (void*) android_view_ThreadedRenderer_createProxy },
    { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy },
Loading