diff options
author | Florian Dold <florian.dold@gmail.com> | 2019-12-06 02:00:34 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2019-12-06 02:00:34 +0100 |
commit | cb3eb410fbf79cb2bb9ddb969b771259ea9acf6e (patch) | |
tree | 0fcc0e7f3703735330b9432f3df1fa2f2b33f22a | |
parent | 307baaf5eb716f8ea327374c09cb328305e29c51 (diff) | |
download | akono-cb3eb410fbf79cb2bb9ddb969b771259ea9acf6e.tar.gz akono-cb3eb410fbf79cb2bb9ddb969b771259ea9acf6e.tar.bz2 akono-cb3eb410fbf79cb2bb9ddb969b771259ea9acf6e.zip |
simplifications / threading
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | .idea/encodings.xml | 4 | ||||
-rw-r--r-- | .idea/gradle.xml | 3 | ||||
-rw-r--r-- | .idea/inspectionProfiles/Project_Default.xml | 6 | ||||
-rw-r--r-- | .idea/vcs.xml | 1 | ||||
-rw-r--r-- | akono.iml | 14 | ||||
-rw-r--r-- | akono/akono-akono.iml | 249 | ||||
-rw-r--r-- | akono/build.gradle.kts | 2 | ||||
-rw-r--r-- | akono/src/main/cpp/akono-jni.cpp | 253 | ||||
-rw-r--r-- | akono/src/main/java/akono/AkonoJni.kt | 58 |
10 files changed, 99 insertions, 493 deletions
@@ -14,6 +14,8 @@ /.idea/modules.xml /.idea/workspace.xml /.idea/tasks.xml +/.idea/libraries/* +/.idea/inspectionProfiles/* /.idea/gradle.xml /.idea/usage.statistics.xml /.idea/caches/build_file_checksums.ser diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 15a15b21..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,4 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="Encoding" addBOMForNewFiles="with NO BOM" /> -</project>
\ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 94946c6a..2db3c7d0 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -8,10 +8,11 @@ <option name="modules"> <set> <option value="$PROJECT_DIR$" /> - <option value="$PROJECT_DIR$/library" /> + <option value="$PROJECT_DIR$/akono" /> </set> </option> <option name="resolveModulePerSourceSet" value="false" /> + <option name="testRunner" value="PLATFORM" /> </GradleProjectSettings> </option> </component> diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 769fc1d4..00000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ -<component name="InspectionProjectProfileManager"> - <profile version="1.0"> - <option name="myName" value="Project Default" /> - <inspection_tool class="JniGetMethod" enabled="false" level="WARNING" enabled_by_default="false" /> - </profile> -</component>
\ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1ddf..f65dd08c 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ <project version="4"> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> + <mapping directory="$PROJECT_DIR$/deps/android-node-v8" vcs="Git" /> </component> </project>
\ No newline at end of file @@ -1,25 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> -<module external.linked.project.id="akono" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> +<module external.linked.project.id="akono" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4"> <component name="FacetManager"> <facet type="android-gradle" name="Android-Gradle"> <configuration> <option name="GRADLE_PROJECT_PATH" value=":" /> + <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" /> + <option name="LAST_KNOWN_AGP_VERSION" /> </configuration> </facet> <facet type="java-gradle" name="Java-Gradle"> <configuration> - <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/../../build" /> + <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" /> <option name="BUILDABLE" value="false" /> </configuration> </facet> </component> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true"> <exclude-output /> - <content url="file://$MODULE_DIR$/../.."> - <excludeFolder url="file://$MODULE_DIR$/../../.gradle" /> - <excludeFolder url="file://$MODULE_DIR$/../../build" /> + <content url="file://$MODULE_DIR$"> + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> </content> - <orderEntry type="inheritedJdk" /> + <orderEntry type="jdk" jdkName="JDK" jdkType="JavaSDK" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module>
\ No newline at end of file diff --git a/akono/akono-akono.iml b/akono/akono-akono.iml index 6f731674..7719671c 100644 --- a/akono/akono-akono.iml +++ b/akono/akono-akono.iml @@ -1,9 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<module external.linked.project.id=":akono" external.linked.project.path="$MODULE_DIR$/../../../akono" external.root.project.path="$MODULE_DIR$/../../.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> +<module external.linked.project.id=":akono" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4"> <component name="FacetManager"> <facet type="android-gradle" name="Android-Gradle"> <configuration> <option name="GRADLE_PROJECT_PATH" value=":akono" /> + <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.3.2" /> + <option name="LAST_KNOWN_AGP_VERSION" value="3.3.2" /> </configuration> </facet> <facet type="native-android-gradle" name="Native-Android-Gradle"> @@ -22,17 +24,17 @@ <option name="ALLOW_USER_CONFIGURATION" value="false" /> <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" /> <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" /> - <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../akono/build/generated/res/rs/debug;file://$MODULE_DIR$/../../../akono/build/generated/res/resValues/debug" /> - <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/../../../akono/build/generated/res/rs/androidTest/debug;file://$MODULE_DIR$/../../../akono/build/generated/res/resValues/androidTest/debug" /> + <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" /> + <option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" /> <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" /> <option name="PROJECT_TYPE" value="1" /> </configuration> </facet> <facet type="kotlin-language" name="Kotlin"> - <configuration version="3" platform="JVM 1.6" useProjectSettings="false"> + <configuration version="3" platform="JVM 1.6" allPlatforms="JVM [1.6]" useProjectSettings="false"> <compilerSettings /> <compilerArguments> - <option name="destination" value="$MODULE_DIR$/../../../akono/build/tmp/kotlin-classes/debug" /> + <option name="destination" value="$MODULE_DIR$/build/tmp/kotlin-classes/debug" /> <option name="classpath" value="$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.3.21/d207ce2c9bcf17dc8e51bab4dbfdac4d013e7138/kotlin-stdlib-jdk7-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.3.21/4bcc2012b84840e19e1e28074284cac908be0295/kotlin-stdlib-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.3.21/f30e4a9897913e53d778f564110bafa1fef46643/kotlin-stdlib-common-1.3.21.jar:/home/dold/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/home/dold/repos/akono/akono/build/intermediates/compile_only_not_namespaced_r_class_jar/debug/generateDebugRFile/R.jar:/home/dold/opt/android-sdk/platforms/android-28/android.jar:/home/dold/opt/android-sdk/platforms/android-28/optional/android.test.mock.jar:/home/dold/opt/android-sdk/platforms/android-28/optional/android.test.base.jar:/home/dold/opt/android-sdk/platforms/android-28/optional/android.test.runner.jar" /> <option name="noStdlib" value="true" /> <option name="noReflect" value="true" /> @@ -59,23 +61,23 @@ </facet> </component> <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7"> - <output url="file://$MODULE_DIR$/../../../akono/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> - <output-test url="file://$MODULE_DIR$/../../../akono/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> + <output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" /> + <output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" /> <exclude-output /> - <content url="file://$MODULE_DIR$/../../../akono"> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/cpp" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/apt/debug" isTestSource="false" generated="true" /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/cpp" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/res/rs/debug" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/res/resValues/debug" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/res/rs/androidTest/debug" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/res/resValues/androidTest/debug" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" /> @@ -85,14 +87,6 @@ <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" /> @@ -101,11 +95,19 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" /> @@ -113,7 +115,7 @@ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" /> @@ -121,181 +123,46 @@ <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" /> <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" /> <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/res" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/resources" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/assets" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/aidl" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/java" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/jni" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/rs" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/debug/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/testDebug/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTestDebug/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/res" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/resources" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/assets" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/aidl" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/jni" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/rs" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/main/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/androidTest/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../akono/src/test/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/apt/test/debug" isTestSource="true" generated="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/res" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/resources" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/assets" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/aidl" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/java" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/jni" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/rs" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/debug/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/testDebug/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/java" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTestDebug/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/res" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/resources" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/assets" type="java-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/aidl" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/jni" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/rs" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/main/shaders" isTestSource="false" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/androidTest/shaders" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/res" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/resources" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/assets" type="java-test-resource" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/aidl" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/jni" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/rs" isTestSource="true" /> - <sourceFolder url="file://$MODULE_DIR$/../../../akono/src/test/shaders" isTestSource="true" /> - <excludeFolder url="file://$MODULE_DIR$/build/generated/source/r" /> - <excludeFolder url="file://$MODULE_DIR$/../../akono/build/generated/source/r" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/.externalNativeBuild" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/generated/not_namespaced_r_class_sources" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/generated/source/r" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/aapt_friendly_merged_manifests" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/annotation_processor_list" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/annotations_typedef_file" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/annotations_zip" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/apk_list" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/blame" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/check_manifest_result" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/cmake" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/compile_only_not_namespaced_r_class_jar" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/dex" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/incremental" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/intermediate-jars" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/javac" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/jniLibs" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/library_and_local_jars_jni" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/library_assets" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/library_manifest" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/merged_assets" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/merged_manifests" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/packaged-classes" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/packaged_res" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/processed_res" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/public_res" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/res" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/rs" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/shader_assets" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/shaders" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/signing_config" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/symbols" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/tmp" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/transforms" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/intermediates/validate_signing_config" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/kotlin" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/outputs" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/reports" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/test-results" /> - <excludeFolder url="file://$MODULE_DIR$/../../../akono/build/tmp" /> + <excludeFolder url="file://$MODULE_DIR$/.cxx" /> + <excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> </content> <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:junit:1.1.0@aar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:failureaccess:1.0.1@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.errorprone:error_prone_annotations:2.3.1@jar" level="project" /> - <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.21@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.1.1@aar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-junit:1.3.21@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:rules:1.1.1@aar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:truth:1.1.0@aar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: org.checkerframework:checker-compat-qual:2.5.5@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.1.1@aar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.truth:truth:0.44@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-junit:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test:1.3.21@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: androidx.lifecycle:lifecycle-common:2.0.0@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.auto.value:auto-value-annotations:1.6.3@jar" level="project" /> - <orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.21@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.j2objc:j2objc-annotations:1.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.googlecode.java-diff-utils:diffutils:1.3.0@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:core:1.1.0@aar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: androidx.annotation:annotation:1.0.0@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test:1.3.21@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:guava:27.0.1-android@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:failureaccess:1.0.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:3.0.2@jar" level="project" /> - <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.checkerframework:checker-compat-qual:2.5.5@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.errorprone:error_prone_annotations:2.3.1@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.j2objc:j2objc-annotations:1.1@jar" level="project" /> <orderEntry type="library" scope="TEST" name="Gradle: org.codehaus.mojo:animal-sniffer-annotations:1.17@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.googlecode.java-diff-utils:diffutils:1.3.0@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: com.google.auto.value:auto-value-annotations:1.6.3@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-common:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: org.jetbrains.kotlin:kotlin-test-annotations-common:1.3.21@jar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:junit:1.1.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test.ext:truth:1.1.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:core:1.1.0@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:rules:1.1.1@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.1.1@aar" level="project" /> + <orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.1.1@aar" level="project" /> <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.21@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: com.google.guava:guava:27.0.1-android@jar" level="project" /> - <orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib:1.3.21@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains.kotlin:kotlin-stdlib-common:1.3.21@jar" level="project" /> + <orderEntry type="library" name="Gradle: org.jetbrains:annotations:13.0@jar" level="project" /> <orderEntry type="library" name="Gradle: android.test.mock-android-28" level="project" /> <orderEntry type="library" name="Gradle: android.test.base-android-28" level="project" /> <orderEntry type="library" name="Gradle: android.test.runner-android-28" level="project" /> diff --git a/akono/build.gradle.kts b/akono/build.gradle.kts index b98510db..d5362832 100644 --- a/akono/build.gradle.kts +++ b/akono/build.gradle.kts @@ -8,7 +8,7 @@ plugins { android { compileSdkVersion(28) defaultConfig { - minSdkVersion(26) + minSdkVersion(21) targetSdkVersion(28) versionCode = 1 diff --git a/akono/src/main/cpp/akono-jni.cpp b/akono/src/main/cpp/akono-jni.cpp index 0480eea5..1d0f7512 100644 --- a/akono/src/main/cpp/akono-jni.cpp +++ b/akono/src/main/cpp/akono-jni.cpp @@ -1,9 +1,11 @@ -#include <string.h> +#include <sys/types.h> +#include <sys/syscall.h> +#include <cstring> #include <jni.h> #include <libplatform/libplatform.h> #include <v8.h> -#define NODE_WANT_INTERNALS 1 +#define NODE_WANT_INTERNALS 1 // NOLINT(cppcoreguidelines-macro-usage) #include <node.h> @@ -11,10 +13,9 @@ #include <unistd.h> #include <android/log.h> #include <node_main_instance.h> +#include <node_binding.h> #include <node_native_module_env.h> - - // Provide stubs so that libnode.so links properly namespace node { namespace native_module { @@ -40,7 +41,7 @@ static const char *tag = "myapp"; static void *thread_func(void *) { ssize_t rdsz; - char buf[128]; + char buf[1024]; while ((rdsz = read(pfd[0], buf, sizeof buf - 1)) > 0) { if (buf[rdsz - 1] == '\n') --rdsz; buf[rdsz] = 0; /* add null-terminator */ @@ -83,7 +84,7 @@ private: JNIEnv *m_env; public: JStringValue(JNIEnv *env, jstring s) : m_env(env), m_jstr(s) { - m_cstr = env->GetStringUTFChars(s, NULL); + m_cstr = env->GetStringUTFChars(s, nullptr); } ~JStringValue() { @@ -111,82 +112,21 @@ static void InitNode(std::vector<const char *> argv) { void notifyCb(uv_async_t *async); static void sendMessageCallback(const v8::FunctionCallbackInfo<v8::Value> &args); -static void loadModuleCallback(const v8::FunctionCallbackInfo<v8::Value> &args); -static void getDataCallback(const v8::FunctionCallbackInfo<v8::Value> &args); static const char *main_code = "global.__akono_run = (x) => {" - " console.log('running code', x);" + " 0 && console.log('running code', x);" " global.eval(x);" "};" "" "global.__akono_onMessage = (x) => {" - " console.log('got __akono_onMessage', x);" - "};" - "" - "mod = require('module');" - "mod._saved_findPath = mod._findPath;" - "mod._akonoMods = {};" - "mod._findPath = (request, paths, isMain) => {" - " console.log('in _findPath');" - " const res = mod._saved_findPath(request, paths, isMain);" - " if (res !== false) return res;" - " const args = JSON.stringify({ request, paths});" - " const loadResult = JSON.parse(global.__akono_loadModule(args));" - " console.log('got loadModule result');" - " if (!loadResult) return false;" - " console.log('loadModule path is', loadResult.path);" - " mod._akonoMods[loadResult.path] = loadResult;" - " console.log('returning path', loadResult.path);" - " return loadResult.path;" - "};" - "" - "function stripBOM(content) {" - " if (content.charCodeAt(0) === 0xFEFF) {" - " content = content.slice(1);" - " }" - " return content;" - "}" - "" - "mod._saved_js_extension = mod._extensions[\".js\"];" - "mod._extensions[\".js\"] = (module, filename) => {" - " console.log('handling js extension', [module, filename]);" - " if (mod._akonoMods.hasOwnProperty(filename)) {" - " const akmod = mod._akonoMods[filename];" - " console.log('found mod');" - " const content = akmod.content;" - " module._compile(stripBOM(content), filename);" - " return;" - " }" - " console.log('falling back');" - " return mod._saved_js_extension(module, filename);" - "};" - "" - "mod._saved_json_extension = mod._extensions[\".json\"];" - "mod._extensions[\".json\"] = (module, filename) => {" - " console.log('handling json extension', [module, filename]);" - " if (mod._akonoMods.hasOwnProperty(filename)) {" - " const akmod = mod._akonoMods[filename];" - " console.log('found mod');" - " const content = akmod.content;" - " try {" - " module.exports = JSON.parse(stripBOM(content));" - " return;" - " } catch (err) {" - " err.message = filename + ': ' + err.message;" - " throw err;" - " }" - " }" - " console.log('falling back');" - " return mod._saved_json_extension(module, filename);" - "};" - ""; + " 0 && console.log('got __akono_onMessage', x);" + "};"; class NativeAkonoInstance { private: static bool logInitialized; static bool v8Initialized; - //static std::unique_ptr<v8::Platform> platform; static node::MultiIsolatePlatform *platform; public: v8::Isolate *isolate; @@ -245,12 +185,8 @@ public: // Arguments for the script run by node std::vector<const char *> nodeExecArgv{}; - mylog("entering global scope"); - v8::Context::Scope context_scope(globalContext.Get(isolate)); - mylog("creating environment"); - node::Environment *environment = node::CreateEnvironment( isolateData, globalContext.Get(isolate), @@ -259,12 +195,8 @@ public: nodeExecArgv.size(), &nodeExecArgv[0]); - mylog("loading environment"); - node::LoadEnvironment(environment); - mylog("finished loading environment"); - v8::Local<v8::ObjectTemplate> dataTemplate = v8::ObjectTemplate::New(isolate); dataTemplate->SetInternalFieldCount(1); v8::Local<v8::Object> dataObject = dataTemplate->NewInstance(context).ToLocalChecked(); @@ -274,29 +206,12 @@ public: sendMessageCallback, dataObject).ToLocalChecked(); - v8::Local<v8::Function> loadModuleFunction = v8::Function::New(context, - loadModuleCallback, - dataObject).ToLocalChecked(); - - v8::Local<v8::Function> getDataFunction = v8::Function::New(context, - getDataCallback, - dataObject).ToLocalChecked(); - v8::Local<v8::Object> global = context->Global(); global->Set(v8::String::NewFromUtf8(isolate, "__akono_sendMessage", v8::NewStringType::kNormal).ToLocalChecked(), sendMessageFunction); - global->Set(v8::String::NewFromUtf8(isolate, "__akono_loadModule", - v8::NewStringType::kNormal).ToLocalChecked(), - loadModuleFunction); - - // Get data synchronously (!) from the embedder - global->Set(v8::String::NewFromUtf8(isolate, "__akono_getData", - v8::NewStringType::kNormal).ToLocalChecked(), - getDataFunction); - } /** @@ -305,12 +220,14 @@ public: * @param env JNI env of the thread we're running in. */ void runNode() { + //printf("running node loop, tid=%llu\n", (unsigned long long) syscall(__NR_gettid)); + v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); v8::Local<v8::Context> context = globalContext.Get(isolate); v8::Context::Scope context_scope(context); this->breakRequested = false; - while (1) { + while (true) { uv_run(uv_default_loop(), UV_RUN_ONCE); platform->DrainTasks(isolate); if (this->breakRequested) @@ -324,7 +241,7 @@ public: * Must not be called from a different thread. */ void makeCallback(const char *code) { - mylog("in makeCallback"); + v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); v8::HandleScope handle_scope(isolate); v8::Local<v8::Context> context = globalContext.Get(isolate); @@ -334,7 +251,6 @@ public: v8::String::NewFromUtf8(isolate, code, v8::NewStringType::kNormal).ToLocalChecked() }; - mylog("calling node::MakeCallback"); node::MakeCallback(isolate, global, "__akono_run", 1, argv, {0, 0}); } @@ -343,8 +259,6 @@ public: } jstring evalJs(JNIEnv *env, jstring sourceString) { - mylog("begin evalJs"); - JStringValue jsv(env, sourceString); v8::Isolate::Scope isolate_scope(isolate); @@ -370,28 +284,19 @@ public: // Compile the source code. v8::Local<v8::Script> script; - mylog("about to compile script"); - if (!v8::Script::Compile(context, source).ToLocal(&script)) { return nullptr; } - mylog("about to run script"); - // Run the script to get the result. v8::Local<v8::Value> result; if (!script->Run(context).ToLocal(&result)) { - mylog("running script failed"); return nullptr; } - mylog("converting script result value"); - // Convert the result to an UTF8 string and print it. v8::String::Utf8Value utf8(isolate, result); - mylog("about to return value"); - return env->NewStringUTF(*utf8); } } @@ -404,8 +309,7 @@ node::MultiIsolatePlatform *NativeAkonoInstance::platform = nullptr; void notifyCb(uv_async_t *async) { - NativeAkonoInstance *akono = (NativeAkonoInstance *) async->data; - mylog("async notifyCb called!"); + auto akono = (NativeAkonoInstance *) async->data; akono->breakRequested = true; } @@ -415,11 +319,9 @@ static void sendMessageCallback(const v8::FunctionCallbackInfo<v8::Value> &args) v8::HandleScope scope(isolate); v8::Local<v8::Value> arg = args[0]; v8::String::Utf8Value value(isolate, arg); - mylog("sendMessageCallback called, yay!"); v8::Local<v8::Object> data = v8::Local<v8::Object>::Cast(args.Data()); - mylog("getting instance"); NativeAkonoInstance *myInstance = (NativeAkonoInstance *) data->GetAlignedPointerFromInternalField(0); JNIEnv *env = myInstance->currentJniEnv; @@ -429,7 +331,6 @@ static void sendMessageCallback(const v8::FunctionCallbackInfo<v8::Value> &args) return; } - mylog("finding class"); jclass clazz = env->FindClass("akono/AkonoJni"); if (clazz == nullptr) { @@ -437,12 +338,9 @@ static void sendMessageCallback(const v8::FunctionCallbackInfo<v8::Value> &args) return; } - mylog("creating strings"); jstring jstr1 = env->NewStringUTF("message"); jstring jstr2 = env->NewStringUTF(*value); - mylog("getting method"); - jmethodID meth = env->GetMethodID(clazz, "internalOnNotify", "(Ljava/lang/String;Ljava/lang/String;)V"); if (meth == nullptr) { @@ -450,122 +348,9 @@ static void sendMessageCallback(const v8::FunctionCallbackInfo<v8::Value> &args) return; } - mylog("calling method"); - env->CallVoidMethod(myInstance->currentJniThiz, meth, jstr1, jstr2); } - -static void loadModuleCallback(const v8::FunctionCallbackInfo<v8::Value> &args) { - if (args.Length() < 1) return; - v8::Isolate *isolate = args.GetIsolate(); - v8::HandleScope scope(isolate); - v8::Local<v8::Value> arg = args[0]; - v8::String::Utf8Value value(isolate, arg); - mylog("sendMessageCallback called, yay!"); - - v8::Local<v8::Object> data = v8::Local<v8::Object>::Cast(args.Data()); - - mylog("getting instance"); - NativeAkonoInstance *myInstance = (NativeAkonoInstance *) data->GetAlignedPointerFromInternalField(0); - - JNIEnv *env = myInstance->currentJniEnv; - - if (env == nullptr) { - mylog("FATAL: JNI env is nullptr"); - return; - } - - mylog("finding class"); - jclass clazz = env->FindClass("akono/AkonoJni"); - - if (clazz == nullptr) { - mylog("FATAL: class not found"); - return; - } - - mylog("creating strings"); - jstring jstr1 = env->NewStringUTF(*value); - - mylog("getting method"); - - jmethodID meth = env->GetMethodID(clazz, "internalOnModuleLoad", "(Ljava/lang/String;)Ljava/lang/String;"); - - if (meth == nullptr) { - mylog("FATAL: method not found"); - return; - } - - mylog("calling method"); - - jstring jresult = (jstring) env->CallObjectMethod(myInstance->currentJniThiz, meth, jstr1); - - JStringValue resultStringValue(env, jresult); - - // Create a string containing the JavaScript source code. - v8::Local<v8::String> rs = - v8::String::NewFromUtf8(isolate, *resultStringValue, - v8::NewStringType::kNormal) - .ToLocalChecked(); - - args.GetReturnValue().Set(rs); -} - - -static void getDataCallback(const v8::FunctionCallbackInfo<v8::Value> &args) { - if (args.Length() < 1) return; - v8::Isolate *isolate = args.GetIsolate(); - v8::HandleScope scope(isolate); - v8::Local<v8::Value> arg = args[0]; - v8::String::Utf8Value value(isolate, arg); - mylog("getDataCallback called"); - - v8::Local<v8::Object> data = v8::Local<v8::Object>::Cast(args.Data()); - mylog("getting instance"); - NativeAkonoInstance *myInstance = (NativeAkonoInstance *) data->GetAlignedPointerFromInternalField(0); - - JNIEnv *env = myInstance->currentJniEnv; - if (env == nullptr) { - mylog("FATAL: JNI env is nullptr"); - return; - } - - mylog("finding class"); - jclass clazz = env->FindClass("akono/AkonoJni"); - - if (clazz == nullptr) { - mylog("FATAL: class not found"); - return; - } - - mylog("creating strings"); - jstring jstr1 = env->NewStringUTF(*value); - - mylog("getting method"); - - jmethodID meth = env->GetMethodID(clazz, "internalOnGetData", "(Ljava/lang/String;)Ljava/lang/String;"); - - if (meth == nullptr) { - mylog("FATAL: method not found"); - return; - } - - mylog("calling method"); - - jstring jresult = (jstring) env->CallObjectMethod(myInstance->currentJniThiz, meth, jstr1); - - JStringValue resultStringValue(env, jresult); - - // Create a string containing the JavaScript source code. - v8::Local<v8::String> rs = - v8::String::NewFromUtf8(isolate, *resultStringValue, - v8::NewStringType::kNormal) - .ToLocalChecked(); - - args.GetReturnValue().Set(rs); -} - - extern "C" JNIEXPORT jobject JNICALL Java_akono_AkonoJni_initNative(JNIEnv *env, jobject thiz) { NativeAkonoInstance *myInstance = new NativeAkonoInstance(); @@ -608,3 +393,11 @@ Java_akono_AkonoJni_makeCallbackNative(JNIEnv *env, jobject thiz, jstring source myInstance->currentJniThiz = thiz; return myInstance->makeCallback(*jsv); } + +void InitializeAkono(v8::Local<v8::Object> target, + v8::Local<v8::Value> unused, + v8::Local<v8::Context> context, + void* priv) { +} + +NODE_MODULE_CONTEXT_AWARE_INTERNAL(akono, InitializeAkono) diff --git a/akono/src/main/java/akono/AkonoJni.kt b/akono/src/main/java/akono/AkonoJni.kt index 0ba31ee8..6aecb3af 100644 --- a/akono/src/main/java/akono/AkonoJni.kt +++ b/akono/src/main/java/akono/AkonoJni.kt @@ -13,10 +13,10 @@ typealias AkonoNativePointer = ByteBuffer data class ModuleResult(val path: String, val contents: String) +private val TAG = "AkonoJni" + class AkonoJni(vararg nodeArgv: String) { - private var getDataHandler: GetDataHandler? = null private var messageHandler: MessageHandler? = null - private var loadModuleHandler: LoadModuleHandler? = null private val initializedLatch = CountDownLatch(1) private val workQueue = LinkedBlockingDeque<() -> Unit>() @@ -53,49 +53,6 @@ class AkonoJni(vararg nodeArgv: String) { messageHandler?.handleMessage(payload) } - /** - * Called by node/v8 from its thread. - */ - @Suppress("unused") - private fun internalOnModuleLoad(loadInfoStr: String): String { - try { - val loadInfo = JSONObject(loadInfoStr) - val request: String = loadInfo.getString("request") - Log.i("myapp", "request is $request") - val paths = ArrayList<String>() - val pathsJson = loadInfo.getJSONArray("paths") - for (i in 0 until pathsJson.length()) { - val path = pathsJson.getString(i) - if (path.startsWith("/vmodroot/")) { - paths.add(path) - } - } - paths.add("/vmodroot") - val handler = loadModuleHandler - if (handler != null) { - val modResult = handler.loadModule(request, paths.toTypedArray()) ?: return "null" - val result = JSONObject() - result.put("path", modResult.path) - result.put("content", modResult.contents) - return result.toString() - } else { - Log.w("myapp", "no module load handler registered") - return "null" - } - } catch (e: Exception) { - Log.e("myapp", "exception during internalOnModuleLoad: $e") - return "null" - } - } - - /** - * Called by node/v8 from its thread. - */ - @Suppress("unused") - private fun internalOnGetData(what: String): String? { - val data = getDataHandler?.handleGetData(what) ?: return null - return Base64.encodeToString(data, Base64.NO_WRAP) - } fun notifyNative() { initializedLatch.await() @@ -142,7 +99,7 @@ class AkonoJni(vararg nodeArgv: String) { * */ fun waitStopped(): Unit { - Log.i("myapp", "waiting for stop") + Log.i(TAG, "waiting for stop") scheduleNodeThread { stopped = true } @@ -160,13 +117,6 @@ class AkonoJni(vararg nodeArgv: String) { this.messageHandler = handler } - fun setLoadModuleHandler(handler: LoadModuleHandler) { - this.loadModuleHandler = handler - } - - fun setGetDataHandler(handler: GetDataHandler) { - this.getDataHandler = handler - } @Override protected fun finalize() { @@ -208,4 +158,4 @@ class AkonoJni(vararg nodeArgv: String) { interface GetDataHandler { fun handleGetData(what: String): ByteArray? } -}
\ No newline at end of file +} |