Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4cb04496 authored by Fedor Kudasov's avatar Fedor Kudasov Committed by Android (Google) Code Review
Browse files

Merge "Enable RenderNode and RecordingCanvas for layoutlib"

parents 47cf4d9c 86bd2140
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -40,6 +40,8 @@ cc_library_shared {
        "android_graphics_Picture.cpp",
        "android_nio_utils.cpp",
        "android_util_PathParser.cpp",
        "android_view_DisplayListCanvas.cpp",
        "android_view_RenderNode.cpp",
        "android/graphics/Bitmap.cpp",
        "android/graphics/BitmapFactory.cpp",
        "android/graphics/ByteBufferStreamAdaptor.cpp",
@@ -136,7 +138,6 @@ cc_library_shared {
                "android_database_SQLiteDebug.cpp",
                "android_view_CompositionSamplingListener.cpp",
                "android_view_DisplayEventReceiver.cpp",
                "android_view_DisplayListCanvas.cpp",
                "android_view_TextureLayer.cpp",
                "android_view_InputChannel.cpp",
                "android_view_InputDevice.cpp",
@@ -147,7 +148,6 @@ cc_library_shared {
                "android_view_KeyEvent.cpp",
                "android_view_MotionEvent.cpp",
                "android_view_PointerIcon.cpp",
                "android_view_RenderNode.cpp",
                "android_view_RenderNodeAnimator.cpp",
                "android_view_Surface.cpp",
                "android_view_SurfaceControl.cpp",
+4 −0
Original line number Diff line number Diff line
@@ -67,6 +67,8 @@ extern int register_android_graphics_fonts_FontFamily(JNIEnv* env);
extern int register_android_graphics_text_LineBreaker(JNIEnv* env);
extern int register_android_graphics_text_MeasuredText(JNIEnv* env);
extern int register_android_util_PathParser(JNIEnv* env);
extern int register_android_view_RenderNode(JNIEnv* env);
extern int register_android_view_DisplayListCanvas(JNIEnv* env);
extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env);
extern int register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv *env);

@@ -83,6 +85,7 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = {
    {"android.graphics.BitmapFactory", REG_JNI(register_android_graphics_BitmapFactory)},
    {"android.graphics.ByteBufferStreamAdaptor", REG_JNI(register_android_graphics_ByteBufferStreamAdaptor)},
    {"android.graphics.Canvas", REG_JNI(register_android_graphics_Canvas)},
    {"android.graphics.RenderNode", REG_JNI(register_android_view_RenderNode)},
    {"android.graphics.ColorFilter", REG_JNI(register_android_graphics_ColorFilter)},
    {"android.graphics.ColorSpace", REG_JNI(register_android_graphics_ColorSpace)},
    {"android.graphics.CreateJavaOutputStreamAdaptor", REG_JNI(register_android_graphics_CreateJavaOutputStreamAdaptor)},
@@ -98,6 +101,7 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = {
    {"android.graphics.PathEffect", REG_JNI(register_android_graphics_PathEffect)},
    {"android.graphics.PathMeasure", REG_JNI(register_android_graphics_PathMeasure)},
    {"android.graphics.Picture", REG_JNI(register_android_graphics_Picture)},
    {"android.graphics.RecordingCanvas", REG_JNI(register_android_view_DisplayListCanvas)},
    {"android.graphics.Region", REG_JNI(register_android_graphics_Region)},
    {"android.graphics.Shader", REG_JNI(register_android_graphics_Shader)},
    {"android.graphics.Typeface", REG_JNI(register_android_graphics_Typeface)},
+22 −12
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@
#include <nativehelper/JNIHelp.h>

#include <android_runtime/AndroidRuntime.h>

#ifdef __ANDROID__ // Layoutlib does not support Looper and device properties
#include <utils/Looper.h>
#include <cutils/properties.h>
#endif

#include <SkBitmap.h>
#include <SkRegion.h>
@@ -34,7 +34,9 @@
#include <hwui/Canvas.h>
#include <hwui/Paint.h>
#include <minikin/Layout.h>
#ifdef __ANDROID__ // Layoutlib does not support RenderThread
#include <renderthread/RenderProxy.h>
#endif

#include "core_jni_helpers.h"

@@ -52,6 +54,7 @@ static JNIEnv* jnienv(JavaVM* vm) {
    return env;
}

#ifdef __ANDROID__ // Layoutlib does not support GL, Looper
class InvokeRunnableMessage : public MessageHandler {
public:
    InvokeRunnableMessage(JNIEnv* env, jobject runnable) {
@@ -87,11 +90,13 @@ private:
    sp<Looper> mLooper;
    sp<InvokeRunnableMessage> mMessage;
};
#endif

// ---------------- @FastNative -----------------------------

static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobject clazz,
        jlong canvasPtr, jlong functorPtr, jobject releasedCallback) {
#ifdef __ANDROID__ // Layoutlib does not support GL
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
    sp<GlFunctorReleasedCallbackBridge> bridge;
@@ -99,52 +104,57 @@ static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobje
        bridge = new GlFunctorReleasedCallbackBridge(env, releasedCallback);
    }
    canvas->callDrawGLFunction(functor, bridge.get());
#endif
}


// ---------------- @CriticalNative -------------------------

static jlong android_view_DisplayListCanvas_createDisplayListCanvas(jlong renderNodePtr,
static jlong android_view_DisplayListCanvas_createDisplayListCanvas(CRITICAL_JNI_PARAMS_COMMA jlong renderNodePtr,
        jint width, jint height) {
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
    return reinterpret_cast<jlong>(Canvas::create_recording_canvas(width, height, renderNode));
}

static void android_view_DisplayListCanvas_resetDisplayListCanvas(jlong canvasPtr,
static void android_view_DisplayListCanvas_resetDisplayListCanvas(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
        jlong renderNodePtr, jint width, jint height) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
    canvas->resetRecording(width, height, renderNode);
}

static jint android_view_DisplayListCanvas_getMaxTextureSize() {
static jint android_view_DisplayListCanvas_getMaxTextureSize(CRITICAL_JNI_PARAMS) {
#ifdef __ANDROID__ // Layoutlib does not support RenderProxy (RenderThread)
    return android::uirenderer::renderthread::RenderProxy::maxTextureSize();
#else
    return 4096;
#endif
}

static void android_view_DisplayListCanvas_insertReorderBarrier(jlong canvasPtr,
static void android_view_DisplayListCanvas_insertReorderBarrier(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
        jboolean reorderEnable) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    canvas->insertReorderBarrier(reorderEnable);
}

static jlong android_view_DisplayListCanvas_finishRecording(jlong canvasPtr) {
static jlong android_view_DisplayListCanvas_finishRecording(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    return reinterpret_cast<jlong>(canvas->finishRecording());
}

static void android_view_DisplayListCanvas_drawRenderNode(jlong canvasPtr, jlong renderNodePtr) {
static void android_view_DisplayListCanvas_drawRenderNode(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong renderNodePtr) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
    canvas->drawRenderNode(renderNode);
}

static void android_view_DisplayListCanvas_drawTextureLayer(jlong canvasPtr, jlong layerPtr) {
static void android_view_DisplayListCanvas_drawTextureLayer(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jlong layerPtr) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
    canvas->drawLayer(layer);
}

static void android_view_DisplayListCanvas_drawRoundRectProps(jlong canvasPtr,
static void android_view_DisplayListCanvas_drawRoundRectProps(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
        jlong leftPropPtr, jlong topPropPtr, jlong rightPropPtr, jlong bottomPropPtr,
        jlong rxPropPtr, jlong ryPropPtr, jlong paintPropPtr) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
@@ -158,7 +168,7 @@ static void android_view_DisplayListCanvas_drawRoundRectProps(jlong canvasPtr,
    canvas->drawRoundRect(leftProp, topProp, rightProp, bottomProp, rxProp, ryProp, paintProp);
}

static void android_view_DisplayListCanvas_drawCircleProps(jlong canvasPtr,
static void android_view_DisplayListCanvas_drawCircleProps(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr,
        jlong xPropPtr, jlong yPropPtr, jlong radiusPropPtr, jlong paintPropPtr) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    CanvasPropertyPrimitive* xProp = reinterpret_cast<CanvasPropertyPrimitive*>(xPropPtr);
@@ -168,7 +178,7 @@ static void android_view_DisplayListCanvas_drawCircleProps(jlong canvasPtr,
    canvas->drawCircle(xProp, yProp, radiusProp, paintProp);
}

static void android_view_DisplayListCanvas_drawWebViewFunctor(jlong canvasPtr, jint functor) {
static void android_view_DisplayListCanvas_drawWebViewFunctor(CRITICAL_JNI_PARAMS_COMMA jlong canvasPtr, jint functor) {
    Canvas* canvas = reinterpret_cast<Canvas*>(canvasPtr);
    canvas->drawWebViewFunctor(functor);
}
+88 −79

File changed.

Preview size limit exceeded, changes collapsed.

+18 −13
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@ cc_defaults {
        host: {
            include_dirs: [
                "external/vulkan-headers/include",
                "frameworks/native/libs/math/include",
                "frameworks/native/libs/ui/include",
            ],
            cflags: [
                "-Wno-unused-variable",
@@ -159,6 +161,10 @@ cc_defaults {
    whole_static_libs: ["libskia"],

    srcs: [
        "pipeline/skia/SkiaDisplayList.cpp",
        "pipeline/skia/SkiaRecordingCanvas.cpp",
        "pipeline/skia/RenderNodeDrawable.cpp",
        "pipeline/skia/ReorderBarrierDrawables.cpp",
        "hwui/AnimatedImageDrawable.cpp",
        "hwui/AnimatedImageThread.cpp",
        "hwui/Bitmap.cpp",
@@ -168,15 +174,24 @@ cc_defaults {
        "hwui/PaintImpl.cpp",
        "hwui/Typeface.cpp",
        "utils/Blur.cpp",
        "utils/Color.cpp",
        "utils/LinearAllocator.cpp",
        "utils/VectorDrawableUtils.cpp",
        "AnimationContext.cpp",
        "Animator.cpp",
        "AnimatorManager.cpp",
        "CanvasTransform.cpp",
        "DamageAccumulator.cpp",
        "Interpolator.cpp",
        "LightingInfo.cpp",
        "Matrix.cpp",
        "PathParser.cpp",
        "Properties.cpp",
        "PropertyValuesAnimatorSet.cpp",
        "PropertyValuesHolder.cpp",
        "RecordingCanvas.cpp",
        "RenderNode.cpp",
        "RenderProperties.cpp",
        "SkiaCanvas.cpp",
        "VectorDrawable.cpp",
    ],
@@ -193,15 +208,11 @@ cc_defaults {
            srcs: [
                "pipeline/skia/GLFunctorDrawable.cpp",
                "pipeline/skia/LayerDrawable.cpp",
                "pipeline/skia/RenderNodeDrawable.cpp",
                "pipeline/skia/ReorderBarrierDrawables.cpp",
                "pipeline/skia/ShaderCache.cpp",
                "pipeline/skia/SkiaDisplayList.cpp",
                "pipeline/skia/SkiaMemoryTracer.cpp",
                "pipeline/skia/SkiaOpenGLPipeline.cpp",
                "pipeline/skia/SkiaPipeline.cpp",
                "pipeline/skia/SkiaProfileRenderer.cpp",
                "pipeline/skia/SkiaRecordingCanvas.cpp",
                "pipeline/skia/SkiaVulkanPipeline.cpp",
                "pipeline/skia/VectorDrawableAtlas.cpp",
                "pipeline/skia/VkFunctorDrawable.cpp",
@@ -224,13 +235,8 @@ cc_defaults {
                "surfacetexture/ImageConsumer.cpp",
                "surfacetexture/SurfaceTexture.cpp",
                "thread/CommonPool.cpp",
                "utils/Color.cpp",
                "utils/GLUtils.cpp",
                "utils/StringUtils.cpp",
                "AnimationContext.cpp",
                "AnimatorManager.cpp",
                "CanvasTransform.cpp",
                "DamageAccumulator.cpp",
                "DeferredLayerUpdater.cpp",
                "DeviceInfo.cpp",
                "FrameInfo.cpp",
@@ -241,13 +247,9 @@ cc_defaults {
                "JankTracker.cpp",
                "Layer.cpp",
                "LayerUpdateQueue.cpp",
                "LightingInfo.cpp",
                "ProfileData.cpp",
                "ProfileDataContainer.cpp",
                "Readback.cpp",
                "RecordingCanvas.cpp",
                "RenderNode.cpp",
                "RenderProperties.cpp",
                "TreeInfo.cpp",
                "WebViewFunctorManager.cpp",
                "protos/graphicsstats.proto",
@@ -257,6 +259,9 @@ cc_defaults {
            cflags: ["-Wno-implicit-fallthrough"],
        },
        host: {
            srcs: [
                "utils/HostColorSpace.cpp",
            ],
            export_static_lib_headers: [
                "libarect",
            ],
Loading