summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2020-02-21 11:43:02 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-02-21 11:43:02 +0000
commit76e7430baead21c67fd4c81a36774a6461d2fb99 (patch)
tree239a62b59c57b4b95d8e82943bf9a48e84439819
parent1ab8e44c06ca05806a81c6737cb3f6e316d8d25a (diff)
parent2173ea286afff6766043227de0bc2d82d9595f77 (diff)
Merge changes from topic "HWUI_JNI"
* changes: Export symbols for the newly exposed APEX/internal headers Remove dependence on libandroid_runtime from Bitmap.cpp Update Region.cpp to use AParcel NDK APIs Cleanup header and build targets for libhwui clients. Remove dependencies on headers outside UI module Cleanup LOG_TAG when bundled in HWUI Move android.graphics JNI & APEX files into HWUI
-rw-r--r--core/jni/Android.bp162
-rw-r--r--core/jni/AndroidRuntime.cpp2
-rw-r--r--core/jni/LayoutlibLoader.cpp76
-rw-r--r--core/jni/android_graphics_GraphicBuffer.cpp16
-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.java3
-rw-r--r--graphics/java/android/graphics/GraphicBuffer.java10
-rw-r--r--libs/hwui/Android.bp232
-rw-r--r--libs/hwui/DeviceInfo.cpp3
-rw-r--r--libs/hwui/apex/LayoutlibLoader.cpp191
-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-xlibs/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.h106
-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.h103
-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.bp1
-rw-r--r--libs/input/tests/Android.bp1
-rw-r--r--native/android/Android.bp2
-rw-r--r--native/graphics/jni/Android.bp2
-rw-r--r--native/graphics/jni/imagedecoder.cpp2
-rw-r--r--native/webview/plat_support/Android.bp4
-rw-r--r--native/webview/plat_support/graphics_utils.cpp4
-rw-r--r--rs/jni/Android.mk1
-rw-r--r--services/core/jni/com_android_server_input_InputManagerService.cpp3
-rw-r--r--services/core/jni/onload.cpp2
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);