Loading core/jni/android_view_ThreadedRenderer.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -1043,7 +1043,22 @@ static const JNINativeMethod gMethods[] = { { "nSetHighContrastText", "(Z)V", (void*)android_view_ThreadedRenderer_setHighContrastText }, }; static JavaVM* mJvm = nullptr; static void attachRenderThreadToJvm() { LOG_ALWAYS_FATAL_IF(!mJvm, "No jvm but we set the hook??"); JavaVMAttachArgs args; args.version = JNI_VERSION_1_4; args.name = (char*) "RenderThread"; args.group = NULL; JNIEnv* env; mJvm->AttachCurrentThreadAsDaemon(&env, (void*) &args); } int register_android_view_ThreadedRenderer(JNIEnv* env) { env->GetJavaVM(&mJvm); RenderThread::setOnStartHook(&attachRenderThreadToJvm); jclass observerClass = FindClassOrDie(env, "android/view/FrameMetricsObserver"); gFrameMetricsObserverClassInfo.frameMetrics = GetFieldIDOrDie( env, observerClass, "mFrameMetrics", "Landroid/view/FrameMetrics;"); Loading libs/hwui/renderthread/RenderThread.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -51,10 +51,17 @@ static const nsecs_t DISPATCH_FRAME_CALLBACKS_DELAY = milliseconds_to_nanosecond static bool gHasRenderThreadInstance = false; static void (*gOnStartHook)() = nullptr; bool RenderThread::hasInstance() { return gHasRenderThreadInstance; } void RenderThread::setOnStartHook(void (*onStartHook)()) { LOG_ALWAYS_FATAL_IF(hasInstance(), "can't set an onStartHook after we've started..."); gOnStartHook = onStartHook; } RenderThread& RenderThread::getInstance() { // This is a pointer because otherwise __cxa_finalize // will try to delete it like a Good Citizen but that causes us to crash Loading Loading @@ -256,6 +263,9 @@ void RenderThread::requestVsync() { bool RenderThread::threadLoop() { setpriority(PRIO_PROCESS, 0, PRIORITY_DISPLAY); if (gOnStartHook) { gOnStartHook(); } initThreadLocals(); while (true) { Loading libs/hwui/renderthread/RenderThread.h +3 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ class RenderThread : private ThreadBase { PREVENT_COPY_AND_ASSIGN(RenderThread); public: // Sets a callback that fires before any RenderThread setup has occured. ANDROID_API static void setOnStartHook(void (*onStartHook)()); WorkQueue& queue() { return ThreadBase::queue(); } // Mimics android.view.Choreographer Loading libs/hwui/thread/ThreadBase.h +4 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,10 @@ class ThreadBase : protected Thread { PREVENT_COPY_AND_ASSIGN(ThreadBase); public: ThreadBase() : mLooper(new Looper(false)), mQueue([this]() { mLooper->wake(); }, mLock) {} ThreadBase() : Thread(false) , mLooper(new Looper(false)) , mQueue([this]() { mLooper->wake(); }, mLock) {} WorkQueue& queue() { return mQueue; } Loading Loading
core/jni/android_view_ThreadedRenderer.cpp +15 −0 Original line number Diff line number Diff line Loading @@ -1043,7 +1043,22 @@ static const JNINativeMethod gMethods[] = { { "nSetHighContrastText", "(Z)V", (void*)android_view_ThreadedRenderer_setHighContrastText }, }; static JavaVM* mJvm = nullptr; static void attachRenderThreadToJvm() { LOG_ALWAYS_FATAL_IF(!mJvm, "No jvm but we set the hook??"); JavaVMAttachArgs args; args.version = JNI_VERSION_1_4; args.name = (char*) "RenderThread"; args.group = NULL; JNIEnv* env; mJvm->AttachCurrentThreadAsDaemon(&env, (void*) &args); } int register_android_view_ThreadedRenderer(JNIEnv* env) { env->GetJavaVM(&mJvm); RenderThread::setOnStartHook(&attachRenderThreadToJvm); jclass observerClass = FindClassOrDie(env, "android/view/FrameMetricsObserver"); gFrameMetricsObserverClassInfo.frameMetrics = GetFieldIDOrDie( env, observerClass, "mFrameMetrics", "Landroid/view/FrameMetrics;"); Loading
libs/hwui/renderthread/RenderThread.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -51,10 +51,17 @@ static const nsecs_t DISPATCH_FRAME_CALLBACKS_DELAY = milliseconds_to_nanosecond static bool gHasRenderThreadInstance = false; static void (*gOnStartHook)() = nullptr; bool RenderThread::hasInstance() { return gHasRenderThreadInstance; } void RenderThread::setOnStartHook(void (*onStartHook)()) { LOG_ALWAYS_FATAL_IF(hasInstance(), "can't set an onStartHook after we've started..."); gOnStartHook = onStartHook; } RenderThread& RenderThread::getInstance() { // This is a pointer because otherwise __cxa_finalize // will try to delete it like a Good Citizen but that causes us to crash Loading Loading @@ -256,6 +263,9 @@ void RenderThread::requestVsync() { bool RenderThread::threadLoop() { setpriority(PRIO_PROCESS, 0, PRIORITY_DISPLAY); if (gOnStartHook) { gOnStartHook(); } initThreadLocals(); while (true) { Loading
libs/hwui/renderthread/RenderThread.h +3 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,9 @@ class RenderThread : private ThreadBase { PREVENT_COPY_AND_ASSIGN(RenderThread); public: // Sets a callback that fires before any RenderThread setup has occured. ANDROID_API static void setOnStartHook(void (*onStartHook)()); WorkQueue& queue() { return ThreadBase::queue(); } // Mimics android.view.Choreographer Loading
libs/hwui/thread/ThreadBase.h +4 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,10 @@ class ThreadBase : protected Thread { PREVENT_COPY_AND_ASSIGN(ThreadBase); public: ThreadBase() : mLooper(new Looper(false)), mQueue([this]() { mLooper->wake(); }, mLock) {} ThreadBase() : Thread(false) , mLooper(new Looper(false)) , mQueue([this]() { mLooper->wake(); }, mLock) {} WorkQueue& queue() { return mQueue; } Loading