diff options
author | Scott Lobdell <slobdell@google.com> | 2021-07-27 17:02:32 +0000 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-07-27 17:02:32 +0000 |
commit | cb84bc77bfeb89a940d8439f7458fe5d9bef7bef (patch) | |
tree | d6e70908803e918eb485e058341ce55d0a957188 /libs/hwui/jni/android_graphics_HardwareRenderer.cpp | |
parent | dc5ea9d31ab76ba378da9c550813e6b7d8be1e69 (diff) | |
parent | 6aa393b52cd7362100a2b3e9b0b1dece473cf6dd (diff) |
Merge SP1A.210723.002
Change-Id: I220cdfc5cb9db40162fd33f400a54591018d54cf
Diffstat (limited to 'libs/hwui/jni/android_graphics_HardwareRenderer.cpp')
-rw-r--r-- | libs/hwui/jni/android_graphics_HardwareRenderer.cpp | 99 |
1 files changed, 4 insertions, 95 deletions
diff --git a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp index ef3a11c13469..54367b8334cb 100644 --- a/libs/hwui/jni/android_graphics_HardwareRenderer.cpp +++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp @@ -44,8 +44,6 @@ #include <utils/StrongPointer.h> #include <utils/Timers.h> -#include <pthread.h> - #include <algorithm> #include <atomic> #include <vector> @@ -60,10 +58,6 @@ using namespace android::uirenderer::renderthread; struct { jclass clazz; jmethodID invokePictureCapturedCallback; - jmethodID createHintSession; - jmethodID updateTargetWorkDuration; - jmethodID reportActualWorkDuration; - jmethodID closeHintSession; } gHardwareRenderer; struct { @@ -90,14 +84,6 @@ static JNIEnv* getenv(JavaVM* vm) { return env; } -static bool hasExceptionAndClear(JNIEnv* env) { - if (GraphicsJNI::hasException(env)) { - env->ExceptionClear(); - return true; - } - return false; -} - typedef ANativeWindow* (*ANW_fromSurface)(JNIEnv* env, jobject surface); ANW_fromSurface fromSurface; @@ -147,67 +133,6 @@ private: } }; -class HintSessionWrapper : public LightRefBase<HintSessionWrapper> { -public: - static sp<HintSessionWrapper> create(JNIEnv* env, RenderProxy* proxy) { - if (!Properties::useHintManager) return nullptr; - - // Include UI thread (self), render thread, and thread pool. - std::vector<int> tids = CommonPool::getThreadIds(); - tids.push_back(proxy->getRenderThreadTid()); - tids.push_back(pthread_gettid_np(pthread_self())); - - jintArray tidsArray = env->NewIntArray(tids.size()); - if (hasExceptionAndClear(env)) return nullptr; - env->SetIntArrayRegion(tidsArray, 0, tids.size(), reinterpret_cast<jint*>(tids.data())); - if (hasExceptionAndClear(env)) return nullptr; - jobject session = env->CallStaticObjectMethod( - gHardwareRenderer.clazz, gHardwareRenderer.createHintSession, tidsArray); - if (hasExceptionAndClear(env) || !session) return nullptr; - return new HintSessionWrapper(env, session); - } - - ~HintSessionWrapper() { - if (!mSession) return; - JNIEnv* env = getenv(mVm); - env->CallStaticVoidMethod(gHardwareRenderer.clazz, gHardwareRenderer.closeHintSession, - mSession); - hasExceptionAndClear(env); - env->DeleteGlobalRef(mSession); - mSession = nullptr; - } - - void updateTargetWorkDuration(long targetDurationNanos) { - if (!mSession) return; - JNIEnv* env = getenv(mVm); - env->CallStaticVoidMethod(gHardwareRenderer.clazz, - gHardwareRenderer.updateTargetWorkDuration, mSession, - static_cast<jlong>(targetDurationNanos)); - hasExceptionAndClear(env); - } - - void reportActualWorkDuration(long actualDurationNanos) { - if (!mSession) return; - JNIEnv* env = getenv(mVm); - env->CallStaticVoidMethod(gHardwareRenderer.clazz, - gHardwareRenderer.reportActualWorkDuration, mSession, - static_cast<jlong>(actualDurationNanos)); - hasExceptionAndClear(env); - } - -private: - HintSessionWrapper(JNIEnv* env, jobject jobject) { - env->GetJavaVM(&mVm); - if (jobject) { - mSession = env->NewGlobalRef(jobject); - LOG_ALWAYS_FATAL_IF(!mSession, "Failed to make global ref"); - } - } - - JavaVM* mVm = nullptr; - jobject mSession = nullptr; -}; - static void android_view_ThreadedRenderer_rotateProcessStatsBuffer(JNIEnv* env, jobject clazz) { RenderProxy::rotateProcessStatsBuffer(); } @@ -235,12 +160,6 @@ static jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject claz RootRenderNode* rootRenderNode = reinterpret_cast<RootRenderNode*>(rootRenderNodePtr); ContextFactoryImpl factory(rootRenderNode); RenderProxy* proxy = new RenderProxy(translucent, rootRenderNode, &factory); - sp<HintSessionWrapper> wrapper = HintSessionWrapper::create(env, proxy); - if (wrapper) { - proxy->setHintSessionCallbacks( - [wrapper](int64_t nanos) { wrapper->updateTargetWorkDuration(nanos); }, - [wrapper](int64_t nanos) { wrapper->reportActualWorkDuration(nanos); }); - } return (jlong) proxy; } @@ -762,9 +681,11 @@ static jobject android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode( // Create an ImageReader wired up to a BufferItemConsumer AImageReader* rawReader; + constexpr auto usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE | + AHARDWAREBUFFER_USAGE_GPU_FRAMEBUFFER | + AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY; media_status_t result = - AImageReader_newWithUsage(width, height, AIMAGE_FORMAT_RGBA_8888, - AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE, 2, &rawReader); + AImageReader_newWithUsage(width, height, AIMAGE_FORMAT_RGBA_8888, usage, 2, &rawReader); std::unique_ptr<AImageReader, decltype(&AImageReader_delete)> reader(rawReader, AImageReader_delete); @@ -1057,18 +978,6 @@ int register_android_view_ThreadedRenderer(JNIEnv* env) { gHardwareRenderer.invokePictureCapturedCallback = GetStaticMethodIDOrDie(env, hardwareRenderer, "invokePictureCapturedCallback", "(JLandroid/graphics/HardwareRenderer$PictureCapturedCallback;)V"); - gHardwareRenderer.createHintSession = - GetStaticMethodIDOrDie(env, hardwareRenderer, "createHintSession", - "([I)Landroid/os/PerformanceHintManager$Session;"); - gHardwareRenderer.updateTargetWorkDuration = - GetStaticMethodIDOrDie(env, hardwareRenderer, "updateTargetWorkDuration", - "(Landroid/os/PerformanceHintManager$Session;J)V"); - gHardwareRenderer.reportActualWorkDuration = - GetStaticMethodIDOrDie(env, hardwareRenderer, "reportActualWorkDuration", - "(Landroid/os/PerformanceHintManager$Session;J)V"); - gHardwareRenderer.closeHintSession = - GetStaticMethodIDOrDie(env, hardwareRenderer, "closeHintSession", - "(Landroid/os/PerformanceHintManager$Session;)V"); jclass aSurfaceTransactionCallbackClass = FindClassOrDie(env, "android/graphics/HardwareRenderer$ASurfaceTransactionCallback"); |