diff options
-rw-r--r-- | core/jni/Android.bp | 162 | ||||
-rw-r--r-- | core/jni/AndroidRuntime.cpp | 2 | ||||
-rw-r--r-- | core/jni/LayoutlibLoader.cpp | 76 | ||||
-rw-r--r-- | core/jni/android_graphics_GraphicBuffer.cpp | 16 | ||||
-rw-r--r-- | core/jni/android_graphics_SurfaceTexture.cpp (renamed from core/jni/android/graphics/SurfaceTexture.cpp) | 1 | ||||
-rw-r--r-- | graphics/java/android/graphics/Bitmap.java | 3 | ||||
-rw-r--r-- | graphics/java/android/graphics/GraphicBuffer.java | 10 | ||||
-rw-r--r-- | libs/hwui/Android.bp | 232 | ||||
-rw-r--r-- | libs/hwui/DeviceInfo.cpp | 3 | ||||
-rw-r--r-- | libs/hwui/apex/LayoutlibLoader.cpp | 191 | ||||
-rw-r--r-- | libs/hwui/apex/TypeCast.h (renamed from core/jni/android/graphics/apex/TypeCast.h) | 0 | ||||
-rw-r--r-- | libs/hwui/apex/android_bitmap.cpp (renamed from core/jni/android/graphics/apex/android_bitmap.cpp) | 1 | ||||
-rw-r--r-- | libs/hwui/apex/android_canvas.cpp (renamed from core/jni/android/graphics/apex/android_canvas.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/apex/android_matrix.cpp (renamed from core/jni/android/graphics/apex/android_matrix.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/apex/android_paint.cpp (renamed from core/jni/android/graphics/apex/android_paint.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/apex/android_region.cpp (renamed from core/jni/android/graphics/apex/android_region.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/bitmap.h (renamed from core/jni/android/graphics/apex/include/android/graphics/bitmap.h) | 27 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/canvas.h (renamed from core/jni/android/graphics/apex/include/android/graphics/canvas.h) | 19 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/jni_runtime.h (renamed from core/jni/android/graphics/apex/include/android/graphics/jni_runtime.h) | 9 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/matrix.h (renamed from core/jni/android/graphics/apex/include/android/graphics/matrix.h) | 3 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/paint.h (renamed from core/jni/android/graphics/apex/include/android/graphics/paint.h) | 7 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/region.h (renamed from core/jni/android/graphics/apex/include/android/graphics/region.h) | 15 | ||||
-rw-r--r-- | libs/hwui/apex/include/android/graphics/renderthread.h (renamed from core/jni/android/graphics/apex/include/android/graphics/renderthread.h) | 3 | ||||
-rw-r--r-- | libs/hwui/apex/jni_runtime.cpp (renamed from core/jni/android/graphics/apex/jni_runtime.cpp) | 8 | ||||
-rw-r--r-- | libs/hwui/apex/renderthread.cpp (renamed from core/jni/android/graphics/apex/renderthread.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/AnimatedImageDrawable.cpp (renamed from core/jni/android/graphics/AnimatedImageDrawable.cpp) | 1 | ||||
-rwxr-xr-x | libs/hwui/jni/Bitmap.cpp (renamed from core/jni/android/graphics/Bitmap.cpp) | 52 | ||||
-rw-r--r-- | libs/hwui/jni/Bitmap.h (renamed from core/jni/android/graphics/Bitmap.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/BitmapFactory.cpp (renamed from core/jni/android/graphics/BitmapFactory.cpp) | 11 | ||||
-rw-r--r-- | libs/hwui/jni/BitmapFactory.h (renamed from core/jni/android/graphics/BitmapFactory.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/BitmapRegionDecoder.cpp (renamed from core/jni/android/graphics/BitmapRegionDecoder.cpp) | 5 | ||||
-rw-r--r-- | libs/hwui/jni/ByteBufferStreamAdaptor.cpp (renamed from core/jni/android/graphics/ByteBufferStreamAdaptor.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/ByteBufferStreamAdaptor.h (renamed from core/jni/android/graphics/ByteBufferStreamAdaptor.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Camera.cpp (renamed from core/jni/android/graphics/Camera.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/CanvasProperty.cpp (renamed from core/jni/android/graphics/CanvasProperty.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/ColorFilter.cpp (renamed from core/jni/android/graphics/ColorFilter.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp (renamed from core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/CreateJavaOutputStreamAdaptor.h (renamed from core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h) | 1 | ||||
-rw-r--r-- | libs/hwui/jni/FontFamily.cpp (renamed from core/jni/android/graphics/FontFamily.cpp) | 17 | ||||
-rw-r--r-- | libs/hwui/jni/FontUtils.cpp (renamed from core/jni/android/graphics/FontUtils.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/FontUtils.h (renamed from core/jni/android/graphics/FontUtils.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/GIFMovie.cpp (renamed from core/jni/android/graphics/GIFMovie.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Graphics.cpp (renamed from core/jni/android/graphics/Graphics.cpp) | 39 | ||||
-rw-r--r-- | libs/hwui/jni/GraphicsJNI.h (renamed from core/jni/android/graphics/GraphicsJNI.h) | 25 | ||||
-rw-r--r-- | libs/hwui/jni/GraphicsStatsService.cpp (renamed from core/jni/android/graphics/GraphicsStatsService.cpp) | 14 | ||||
-rw-r--r-- | libs/hwui/jni/ImageDecoder.cpp (renamed from core/jni/android/graphics/ImageDecoder.cpp) | 7 | ||||
-rw-r--r-- | libs/hwui/jni/ImageDecoder.h (renamed from core/jni/android/graphics/ImageDecoder.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Interpolator.cpp (renamed from core/jni/android/graphics/Interpolator.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/MaskFilter.cpp (renamed from core/jni/android/graphics/MaskFilter.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/MimeType.h (renamed from core/jni/android/graphics/MimeType.h) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/Movie.cpp (renamed from core/jni/android/graphics/Movie.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/Movie.h (renamed from core/jni/android/graphics/Movie.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/MovieImpl.cpp (renamed from core/jni/android/graphics/MovieImpl.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/NinePatch.cpp (renamed from core/jni/android/graphics/NinePatch.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/NinePatchPeeker.cpp (renamed from core/jni/android/graphics/NinePatchPeeker.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/NinePatchPeeker.h (renamed from core/jni/android/graphics/NinePatchPeeker.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Paint.cpp (renamed from core/jni/android/graphics/Paint.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/PaintFilter.cpp (renamed from core/jni/android/graphics/PaintFilter.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/Path.cpp (renamed from core/jni/android/graphics/Path.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/PathEffect.cpp (renamed from core/jni/android/graphics/PathEffect.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/PathMeasure.cpp (renamed from core/jni/android/graphics/PathMeasure.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/Picture.cpp (renamed from core/jni/android/graphics/Picture.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Picture.h (renamed from core/jni/android/graphics/Picture.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Region.cpp (renamed from core/jni/android/graphics/Region.cpp) | 23 | ||||
-rw-r--r-- | libs/hwui/jni/RtlProperties.h (renamed from core/jni/android/graphics/RtlProperties.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Shader.cpp (renamed from core/jni/android/graphics/Shader.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/TEST_MAPPING (renamed from core/jni/android/graphics/TEST_MAPPING) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Typeface.cpp (renamed from core/jni/android/graphics/Typeface.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/Utils.cpp (renamed from core/jni/android/graphics/Utils.cpp) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/Utils.h (renamed from core/jni/android/graphics/Utils.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/YuvToJpegEncoder.cpp (renamed from core/jni/android/graphics/YuvToJpegEncoder.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/YuvToJpegEncoder.h (renamed from core/jni/android/graphics/YuvToJpegEncoder.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_Canvas.cpp (renamed from core/jni/android_graphics_Canvas.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_ColorSpace.cpp (renamed from core/jni/android_graphics_ColorSpace.cpp) | 13 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_DisplayListCanvas.cpp (renamed from core/jni/android_view_DisplayListCanvas.cpp) | 7 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_HardwareRenderer.cpp (renamed from core/jni/android_view_ThreadedRenderer.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_HardwareRendererObserver.cpp (renamed from core/jni/android_graphics_HardwareRendererObserver.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_HardwareRendererObserver.h (renamed from core/jni/android_graphics_HardwareRendererObserver.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_Matrix.cpp (renamed from core/jni/android/graphics/Matrix.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_Matrix.h (renamed from core/jni/android/graphics/Matrix.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_Picture.cpp (renamed from core/jni/android_graphics_Picture.cpp) | 5 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_RenderNode.cpp (renamed from core/jni/android_view_RenderNode.cpp) | 6 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_TextureLayer.cpp (renamed from core/jni/android_view_TextureLayer.cpp) | 7 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp (renamed from core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp) | 6 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp (renamed from core/jni/android_graphics_animation_RenderNodeAnimator.cpp) | 6 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp (renamed from core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp (renamed from core/jni/android_graphics_drawable_VectorDrawable.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/android_nio_utils.cpp (renamed from core/jni/android_nio_utils.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/android_nio_utils.h (renamed from core/jni/android_nio_utils.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/android_util_PathParser.cpp (renamed from core/jni/android_util_PathParser.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/fonts/Font.cpp (renamed from core/jni/android/graphics/fonts/Font.cpp) | 18 | ||||
-rw-r--r-- | libs/hwui/jni/fonts/FontFamily.cpp (renamed from core/jni/android/graphics/fonts/FontFamily.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/graphics_jni_helpers.h | 106 | ||||
-rw-r--r-- | libs/hwui/jni/pdf/PdfDocument.cpp (renamed from core/jni/android/graphics/pdf/PdfDocument.cpp) | 2 | ||||
-rw-r--r-- | libs/hwui/jni/pdf/PdfEditor.cpp (renamed from core/jni/android/graphics/pdf/PdfEditor.cpp) | 7 | ||||
-rw-r--r-- | libs/hwui/jni/pdf/PdfRenderer.cpp (renamed from core/jni/android/graphics/pdf/PdfRenderer.cpp) | 3 | ||||
-rw-r--r-- | libs/hwui/jni/pdf/PdfUtils.cpp (renamed from core/jni/android/graphics/pdf/PdfUtils.cpp) | 1 | ||||
-rw-r--r-- | libs/hwui/jni/pdf/PdfUtils.h (renamed from core/jni/android/graphics/pdf/PdfUtils.h) | 0 | ||||
-rw-r--r-- | libs/hwui/jni/scoped_nullable_primitive_array.h | 103 | ||||
-rw-r--r-- | libs/hwui/jni/text/LineBreaker.cpp (renamed from core/jni/android/graphics/text/LineBreaker.cpp) | 4 | ||||
-rw-r--r-- | libs/hwui/jni/text/MeasuredText.cpp (renamed from core/jni/android/graphics/text/MeasuredText.cpp) | 3 | ||||
-rw-r--r-- | libs/input/Android.bp | 1 | ||||
-rw-r--r-- | libs/input/tests/Android.bp | 1 | ||||
-rw-r--r-- | native/android/Android.bp | 2 | ||||
-rw-r--r-- | native/graphics/jni/Android.bp | 2 | ||||
-rw-r--r-- | native/graphics/jni/imagedecoder.cpp | 2 | ||||
-rw-r--r-- | native/webview/plat_support/Android.bp | 4 | ||||
-rw-r--r-- | native/webview/plat_support/graphics_utils.cpp | 4 | ||||
-rw-r--r-- | rs/jni/Android.mk | 1 | ||||
-rw-r--r-- | services/core/jni/com_android_server_input_InputManagerService.cpp | 3 | ||||
-rw-r--r-- | services/core/jni/onload.cpp | 2 |
111 files changed, 889 insertions, 491 deletions
diff --git a/core/jni/Android.bp b/core/jni/Android.bp index 5912f4059548..d27be275f312 100644 --- a/core/jni/Android.bp +++ b/core/jni/Android.bp @@ -52,20 +52,11 @@ cc_library_shared { "system/media/private/camera/include", ], - static_libs: [ - "libandroid_graphics", - ], - - whole_static_libs: ["libandroid_graphics"], - - export_static_lib_headers: ["libandroid_graphics"], - shared_libs: [ "libbase", "libcutils", "libharfbuzz_ng", "libhwui", - "libjpeg", "liblog", "libminikin", "libnativehelper", @@ -107,6 +98,7 @@ cc_library_shared { "android_database_SQLiteGlobal.cpp", "android_database_SQLiteDebug.cpp", "android_graphics_GraphicBuffer.cpp", + "android_graphics_SurfaceTexture.cpp", "android_view_CompositionSamplingListener.cpp", "android_view_DisplayEventReceiver.cpp", "android_view_InputChannel.cpp", @@ -182,8 +174,6 @@ cc_library_shared { "android_hardware_UsbRequest.cpp", "android_hardware_location_ActivityRecognitionHardware.cpp", "android_util_FileObserver.cpp", - "android/graphics/GraphicsStatsService.cpp", - "android/graphics/SurfaceTexture.cpp", "android/opengl/poly_clip.cpp", // TODO: .arm "android/opengl/util.cpp", "android_server_NetworkManagementSocketTagger.cpp", @@ -324,153 +314,3 @@ cc_library_shared { }, }, } - -cc_library_static { - name: "libandroid_graphics", - host_supported: true, - cflags: [ - "-Wno-unused-parameter", - "-Wno-non-virtual-dtor", - "-Wno-maybe-uninitialized", - "-Wno-parentheses", - - "-DGL_GLEXT_PROTOTYPES", - "-DEGL_EGLEXT_PROTOTYPES", - - "-DU_USING_ICU_NAMESPACE=0", - - "-Wall", - "-Werror", - "-Wno-error=deprecated-declarations", - "-Wunused", - "-Wunreachable-code", - ], - - cppflags: ["-Wno-conversion-null"], - - srcs: [ - "android/graphics/apex/android_matrix.cpp", - "android/graphics/apex/android_paint.cpp", - "android/graphics/apex/android_region.cpp", - - "android_graphics_animation_NativeInterpolatorFactory.cpp", - "android_graphics_animation_RenderNodeAnimator.cpp", - "android_graphics_Canvas.cpp", - "android_graphics_ColorSpace.cpp", - "android_graphics_drawable_AnimatedVectorDrawable.cpp", - "android_graphics_drawable_VectorDrawable.cpp", - "android_graphics_HardwareRendererObserver.cpp", - "android_graphics_Picture.cpp", - "android_nio_utils.cpp", - "android_view_DisplayListCanvas.cpp", - "android_view_RenderNode.cpp", - "android_util_PathParser.cpp", - - "android/graphics/Bitmap.cpp", - "android/graphics/BitmapFactory.cpp", - "android/graphics/ByteBufferStreamAdaptor.cpp", - "android/graphics/Camera.cpp", - "android/graphics/CanvasProperty.cpp", - "android/graphics/ColorFilter.cpp", - "android/graphics/CreateJavaOutputStreamAdaptor.cpp", - "android/graphics/FontFamily.cpp", - "android/graphics/FontUtils.cpp", - "android/graphics/Graphics.cpp", - "android/graphics/ImageDecoder.cpp", - "android/graphics/Interpolator.cpp", - "android/graphics/MaskFilter.cpp", - "android/graphics/Matrix.cpp", - "android/graphics/NinePatch.cpp", - "android/graphics/NinePatchPeeker.cpp", - "android/graphics/Paint.cpp", - "android/graphics/PaintFilter.cpp", - "android/graphics/Path.cpp", - "android/graphics/PathEffect.cpp", - "android/graphics/PathMeasure.cpp", - "android/graphics/Picture.cpp", - "android/graphics/Region.cpp", - "android/graphics/Shader.cpp", - "android/graphics/Typeface.cpp", - "android/graphics/Utils.cpp", - "android/graphics/YuvToJpegEncoder.cpp", - "android/graphics/fonts/Font.cpp", - "android/graphics/fonts/FontFamily.cpp", - "android/graphics/text/LineBreaker.cpp", - "android/graphics/text/MeasuredText.cpp", - ], - - local_include_dirs: [ - "include", // NEEDED FOR ANDROID RUNTIME - "android/graphics", - "android/graphics/apex/include", - ], - - export_include_dirs: [ - "android/graphics/apex/include", - ], - - include_dirs: [ - "external/skia/include/private", - "external/skia/src/codec", - "external/skia/src/core", - "external/skia/src/effects", - "external/skia/src/image", - "external/skia/src/images", - ], - - shared_libs: [ - "libbase", - "libcutils", - "libharfbuzz_ng", - "libhwui", - "liblog", - "libminikin", - "libnativehelper", - "libz", - "libziparchive", - "libjpeg", - ], - - target: { - android: { - srcs: [ // sources that depend on android only libraries - "android/graphics/apex/android_canvas.cpp", - "android/graphics/apex/android_bitmap.cpp", - "android/graphics/apex/renderthread.cpp", - "android/graphics/apex/jni_runtime.cpp", - - "android_view_TextureLayer.cpp", - "android_view_ThreadedRenderer.cpp", - "android/graphics/AnimatedImageDrawable.cpp", - "android/graphics/BitmapRegionDecoder.cpp", - "android/graphics/GIFMovie.cpp", - "android/graphics/Movie.cpp", - "android/graphics/MovieImpl.cpp", - "android/graphics/pdf/PdfDocument.cpp", - "android/graphics/pdf/PdfEditor.cpp", - "android/graphics/pdf/PdfRenderer.cpp", - "android/graphics/pdf/PdfUtils.cpp", - ], - shared_libs: [ - "libandroidfw", - "libEGL", - "libmediandk", - "libnativedisplay", - "libnativewindow", - "libpdfium", - ], - static_libs: [ - "libgif", - ], - }, - host: { - cflags: [ - "-Wno-unused-const-variable", - "-Wno-unused-function", - ], - static_libs: [ - "libandroidfw", - ], - } - }, -} diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 4879478733e6..c41398c97ca0 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -115,6 +115,7 @@ extern int register_android_content_StringBlock(JNIEnv* env); extern int register_android_content_XmlBlock(JNIEnv* env); extern int register_android_content_res_ApkAssets(JNIEnv* env); extern int register_android_graphics_BLASTBufferQueue(JNIEnv* env); +extern int register_android_graphics_SurfaceTexture(JNIEnv* env); extern int register_android_view_DisplayEventReceiver(JNIEnv* env); extern int register_android_view_InputApplicationHandle(JNIEnv* env); extern int register_android_view_InputWindowHandle(JNIEnv* env); @@ -1484,6 +1485,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_graphics_classes), REG_JNI(register_android_graphics_BLASTBufferQueue), REG_JNI(register_android_graphics_GraphicBuffer), + REG_JNI(register_android_graphics_SurfaceTexture), REG_JNI(register_android_database_CursorWindow), REG_JNI(register_android_database_SQLiteConnection), REG_JNI(register_android_database_SQLiteGlobal), diff --git a/core/jni/LayoutlibLoader.cpp b/core/jni/LayoutlibLoader.cpp index 7ee509b4ecb4..77c1a1097240 100644 --- a/core/jni/LayoutlibLoader.cpp +++ b/core/jni/LayoutlibLoader.cpp @@ -34,19 +34,6 @@ using namespace std; static JavaVM* javaVM; -extern int register_android_graphics_Bitmap(JNIEnv*); -extern int register_android_graphics_BitmapFactory(JNIEnv*); -extern int register_android_graphics_ByteBufferStreamAdaptor(JNIEnv* env); -extern int register_android_graphics_CreateJavaOutputStreamAdaptor(JNIEnv* env); -extern int register_android_graphics_Graphics(JNIEnv* env); -extern int register_android_graphics_ImageDecoder(JNIEnv*); -extern int register_android_graphics_Interpolator(JNIEnv* env); -extern int register_android_graphics_MaskFilter(JNIEnv* env); -extern int register_android_graphics_NinePatch(JNIEnv*); -extern int register_android_graphics_PathEffect(JNIEnv* env); -extern int register_android_graphics_Shader(JNIEnv* env); -extern int register_android_graphics_Typeface(JNIEnv* env); - namespace android { extern int register_android_animation_PropertyValuesHolder(JNIEnv *env); @@ -54,25 +41,6 @@ extern int register_android_content_AssetManager(JNIEnv* env); extern int register_android_content_StringBlock(JNIEnv* env); extern int register_android_content_XmlBlock(JNIEnv* env); extern int register_android_content_res_ApkAssets(JNIEnv* env); -extern int register_android_graphics_Canvas(JNIEnv* env); -extern int register_android_graphics_ColorFilter(JNIEnv* env); -extern int register_android_graphics_ColorSpace(JNIEnv* env); -extern int register_android_graphics_DrawFilter(JNIEnv* env); -extern int register_android_graphics_FontFamily(JNIEnv* env); -extern int register_android_graphics_Matrix(JNIEnv* env); -extern int register_android_graphics_Paint(JNIEnv* env); -extern int register_android_graphics_Path(JNIEnv* env); -extern int register_android_graphics_PathMeasure(JNIEnv* env); -extern int register_android_graphics_Picture(JNIEnv* env); -extern int register_android_graphics_Region(JNIEnv* env); -extern int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env); -extern int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env); -extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env); -extern int register_android_graphics_drawable_VectorDrawable(JNIEnv* env); -extern int register_android_graphics_fonts_Font(JNIEnv* env); -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_os_FileObserver(JNIEnv* env); extern int register_android_os_MessageQueue(JNIEnv* env); extern int register_android_os_SystemClock(JNIEnv* env); @@ -81,10 +49,7 @@ extern int register_android_os_Trace(JNIEnv* env); extern int register_android_text_AndroidCharacter(JNIEnv* env); extern int register_android_util_EventLog(JNIEnv* env); extern int register_android_util_Log(JNIEnv* env); -extern int register_android_util_PathParser(JNIEnv* env); extern int register_android_util_jar_StrictJarFile(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); #define REG_JNI(name) { name } @@ -103,46 +68,6 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = { #endif {"android.content.res.StringBlock", REG_JNI(register_android_content_StringBlock)}, {"android.content.res.XmlBlock", REG_JNI(register_android_content_XmlBlock)}, - {"android.graphics.Bitmap", REG_JNI(register_android_graphics_Bitmap)}, - {"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)}, - {"android.graphics.DrawFilter", REG_JNI(register_android_graphics_DrawFilter)}, - {"android.graphics.FontFamily", REG_JNI(register_android_graphics_FontFamily)}, - {"android.graphics.Graphics", REG_JNI(register_android_graphics_Graphics)}, - {"android.graphics.ImageDecoder", REG_JNI(register_android_graphics_ImageDecoder)}, - {"android.graphics.Interpolator", REG_JNI(register_android_graphics_Interpolator)}, - {"android.graphics.MaskFilter", REG_JNI(register_android_graphics_MaskFilter)}, - {"android.graphics.Matrix", REG_JNI(register_android_graphics_Matrix)}, - {"android.graphics.NinePatch", REG_JNI(register_android_graphics_NinePatch)}, - {"android.graphics.Paint", REG_JNI(register_android_graphics_Paint)}, - {"android.graphics.Path", REG_JNI(register_android_graphics_Path)}, - {"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)}, - {"android.graphics.animation.NativeInterpolatorFactory", - REG_JNI(register_android_graphics_animation_NativeInterpolatorFactory)}, - {"android.graphics.animation.RenderNodeAnimator", - REG_JNI(register_android_graphics_animation_RenderNodeAnimator)}, - {"android.graphics.drawable.AnimatedVectorDrawable", - REG_JNI(register_android_graphics_drawable_AnimatedVectorDrawable)}, - {"android.graphics.drawable.VectorDrawable", - REG_JNI(register_android_graphics_drawable_VectorDrawable)}, - {"android.graphics.fonts.Font", REG_JNI(register_android_graphics_fonts_Font)}, - {"android.graphics.fonts.FontFamily", REG_JNI(register_android_graphics_fonts_FontFamily)}, - {"android.graphics.text.LineBreaker", REG_JNI(register_android_graphics_text_LineBreaker)}, - {"android.graphics.text.MeasuredText", - REG_JNI(register_android_graphics_text_MeasuredText)}, #ifdef __linux__ {"android.os.FileObserver", REG_JNI(register_android_os_FileObserver)}, {"android.os.MessageQueue", REG_JNI(register_android_os_MessageQueue)}, @@ -153,7 +78,6 @@ static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = { {"android.text.AndroidCharacter", REG_JNI(register_android_text_AndroidCharacter)}, {"android.util.EventLog", REG_JNI(register_android_util_EventLog)}, {"android.util.Log", REG_JNI(register_android_util_Log)}, - {"android.util.PathParser", REG_JNI(register_android_util_PathParser)}, {"android.util.jar.StrictJarFile", REG_JNI(register_android_util_jar_StrictJarFile)}, {"com.android.internal.util.VirtualRefBasePtr", REG_JNI(register_com_android_internal_util_VirtualRefBasePtr)}, diff --git a/core/jni/android_graphics_GraphicBuffer.cpp b/core/jni/android_graphics_GraphicBuffer.cpp index b6d50898a057..25a733234313 100644 --- a/core/jni/android_graphics_GraphicBuffer.cpp +++ b/core/jni/android_graphics_GraphicBuffer.cpp @@ -31,6 +31,7 @@ #include <android/native_window.h> #include <android/graphics/canvas.h> #include <android_runtime/android_graphics_GraphicBuffer.h> +#include <android_runtime/android_hardware_HardwareBuffer.h> #include <private/android/AHardwareBufferHelpers.h> #include <private/gui/ComposerService.h> @@ -260,6 +261,16 @@ jobject android_graphics_GraphicBuffer_createFromAHardwareBuffer(JNIEnv* env, return obj; } +// ---------------------------------------------------------------------------- +// AHB to GraphicBuffer Converter +// ---------------------------------------------------------------------------- + +static jobject android_graphics_GraphicBuffer_createFromHardwareBuffer(JNIEnv* env, jobject clazz, + jobject hb) { + AHardwareBuffer* ahb = android_hardware_HardwareBuffer_getNativeHardwareBuffer(env, hb); + return android_graphics_GraphicBuffer_createFromAHardwareBuffer(env, ahb); +} + }; using namespace android; @@ -283,7 +294,10 @@ static const JNINativeMethod gMethods[] = { { "nUnlockCanvasAndPost", "(JLandroid/graphics/Canvas;)Z", (void*) android_graphics_GraphicBuffer_unlockCanvasAndPost }, { "nWrapGraphicBuffer", "(J)J", - (void*) android_graphics_GraphicBuffer_wrap } + (void*) android_graphics_GraphicBuffer_wrap }, + { "nCreateFromHardwareBuffer", + "(Landroid/hardware/HardwareBuffer;)Landroid/graphics/GraphicBuffer;", + (void*) android_graphics_GraphicBuffer_createFromHardwareBuffer } }; int register_android_graphics_GraphicBuffer(JNIEnv* env) { diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android_graphics_SurfaceTexture.cpp index 2aca31733599..0909ce7ff23b 100644 --- a/core/jni/android/graphics/SurfaceTexture.cpp +++ b/core/jni/android_graphics_SurfaceTexture.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "SurfaceTexture" #include <stdio.h> diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java index c1e7a360fcc5..f7877590869a 100644 --- a/graphics/java/android/graphics/Bitmap.java +++ b/graphics/java/android/graphics/Bitmap.java @@ -2240,7 +2240,7 @@ public final class Bitmap implements Parcelable { */ @UnsupportedAppUsage public GraphicBuffer createGraphicBufferHandle() { - return nativeCreateGraphicBufferHandle(mNativePtr); + return GraphicBuffer.createFromHardwareBuffer(getHardwareBuffer()); } /** @@ -2320,7 +2320,6 @@ public final class Bitmap implements Parcelable { private static native Bitmap nativeCopyPreserveInternalConfig(long nativeBitmap); private static native Bitmap nativeWrapHardwareBufferBitmap(HardwareBuffer buffer, long nativeColorSpace); - private static native GraphicBuffer nativeCreateGraphicBufferHandle(long nativeBitmap); private static native HardwareBuffer nativeGetHardwareBuffer(long nativeBitmap); private static native ColorSpace nativeComputeColorSpace(long nativePtr); private static native void nativeSetColorSpace(long nativePtr, long nativeColorSpace); diff --git a/graphics/java/android/graphics/GraphicBuffer.java b/graphics/java/android/graphics/GraphicBuffer.java index 99fa5eef7bbd..0430847857b6 100644 --- a/graphics/java/android/graphics/GraphicBuffer.java +++ b/graphics/java/android/graphics/GraphicBuffer.java @@ -17,6 +17,7 @@ package android.graphics; import android.compat.annotation.UnsupportedAppUsage; +import android.hardware.HardwareBuffer; import android.os.Parcel; import android.os.Parcelable; @@ -110,6 +111,14 @@ public class GraphicBuffer implements Parcelable { } /** + * For Bitmap until all usages are updated to AHB + * @hide + */ + public static final GraphicBuffer createFromHardwareBuffer(HardwareBuffer buffer) { + return nCreateFromHardwareBuffer(buffer); + } + + /** * Returns the width of this buffer in pixels. */ public int getWidth() { @@ -305,4 +314,5 @@ public class GraphicBuffer implements Parcelable { private static native boolean nLockCanvas(long nativeObject, Canvas canvas, Rect dirty); private static native boolean nUnlockCanvasAndPost(long nativeObject, Canvas canvas); private static native long nWrapGraphicBuffer(long nativeObject); + private static native GraphicBuffer nCreateFromHardwareBuffer(HardwareBuffer buffer); } diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp index 81dedda5341d..ac2fd98248d0 100644 --- a/libs/hwui/Android.bp +++ b/libs/hwui/Android.bp @@ -152,9 +152,235 @@ cc_defaults { } // ------------------------ +// APEX +// ------------------------ + +cc_library_headers { + name: "android_graphics_apex_headers", + + host_supported: true, + export_include_dirs: [ + "apex/include", + ], + target: { + windows: { + enabled: true, + }, + } +} + +cc_defaults { + name: "android_graphics_apex", + host_supported: true, + cflags: [ + "-Wno-unused-parameter", + "-Wno-non-virtual-dtor", + "-Wno-maybe-uninitialized", + "-Wno-parentheses", + "-Wall", + "-Werror", + "-Wno-error=deprecated-declarations", + "-Wunused", + "-Wunreachable-code", + ], + + cppflags: ["-Wno-conversion-null"], + + srcs: [ + "apex/android_matrix.cpp", + "apex/android_paint.cpp", + "apex/android_region.cpp", + ], + + header_libs: [ "android_graphics_apex_headers" ], + + target: { + android: { + srcs: [ // sources that depend on android only libraries + "apex/android_bitmap.cpp", + "apex/android_canvas.cpp", + "apex/jni_runtime.cpp", + "apex/renderthread.cpp", + ], + }, + host: { + srcs: [ + "apex/LayoutlibLoader.cpp", + ], + } + }, +} + +// ------------------------ +// Android Graphics JNI +// ------------------------ + +cc_library_headers { + name: "android_graphics_jni_headers", + + host_supported: true, + export_include_dirs: [ + "jni", + ], + target: { + windows: { + enabled: true, + }, + } +} + +cc_defaults { + name: "android_graphics_jni", + host_supported: true, + cflags: [ + "-Wno-unused-parameter", + "-Wno-non-virtual-dtor", + "-Wno-maybe-uninitialized", + "-Wno-parentheses", + + "-DGL_GLEXT_PROTOTYPES", + "-DEGL_EGLEXT_PROTOTYPES", + + "-DU_USING_ICU_NAMESPACE=0", + + "-Wall", + "-Werror", + "-Wno-error=deprecated-declarations", + "-Wunused", + "-Wunreachable-code", + ], + + cppflags: ["-Wno-conversion-null"], + + srcs: [ + "jni/android_graphics_animation_NativeInterpolatorFactory.cpp", + "jni/android_graphics_animation_RenderNodeAnimator.cpp", + "jni/android_graphics_Canvas.cpp", + "jni/android_graphics_ColorSpace.cpp", + "jni/android_graphics_drawable_AnimatedVectorDrawable.cpp", + "jni/android_graphics_drawable_VectorDrawable.cpp", + "jni/android_graphics_HardwareRendererObserver.cpp", + "jni/android_graphics_Matrix.cpp", + "jni/android_graphics_Picture.cpp", + "jni/android_graphics_DisplayListCanvas.cpp", + "jni/android_graphics_RenderNode.cpp", + "jni/android_nio_utils.cpp", + "jni/android_util_PathParser.cpp", + + "jni/Bitmap.cpp", + "jni/BitmapFactory.cpp", + "jni/ByteBufferStreamAdaptor.cpp", + "jni/Camera.cpp", + "jni/CanvasProperty.cpp", + "jni/ColorFilter.cpp", + "jni/CreateJavaOutputStreamAdaptor.cpp", + "jni/FontFamily.cpp", + "jni/FontUtils.cpp", + "jni/Graphics.cpp", + "jni/ImageDecoder.cpp", + "jni/Interpolator.cpp", + "jni/MaskFilter.cpp", + "jni/NinePatch.cpp", + "jni/NinePatchPeeker.cpp", + "jni/Paint.cpp", + "jni/PaintFilter.cpp", + "jni/Path.cpp", + "jni/PathEffect.cpp", + "jni/PathMeasure.cpp", + "jni/Picture.cpp", + "jni/Shader.cpp", + "jni/Typeface.cpp", + "jni/Utils.cpp", + "jni/YuvToJpegEncoder.cpp", + "jni/fonts/Font.cpp", + "jni/fonts/FontFamily.cpp", + "jni/text/LineBreaker.cpp", + "jni/text/MeasuredText.cpp", + ], + + header_libs: [ "android_graphics_jni_headers" ], + + include_dirs: [ + "external/skia/include/private", + "external/skia/src/codec", + "external/skia/src/core", + "external/skia/src/effects", + "external/skia/src/image", + "external/skia/src/images", + ], + + shared_libs: [ + "libbase", + "libcutils", + "libharfbuzz_ng", + "liblog", + "libminikin", + "libnativehelper", + "libz", + "libziparchive", + "libjpeg", + ], + + target: { + android: { + srcs: [ // sources that depend on android only libraries + "jni/AnimatedImageDrawable.cpp", + "jni/android_graphics_TextureLayer.cpp", + "jni/android_graphics_HardwareRenderer.cpp", + "jni/BitmapRegionDecoder.cpp", + "jni/GIFMovie.cpp", + "jni/GraphicsStatsService.cpp", + "jni/Movie.cpp", + "jni/MovieImpl.cpp", + "jni/Region.cpp", // requires libbinder_ndk + "jni/pdf/PdfDocument.cpp", + "jni/pdf/PdfEditor.cpp", + "jni/pdf/PdfRenderer.cpp", + "jni/pdf/PdfUtils.cpp", + ], + shared_libs: [ + "libandroidfw", + "libbinder", + "libbinder_ndk", + "libmediandk", + "libnativedisplay", + "libnativewindow", + "libstatspull", + "libstatssocket", + "libpdfium", + ], + static_libs: [ + "libgif", + "libstatslog", + ], + }, + host: { + cflags: [ + "-Wno-unused-const-variable", + "-Wno-unused-function", + ], + static_libs: [ + "libandroidfw", + ], + } + }, +} + +// ------------------------ // library // ------------------------ +cc_library_headers { + name: "libhwui_internal_headers", + + host_supported: true, + export_include_dirs: [ + ".", + ], + header_libs: [ "android_graphics_jni_headers" ], + export_header_lib_headers: [ "android_graphics_jni_headers" ], +} + cc_defaults { name: "libhwui_defaults", defaults: ["hwui_defaults"], @@ -205,11 +431,8 @@ cc_defaults { export_proto_headers: true, }, - export_include_dirs: ["."], - target: { android: { - srcs: [ "hwui/AnimatedImageThread.cpp", "pipeline/skia/ATraceMemoryDump.cpp", @@ -274,7 +497,10 @@ cc_library { host_supported: true, defaults: [ "libhwui_defaults", + "android_graphics_apex", + "android_graphics_jni", ], + export_header_lib_headers: ["android_graphics_apex_headers"], } cc_library_static { diff --git a/libs/hwui/DeviceInfo.cpp b/libs/hwui/DeviceInfo.cpp index 6d4a0c6421d9..c24224cbbd67 100644 --- a/libs/hwui/DeviceInfo.cpp +++ b/libs/hwui/DeviceInfo.cpp @@ -18,9 +18,6 @@ #include <log/log.h> #include <utils/Errors.h> -#include <mutex> -#include <thread> - #include "Properties.h" namespace android { diff --git a/libs/hwui/apex/LayoutlibLoader.cpp b/libs/hwui/apex/LayoutlibLoader.cpp new file mode 100644 index 000000000000..4bbf1214bdcf --- /dev/null +++ b/libs/hwui/apex/LayoutlibLoader.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "graphics_jni_helpers.h" + +#include <GraphicsJNI.h> +#include <SkGraphics.h> + +#include <sstream> +#include <iostream> +#include <unicode/putil.h> +#include <unordered_map> +#include <vector> + +using namespace std; + +/* + * This is responsible for setting up the JNI environment for communication between + * the Java and native parts of layoutlib, including registering native methods. + * This is mostly achieved by copying the way it is done in the platform + * (see AndroidRuntime.cpp). + */ + +static JavaVM* javaVM; + +extern int register_android_graphics_Bitmap(JNIEnv*); +extern int register_android_graphics_BitmapFactory(JNIEnv*); +extern int register_android_graphics_ByteBufferStreamAdaptor(JNIEnv* env); +extern int register_android_graphics_CreateJavaOutputStreamAdaptor(JNIEnv* env); +extern int register_android_graphics_Graphics(JNIEnv* env); +extern int register_android_graphics_ImageDecoder(JNIEnv*); +extern int register_android_graphics_Interpolator(JNIEnv* env); +extern int register_android_graphics_MaskFilter(JNIEnv* env); +extern int register_android_graphics_NinePatch(JNIEnv*); +extern int register_android_graphics_PathEffect(JNIEnv* env); +extern int register_android_graphics_Shader(JNIEnv* env); +extern int register_android_graphics_Typeface(JNIEnv* env); + +namespace android { + +extern int register_android_graphics_Canvas(JNIEnv* env); +extern int register_android_graphics_ColorFilter(JNIEnv* env); +extern int register_android_graphics_ColorSpace(JNIEnv* env); +extern int register_android_graphics_DrawFilter(JNIEnv* env); +extern int register_android_graphics_FontFamily(JNIEnv* env); +extern int register_android_graphics_Matrix(JNIEnv* env); +extern int register_android_graphics_Paint(JNIEnv* env); +extern int register_android_graphics_Path(JNIEnv* env); +extern int register_android_graphics_PathMeasure(JNIEnv* env); +extern int register_android_graphics_Picture(JNIEnv* env); +//extern int register_android_graphics_Region(JNIEnv* env); +extern int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env); +extern int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env); +extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env); +extern int register_android_graphics_drawable_VectorDrawable(JNIEnv* env); +extern int register_android_graphics_fonts_Font(JNIEnv* env); +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); + +#define REG_JNI(name) { name } +struct RegJNIRec { + int (*mProc)(JNIEnv*); +}; + +// Map of all possible class names to register to their corresponding JNI registration function pointer +// The actual list of registered classes will be determined at runtime via the 'native_classes' System property +static const std::unordered_map<std::string, RegJNIRec> gRegJNIMap = { + {"android.graphics.Bitmap", REG_JNI(register_android_graphics_Bitmap)}, + {"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)}, + {"android.graphics.DrawFilter", REG_JNI(register_android_graphics_DrawFilter)}, + {"android.graphics.FontFamily", REG_JNI(register_android_graphics_FontFamily)}, + {"android.graphics.Graphics", REG_JNI(register_android_graphics_Graphics)}, + {"android.graphics.ImageDecoder", REG_JNI(register_android_graphics_ImageDecoder)}, + {"android.graphics.Interpolator", REG_JNI(register_android_graphics_Interpolator)}, + {"android.graphics.MaskFilter", REG_JNI(register_android_graphics_MaskFilter)}, + {"android.graphics.Matrix", REG_JNI(register_android_graphics_Matrix)}, + {"android.graphics.NinePatch", REG_JNI(register_android_graphics_NinePatch)}, + {"android.graphics.Paint", REG_JNI(register_android_graphics_Paint)}, + {"android.graphics.Path", REG_JNI(register_android_graphics_Path)}, + {"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)}, + {"android.graphics.animation.NativeInterpolatorFactory", + REG_JNI(register_android_graphics_animation_NativeInterpolatorFactory)}, + {"android.graphics.animation.RenderNodeAnimator", + REG_JNI(register_android_graphics_animation_RenderNodeAnimator)}, + {"android.graphics.drawable.AnimatedVectorDrawable", + REG_JNI(register_android_graphics_drawable_AnimatedVectorDrawable)}, + {"android.graphics.drawable.VectorDrawable", + REG_JNI(register_android_graphics_drawable_VectorDrawable)}, + {"android.graphics.fonts.Font", REG_JNI(register_android_graphics_fonts_Font)}, + {"android.graphics.fonts.FontFamily", REG_JNI(register_android_graphics_fonts_FontFamily)}, + {"android.graphics.text.LineBreaker", REG_JNI(register_android_graphics_text_LineBreaker)}, + {"android.graphics.text.MeasuredText", + REG_JNI(register_android_graphics_text_MeasuredText)}, + {"android.util.PathParser", REG_JNI(register_android_util_PathParser)}, +}; + +static int register_jni_procs(const std::unordered_map<std::string, RegJNIRec>& jniRegMap, + const vector<string>& classesToRegister, JNIEnv* env) { + + for (const string& className : classesToRegister) { + if (jniRegMap.at(className).mProc(env) < 0) { + return -1; + } + } + return 0; +} + +static vector<string> parseCsv(const string& csvString) { + vector<string> result; + istringstream stream(csvString); + string segment; + while(getline(stream, segment, ',')) + { + result.push_back(segment); + } + return result; +} + +static vector<string> parseCsv(JNIEnv* env, jstring csvJString) { + const char* charArray = env->GetStringUTFChars(csvJString, 0); + string csvString(charArray); + vector<string> result = parseCsv(csvString); + env->ReleaseStringUTFChars(csvJString, charArray); + return result; +} + +} // namespace android + +using namespace android; + +void init_android_graphics() { + SkGraphics::Init(); +} + +int register_android_graphics_classes(JNIEnv *env) { + JavaVM* vm = nullptr; + env->GetJavaVM(&vm); + GraphicsJNI::setJavaVM(vm); + + // Configuration is stored as java System properties. + // Get a reference to System.getProperty + jclass system = FindClassOrDie(env, "java/lang/System"); + jmethodID getPropertyMethod = GetStaticMethodIDOrDie(env, system, "getProperty", + "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"); + + // Get the names of classes that need to register their native methods + auto nativesClassesJString = + (jstring) env->CallStaticObjectMethod(system, + getPropertyMethod, env->NewStringUTF("native_classes"), + env->NewStringUTF("")); + vector<string> classesToRegister = parseCsv(env, nativesClassesJString); + + if (register_jni_procs(gRegJNIMap, classesToRegister, env) < 0) { + return JNI_ERR; + } + + return 0; +} + +void zygote_preload_graphics() { } diff --git a/core/jni/android/graphics/apex/TypeCast.h b/libs/hwui/apex/TypeCast.h index 96721d007951..96721d007951 100644 --- a/core/jni/android/graphics/apex/TypeCast.h +++ b/libs/hwui/apex/TypeCast.h diff --git a/core/jni/android/graphics/apex/android_bitmap.cpp b/libs/hwui/apex/android_bitmap.cpp index decd19071944..b56a619b00aa 100644 --- a/core/jni/android/graphics/apex/android_bitmap.cpp +++ b/libs/hwui/apex/android_bitmap.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "Bitmap" #include <log/log.h> diff --git a/core/jni/android/graphics/apex/android_canvas.cpp b/libs/hwui/apex/android_canvas.cpp index 2a939efed9bb..2a939efed9bb 100644 --- a/core/jni/android/graphics/apex/android_canvas.cpp +++ b/libs/hwui/apex/android_canvas.cpp diff --git a/core/jni/android/graphics/apex/android_matrix.cpp b/libs/hwui/apex/android_matrix.cpp index 309360d9b0b3..693b22b62663 100644 --- a/core/jni/android/graphics/apex/android_matrix.cpp +++ b/libs/hwui/apex/android_matrix.cpp @@ -15,7 +15,7 @@ */ #include "android/graphics/matrix.h" -#include "Matrix.h" +#include "android_graphics_Matrix.h" bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]) { static_assert(SkMatrix::kMScaleX == 0, "SkMatrix unexpected index"); diff --git a/core/jni/android/graphics/apex/android_paint.cpp b/libs/hwui/apex/android_paint.cpp index 70bd085343ce..70bd085343ce 100644 --- a/core/jni/android/graphics/apex/android_paint.cpp +++ b/libs/hwui/apex/android_paint.cpp diff --git a/core/jni/android/graphics/apex/android_region.cpp b/libs/hwui/apex/android_region.cpp index 2030e7e69861..2030e7e69861 100644 --- a/core/jni/android/graphics/apex/android_region.cpp +++ b/libs/hwui/apex/android_region.cpp diff --git a/core/jni/android/graphics/apex/include/android/graphics/bitmap.h b/libs/hwui/apex/include/android/graphics/bitmap.h index 45fec2ab7b43..8c4b439d2a2b 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/bitmap.h +++ b/libs/hwui/apex/include/android/graphics/bitmap.h @@ -18,6 +18,7 @@ #include <android/bitmap.h> #include <android/data_space.h> +#include <cutils/compiler.h> #include <jni.h> #include <sys/cdefs.h> @@ -37,31 +38,31 @@ typedef struct ABitmap ABitmap; * NOTE: This API does not need to remain as an APEX API if/when we pull libjnigraphics into the * UI module. */ -AndroidBitmapInfo ABitmap_getInfoFromJava(JNIEnv* env, jobject bitmapObj); +ANDROID_API AndroidBitmapInfo ABitmap_getInfoFromJava(JNIEnv* env, jobject bitmapObj); /** * * @return ptr to an opaque handle to the native bitmap or null if the java bitmap has been recycled * or does not exist. */ -ABitmap* ABitmap_acquireBitmapFromJava(JNIEnv* env, jobject bitmapObj); +ANDROID_API ABitmap* ABitmap_acquireBitmapFromJava(JNIEnv* env, jobject bitmapObj); -ABitmap* ABitmap_copy(ABitmap* srcBitmap, AndroidBitmapFormat dstFormat); +ANDROID_API ABitmap* ABitmap_copy(ABitmap* srcBitmap, AndroidBitmapFormat dstFormat); -void ABitmap_acquireRef(ABitmap* bitmap); -void ABitmap_releaseRef(ABitmap* bitmap); +ANDROID_API void ABitmap_acquireRef(ABitmap* bitmap); +ANDROID_API void ABitmap_releaseRef(ABitmap* bitmap); -AndroidBitmapInfo ABitmap_getInfo(ABitmap* bitmap); -ADataSpace ABitmap_getDataSpace(ABitmap* bitmap); +ANDROID_API AndroidBitmapInfo ABitmap_getInfo(ABitmap* bitmap); +ANDROID_API ADataSpace ABitmap_getDataSpace(ABitmap* bitmap); -void* ABitmap_getPixels(ABitmap* bitmap); -void ABitmap_notifyPixelsChanged(ABitmap* bitmap); +ANDROID_API void* ABitmap_getPixels(ABitmap* bitmap); +ANDROID_API void ABitmap_notifyPixelsChanged(ABitmap* bitmap); -AndroidBitmapFormat ABitmapConfig_getFormatFromConfig(JNIEnv* env, jobject bitmapConfigObj); -jobject ABitmapConfig_getConfigFromFormat(JNIEnv* env, AndroidBitmapFormat format); +ANDROID_API AndroidBitmapFormat ABitmapConfig_getFormatFromConfig(JNIEnv* env, jobject bitmapConfigObj); +ANDROID_API jobject ABitmapConfig_getConfigFromFormat(JNIEnv* env, AndroidBitmapFormat format); // NDK access -int ABitmap_compress(const AndroidBitmapInfo* info, ADataSpace dataSpace, const void* pixels, +ANDROID_API int ABitmap_compress(const AndroidBitmapInfo* info, ADataSpace dataSpace, const void* pixels, AndroidBitmapCompressFormat format, int32_t quality, void* userContext, AndroidBitmap_CompressWriteFunc); /** @@ -75,7 +76,7 @@ int ABitmap_compress(const AndroidBitmapInfo* info, ADataSpace dataSpace, const * a reference on the buffer, and the client must call * AHardwareBuffer_release when finished with it. */ -AHardwareBuffer* ABitmap_getHardwareBuffer(ABitmap* bitmap); +ANDROID_API AHardwareBuffer* ABitmap_getHardwareBuffer(ABitmap* bitmap); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/canvas.h b/libs/hwui/apex/include/android/graphics/canvas.h index 6fd6b0693b37..a0cecc04a7e5 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/canvas.h +++ b/libs/hwui/apex/include/android/graphics/canvas.h @@ -20,6 +20,7 @@ #include <android/graphics/paint.h> #include <android/native_window.h> #include <android/rect.h> +#include <cutils/compiler.h> #include <jni.h> __BEGIN_DECLS @@ -30,24 +31,24 @@ __BEGIN_DECLS typedef struct ACanvas ACanvas; // One of AHardwareBuffer_Format. -bool ACanvas_isSupportedPixelFormat(int32_t bufferFormat); +ANDROID_API bool ACanvas_isSupportedPixelFormat(int32_t bufferFormat); /** * Returns a native handle to a Java android.graphics.Canvas * * @return ACanvas* that is only valid for the life of the jobject. */ -ACanvas* ACanvas_getNativeHandleFromJava(JNIEnv* env, jobject canvas); +ANDROID_API ACanvas* ACanvas_getNativeHandleFromJava(JNIEnv* env, jobject canvas); /** * Creates a canvas that wraps the buffer * * @param buffer is a required param. If no buffer is provided a nullptr will be returned. */ -ACanvas* ACanvas_createCanvas(const ANativeWindow_Buffer* buffer, +ANDROID_API ACanvas* ACanvas_createCanvas(const ANativeWindow_Buffer* buffer, int32_t /*android_dataspace_t*/ dataspace); -void ACanvas_destroyCanvas(ACanvas* canvas); +ANDROID_API void ACanvas_destroyCanvas(ACanvas* canvas); /** * Updates the canvas to render into the pixels in the provided buffer @@ -60,7 +61,7 @@ void ACanvas_destroyCanvas(ACanvas* canvas); * method will behave as if nullptr were passed as the input buffer and the previous buffer * will still be released. */ -bool ACanvas_setBuffer(ACanvas* canvas, const ANativeWindow_Buffer* buffer, +ANDROID_API bool ACanvas_setBuffer(ACanvas* canvas, const ANativeWindow_Buffer* buffer, int32_t /*android_dataspace_t*/ dataspace); /** @@ -68,21 +69,21 @@ bool ACanvas_setBuffer(ACanvas* canvas, const ANativeWindow_Buffer* buffer, * * @param clipRect required */ -void ACanvas_clipRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false); +ANDROID_API void ACanvas_clipRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false); /** * Clips operations on the canvas to the difference of the current clip and the provided clipRect. * * @param clipRect required */ -void ACanvas_clipOutRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false); +ANDROID_API void ACanvas_clipOutRect(ACanvas* canvas, const ARect* clipRect, bool doAntiAlias = false); /** * * @param rect required * @param paint required */ -void ACanvas_drawRect(ACanvas* canvas, const ARect* rect, const APaint* paint); +ANDROID_API void ACanvas_drawRect(ACanvas* canvas, const ARect* rect, const APaint* paint); /** * @@ -91,7 +92,7 @@ void ACanvas_drawRect(ACanvas* canvas, const ARect* rect, const APaint* paint); * @param top * @param paint */ -void ACanvas_drawBitmap(ACanvas* canvas, const ABitmap* bitmap, float left, float top, +ANDROID_API void ACanvas_drawBitmap(ACanvas* canvas, const ABitmap* bitmap, float left, float top, const APaint* paint); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/jni_runtime.h b/libs/hwui/apex/include/android/graphics/jni_runtime.h index 872a9497ab90..487383ed50d5 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/jni_runtime.h +++ b/libs/hwui/apex/include/android/graphics/jni_runtime.h @@ -16,15 +16,18 @@ #ifndef ANDROID_GRAPHICS_JNI_RUNTIME_H #define ANDROID_GRAPHICS_JNI_RUNTIME_H +#include <cutils/compiler.h> #include <jni.h> __BEGIN_DECLS -void init_android_graphics(); +ANDROID_API void init_android_graphics(); -int register_android_graphics_classes(JNIEnv* env); +ANDROID_API int register_android_graphics_classes(JNIEnv* env); -void zygote_preload_graphics(); +ANDROID_API int register_android_graphics_GraphicsStatsService(JNIEnv* env); + +ANDROID_API void zygote_preload_graphics(); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/matrix.h b/libs/hwui/apex/include/android/graphics/matrix.h index 4039cd1b8f74..987ad13f7635 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/matrix.h +++ b/libs/hwui/apex/include/android/graphics/matrix.h @@ -18,6 +18,7 @@ #define ANDROID_GRAPHICS_MATRIX_H #include <jni.h> +#include <cutils/compiler.h> #include <sys/cdefs.h> __BEGIN_DECLS @@ -31,7 +32,7 @@ __BEGIN_DECLS * @return true if the values param was populated and false otherwise. */ -bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]); +ANDROID_API bool AMatrix_getContents(JNIEnv* env, jobject matrixObj, float values[9]); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/paint.h b/libs/hwui/apex/include/android/graphics/paint.h index 5895e006bf93..058db8d37619 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/paint.h +++ b/libs/hwui/apex/include/android/graphics/paint.h @@ -16,6 +16,7 @@ #ifndef ANDROID_GRAPHICS_PAINT_H #define ANDROID_GRAPHICS_PAINT_H +#include <cutils/compiler.h> #include <sys/cdefs.h> __BEGIN_DECLS @@ -35,11 +36,11 @@ enum ABlendMode { ABLEND_MODE_SRC = 2, }; -APaint* APaint_createPaint(); +ANDROID_API APaint* APaint_createPaint(); -void APaint_destroyPaint(APaint* paint); +ANDROID_API void APaint_destroyPaint(APaint* paint); -void APaint_setBlendMode(APaint* paint, ABlendMode blendMode); +ANDROID_API void APaint_setBlendMode(APaint* paint, ABlendMode blendMode); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/region.h b/libs/hwui/apex/include/android/graphics/region.h index 961067a8e2db..0756d6dd63f6 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/region.h +++ b/libs/hwui/apex/include/android/graphics/region.h @@ -16,6 +16,7 @@ #ifndef ANDROID_GRAPHICS_REGION_H #define ANDROID_GRAPHICS_REGION_H +#include <cutils/compiler.h> #include <android/rect.h> #include <sys/cdefs.h> #include <jni.h> @@ -35,19 +36,19 @@ typedef struct ARegionIterator ARegionIterator; * @return ARegionIterator that must be closed and must not live longer than the life * of the jobject. It returns nullptr if the region is not a valid object. */ -ARegionIterator* ARegionIterator_acquireIterator(JNIEnv* env, jobject region); +ANDROID_API ARegionIterator* ARegionIterator_acquireIterator(JNIEnv* env, jobject region); -void ARegionIterator_releaseIterator(ARegionIterator* iterator); +ANDROID_API void ARegionIterator_releaseIterator(ARegionIterator* iterator); -bool ARegionIterator_isComplex(ARegionIterator* iterator); +ANDROID_API bool ARegionIterator_isComplex(ARegionIterator* iterator); -bool ARegionIterator_isDone(ARegionIterator* iterator); +ANDROID_API bool ARegionIterator_isDone(ARegionIterator* iterator); -void ARegionIterator_next(ARegionIterator* iterator); +ANDROID_API void ARegionIterator_next(ARegionIterator* iterator); -ARect ARegionIterator_getRect(ARegionIterator* iterator); +ANDROID_API ARect ARegionIterator_getRect(ARegionIterator* iterator); -ARect ARegionIterator_getTotalBounds(ARegionIterator* iterator); +ANDROID_API ARect ARegionIterator_getTotalBounds(ARegionIterator* iterator); __END_DECLS diff --git a/core/jni/android/graphics/apex/include/android/graphics/renderthread.h b/libs/hwui/apex/include/android/graphics/renderthread.h index 0a790af731a9..50280a6dd1fb 100644 --- a/core/jni/android/graphics/apex/include/android/graphics/renderthread.h +++ b/libs/hwui/apex/include/android/graphics/renderthread.h @@ -16,6 +16,7 @@ #ifndef ANDROID_GRAPHICS_RENDERTHREAD_H #define ANDROID_GRAPHICS_RENDERTHREAD_H +#include <cutils/compiler.h> #include <sys/cdefs.h> __BEGIN_DECLS @@ -26,7 +27,7 @@ __BEGIN_DECLS * function requires a valid fd, but does not persist or assume ownership of the fd * outside the scope of this function. */ -void ARenderThread_dumpGraphicsMemory(int fd); +ANDROID_API void ARenderThread_dumpGraphicsMemory(int fd); __END_DECLS diff --git a/core/jni/android/graphics/apex/jni_runtime.cpp b/libs/hwui/apex/jni_runtime.cpp index 35c997d80b61..a114e2f42157 100644 --- a/core/jni/android/graphics/apex/jni_runtime.cpp +++ b/libs/hwui/apex/jni_runtime.cpp @@ -21,9 +21,11 @@ #include <sys/cdefs.h> #include <EGL/egl.h> +#include <GraphicsJNI.h> #include <Properties.h> #include <SkGraphics.h> +#undef LOG_TAG #define LOG_TAG "AndroidGraphicsJNI" extern int register_android_graphics_Bitmap(JNIEnv*); @@ -59,7 +61,6 @@ extern int register_android_graphics_Path(JNIEnv* env); extern int register_android_graphics_PathMeasure(JNIEnv* env); extern int register_android_graphics_Picture(JNIEnv*); extern int register_android_graphics_Region(JNIEnv* env); -extern int register_android_graphics_SurfaceTexture(JNIEnv* env); extern int register_android_graphics_animation_NativeInterpolatorFactory(JNIEnv* env); extern int register_android_graphics_animation_RenderNodeAnimator(JNIEnv* env); extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env); @@ -122,7 +123,6 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_graphics_Picture), REG_JNI(register_android_graphics_Region), REG_JNI(register_android_graphics_Shader), - REG_JNI(register_android_graphics_SurfaceTexture), REG_JNI(register_android_graphics_Typeface), REG_JNI(register_android_graphics_YuvImage), REG_JNI(register_android_graphics_animation_NativeInterpolatorFactory), @@ -151,6 +151,10 @@ void init_android_graphics() { } int register_android_graphics_classes(JNIEnv *env) { + JavaVM* vm = nullptr; + env->GetJavaVM(&vm); + GraphicsJNI::setJavaVM(vm); + for (size_t i = 0; i < NELEM(android::gRegJNI); i++) { if (android::gRegJNI[i].mProc(env) < 0) { #ifndef NDEBUG diff --git a/core/jni/android/graphics/apex/renderthread.cpp b/libs/hwui/apex/renderthread.cpp index 5d26afe7a2ab..5d26afe7a2ab 100644 --- a/core/jni/android/graphics/apex/renderthread.cpp +++ b/libs/hwui/apex/renderthread.cpp diff --git a/core/jni/android/graphics/AnimatedImageDrawable.cpp b/libs/hwui/jni/AnimatedImageDrawable.cpp index 6c2a5a3f3fcc..055075d0c42a 100644 --- a/core/jni/android/graphics/AnimatedImageDrawable.cpp +++ b/libs/hwui/jni/AnimatedImageDrawable.cpp @@ -17,7 +17,6 @@ #include "GraphicsJNI.h" #include "ImageDecoder.h" #include "Utils.h" -#include "core_jni_helpers.h" #include <SkAndroidCodec.h> #include <SkAnimatedImage.h> diff --git a/core/jni/android/graphics/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp index 130322aaaa45..ba669053ed63 100755 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/libs/hwui/jni/Bitmap.cpp @@ -1,3 +1,4 @@ +#undef LOG_TAG #define LOG_TAG "Bitmap" #include "Bitmap.h" @@ -11,7 +12,6 @@ #include "SkStream.h" #include "SkWebpEncoder.h" -#include "android_os_Parcel.h" #include "android_nio_utils.h" #include "CreateJavaOutputStreamAdaptor.h" #include <hwui/Paint.h> @@ -19,15 +19,12 @@ #include <utils/Color.h> #ifdef __ANDROID__ // Layoutlib does not support graphic buffer, parcel or render thread -#include <android_runtime/android_graphics_GraphicBuffer.h> +#include <private/android/AHardwareBufferHelpers.h> #include <binder/Parcel.h> #include <dlfcn.h> #include <renderthread/RenderProxy.h> #endif -#include "core_jni_helpers.h" - -#include <jni.h> #include <string.h> #include <memory> #include <string> @@ -570,6 +567,25 @@ static void Bitmap_setHasMipMap(JNIEnv* env, jobject, jlong bitmapHandle, /////////////////////////////////////////////////////////////////////////////// +#ifdef __ANDROID__ // Layoutlib does not support parcel +static struct parcel_offsets_t +{ + jclass clazz; + jfieldID mNativePtr; +} gParcelOffsets; + +static Parcel* parcelForJavaObject(JNIEnv* env, jobject obj) { + if (obj) { + Parcel* p = (Parcel*)env->GetLongField(obj, gParcelOffsets.mNativePtr); + if (p != NULL) { + return p; + } + jniThrowException(env, "java/lang/IllegalStateException", "Parcel has been finalized!"); + } + return NULL; +} +#endif + // This is the maximum possible size because the SkColorSpace must be // representable (and therefore serializable) using a matrix and numerical // transfer function. If we allow more color space representations in the @@ -583,7 +599,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { return NULL; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); + android::Parcel* p = parcelForJavaObject(env, parcel); const SkColorType colorType = (SkColorType)p->readInt32(); const SkAlphaType alphaType = (SkAlphaType)p->readInt32(); @@ -706,7 +722,7 @@ static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, return JNI_FALSE; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); + android::Parcel* p = parcelForJavaObject(env, parcel); SkBitmap bitmap; auto bitmapWrapper = reinterpret_cast<BitmapWrapper*>(bitmapHandle); @@ -1050,19 +1066,6 @@ static jobject Bitmap_wrapHardwareBufferBitmap(JNIEnv* env, jobject, jobject har #endif } -static jobject Bitmap_createGraphicBufferHandle(JNIEnv* env, jobject, jlong bitmapPtr) { -#ifdef __ANDROID__ // Layoutlib does not support graphic buffer - LocalScopedBitmap bitmapHandle(bitmapPtr); - LOG_ALWAYS_FATAL_IF(!bitmapHandle->isHardware(), - "Hardware config is only supported config in Bitmap_getGraphicBuffer"); - - Bitmap& bitmap = bitmapHandle->bitmap(); - return android_graphics_GraphicBuffer_createFromAHardwareBuffer(env, bitmap.hardwareBuffer()); -#else - return NULL; -#endif -} - static jobject Bitmap_getHardwareBuffer(JNIEnv* env, jobject, jlong bitmapPtr) { #ifdef __ANDROID__ // Layoutlib does not support graphic buffer LocalScopedBitmap bitmapHandle(bitmapPtr); @@ -1140,8 +1143,6 @@ static const JNINativeMethod gBitmapMethods[] = { (void*)Bitmap_copyPreserveInternalConfig }, { "nativeWrapHardwareBufferBitmap", "(Landroid/hardware/HardwareBuffer;J)Landroid/graphics/Bitmap;", (void*) Bitmap_wrapHardwareBufferBitmap }, - { "nativeCreateGraphicBufferHandle", "(J)Landroid/graphics/GraphicBuffer;", - (void*) Bitmap_createGraphicBufferHandle }, { "nativeGetHardwareBuffer", "(J)Landroid/hardware/HardwareBuffer;", (void*) Bitmap_getHardwareBuffer }, { "nativeComputeColorSpace", "(J)Landroid/graphics/ColorSpace;", (void*)Bitmap_computeColorSpace }, @@ -1155,6 +1156,8 @@ static const JNINativeMethod gBitmapMethods[] = { }; +const char* const kParcelPathName = "android/os/Parcel"; + int register_android_graphics_Bitmap(JNIEnv* env) { gBitmap_class = MakeGlobalRefOrDie(env, FindClassOrDie(env, "android/graphics/Bitmap")); @@ -1162,7 +1165,7 @@ int register_android_graphics_Bitmap(JNIEnv* env) gBitmap_constructorMethodID = GetMethodIDOrDie(env, gBitmap_class, "<init>", "(JIIIZ[BLandroid/graphics/NinePatch$InsetStruct;Z)V"); gBitmap_reinitMethodID = GetMethodIDOrDie(env, gBitmap_class, "reinit", "(IIZ)V"); -#ifdef __ANDROID__ // Layoutlib does not support graphic buffer +#ifdef __ANDROID__ // Layoutlib does not support graphic buffer or parcel void* handle_ = dlopen("libandroid.so", RTLD_NOW | RTLD_NODELETE); AHardwareBuffer_fromHardwareBuffer = (AHB_from_HB)dlsym(handle_, "AHardwareBuffer_fromHardwareBuffer"); @@ -1172,6 +1175,9 @@ int register_android_graphics_Bitmap(JNIEnv* env) AHardwareBuffer_toHardwareBuffer = (AHB_to_HB)dlsym(handle_, "AHardwareBuffer_toHardwareBuffer"); LOG_ALWAYS_FATAL_IF(AHardwareBuffer_toHardwareBuffer == nullptr, " Failed to find required symbol AHardwareBuffer_toHardwareBuffer!"); + + gParcelOffsets.clazz = MakeGlobalRefOrDie(env, FindClassOrDie(env, kParcelPathName)); + gParcelOffsets.mNativePtr = GetFieldIDOrDie(env, gParcelOffsets.clazz, "mNativePtr", "J"); #endif return android::RegisterMethodsOrDie(env, "android/graphics/Bitmap", gBitmapMethods, NELEM(gBitmapMethods)); diff --git a/core/jni/android/graphics/Bitmap.h b/libs/hwui/jni/Bitmap.h index 73eca3aa8ef8..73eca3aa8ef8 100644 --- a/core/jni/android/graphics/Bitmap.h +++ b/libs/hwui/jni/Bitmap.h diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/libs/hwui/jni/BitmapFactory.cpp index adedffdd731c..d4e27d812500 100644 --- a/core/jni/android/graphics/BitmapFactory.cpp +++ b/libs/hwui/jni/BitmapFactory.cpp @@ -1,8 +1,10 @@ +#undef LOG_TAG #define LOG_TAG "BitmapFactory" #include "BitmapFactory.h" #include "CreateJavaOutputStreamAdaptor.h" #include "GraphicsJNI.h" +#include "MimeType.h" #include "NinePatchPeeker.h" #include "SkAndroidCodec.h" #include "SkBRDAllocator.h" @@ -12,17 +14,15 @@ #include "SkStream.h" #include "SkUtils.h" #include "Utils.h" -#include "core_jni_helpers.h" #include <HardwareBitmapUploader.h> #include <nativehelper/JNIHelp.h> #include <androidfw/Asset.h> #include <androidfw/ResourceTypes.h> #include <cutils/compiler.h> +#include <fcntl.h> #include <memory> -#include <netinet/in.h> #include <stdio.h> -#include <sys/mman.h> #include <sys/stat.h> jfieldID gOptions_justBoundsFieldID; @@ -521,7 +521,9 @@ static jobject nativeDecodeStream(JNIEnv* env, jobject clazz, jobject is, jbyteA static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fileDescriptor, jobject padding, jobject bitmapFactoryOptions, jlong inBitmapHandle, jlong colorSpaceHandle) { - +#ifndef __ANDROID__ // LayoutLib for Windows does not support F_DUPFD_CLOEXEC + return nullObjectReturn("Not supported on Windows"); +#else NPE_CHECK_RETURN_ZERO(env, fileDescriptor); int descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); @@ -568,6 +570,7 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi return doDecode(env, std::move(stream), padding, bitmapFactoryOptions, inBitmapHandle, colorSpaceHandle); +#endif } static jobject nativeDecodeAsset(JNIEnv* env, jobject clazz, jlong native_asset, diff --git a/core/jni/android/graphics/BitmapFactory.h b/libs/hwui/jni/BitmapFactory.h index 45bffc44967d..45bffc44967d 100644 --- a/core/jni/android/graphics/BitmapFactory.h +++ b/libs/hwui/jni/BitmapFactory.h diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/libs/hwui/jni/BitmapRegionDecoder.cpp index 06b4ff849097..712351382d97 100644 --- a/core/jni/android/graphics/BitmapRegionDecoder.cpp +++ b/libs/hwui/jni/BitmapRegionDecoder.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "BitmapRegionDecoder" #include "BitmapFactory.h" @@ -27,12 +28,8 @@ #include "SkData.h" #include "SkStream.h" -#include "core_jni_helpers.h" - #include <HardwareBitmapUploader.h> -#include <nativehelper/JNIHelp.h> #include <androidfw/Asset.h> -#include <jni.h> #include <sys/stat.h> #include <memory> diff --git a/core/jni/android/graphics/ByteBufferStreamAdaptor.cpp b/libs/hwui/jni/ByteBufferStreamAdaptor.cpp index d443fd8cdf14..db5f6f6c684f 100644 --- a/core/jni/android/graphics/ByteBufferStreamAdaptor.cpp +++ b/libs/hwui/jni/ByteBufferStreamAdaptor.cpp @@ -1,7 +1,6 @@ #include "ByteBufferStreamAdaptor.h" -#include "core_jni_helpers.h" +#include "GraphicsJNI.h" #include "Utils.h" -#include <jni.h> #include <SkStream.h> diff --git a/core/jni/android/graphics/ByteBufferStreamAdaptor.h b/libs/hwui/jni/ByteBufferStreamAdaptor.h index 367a48fad9b9..367a48fad9b9 100644 --- a/core/jni/android/graphics/ByteBufferStreamAdaptor.h +++ b/libs/hwui/jni/ByteBufferStreamAdaptor.h diff --git a/core/jni/android/graphics/Camera.cpp b/libs/hwui/jni/Camera.cpp index da954972ab57..a5e1adf26861 100644 --- a/core/jni/android/graphics/Camera.cpp +++ b/libs/hwui/jni/Camera.cpp @@ -1,6 +1,3 @@ -#include "jni.h" -#include "core_jni_helpers.h" - #include "SkCamera.h" #include "GraphicsJNI.h" diff --git a/core/jni/android/graphics/CanvasProperty.cpp b/libs/hwui/jni/CanvasProperty.cpp index c841d6a5125a..684ee23b9fca 100644 --- a/core/jni/android/graphics/CanvasProperty.cpp +++ b/libs/hwui/jni/CanvasProperty.cpp @@ -14,9 +14,7 @@ * limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include <core_jni_helpers.h> #include <hwui/Paint.h> #include <utils/RefBase.h> diff --git a/core/jni/android/graphics/ColorFilter.cpp b/libs/hwui/jni/ColorFilter.cpp index 164d35f46a47..cef21f91f3c1 100644 --- a/core/jni/android/graphics/ColorFilter.cpp +++ b/libs/hwui/jni/ColorFilter.cpp @@ -15,9 +15,7 @@ ** limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include "SkColorFilter.h" #include "SkColorMatrixFilter.h" diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp index 39483b55992b..39483b55992b 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp +++ b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.cpp diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.h index fccd4717c4b7..849418da01a1 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.h +++ b/libs/hwui/jni/CreateJavaOutputStreamAdaptor.h @@ -1,7 +1,6 @@ #ifndef _ANDROID_GRAPHICS_CREATE_JAVA_OUTPUT_STREAM_ADAPTOR_H_ #define _ANDROID_GRAPHICS_CREATE_JAVA_OUTPUT_STREAM_ADAPTOR_H_ -//#include <android_runtime/AndroidRuntime.h> #include "jni.h" class SkMemoryStream; diff --git a/core/jni/android/graphics/FontFamily.cpp b/libs/hwui/jni/FontFamily.cpp index 0fd9cc7e9989..a2fef1e19328 100644 --- a/core/jni/android/graphics/FontFamily.cpp +++ b/libs/hwui/jni/FontFamily.cpp @@ -14,11 +14,9 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "Minikin" -#include <nativehelper/JNIHelp.h> -#include <core_jni_helpers.h> - #include "SkData.h" #include "SkFontMgr.h" #include "SkRefCnt.h" @@ -26,7 +24,6 @@ #include "GraphicsJNI.h" #include <nativehelper/ScopedPrimitiveArray.h> #include <nativehelper/ScopedUtfChars.h> -#include <android_runtime/AndroidRuntime.h> #include "Utils.h" #include "FontUtils.h" @@ -144,15 +141,11 @@ static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, in } static void release_global_ref(const void* /*data*/, void* context) { - JNIEnv* env = AndroidRuntime::getJNIEnv(); + JNIEnv* env = GraphicsJNI::getJNIEnv(); bool needToAttach = (env == NULL); if (needToAttach) { - JavaVMAttachArgs args; - args.version = JNI_VERSION_1_4; - args.name = "release_font_data"; - args.group = NULL; - jint result = AndroidRuntime::getJavaVM()->AttachCurrentThread(&env, &args); - if (result != JNI_OK) { + env = GraphicsJNI::attachJNIEnv("release_font_data"); + if (env == nullptr) { ALOGE("failed to attach to thread to release global ref."); return; } @@ -162,7 +155,7 @@ static void release_global_ref(const void* /*data*/, void* context) { env->DeleteGlobalRef(obj); if (needToAttach) { - AndroidRuntime::getJavaVM()->DetachCurrentThread(); + GraphicsJNI::detachJNIEnv(); } } diff --git a/core/jni/android/graphics/FontUtils.cpp b/libs/hwui/jni/FontUtils.cpp index 0cf61b9ade89..654c5fdf6528 100644 --- a/core/jni/android/graphics/FontUtils.cpp +++ b/libs/hwui/jni/FontUtils.cpp @@ -16,8 +16,7 @@ #include "FontUtils.h" -#include <nativehelper/JNIHelp.h> -#include <core_jni_helpers.h> +#include "graphics_jni_helpers.h" namespace android { namespace { diff --git a/core/jni/android/graphics/FontUtils.h b/libs/hwui/jni/FontUtils.h index b36b4e60e33a..b36b4e60e33a 100644 --- a/core/jni/android/graphics/FontUtils.h +++ b/libs/hwui/jni/FontUtils.h diff --git a/core/jni/android/graphics/GIFMovie.cpp b/libs/hwui/jni/GIFMovie.cpp index f84a4bd09073..f84a4bd09073 100644 --- a/core/jni/android/graphics/GIFMovie.cpp +++ b/libs/hwui/jni/GIFMovie.cpp diff --git a/core/jni/android/graphics/Graphics.cpp b/libs/hwui/jni/Graphics.cpp index 38fb8bdc1f7a..f76ecb4c9c8a 100644 --- a/core/jni/android/graphics/Graphics.cpp +++ b/libs/hwui/jni/Graphics.cpp @@ -1,22 +1,55 @@ +#undef LOG_TAG #define LOG_TAG "GraphicsJNI" +#include <assert.h> #include <unistd.h> -#include <sys/mman.h> #include "jni.h" #include <nativehelper/JNIHelp.h> #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include "SkCanvas.h" #include "SkMath.h" #include "SkRegion.h" -#include <android_runtime/AndroidRuntime.h> #include <cutils/ashmem.h> #include <hwui/Canvas.h> using namespace android; +/*static*/ JavaVM* GraphicsJNI::mJavaVM = nullptr; + +void GraphicsJNI::setJavaVM(JavaVM* javaVM) { + mJavaVM = javaVM; +} + +/** return a pointer to the JNIEnv for this thread */ +JNIEnv* GraphicsJNI::getJNIEnv() { + assert(mJavaVM != nullptr); + JNIEnv* env; + if (mJavaVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { + return nullptr; + } + return env; +} + +/** create a JNIEnv* for this thread or assert if one already exists */ +JNIEnv* GraphicsJNI::attachJNIEnv(const char* envName) { + assert(getJNIEnv() == nullptr); + JNIEnv* env = nullptr; + JavaVMAttachArgs args = { JNI_VERSION_1_4, envName, NULL }; + int result = mJavaVM->AttachCurrentThread(&env, (void*) &args); + if (result != JNI_OK) { + ALOGE("thread attach failed: %#x", result); + } + return env; +} + +/** detach the current thread from the JavaVM */ +void GraphicsJNI::detachJNIEnv() { + assert(mJavaVM != nullptr); + mJavaVM->DetachCurrentThread(); +} + void doThrowNPE(JNIEnv* env) { jniThrowNullPointerException(env, NULL); } diff --git a/core/jni/android/graphics/GraphicsJNI.h b/libs/hwui/jni/GraphicsJNI.h index 1e497654f18d..b58a740a4c27 100644 --- a/core/jni/android/graphics/GraphicsJNI.h +++ b/libs/hwui/jni/GraphicsJNI.h @@ -1,6 +1,8 @@ #ifndef _ANDROID_GRAPHICS_GRAPHICS_JNI_H_ #define _ANDROID_GRAPHICS_GRAPHICS_JNI_H_ +#include <cutils/compiler.h> + #include "Bitmap.h" #include "SkBitmap.h" #include "SkBRDAllocator.h" @@ -10,10 +12,11 @@ #include "SkPoint.h" #include "SkRect.h" #include "SkColorSpace.h" -#include <jni.h> #include <hwui/Canvas.h> #include <hwui/Bitmap.h> +#include "graphics_jni_helpers.h" + class SkBitmapRegionDecoder; class SkCanvas; @@ -39,6 +42,20 @@ public: kLastEnum_LegacyBitmapConfig = kHardware_LegacyBitmapConfig }; + static void setJavaVM(JavaVM* javaVM); + + /** returns a pointer to the JavaVM provided when we initialized the module */ + static JavaVM* getJavaVM() { return mJavaVM; } + + /** return a pointer to the JNIEnv for this thread */ + static JNIEnv* getJNIEnv(); + + /** create a JNIEnv* for this thread or assert if one already exists */ + static JNIEnv* attachJNIEnv(const char* envName); + + /** detach the current thread from the JavaVM */ + static void detachJNIEnv(); + // returns true if an exception is set (and dumps it out to the Log) static bool hasException(JNIEnv*); @@ -60,7 +77,7 @@ public: static SkPoint* jpointf_to_point(JNIEnv*, jobject jpointf, SkPoint* point); static void point_to_jpointf(const SkPoint& point, JNIEnv*, jobject jpointf); - static android::Canvas* getNativeCanvas(JNIEnv*, jobject canvas); + ANDROID_API static android::Canvas* getNativeCanvas(JNIEnv*, jobject canvas); static android::Bitmap* getNativeBitmap(JNIEnv*, jobject bitmap); static SkImageInfo getBitmapInfo(JNIEnv*, jobject bitmap, uint32_t* outRowBytes, bool* isHardware); @@ -131,6 +148,10 @@ public: * above. */ static SkColor4f convertColorLong(jlong color); + +private: + /* JNI JavaVM pointer */ + static JavaVM* mJavaVM; }; class HeapAllocator : public SkBRDAllocator { diff --git a/core/jni/android/graphics/GraphicsStatsService.cpp b/libs/hwui/jni/GraphicsStatsService.cpp index ef0aacc4d9ec..6076552fc094 100644 --- a/core/jni/android/graphics/GraphicsStatsService.cpp +++ b/libs/hwui/jni/GraphicsStatsService.cpp @@ -14,19 +14,20 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "GraphicsStatsService" #include <JankTracker.h> -#include <jni.h> #include <log/log.h> -#include <nativehelper/JNIHelp.h> #include <nativehelper/ScopedPrimitiveArray.h> #include <nativehelper/ScopedUtfChars.h> #include <service/GraphicsStatsService.h> #include <stats_event.h> #include <stats_pull_atom_callback.h> #include <statslog.h> -#include "core_jni_helpers.h" + +#include "android/graphics/jni_runtime.h" +#include "GraphicsJNI.h" namespace android { @@ -115,7 +116,7 @@ static jobject gGraphicsStatsServiceObject = nullptr; static jmethodID gGraphicsStatsService_pullGraphicsStatsMethodID; static JNIEnv* getJNIEnv() { - JavaVM* vm = AndroidRuntime::getJavaVM(); + JavaVM* vm = GraphicsJNI::getJavaVM(); JNIEnv* env = nullptr; if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { if (vm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) { @@ -172,6 +173,9 @@ static void nativeDestructor(JNIEnv* env, jobject javaObject) { gGraphicsStatsServiceObject = nullptr; } +} // namespace android +using namespace android; + static const JNINativeMethod sMethods[] = {{"nGetAshmemSize", "()I", (void*)getAshmemSize}, {"nCreateDump", "(IZ)J", (void*)createDump}, @@ -191,5 +195,3 @@ int register_android_graphics_GraphicsStatsService(JNIEnv* env) { return jniRegisterNativeMethods(env, "android/graphics/GraphicsStatsService", sMethods, NELEM(sMethods)); } - -} // namespace android diff --git a/core/jni/android/graphics/ImageDecoder.cpp b/libs/hwui/jni/ImageDecoder.cpp index e17e057d75c7..b6b378539bd0 100644 --- a/core/jni/android/graphics/ImageDecoder.cpp +++ b/libs/hwui/jni/ImageDecoder.cpp @@ -22,7 +22,6 @@ #include "ImageDecoder.h" #include "NinePatchPeeker.h" #include "Utils.h" -#include "core_jni_helpers.h" #include <hwui/Bitmap.h> #include <hwui/ImageDecoder.h> @@ -34,7 +33,7 @@ #include <SkStream.h> #include <androidfw/Asset.h> -#include <jni.h> +#include <fcntl.h> #include <sys/stat.h> using namespace android; @@ -154,6 +153,9 @@ static jobject native_create(JNIEnv* env, std::unique_ptr<SkStream> stream, static jobject ImageDecoder_nCreateFd(JNIEnv* env, jobject /*clazz*/, jobject fileDescriptor, jboolean preferAnimation, jobject source) { +#ifndef __ANDROID__ // LayoutLib for Windows does not support F_DUPFD_CLOEXEC + return throw_exception(env, kSourceException, "Only supported on Android", nullptr, source); +#else int descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); struct stat fdStat; @@ -172,6 +174,7 @@ static jobject ImageDecoder_nCreateFd(JNIEnv* env, jobject /*clazz*/, std::unique_ptr<SkFILEStream> fileStream(new SkFILEStream(file)); return native_create(env, std::move(fileStream), source, preferAnimation); +#endif } static jobject ImageDecoder_nCreateInputStream(JNIEnv* env, jobject /*clazz*/, diff --git a/core/jni/android/graphics/ImageDecoder.h b/libs/hwui/jni/ImageDecoder.h index 8a7fa79503ba..8a7fa79503ba 100644 --- a/core/jni/android/graphics/ImageDecoder.h +++ b/libs/hwui/jni/ImageDecoder.h diff --git a/core/jni/android/graphics/Interpolator.cpp b/libs/hwui/jni/Interpolator.cpp index fa28359281db..146d634a297c 100644 --- a/core/jni/android/graphics/Interpolator.cpp +++ b/libs/hwui/jni/Interpolator.cpp @@ -1,8 +1,5 @@ #include "GraphicsJNI.h" #include "SkInterpolator.h" -#include "core_jni_helpers.h" - -#include <jni.h> static jlong Interpolator_constructor(JNIEnv* env, jobject clazz, jint valueCount, jint frameCount) { diff --git a/core/jni/android/graphics/MaskFilter.cpp b/libs/hwui/jni/MaskFilter.cpp index 33d346f5d379..5383032e0f77 100644 --- a/core/jni/android/graphics/MaskFilter.cpp +++ b/libs/hwui/jni/MaskFilter.cpp @@ -4,10 +4,6 @@ #include "SkBlurMaskFilter.h" #include "SkTableMaskFilter.h" -#include "core_jni_helpers.h" - -#include <jni.h> - static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) { if (NULL == ptr) { doThrowIAE(env); diff --git a/core/jni/android/graphics/MimeType.h b/libs/hwui/jni/MimeType.h index 38a579c595e4..fdd510cfeb79 100644 --- a/core/jni/android/graphics/MimeType.h +++ b/libs/hwui/jni/MimeType.h @@ -16,6 +16,7 @@ #pragma once +#include <cutils/compiler.h> #include "SkEncodedImageFormat.h" -const char* getMimeType(SkEncodedImageFormat); +ANDROID_API const char* getMimeType(SkEncodedImageFormat); diff --git a/core/jni/android/graphics/Movie.cpp b/libs/hwui/jni/Movie.cpp index 4c10a85c8257..ede0ca8cda5b 100644 --- a/core/jni/android/graphics/Movie.cpp +++ b/libs/hwui/jni/Movie.cpp @@ -6,13 +6,11 @@ #include "SkStream.h" #include "SkUtils.h" #include "Utils.h" -#include "core_jni_helpers.h" #include <androidfw/Asset.h> #include <androidfw/ResourceTypes.h> #include <hwui/Canvas.h> #include <hwui/Paint.h> -#include <jni.h> #include <netinet/in.h> static jclass gMovie_class; diff --git a/core/jni/android/graphics/Movie.h b/libs/hwui/jni/Movie.h index 736890d5215e..736890d5215e 100644 --- a/core/jni/android/graphics/Movie.h +++ b/libs/hwui/jni/Movie.h diff --git a/core/jni/android/graphics/MovieImpl.cpp b/libs/hwui/jni/MovieImpl.cpp index ae9e04e617b0..ae9e04e617b0 100644 --- a/core/jni/android/graphics/MovieImpl.cpp +++ b/libs/hwui/jni/MovieImpl.cpp diff --git a/core/jni/android/graphics/NinePatch.cpp b/libs/hwui/jni/NinePatch.cpp index 15f951688d43..6942017d5f27 100644 --- a/core/jni/android/graphics/NinePatch.cpp +++ b/libs/hwui/jni/NinePatch.cpp @@ -15,6 +15,7 @@ ** limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "9patch" #define LOG_NDEBUG 1 @@ -30,9 +31,6 @@ #include "NinePatchPeeker.h" #include "NinePatchUtils.h" -#include <nativehelper/JNIHelp.h> -#include "core_jni_helpers.h" - jclass gInsetStruct_class; jmethodID gInsetStruct_constructorMethodID; diff --git a/core/jni/android/graphics/NinePatchPeeker.cpp b/libs/hwui/jni/NinePatchPeeker.cpp index 9171fc687276..9171fc687276 100644 --- a/core/jni/android/graphics/NinePatchPeeker.cpp +++ b/libs/hwui/jni/NinePatchPeeker.cpp diff --git a/core/jni/android/graphics/NinePatchPeeker.h b/libs/hwui/jni/NinePatchPeeker.h index e4e58dda4783..e4e58dda4783 100644 --- a/core/jni/android/graphics/NinePatchPeeker.h +++ b/libs/hwui/jni/NinePatchPeeker.h diff --git a/core/jni/android/graphics/Paint.cpp b/libs/hwui/jni/Paint.cpp index 8e1bc8489baa..df8635a8fe5a 100644 --- a/core/jni/android/graphics/Paint.cpp +++ b/libs/hwui/jni/Paint.cpp @@ -15,13 +15,12 @@ ** limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "Paint" #include <utils/Log.h> -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include <nativehelper/ScopedStringChars.h> #include <nativehelper/ScopedUtfChars.h> #include <nativehelper/ScopedPrimitiveArray.h> diff --git a/core/jni/android/graphics/PaintFilter.cpp b/libs/hwui/jni/PaintFilter.cpp index 4fe9140572d3..ec115b4e141c 100644 --- a/core/jni/android/graphics/PaintFilter.cpp +++ b/libs/hwui/jni/PaintFilter.cpp @@ -15,11 +15,7 @@ ** limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include <android_runtime/AndroidRuntime.h> - -#include "core_jni_helpers.h" #include "hwui/Paint.h" #include "hwui/PaintFilter.h" diff --git a/core/jni/android/graphics/Path.cpp b/libs/hwui/jni/Path.cpp index 481445258e3c..d67bcf221681 100644 --- a/core/jni/android/graphics/Path.cpp +++ b/libs/hwui/jni/Path.cpp @@ -20,9 +20,7 @@ // To change this file, either edit the include, or device/tools/gluemaker/main.cpp, // or one of the auxilary file specifications in device/tools/gluemaker. -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include "SkPath.h" #include "SkPathOps.h" diff --git a/core/jni/android/graphics/PathEffect.cpp b/libs/hwui/jni/PathEffect.cpp index a4992de72ff6..f99bef7b7d58 100644 --- a/core/jni/android/graphics/PathEffect.cpp +++ b/libs/hwui/jni/PathEffect.cpp @@ -4,9 +4,6 @@ #include "SkDashPathEffect.h" #include "SkDiscretePathEffect.h" #include "SkPathEffect.h" -#include "core_jni_helpers.h" - -#include <jni.h> class SkPathEffectGlue { public: diff --git a/core/jni/android/graphics/PathMeasure.cpp b/libs/hwui/jni/PathMeasure.cpp index 70e528d4be6f..acf893e9544c 100644 --- a/core/jni/android/graphics/PathMeasure.cpp +++ b/libs/hwui/jni/PathMeasure.cpp @@ -15,9 +15,7 @@ ** limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include <core_jni_helpers.h> #include "SkPathMeasure.h" diff --git a/core/jni/android/graphics/Picture.cpp b/libs/hwui/jni/Picture.cpp index d1b952130e88..d1b952130e88 100644 --- a/core/jni/android/graphics/Picture.cpp +++ b/libs/hwui/jni/Picture.cpp diff --git a/core/jni/android/graphics/Picture.h b/libs/hwui/jni/Picture.h index 536f651473a9..536f651473a9 100644 --- a/core/jni/android/graphics/Picture.h +++ b/libs/hwui/jni/Picture.h diff --git a/core/jni/android/graphics/Region.cpp b/libs/hwui/jni/Region.cpp index 87662f713449..1e064b820591 100644 --- a/core/jni/android/graphics/Region.cpp +++ b/libs/hwui/jni/Region.cpp @@ -19,13 +19,10 @@ #include "GraphicsJNI.h" #ifdef __ANDROID__ // Layoutlib does not support parcel -#include <binder/Parcel.h> +#include <android/binder_parcel.h> +#include <android/binder_parcel_jni.h> +#include <android/binder_parcel_utils.h> #endif -#include "android_os_Parcel.h" -#include "android_util_Binder.h" - -#include <jni.h> -#include <core_jni_helpers.h> namespace android { @@ -210,10 +207,11 @@ static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel) return 0; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); - std::vector<int32_t> rects; - p->readInt32Vector(&rects); + + AParcel* p = AParcel_fromJavaParcel(env, parcel); + ndk::AParcel_readVector(p, &rects); + AParcel_delete(p); if ((rects.size() % 4) != 0) { return 0; @@ -238,8 +236,6 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHan return JNI_FALSE; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); - std::vector<int32_t> rects; SkRegion::Iterator it(*region); while (!it.done()) { @@ -251,7 +247,10 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHan it.next(); } - p->writeInt32Vector(rects); + AParcel* p = AParcel_fromJavaParcel(env, parcel); + ndk::AParcel_writeVector(p, rects); + AParcel_delete(p); + return JNI_TRUE; #else return JNI_FALSE; diff --git a/core/jni/android/graphics/RtlProperties.h b/libs/hwui/jni/RtlProperties.h index 907dd59b6e68..907dd59b6e68 100644 --- a/core/jni/android/graphics/RtlProperties.h +++ b/libs/hwui/jni/RtlProperties.h diff --git a/core/jni/android/graphics/Shader.cpp b/libs/hwui/jni/Shader.cpp index f5e2a5244416..0f6837640524 100644 --- a/core/jni/android/graphics/Shader.cpp +++ b/libs/hwui/jni/Shader.cpp @@ -4,11 +4,8 @@ #include "SkImagePriv.h" #include "SkShader.h" #include "SkBlendMode.h" -#include "core_jni_helpers.h" #include "include/effects/SkRuntimeEffect.h" -#include <jni.h> - #include <vector> using namespace android::uirenderer; diff --git a/core/jni/android/graphics/TEST_MAPPING b/libs/hwui/jni/TEST_MAPPING index 10bd0ee906fd..10bd0ee906fd 100644 --- a/core/jni/android/graphics/TEST_MAPPING +++ b/libs/hwui/jni/TEST_MAPPING diff --git a/core/jni/android/graphics/Typeface.cpp b/libs/hwui/jni/Typeface.cpp index 4ce56ba7444f..2a5f402a4fa6 100644 --- a/core/jni/android/graphics/Typeface.cpp +++ b/libs/hwui/jni/Typeface.cpp @@ -14,9 +14,6 @@ * limitations under the License. */ -#include "jni.h" -#include "core_jni_helpers.h" - #include "FontUtils.h" #include "GraphicsJNI.h" #include <nativehelper/ScopedPrimitiveArray.h> diff --git a/core/jni/android/graphics/Utils.cpp b/libs/hwui/jni/Utils.cpp index 17c194d04f84..17c194d04f84 100644 --- a/core/jni/android/graphics/Utils.cpp +++ b/libs/hwui/jni/Utils.cpp diff --git a/core/jni/android/graphics/Utils.h b/libs/hwui/jni/Utils.h index 89255177ba2e..89255177ba2e 100644 --- a/core/jni/android/graphics/Utils.h +++ b/libs/hwui/jni/Utils.h diff --git a/core/jni/android/graphics/YuvToJpegEncoder.cpp b/libs/hwui/jni/YuvToJpegEncoder.cpp index 09adc824e520..689cf0bea741 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.cpp +++ b/libs/hwui/jni/YuvToJpegEncoder.cpp @@ -4,9 +4,7 @@ #include <ui/PixelFormat.h> #include <hardware/hardware.h> -#include "core_jni_helpers.h" - -#include <jni.h> +#include "graphics_jni_helpers.h" YuvToJpegEncoder* YuvToJpegEncoder::create(int format, int* strides) { // Only ImageFormat.NV21 and ImageFormat.YUY2 are supported diff --git a/core/jni/android/graphics/YuvToJpegEncoder.h b/libs/hwui/jni/YuvToJpegEncoder.h index 7e7b935df276..7e7b935df276 100644 --- a/core/jni/android/graphics/YuvToJpegEncoder.h +++ b/libs/hwui/jni/YuvToJpegEncoder.h diff --git a/core/jni/android_graphics_Canvas.cpp b/libs/hwui/jni/android_graphics_Canvas.cpp index 0ad3339ee05f..4aff3e544efa 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/libs/hwui/jni/android_graphics_Canvas.cpp @@ -14,9 +14,7 @@ * limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #ifdef __ANDROID_ #include <android/api-level.h> diff --git a/core/jni/android_graphics_ColorSpace.cpp b/libs/hwui/jni/android_graphics_ColorSpace.cpp index 7648fd021d18..232fd71a12b4 100644 --- a/core/jni/android_graphics_ColorSpace.cpp +++ b/libs/hwui/jni/android_graphics_ColorSpace.cpp @@ -14,12 +14,11 @@ * limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include "SkColor.h" #include "SkColorSpace.h" +#include "SkHalf.h" using namespace android; @@ -42,9 +41,13 @@ static skcms_Matrix3x3 getNativeXYZMatrix(JNIEnv* env, jfloatArray xyzD50) { /////////////////////////////////////////////////////////////////////////////// static float halfToFloat(uint16_t bits) { - __fp16 h; - memcpy(&h, &bits, 2); - return (float)h; +#ifdef __ANDROID__ // __fp16 is not defined on non-Android builds + __fp16 h; + memcpy(&h, &bits, 2); + return (float)h; +#else + return SkHalfToFloat(bits); +#endif } SkColor4f GraphicsJNI::convertColorLong(jlong color) { diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp index 9907da5a2e68..54822f1f07e2 100644 --- a/core/jni/android_view_DisplayListCanvas.cpp +++ b/libs/hwui/jni/android_graphics_DisplayListCanvas.cpp @@ -14,13 +14,8 @@ * limitations under the License. */ -#define LOG_TAG "OpenGLRenderer" - -#include "jni.h" #include "GraphicsJNI.h" -#include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> #ifdef __ANDROID__ // Layoutlib does not support Looper and device properties #include <utils/Looper.h> #endif @@ -38,8 +33,6 @@ #include <renderthread/RenderProxy.h> #endif -#include "core_jni_helpers.h" - namespace android { using namespace uirenderer; diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp index 93449ffeae1b..49c7fcd468e1 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/libs/hwui/jni/android_graphics_HardwareRenderer.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "ThreadedRenderer" #define ATRACE_TAG ATRACE_TAG_VIEW @@ -43,8 +44,6 @@ #include <atomic> #include "android_graphics_HardwareRendererObserver.h" -#include "core_jni_helpers.h" -#include "jni.h" namespace android { diff --git a/core/jni/android_graphics_HardwareRendererObserver.cpp b/libs/hwui/jni/android_graphics_HardwareRendererObserver.cpp index 89b77b0b069a..5b3e65648981 100644 --- a/core/jni/android_graphics_HardwareRendererObserver.cpp +++ b/libs/hwui/jni/android_graphics_HardwareRendererObserver.cpp @@ -16,7 +16,7 @@ #include "android_graphics_HardwareRendererObserver.h" -#include "core_jni_helpers.h" +#include "graphics_jni_helpers.h" #include "nativehelper/jni_macros.h" #include <array> diff --git a/core/jni/android_graphics_HardwareRendererObserver.h b/libs/hwui/jni/android_graphics_HardwareRendererObserver.h index 62111fd7d7a1..62111fd7d7a1 100644 --- a/core/jni/android_graphics_HardwareRendererObserver.h +++ b/libs/hwui/jni/android_graphics_HardwareRendererObserver.h diff --git a/core/jni/android/graphics/Matrix.cpp b/libs/hwui/jni/android_graphics_Matrix.cpp index 13369763e0cf..7338ef24cb58 100644 --- a/core/jni/android/graphics/Matrix.cpp +++ b/libs/hwui/jni/android_graphics_Matrix.cpp @@ -18,9 +18,6 @@ #include "GraphicsJNI.h" #include "Matrix.h" #include "SkMatrix.h" -#include "core_jni_helpers.h" - -#include <jni.h> namespace android { diff --git a/core/jni/android/graphics/Matrix.h b/libs/hwui/jni/android_graphics_Matrix.h index fe90d2ef945d..fe90d2ef945d 100644 --- a/core/jni/android/graphics/Matrix.h +++ b/libs/hwui/jni/android_graphics_Matrix.h diff --git a/core/jni/android_graphics_Picture.cpp b/libs/hwui/jni/android_graphics_Picture.cpp index 1d085e5ccc49..403efb2ab9c9 100644 --- a/core/jni/android_graphics_Picture.cpp +++ b/libs/hwui/jni/android_graphics_Picture.cpp @@ -19,12 +19,9 @@ #include "Picture.h" #include "SkCanvas.h" #include "SkStream.h" -#include "core_jni_helpers.h" -#include "nativehelper/jni_macros.h" - -#include <jni.h> #include <array> +#include "nativehelper/jni_macros.h" namespace android { diff --git a/core/jni/android_view_RenderNode.cpp b/libs/hwui/jni/android_graphics_RenderNode.cpp index a8246c7d84b7..85c802b40459 100644 --- a/core/jni/android_view_RenderNode.cpp +++ b/libs/hwui/jni/android_graphics_RenderNode.cpp @@ -14,12 +14,8 @@ * limitations under the License. */ -#define LOG_TAG "OpenGLRenderer" #define ATRACE_TAG ATRACE_TAG_VIEW -#include "jni.h" #include "GraphicsJNI.h" -#include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> #include <Animator.h> #include <DamageAccumulator.h> @@ -32,8 +28,6 @@ #include <hwui/Paint.h> #include <utils/TraceUtils.h> -#include "core_jni_helpers.h" - namespace android { using namespace uirenderer; diff --git a/core/jni/android_view_TextureLayer.cpp b/libs/hwui/jni/android_graphics_TextureLayer.cpp index 40f618025f99..bd20269d3751 100644 --- a/core/jni/android_view_TextureLayer.cpp +++ b/libs/hwui/jni/android_graphics_TextureLayer.cpp @@ -14,13 +14,8 @@ * limitations under the License. */ -#define LOG_TAG "OpenGLRenderer" - -#include "jni.h" -#include <nativehelper/JNIHelp.h> - #include <android/surface_texture_jni.h> -#include "core_jni_helpers.h" +#include "graphics_jni_helpers.h" #include <hwui/Paint.h> #include <SkMatrix.h> diff --git a/core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp b/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp index 2073ac2d24be..764eff9a04be 100644 --- a/core/jni/android_graphics_animation_NativeInterpolatorFactory.cpp +++ b/libs/hwui/jni/android_graphics_animation_NativeInterpolatorFactory.cpp @@ -16,12 +16,10 @@ #define LOG_TAG "OpenGLRenderer" -#include "jni.h" -#include <nativehelper/JNIHelp.h> +#include <Interpolator.h> #include <cutils/log.h> -#include "core_jni_helpers.h" -#include <Interpolator.h> +#include "graphics_jni_helpers.h" namespace android { diff --git a/core/jni/android_graphics_animation_RenderNodeAnimator.cpp b/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp index 878d4fc13f6d..c6d26f853c1d 100644 --- a/core/jni/android_graphics_animation_RenderNodeAnimator.cpp +++ b/libs/hwui/jni/android_graphics_animation_RenderNodeAnimator.cpp @@ -16,15 +16,11 @@ #define LOG_TAG "OpenGLRenderer" -#include "jni.h" -#include <nativehelper/JNIHelp.h> -#include <android_runtime/AndroidRuntime.h> - #include <Animator.h> #include <Interpolator.h> #include <RenderProperties.h> -#include "core_jni_helpers.h" +#include "graphics_jni_helpers.h" namespace android { diff --git a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp b/libs/hwui/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp index b6b53666e26e..b3121e7b0373 100644 --- a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp +++ b/libs/hwui/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp @@ -13,13 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#define LOG_TAG "OpenGLRenderer" #include "android/log.h" -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include "Animator.h" #include "Interpolator.h" diff --git a/core/jni/android_graphics_drawable_VectorDrawable.cpp b/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp index 58a2379a6999..8a262969614e 100644 --- a/core/jni/android_graphics_drawable_VectorDrawable.cpp +++ b/libs/hwui/jni/android_graphics_drawable_VectorDrawable.cpp @@ -15,8 +15,6 @@ */ #include "GraphicsJNI.h" -#include "jni.h" -#include "core_jni_helpers.h" #include "PathParser.h" #include "VectorDrawable.h" diff --git a/core/jni/android_nio_utils.cpp b/libs/hwui/jni/android_nio_utils.cpp index 1e6d49e49b72..c2b09c1d15d7 100644 --- a/core/jni/android_nio_utils.cpp +++ b/libs/hwui/jni/android_nio_utils.cpp @@ -16,7 +16,7 @@ #include "android_nio_utils.h" -#include "core_jni_helpers.h" +#include <nativehelper/JNIHelp.h> namespace android { diff --git a/core/jni/android_nio_utils.h b/libs/hwui/jni/android_nio_utils.h index 4aaa0a78c276..4aaa0a78c276 100644 --- a/core/jni/android_nio_utils.h +++ b/libs/hwui/jni/android_nio_utils.h diff --git a/core/jni/android_util_PathParser.cpp b/libs/hwui/jni/android_util_PathParser.cpp index 10efb95100ac..df5e9cd44ed0 100644 --- a/core/jni/android_util_PathParser.cpp +++ b/libs/hwui/jni/android_util_PathParser.cpp @@ -14,7 +14,6 @@ * limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" #include <PathParser.h> @@ -22,7 +21,6 @@ #include <utils/VectorDrawableUtils.h> #include <android/log.h> -#include "core_jni_helpers.h" namespace android { diff --git a/core/jni/android/graphics/fonts/Font.cpp b/libs/hwui/jni/fonts/Font.cpp index bfb9bae45f0c..5714cd1d0390 100644 --- a/core/jni/android/graphics/fonts/Font.cpp +++ b/libs/hwui/jni/fonts/Font.cpp @@ -14,18 +14,15 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "Minikin" -#include <nativehelper/JNIHelp.h> -#include <core_jni_helpers.h> - #include "SkData.h" #include "SkFontMgr.h" #include "SkRefCnt.h" #include "SkTypeface.h" #include "GraphicsJNI.h" #include <nativehelper/ScopedUtfChars.h> -#include <android_runtime/AndroidRuntime.h> #include "Utils.h" #include "FontUtils.h" @@ -51,14 +48,11 @@ static void releaseFont(jlong font) { } static void release_global_ref(const void* /*data*/, void* context) { - JNIEnv* env = AndroidRuntime::getJNIEnv(); - if (env == nullptr) { - JavaVMAttachArgs args; - args.version = JNI_VERSION_1_4; - args.name = "release_font_data"; - args.group = nullptr; - jint result = AndroidRuntime::getJavaVM()->AttachCurrentThread(&env, &args); - if (result != JNI_OK) { + JNIEnv* env = GraphicsJNI::getJNIEnv(); + bool needToAttach = (env == nullptr); + if (needToAttach) { + env = GraphicsJNI::attachJNIEnv("release_font_data"); + if (env == nullptr) { ALOGE("failed to attach to thread to release global ref."); return; } diff --git a/core/jni/android/graphics/fonts/FontFamily.cpp b/libs/hwui/jni/fonts/FontFamily.cpp index b0d10c356a9b..df619d9f1406 100644 --- a/core/jni/android/graphics/fonts/FontFamily.cpp +++ b/libs/hwui/jni/fonts/FontFamily.cpp @@ -14,11 +14,11 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "Minikin" -#include <nativehelper/JNIHelp.h> +#include "graphics_jni_helpers.h" #include <nativehelper/ScopedUtfChars.h> -#include <core_jni_helpers.h> #include "FontUtils.h" diff --git a/libs/hwui/jni/graphics_jni_helpers.h b/libs/hwui/jni/graphics_jni_helpers.h new file mode 100644 index 000000000000..b97cc6a10179 --- /dev/null +++ b/libs/hwui/jni/graphics_jni_helpers.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef GRAPHICS_JNI_HELPERS +#define GRAPHICS_JNI_HELPERS + +#include <log/log.h> +#include <nativehelper/JNIHelp.h> +#include <nativehelper/scoped_local_ref.h> +#include <nativehelper/scoped_utf_chars.h> +#include <string> + +// Host targets (layoutlib) do not differentiate between regular and critical native methods, +// and they need all the JNI methods to have JNIEnv* and jclass/jobject as their first two arguments. +// The following macro allows to have those arguments when compiling for host while omitting them when +// compiling for Android. +#ifdef __ANDROID__ +#define CRITICAL_JNI_PARAMS +#define CRITICAL_JNI_PARAMS_COMMA +#else +#define CRITICAL_JNI_PARAMS JNIEnv*, jclass +#define CRITICAL_JNI_PARAMS_COMMA JNIEnv*, jclass, +#endif + +namespace android { + +// Defines some helpful functions. + +static inline jclass FindClassOrDie(JNIEnv* env, const char* class_name) { + jclass clazz = env->FindClass(class_name); + LOG_ALWAYS_FATAL_IF(clazz == NULL, "Unable to find class %s", class_name); + return clazz; +} + +static inline jfieldID GetFieldIDOrDie(JNIEnv* env, jclass clazz, const char* field_name, + const char* field_signature) { + jfieldID res = env->GetFieldID(clazz, field_name, field_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static field %s", field_name); + return res; +} + +static inline jmethodID GetMethodIDOrDie(JNIEnv* env, jclass clazz, const char* method_name, + const char* method_signature) { + jmethodID res = env->GetMethodID(clazz, method_name, method_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find method %s", method_name); + return res; +} + +static inline jfieldID GetStaticFieldIDOrDie(JNIEnv* env, jclass clazz, const char* field_name, + const char* field_signature) { + jfieldID res = env->GetStaticFieldID(clazz, field_name, field_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static field %s", field_name); + return res; +} + +static inline jmethodID GetStaticMethodIDOrDie(JNIEnv* env, jclass clazz, const char* method_name, + const char* method_signature) { + jmethodID res = env->GetStaticMethodID(clazz, method_name, method_signature); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to find static method %s", method_name); + return res; +} + +template <typename T> +static inline T MakeGlobalRefOrDie(JNIEnv* env, T in) { + jobject res = env->NewGlobalRef(in); + LOG_ALWAYS_FATAL_IF(res == NULL, "Unable to create global reference."); + return static_cast<T>(res); +} + +static inline int RegisterMethodsOrDie(JNIEnv* env, const char* className, + const JNINativeMethod* gMethods, int numMethods) { + int res = jniRegisterNativeMethods(env, className, gMethods, numMethods); + LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods."); + return res; +} + +/** + * Read the specified field from jobject, and convert to std::string. + * If the field cannot be obtained, return defaultValue. + */ +static inline std::string getStringField(JNIEnv* env, jobject obj, jfieldID fieldId, + const char* defaultValue) { + ScopedLocalRef<jstring> strObj(env, jstring(env->GetObjectField(obj, fieldId))); + if (strObj != nullptr) { + ScopedUtfChars chars(env, strObj.get()); + return std::string(chars.c_str()); + } + return std::string(defaultValue); +} + +} // namespace android + +#endif // GRAPHICS_JNI_HELPERS diff --git a/core/jni/android/graphics/pdf/PdfDocument.cpp b/libs/hwui/jni/pdf/PdfDocument.cpp index 5f67d3008f45..d21eb3f6a208 100644 --- a/core/jni/android/graphics/pdf/PdfDocument.cpp +++ b/libs/hwui/jni/pdf/PdfDocument.cpp @@ -14,9 +14,7 @@ * limitations under the License. */ -#include "jni.h" #include "GraphicsJNI.h" -#include "core_jni_helpers.h" #include <vector> #include "CreateJavaOutputStreamAdaptor.h" diff --git a/core/jni/android/graphics/pdf/PdfEditor.cpp b/libs/hwui/jni/pdf/PdfEditor.cpp index 10c30260d7e3..828d6e3992b6 100644 --- a/core/jni/android/graphics/pdf/PdfEditor.cpp +++ b/libs/hwui/jni/pdf/PdfEditor.cpp @@ -13,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#undef LOG_TAG #define LOG_TAG "PdfEditor" #include <sys/types.h> @@ -25,8 +27,7 @@ #include "PdfUtils.h" -#include "jni.h" -#include <nativehelper/JNIHelp.h> +#include "graphics_jni_helpers.h" #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wdelete-non-virtual-dtor" @@ -38,8 +39,6 @@ #include "SkMatrix.h" -#include <core_jni_helpers.h> - namespace android { enum PageBox {PAGE_BOX_MEDIA, PAGE_BOX_CROP}; diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/libs/hwui/jni/pdf/PdfRenderer.cpp index 761830b0e97c..cc1f96197c74 100644 --- a/core/jni/android/graphics/pdf/PdfRenderer.cpp +++ b/libs/hwui/jni/pdf/PdfRenderer.cpp @@ -16,14 +16,11 @@ #include "PdfUtils.h" -#include "jni.h" -#include <nativehelper/JNIHelp.h> #include "GraphicsJNI.h" #include "SkBitmap.h" #include "SkMatrix.h" #include "fpdfview.h" -#include "core_jni_helpers.h" #include <vector> #include <utils/Log.h> #include <unistd.h> diff --git a/core/jni/android/graphics/pdf/PdfUtils.cpp b/libs/hwui/jni/pdf/PdfUtils.cpp index 36355ebbefc4..06d202828b85 100644 --- a/core/jni/android/graphics/pdf/PdfUtils.cpp +++ b/libs/hwui/jni/pdf/PdfUtils.cpp @@ -21,6 +21,7 @@ #include "fpdfview.h" +#undef LOG_TAG #define LOG_TAG "PdfUtils" #include <utils/Log.h> diff --git a/core/jni/android/graphics/pdf/PdfUtils.h b/libs/hwui/jni/pdf/PdfUtils.h index 65327382e899..65327382e899 100644 --- a/core/jni/android/graphics/pdf/PdfUtils.h +++ b/libs/hwui/jni/pdf/PdfUtils.h diff --git a/libs/hwui/jni/scoped_nullable_primitive_array.h b/libs/hwui/jni/scoped_nullable_primitive_array.h new file mode 100644 index 000000000000..77f4c9d14f07 --- /dev/null +++ b/libs/hwui/jni/scoped_nullable_primitive_array.h @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCOPED_NULLABLE_PRIMITIVE_ARRAY_H +#define SCOPED_NULLABLE_PRIMITIVE_ARRAY_H + +#include <jni.h> + +namespace android { + +#define ARRAY_TRAITS(ARRAY_TYPE, POINTER_TYPE, NAME) \ +class NAME ## ArrayTraits { \ +public: \ + static constexpr void getArrayRegion(JNIEnv* env, ARRAY_TYPE array, size_t start, \ + size_t len, POINTER_TYPE out) { \ + env->Get ## NAME ## ArrayRegion(array, start, len, out); \ + } \ + \ + static constexpr POINTER_TYPE getArrayElements(JNIEnv* env, ARRAY_TYPE array) { \ + return env->Get ## NAME ## ArrayElements(array, nullptr); \ + } \ + \ + static constexpr void releaseArrayElements(JNIEnv* env, ARRAY_TYPE array, \ + POINTER_TYPE buffer, jint mode) { \ + env->Release ## NAME ## ArrayElements(array, buffer, mode); \ + } \ +}; \ + +ARRAY_TRAITS(jbooleanArray, jboolean*, Boolean) +ARRAY_TRAITS(jbyteArray, jbyte*, Byte) +ARRAY_TRAITS(jcharArray, jchar*, Char) +ARRAY_TRAITS(jdoubleArray, jdouble*, Double) +ARRAY_TRAITS(jfloatArray, jfloat*, Float) +ARRAY_TRAITS(jintArray, jint*, Int) +ARRAY_TRAITS(jlongArray, jlong*, Long) +ARRAY_TRAITS(jshortArray, jshort*, Short) + +#undef ARRAY_TRAITS + +template<typename JavaArrayType, typename PrimitiveType, class Traits, size_t preallocSize = 10> +class ScopedArrayRO { +public: + ScopedArrayRO(JNIEnv* env, JavaArrayType javaArray) : mEnv(env), mJavaArray(javaArray) { + if (mJavaArray == nullptr) { + mSize = 0; + mRawArray = nullptr; + } else { + mSize = mEnv->GetArrayLength(mJavaArray); + if (mSize <= preallocSize) { + Traits::getArrayRegion(mEnv, mJavaArray, 0, mSize, mBuffer); + mRawArray = mBuffer; + } else { + mRawArray = Traits::getArrayElements(mEnv, mJavaArray); + } + } + } + + ~ScopedArrayRO() { + if (mRawArray != nullptr && mRawArray != mBuffer) { + Traits::releaseArrayElements(mEnv, mJavaArray, mRawArray, JNI_ABORT); + } + } + + const PrimitiveType* get() const { return mRawArray; } + const PrimitiveType& operator[](size_t n) const { return mRawArray[n]; } + size_t size() const { return mSize; } + +private: + JNIEnv* const mEnv; + JavaArrayType mJavaArray; + PrimitiveType* mRawArray; + size_t mSize; + PrimitiveType mBuffer[preallocSize]; + DISALLOW_COPY_AND_ASSIGN(ScopedArrayRO); +}; + +// ScopedNullable***ArrayRO provide convenient read-only access to Java array from JNI code. +// These accept nullptr. In that case, get() returns nullptr and size() returns 0. +using ScopedNullableBooleanArrayRO = ScopedArrayRO<jbooleanArray, jboolean, BooleanArrayTraits>; +using ScopedNullableByteArrayRO = ScopedArrayRO<jbyteArray, jbyte, ByteArrayTraits>; +using ScopedNullableCharArrayRO = ScopedArrayRO<jcharArray, jchar, CharArrayTraits>; +using ScopedNullableDoubleArrayRO = ScopedArrayRO<jdoubleArray, jdouble, DoubleArrayTraits>; +using ScopedNullableFloatArrayRO = ScopedArrayRO<jfloatArray, jfloat, FloatArrayTraits>; +using ScopedNullableIntArrayRO = ScopedArrayRO<jintArray, jint, IntArrayTraits>; +using ScopedNullableLongArrayRO = ScopedArrayRO<jlongArray, jlong, LongArrayTraits>; +using ScopedNullableShortArrayRO = ScopedArrayRO<jshortArray, jshort, ShortArrayTraits>; + +} // namespace android + +#endif // SCOPED_NULLABLE_PRIMITIVE_ARRAY_H diff --git a/core/jni/android/graphics/text/LineBreaker.cpp b/libs/hwui/jni/text/LineBreaker.cpp index 8dae6558bb0d..69865171a09d 100644 --- a/core/jni/android/graphics/text/LineBreaker.cpp +++ b/libs/hwui/jni/text/LineBreaker.cpp @@ -14,14 +14,14 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "LineBreaker" #include "utils/misc.h" #include "utils/Log.h" +#include "graphics_jni_helpers.h" #include <nativehelper/ScopedStringChars.h> #include <nativehelper/ScopedPrimitiveArray.h> -#include <nativehelper/JNIHelp.h> -#include "core_jni_helpers.h" #include "scoped_nullable_primitive_array.h" #include <cstdint> #include <vector> diff --git a/core/jni/android/graphics/text/MeasuredText.cpp b/libs/hwui/jni/text/MeasuredText.cpp index 3b5ecbcd1d35..7793746ee285 100644 --- a/core/jni/android/graphics/text/MeasuredText.cpp +++ b/libs/hwui/jni/text/MeasuredText.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#undef LOG_TAG #define LOG_TAG "MeasuredText" #include "GraphicsJNI.h" @@ -21,8 +22,6 @@ #include "utils/Log.h" #include <nativehelper/ScopedStringChars.h> #include <nativehelper/ScopedPrimitiveArray.h> -#include <nativehelper/JNIHelp.h> -#include "core_jni_helpers.h" #include <cstdint> #include <vector> #include <list> diff --git a/libs/input/Android.bp b/libs/input/Android.bp index 6bb896fd7b29..88d6033ed9fb 100644 --- a/libs/input/Android.bp +++ b/libs/input/Android.bp @@ -23,6 +23,7 @@ cc_library_shared { "libandroid_runtime", "libbinder", "libcutils", + "libhwui", "liblog", "libutils", "libgui", diff --git a/libs/input/tests/Android.bp b/libs/input/tests/Android.bp index b1e3d6fe845a..213b3adfb2a8 100644 --- a/libs/input/tests/Android.bp +++ b/libs/input/tests/Android.bp @@ -20,6 +20,7 @@ cc_test { shared_libs: [ "libandroid_runtime", "libinputservice", + "libhwui", "libgui", "libutils", ], diff --git a/native/android/Android.bp b/native/android/Android.bp index 640861bcc391..ed73f39e57f8 100644 --- a/native/android/Android.bp +++ b/native/android/Android.bp @@ -83,6 +83,8 @@ cc_library_shared { "libarect", ], + header_libs: [ "libhwui_internal_headers" ], + whole_static_libs: ["libnativedisplay", "libnativewindow"], export_static_lib_headers: ["libarect"], diff --git a/native/graphics/jni/Android.bp b/native/graphics/jni/Android.bp index 376ea77740c2..15b473c2a6ab 100644 --- a/native/graphics/jni/Android.bp +++ b/native/graphics/jni/Android.bp @@ -37,6 +37,8 @@ cc_library_shared { "liblog", ], + header_libs: [ "libhwui_internal_headers" ], + static_libs: ["libarect"], arch: { diff --git a/native/graphics/jni/imagedecoder.cpp b/native/graphics/jni/imagedecoder.cpp index d1946b085df4..56f390698eb2 100644 --- a/native/graphics/jni/imagedecoder.cpp +++ b/native/graphics/jni/imagedecoder.cpp @@ -20,7 +20,7 @@ #include <android/bitmap.h> #include <android/data_space.h> #include <android/imagedecoder.h> -#include <android/graphics/MimeType.h> +#include <MimeType.h> #include <android/rect.h> #include <hwui/ImageDecoder.h> #include <log/log.h> diff --git a/native/webview/plat_support/Android.bp b/native/webview/plat_support/Android.bp index 88decc86c387..1a3b36d046e1 100644 --- a/native/webview/plat_support/Android.bp +++ b/native/webview/plat_support/Android.bp @@ -30,12 +30,14 @@ cc_library_shared { "graphic_buffer_impl.cpp", ], + header_libs: [ "libhwui_internal_headers" ], + shared_libs: [ "libandroidfw", - "libandroid_runtime", "libcutils", "libhwui", "liblog", + "libnativehelper", "libui", "libutils", "libvulkan", diff --git a/native/webview/plat_support/graphics_utils.cpp b/native/webview/plat_support/graphics_utils.cpp index 56825cee4520..8d7a59e46e72 100644 --- a/native/webview/plat_support/graphics_utils.cpp +++ b/native/webview/plat_support/graphics_utils.cpp @@ -25,11 +25,9 @@ #include <cstdlib> #include <jni.h> #include <utils/Log.h> -#include "android/graphics/GraphicsJNI.h" +#include "GraphicsJNI.h" #include "graphic_buffer_impl.h" #include "SkCanvasStateUtils.h" -#include "SkGraphics.h" -#include "SkPicture.h" #define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0]))) diff --git a/rs/jni/Android.mk b/rs/jni/Android.mk index f9ef0b7b8e9d..a4bea661583b 100644 --- a/rs/jni/Android.mk +++ b/rs/jni/Android.mk @@ -11,6 +11,7 @@ LOCAL_SHARED_LIBRARIES := \ libnativehelper \ libRS \ libcutils \ + libhwui \ liblog \ libutils \ libui \ diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp index 8772edd73845..e0d40452590b 100644 --- a/services/core/jni/com_android_server_input_InputManagerService.cpp +++ b/services/core/jni/com_android_server_input_InputManagerService.cpp @@ -27,8 +27,6 @@ #define DEBUG_INPUT_DISPATCHER_POLICY 0 -#include <nativehelper/JNIHelp.h> -#include "jni.h" #include <atomic> #include <cinttypes> #include <limits.h> @@ -50,7 +48,6 @@ #include <inputflinger/InputManager.h> -#include <android/graphics/GraphicsJNI.h> #include <android_os_MessageQueue.h> #include <android_view_InputChannel.h> #include <android_view_InputDevice.h> diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp index e57543203634..f9238e3977c6 100644 --- a/services/core/jni/onload.cpp +++ b/services/core/jni/onload.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <android/graphics/jni_runtime.h> #include <nativehelper/JNIHelp.h> #include "jni.h" #include "utils/Log.h" @@ -49,7 +50,6 @@ int register_android_server_PersistentDataBlockService(JNIEnv* env); int register_android_server_Watchdog(JNIEnv* env); int register_android_server_HardwarePropertiesManagerService(JNIEnv* env); int register_android_server_SyntheticPasswordManager(JNIEnv* env); -int register_android_graphics_GraphicsStatsService(JNIEnv* env); int register_android_hardware_display_DisplayViewport(JNIEnv* env); int register_android_server_net_NetworkStatsFactory(JNIEnv* env); int register_android_server_net_NetworkStatsService(JNIEnv* env); |