X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=core%2Fjni%2Fandroid_view_ThreadedRenderer.cpp;h=29226c39a93951f835308fd420c21833a2e89e36;hb=d488a6c2bbedc06fc22942555d0157e7bf09f135;hp=c9251bcac83555593a45982a65febc29f3d8ec00;hpb=b6ecd1f88a6fc6a7fe807aa94a4d9aba03c582cd;p=android-x86%2Fframeworks-base.git diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index c9251bcac835..29226c39a939 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -23,7 +23,7 @@ #include #include "core_jni_helpers.h" #include -#include +#include #include #include @@ -581,18 +581,6 @@ void NotifyHandler::handleMessage(const Message& message) { mObserver->decStrong(nullptr); } -static jboolean android_view_ThreadedRenderer_supportsOpenGL(JNIEnv* env, jobject clazz) { - char prop[PROPERTY_VALUE_MAX]; - if (property_get("ro.kernel.qemu", prop, NULL) == 0) { - // not in the emulator - return JNI_TRUE; - } - // In the emulator this property will be set > 0 when OpenGL ES 2.0 is - // enabled, 0 otherwise. On old emulator versions it will be undefined. - property_get("qemu.gles", prop, "0"); - return atoi(prop) > 0 ? JNI_TRUE : JNI_FALSE; -} - static void android_view_ThreadedRenderer_rotateProcessStatsBuffer(JNIEnv* env, jobject clazz) { RenderProxy::rotateProcessStatsBuffer(); } @@ -693,6 +681,12 @@ static void android_view_ThreadedRenderer_setOpaque(JNIEnv* env, jobject clazz, proxy->setOpaque(opaque); } +static void android_view_ThreadedRenderer_setWideGamut(JNIEnv* env, jobject clazz, + jlong proxyPtr, jboolean wideGamut) { + RenderProxy* proxy = reinterpret_cast(proxyPtr); + proxy->setWideGamut(wideGamut); +} + static int android_view_ThreadedRenderer_syncAndDrawFrame(JNIEnv* env, jobject clazz, jlong proxyPtr, jlongArray frameInfo, jint frameInfoSize) { LOG_ALWAYS_FATAL_IF(frameInfoSize != UI_THREAD_FRAME_INFO_SIZE, @@ -894,7 +888,7 @@ static jobject android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode( // Render into the surface { ContextFactory factory; - RenderProxy proxy{false, renderNode, &factory}; + RenderProxy proxy{true, renderNode, &factory}; proxy.loadSystemProperties(); proxy.setSwapBehavior(SwapBehavior::kSwap_discardBuffer); proxy.initialize(surface); @@ -929,6 +923,10 @@ static jobject android_view_ThreadedRenderer_createHardwareBitmapFromRenderNode( // Continue I guess? } sk_sp bitmap = Bitmap::createFrom(buffer); + if (!bitmap.get()) { + ALOGW("Failed to create hardware bitmap from graphic buffer"); + return nullptr; + } return createBitmap(env, bitmap.release(), android::bitmap::kBitmapCreateFlag_Mutable); } @@ -983,7 +981,6 @@ static void android_view_ThreadedRenderer_setupShadersDiskCache(JNIEnv* env, job const char* const kClassPathName = "android/view/ThreadedRenderer"; static const JNINativeMethod gMethods[] = { - { "nSupportsOpenGL", "()Z", (void*) android_view_ThreadedRenderer_supportsOpenGL }, { "nRotateProcessStatsBuffer", "()V", (void*) android_view_ThreadedRenderer_rotateProcessStatsBuffer }, { "nSetProcessStatsBuffer", "(I)V", (void*) android_view_ThreadedRenderer_setProcessStatsBuffer }, { "nGetRenderThreadTid", "(J)I", (void*) android_view_ThreadedRenderer_getRenderThreadTid }, @@ -999,6 +996,7 @@ static const JNINativeMethod gMethods[] = { { "nSetup", "(JFII)V", (void*) android_view_ThreadedRenderer_setup }, { "nSetLightCenter", "(JFFF)V", (void*) android_view_ThreadedRenderer_setLightCenter }, { "nSetOpaque", "(JZ)V", (void*) android_view_ThreadedRenderer_setOpaque }, + { "nSetWideGamut", "(JZ)V", (void*) android_view_ThreadedRenderer_setWideGamut }, { "nSyncAndDrawFrame", "(J[JI)I", (void*) android_view_ThreadedRenderer_syncAndDrawFrame }, { "nDestroy", "(JJ)V", (void*) android_view_ThreadedRenderer_destroy }, { "nRegisterAnimatingRenderNode", "(JJ)V", (void*) android_view_ThreadedRenderer_registerAnimatingRenderNode },