Kotlin: async adapters included directly into objects. The wrapper class is removed. Test: ./gradlew connectedAndroidTest Bug: b/453645007 Change-Id: I48b243ad918ab35e5839b408b138089949afa5f2 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/270454 Commit-Queue: Jim Blackler <jimblackler@google.com> Reviewed-by: Kai Ninomiya <kainino@chromium.org>
diff --git a/generator/dawn_json_generator.py b/generator/dawn_json_generator.py index ef94071..96782dd 100644 --- a/generator/dawn_json_generator.py +++ b/generator/dawn_json_generator.py
@@ -1734,6 +1734,7 @@ jni_name = params_kotlin['jni_name'] imported_templates += [ + "art/api_kotlin_async_helpers.kt", "art/api_kotlin_types.kt", ] @@ -1772,10 +1773,6 @@ FileRender('art/api_kotlin_functions.kt', 'java/' + kt_file_path + '/Functions.kt', [RENDER_PARAMS_BASE, params_kotlin])) - renders.append( - FileRender('art/api_kotlin_async_helpers.kt', - 'java/' + kt_file_path + '/AsyncHelpers.kt', - [RENDER_PARAMS_BASE, params_kotlin])) for enum in (params_kotlin['by_category']['bitmask'] + params_kotlin['by_category']['enum']):
diff --git a/generator/templates/art/api_kotlin_async_helpers.kt b/generator/templates/art/api_kotlin_async_helpers.kt index 4d8f857..e064339 100644 --- a/generator/templates/art/api_kotlin_async_helpers.kt +++ b/generator/templates/art/api_kotlin_async_helpers.kt
@@ -26,14 +26,20 @@ //* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package {{ kotlin_package }} -import java.util.concurrent.Executor -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine {% from 'art/api_kotlin_types.kt' import kotlin_annotation, kotlin_declaration, kotlin_definition, check_if_doc_present, generate_kdoc with context %} {% set all_callback_info = kdocs.callbacks %} {% set all_objects = kdocs.objects %} {% macro async_wrapper(obj, method, callback_arg) %} + //* Generate KDocs + {% set callback_doc_info = all_callback_info.get(callback_arg.type.name.get()) %} + {% set callback_doc = callback_doc_info.doc if callback_doc_info else "" %} + {% set callback_args_doc = callback_doc_info.args if callback_doc_info else {} %} + {% set callback_args = kotlin_record_members(callback_arg.type.arguments) | list %} + {% if check_if_doc_present(callback_doc, "", callback_args_doc, callback_args) == 'True' %} + {{- generate_kdoc(callback_doc, "", callback_args_doc, callback_args, line_wrap_prefix = "\n * ") }} + {%- endif %} + {% set return_name = callback_arg.type.name.chunks[:-1] | map('title') | join + 'Return' %} {% set result_args = kotlin_record_members(callback_arg.type.arguments) | list %} //* We make a return class to receive the callback's (possibly multiple) return values. @@ -70,7 +76,7 @@ {%- endif %} //* The wrapped method has executor and callback function stripped out (the wrapper supplies //* those so the client doesn't have to). - public suspend fun {{ kotlin_name(obj) }}.{{ method.name.camelCase() }}( + public suspend fun {{ method.name.camelCase() }}( {%- for arg in kotlin_record_members(method.arguments) if not ( arg.type.category == 'callback function' or (arg.type.category == 'kotlin type' and arg.type.name.get() == 'java.util.concurrent.Executor') @@ -96,26 +102,3 @@ {%- endfor %}) } {% endmacro %} - -//* Every method that is identified as using callbacks is given a helper method that wraps the -//* call with a suspend function. -{% for obj in by_category['object'] %} - {%- for method in obj.methods if include_method(obj, method) %} - {%- for arg in kotlin_record_members(method.arguments) %} - {% if arg.type.category == 'callback function' %} - //* Generating KDocs - {% set callback_doc_info = all_callback_info.get(arg.type.name.get()) %} - {% set callback_doc = callback_doc_info.doc if callback_doc_info else "" %} - {% set callback_args_doc = callback_doc_info.args if callback_doc_info else {} %} - {% set callback_args = kotlin_record_members(arg.type.arguments) | list %} - {% if check_if_doc_present(callback_doc, "", callback_args_doc, callback_args) == 'True' %} - {{- generate_kdoc(callback_doc, "", callback_args_doc, callback_args, line_wrap_prefix = "\n * ") }} - - {%- endif %} - {{- async_wrapper(obj, method, arg) -}} - {{ continue }} - {% endif %} - {% endfor %} - {% endfor %} -{% endfor %} -
diff --git a/generator/templates/art/api_kotlin_object.kt b/generator/templates/art/api_kotlin_object.kt index 6115a09..d432fa9 100644 --- a/generator/templates/art/api_kotlin_object.kt +++ b/generator/templates/art/api_kotlin_object.kt
@@ -28,7 +28,12 @@ import dalvik.annotation.optimization.FastNative import java.nio.ByteBuffer +import java.util.concurrent.Executor +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + {% from 'art/api_kotlin_types.kt' import kotlin_annotation, kotlin_declaration, kotlin_definition, check_if_doc_present, generate_kdoc, generate_simple_kdoc with context %} +{% from 'art/api_kotlin_async_helpers.kt' import async_wrapper with context %} //* Generating KDocs {% set all_objects_info = kdocs.objects%} @@ -71,6 +76,16 @@ public val {{ name }}: {{ kotlin_declaration(kotlin_return(method)) }} get() = {{ method.name.camelCase() }}() {% endif %} + + //* Every method that is identified as using callbacks is given a helper method that wraps the + //* call with a suspend function. + {%- for arg in kotlin_record_members(method.arguments) %} + {% if arg.type.category == 'callback function' %} + {{- async_wrapper(obj, method, arg) -}} + {{ continue }} + {% endif %} + {%- endfor -%} + {% endfor %} external override fun close()
diff --git a/tools/android/BUILD.gn b/tools/android/BUILD.gn index 3de9c275..f0d4d87 100644 --- a/tools/android/BUILD.gn +++ b/tools/android/BUILD.gn
@@ -47,7 +47,6 @@ "java/androidx/webgpu/AdapterInfo.kt", "java/androidx/webgpu/AdapterType.kt", "java/androidx/webgpu/AddressMode.kt", - "java/androidx/webgpu/AsyncHelpers.kt", "java/androidx/webgpu/BackendType.kt", "java/androidx/webgpu/GPUBindGroup.kt", "java/androidx/webgpu/BindGroupDescriptor.kt",
diff --git a/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt b/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt index 7a6b97e..20e3b5f 100644 --- a/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt +++ b/tools/android/webgpu/src/main/java/androidx/webgpu/helper/WebGpu.kt
@@ -21,8 +21,6 @@ import androidx.webgpu.UncapturedErrorCallback import androidx.webgpu.createInstance import androidx.webgpu.helper.Util.windowFromSurface -import androidx.webgpu.requestAdapter -import androidx.webgpu.requestDevice import java.util.concurrent.Executor public class DeviceLostException(