diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index 40529191a42c0..2c058cd0d6fd8 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -1207,7 +1207,7 @@ static void attachRenderThreadToJvm() { JavaVMAttachArgs args; args.version = JNI_VERSION_1_4; - args.name = (char*) "RenderThread"; + args.name = NULL; args.group = NULL; JNIEnv* env; mJvm->AttachCurrentThreadAsDaemon(&env, (void*) &args); diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 3b37c83a6accb..1f24f0e64eabe 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -56,7 +56,7 @@ static const nsecs_t DISPATCH_FRAME_CALLBACKS_DELAY = milliseconds_to_nanosecond static bool gHasRenderThreadInstance = false; -static void (*gOnStartHook)() = nullptr; +static JVMAttachHook gOnStartHook = nullptr; class DisplayEventReceiverWrapper : public VsyncSource { public: @@ -111,11 +111,15 @@ bool RenderThread::hasInstance() { return gHasRenderThreadInstance; } -void RenderThread::setOnStartHook(void (*onStartHook)()) { +void RenderThread::setOnStartHook(JVMAttachHook onStartHook) { LOG_ALWAYS_FATAL_IF(hasInstance(), "can't set an onStartHook after we've started..."); gOnStartHook = onStartHook; } +JVMAttachHook RenderThread::getOnStartHook() { + return gOnStartHook; +} + 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 diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h index 1ef83fb26c143..d062dba288fc7 100644 --- a/libs/hwui/renderthread/RenderThread.h +++ b/libs/hwui/renderthread/RenderThread.h @@ -75,12 +75,15 @@ struct VsyncSource { class DummyVsyncSource; +typedef void (*JVMAttachHook)(); + class RenderThread : private ThreadBase { PREVENT_COPY_AND_ASSIGN(RenderThread); public: // Sets a callback that fires before any RenderThread setup has occurred. - ANDROID_API static void setOnStartHook(void (*onStartHook)()); + ANDROID_API static void setOnStartHook(JVMAttachHook onStartHook); + static JVMAttachHook getOnStartHook(); WorkQueue& queue() { return ThreadBase::queue(); } diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp index 26ff6ebad3b4b..6493d495716e6 100644 --- a/libs/hwui/thread/TaskManager.cpp +++ b/libs/hwui/thread/TaskManager.cpp @@ -21,6 +21,7 @@ #include "TaskManager.h" #include "TaskProcessor.h" #include "utils/MathUtils.h" +#include "renderthread/RenderThread.h" namespace android { namespace uirenderer { @@ -84,6 +85,11 @@ bool TaskManager::addTaskBase(const sp& task, const sp