diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java index 9c7fa25f10d41..0bf99d3bb3e36 100644 --- a/core/java/android/view/ThreadedRenderer.java +++ b/core/java/android/view/ThreadedRenderer.java @@ -170,7 +170,7 @@ public class ThreadedRenderer extends HardwareRenderer { @Override boolean loadSystemProperties() { - return false; + return nLoadSystemProperties(mNativeProxy); } private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks) { @@ -306,6 +306,7 @@ public class ThreadedRenderer extends HardwareRenderer { private static native void nDeleteProxy(long nativeProxy); private static native void nSetFrameInterval(long nativeProxy, long frameIntervalNanos); + private static native boolean nLoadSystemProperties(long nativeProxy); private static native boolean nInitialize(long nativeProxy, Surface window); private static native void nUpdateSurface(long nativeProxy, Surface window); diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index cd0ed8c961f59..6ff28e305a0e7 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -158,6 +158,12 @@ static void android_view_ThreadedRenderer_setFrameInterval(JNIEnv* env, jobject proxy->setFrameInterval(frameIntervalNanos); } +static jboolean android_view_ThreadedRenderer_loadSystemProperties(JNIEnv* env, jobject clazz, + jlong proxyPtr) { + RenderProxy* proxy = reinterpret_cast(proxyPtr); + return proxy->loadSystemProperties(); +} + static jboolean android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz, jlong proxyPtr, jobject jsurface) { RenderProxy* proxy = reinterpret_cast(proxyPtr); @@ -268,6 +274,7 @@ static JNINativeMethod gMethods[] = { { "nCreateProxy", "(ZJ)J", (void*) android_view_ThreadedRenderer_createProxy }, { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy }, { "nSetFrameInterval", "(JJ)V", (void*) android_view_ThreadedRenderer_setFrameInterval }, + { "nLoadSystemProperties", "(J)Z", (void*) android_view_ThreadedRenderer_loadSystemProperties }, { "nInitialize", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_initialize }, { "nUpdateSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_updateSurface }, { "nPauseSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_pauseSurface }, diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index 31bb61a6f75d5..c2806fa690cdf 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -98,6 +98,19 @@ void RenderProxy::setFrameInterval(nsecs_t frameIntervalNanos) { post(task); } +CREATE_BRIDGE0(loadSystemProperties) { + bool needsRedraw = false; + if (Caches::hasInstance()) { + needsRedraw = Caches::getInstance().initProperties(); + } + return (void*) needsRedraw; +} + +bool RenderProxy::loadSystemProperties() { + SETUP_TASK(loadSystemProperties); + return (bool) postAndWait(task); +} + CREATE_BRIDGE2(initialize, CanvasContext* context, EGLNativeWindowType window) { return (void*) args->context->initialize(args->window); } diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h index 984cc65ef7009..013c3bdc53f35 100644 --- a/libs/hwui/renderthread/RenderProxy.h +++ b/libs/hwui/renderthread/RenderProxy.h @@ -61,6 +61,7 @@ public: ANDROID_API virtual ~RenderProxy(); ANDROID_API void setFrameInterval(nsecs_t frameIntervalNanos); + ANDROID_API bool loadSystemProperties(); ANDROID_API bool initialize(const sp& window); ANDROID_API void updateSurface(const sp& window);