Repository: lynx-family/lynx Branch: develop Commit: 826232a2a678 Files: 9795 Total size: 56.3 MB Directory structure: gitextract_4zx3e2p3/ ├── .clang-format ├── .editorconfig ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── 1-bug-report.en-US.yml │ │ ├── 2-feature-request.en-US.yml │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── android-explorer-build/ │ │ │ └── action.yml │ │ ├── android-sdk-release/ │ │ │ └── action.yml │ │ ├── clay-macos-build/ │ │ │ └── action.yml │ │ ├── common-deps/ │ │ │ └── action.yml │ │ ├── free-android-disk/ │ │ │ └── action.yml │ │ ├── generate-changelog/ │ │ │ └── action.yml │ │ ├── get-latest-tag/ │ │ │ └── action.yml │ │ ├── harmony-explorer-build/ │ │ │ └── action.yml │ │ ├── ios-common-deps/ │ │ │ └── action.yml │ │ ├── ios-explorer-build/ │ │ │ └── action.yml │ │ ├── ios-sdk-publish/ │ │ │ └── action.yml │ │ ├── macos-explorer-build/ │ │ │ └── action.yml │ │ ├── release-changelog/ │ │ │ └── action.yml │ │ ├── setup-android-env/ │ │ │ └── action.yml │ │ ├── windows-common-deps/ │ │ │ └── action.yml │ │ └── windows-explorer-build/ │ │ └── action.yml │ └── workflows/ │ ├── ci.yml │ ├── cocoapods_token_keepalive.yml │ ├── codeql.yml │ ├── css-defines-publish.yml │ ├── issue-management.yml │ ├── lynx-core-publish.yml │ ├── lynx-types-publish.yml │ ├── publish-release.yml │ ├── sdk-release-test.yml │ ├── tasm-publish.yml │ ├── type-config-publish.yml │ └── type-element-api-publish.yml ├── .gitignore ├── .gn ├── .habitat ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .rtf/ │ ├── android-ut-lynx.template │ ├── config │ ├── native-ut-devtool.template │ └── native-ut-lynx.template ├── .tools_shared ├── AGENTS.md ├── BUILD.gn ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── CPPLINT.cfg ├── DEFAULT_REVIEWERS ├── Gemfile ├── LICENSE ├── NOTICE ├── README.md ├── SECURITY.md ├── agents/ │ └── code_review/ │ └── commit_message_format.md ├── base/ │ ├── CPPLINT.cfg │ ├── README.md │ ├── include/ │ │ ├── algorithm.h │ │ ├── auto_create_optional.h │ │ ├── auto_reset.h │ │ ├── base_defines.h │ │ ├── base_export.h │ │ ├── base_public_headers.gni │ │ ├── base_trace/ │ │ │ └── trace_event_utils.h │ │ ├── boost/ │ │ │ └── unordered.h │ │ ├── bundled_optional.h │ │ ├── bundled_optional_lldb.py │ │ ├── cast_util.h │ │ ├── closure.h │ │ ├── compiler_specific.h │ │ ├── concurrent_queue.h │ │ ├── datauri_utils.h │ │ ├── debug/ │ │ │ ├── backtrace.h │ │ │ ├── lynx_assert.h │ │ │ └── lynx_error.h │ │ ├── expected.h │ │ ├── expected_internal.h │ │ ├── file_utils.h │ │ ├── flex_optional.h │ │ ├── float_comparison.h │ │ ├── fml/ │ │ │ ├── LICENSE │ │ │ ├── concurrent_message_loop.h │ │ │ ├── cpu_affinity.h │ │ │ ├── delayed_task.h │ │ │ ├── eintr_wrapper.h │ │ │ ├── fml_trace_event_def.h │ │ │ ├── hash_combine.h │ │ │ ├── macros.h │ │ │ ├── make_copyable.h │ │ │ ├── memory/ │ │ │ │ ├── ref_counted.h │ │ │ │ ├── ref_counted_internal.h │ │ │ │ ├── ref_ptr.h │ │ │ │ ├── ref_ptr_internal.h │ │ │ │ ├── task_runner_checker.h │ │ │ │ ├── weak_ptr.h │ │ │ │ └── weak_ptr_internal.h │ │ │ ├── message_loop.h │ │ │ ├── message_loop_impl.h │ │ │ ├── message_loop_task_queues.h │ │ │ ├── platform/ │ │ │ │ ├── android/ │ │ │ │ │ ├── cpu_affinity.h │ │ │ │ │ └── message_loop_android.h │ │ │ │ ├── darwin/ │ │ │ │ │ ├── cf_utils.h │ │ │ │ │ └── message_loop_darwin.h │ │ │ │ ├── harmony/ │ │ │ │ │ └── message_loop_harmony.h │ │ │ │ ├── linux/ │ │ │ │ │ ├── message_loop_linux.h │ │ │ │ │ └── timerfd.h │ │ │ │ ├── thread_config_setter.h │ │ │ │ └── win/ │ │ │ │ ├── message_loop_win.h │ │ │ │ ├── task_runner_win32.h │ │ │ │ └── task_runner_win32_window.h │ │ │ ├── raster_thread_merger.h │ │ │ ├── shared_thread_merger.h │ │ │ ├── synchronization/ │ │ │ │ ├── atomic_object.h │ │ │ │ ├── count_down_latch.h │ │ │ │ ├── semaphore.h │ │ │ │ ├── shared_mutex.h │ │ │ │ ├── shared_mutex_posix.h │ │ │ │ ├── shared_mutex_std.h │ │ │ │ ├── sync_switch.h │ │ │ │ └── waitable_event.h │ │ │ ├── task_queue_id.h │ │ │ ├── task_runner.h │ │ │ ├── task_runner_delegate.h │ │ │ ├── task_source.h │ │ │ ├── task_source_grade.h │ │ │ ├── thread.h │ │ │ ├── thread_host.h │ │ │ ├── time/ │ │ │ │ ├── chrono_timestamp_provider.h │ │ │ │ ├── time_delta.h │ │ │ │ ├── time_point.h │ │ │ │ ├── timer.h │ │ │ │ └── timestamp_provider.h │ │ │ ├── unique_fd.h │ │ │ ├── unique_object.h │ │ │ └── wakeable.h │ │ ├── geometry/ │ │ │ ├── point.h │ │ │ ├── rect.h │ │ │ └── size.h │ │ ├── hybrid_map.h │ │ ├── linked_hash_map.h │ │ ├── linked_hash_map_lldb.py │ │ ├── log/ │ │ │ ├── alog_wrapper.h │ │ │ ├── log_stream.h │ │ │ ├── logging.h │ │ │ ├── logging_base.h │ │ │ └── logging_darwin.h │ │ ├── lru_cache.h │ │ ├── lynx_actor.h │ │ ├── md5.h │ │ ├── memory/ │ │ │ └── memory_pressure_level.h │ │ ├── no_destructor.h │ │ ├── path_utils.h │ │ ├── platform/ │ │ │ ├── android/ │ │ │ │ ├── java_type.h │ │ │ │ ├── jni_convert_helper.h │ │ │ │ ├── jni_utils.h │ │ │ │ └── scoped_java_ref.h │ │ │ ├── darwin/ │ │ │ │ └── type_utils.h │ │ │ └── harmony/ │ │ │ ├── harmony_vsync_manager.h │ │ │ └── napi_util.h │ │ ├── position.h │ │ ├── shared_vector.h │ │ ├── sorted_for_each.h │ │ ├── string/ │ │ │ ├── quickjs_dtoa.h │ │ │ ├── string_conversion_win.h │ │ │ ├── string_number_convert.h │ │ │ └── string_utils.h │ │ ├── thread/ │ │ │ ├── base_semaphore.h │ │ │ ├── pthread_rw_lock_guard.h │ │ │ └── timed_task.h │ │ ├── timer/ │ │ │ └── time_utils.h │ │ ├── to_underlying.h │ │ ├── type_traits_addon.h │ │ ├── value/ │ │ │ ├── array.h │ │ │ ├── base_string.h │ │ │ ├── base_string_lldb.py │ │ │ ├── base_value.h │ │ │ ├── byte_array.h │ │ │ ├── lynx_api_types.h │ │ │ ├── lynx_value_api.h │ │ │ ├── lynx_value_extended.h │ │ │ ├── lynx_value_lldb.py │ │ │ ├── lynx_value_types.h │ │ │ ├── path_parser.h │ │ │ ├── ref_counted_class.h │ │ │ ├── ref_type.h │ │ │ └── table.h │ │ ├── vector.h │ │ ├── vector2d.h │ │ ├── vector_helper.h │ │ ├── vector_lldb.py │ │ ├── version.h │ │ └── version_util.h │ ├── platform/ │ │ ├── android/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── CMakeLists.txt │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── base/ │ │ │ │ ├── CalledByNative.java │ │ │ │ ├── IBaseNativeLibraryLoader.java │ │ │ │ ├── LynxBaseEnv.java │ │ │ │ ├── LynxBaseTrace.java │ │ │ │ ├── log/ │ │ │ │ │ ├── AbsBaseLogDelegate.java │ │ │ │ │ └── LynxLog.java │ │ │ │ └── memory/ │ │ │ │ ├── MemoryPressureCallback.java │ │ │ │ └── MemoryPressureLevel.java │ │ │ └── jni/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ └── jni_configs.yml │ │ ├── darwin/ │ │ │ ├── BUILD.gn │ │ │ ├── LynxBaseDefines.h │ │ │ ├── LynxBaseEnv.h │ │ │ ├── LynxBaseEnv.mm │ │ │ ├── log/ │ │ │ │ ├── LynxLog.h │ │ │ │ └── LynxLog.mm │ │ │ └── trace/ │ │ │ ├── LynxBaseTrace.h │ │ │ └── LynxBaseTrace.mm │ │ ├── harmony/ │ │ │ ├── .gitignore │ │ │ ├── .ohpmignore │ │ │ ├── BUILD.gn │ │ │ ├── Index.ets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build-profile.json5 │ │ │ ├── consumer-rules.txt │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ ├── cpp/ │ │ │ │ ├── entry.cc │ │ │ │ └── types/ │ │ │ │ └── liblynxbase/ │ │ │ │ ├── index.d.ts │ │ │ │ └── oh-package.json5 │ │ │ └── main/ │ │ │ ├── ets/ │ │ │ │ ├── Index.ets │ │ │ │ ├── LynxBaseEnv.ets │ │ │ │ ├── LynxBaseTrace.ets │ │ │ │ ├── log/ │ │ │ │ │ └── LynxLog.ets │ │ │ │ └── service/ │ │ │ │ ├── IBaseServiceProvider.ets │ │ │ │ ├── ILynxBaseLogService.ets │ │ │ │ ├── ILynxBaseTraceService.ets │ │ │ │ └── LynxBaseServiceCenter.ets │ │ │ └── module.json5 │ │ └── windows/ │ │ ├── BUILD.gn │ │ ├── lynx_base_env.cc │ │ └── lynx_base_env.h │ ├── src/ │ │ ├── BUILD.gn │ │ ├── algorithm_unittest.cc │ │ ├── auto_create_optional_unittest.cc │ │ ├── auto_reset_unittest.cc │ │ ├── base.gni │ │ ├── base_trace/ │ │ │ ├── base_trace_event_def.h │ │ │ ├── trace_android.cc │ │ │ ├── trace_event.h │ │ │ ├── trace_event_utils.cc │ │ │ ├── trace_harmony.cc │ │ │ └── trace_harmony.h │ │ ├── boost/ │ │ │ └── unordered_unittest.cc │ │ ├── bundled_optional_unittest.cc │ │ ├── closure_unittest.cc │ │ ├── concurrent_queue_unittest.cc │ │ ├── datauri_utils.cc │ │ ├── datauri_utils_unittest.cc │ │ ├── debug/ │ │ │ ├── backtrace.cc │ │ │ ├── lynx_error.cc │ │ │ └── lynx_error_unittest.cc │ │ ├── expected_unittest.cc │ │ ├── file_utils.cc │ │ ├── file_utils_unittest.cc │ │ ├── flex_optional_unittest.cc │ │ ├── fml/ │ │ │ ├── LICENSE │ │ │ ├── concurrent_message_loop.cc │ │ │ ├── cpu_affinity.cc │ │ │ ├── cpu_affinity_unittests.cc │ │ │ ├── hash_combine_unittests.cc │ │ │ ├── memory/ │ │ │ │ ├── ref_counted_unittest.cc │ │ │ │ ├── task_runner_checker.cc │ │ │ │ ├── task_runner_checker_unittest.cc │ │ │ │ └── weak_ptr_unittest.cc │ │ │ ├── message_loop.cc │ │ │ ├── message_loop_impl.cc │ │ │ ├── message_loop_impl_unittests.cc │ │ │ ├── message_loop_task_queues.cc │ │ │ ├── message_loop_task_queues_merge_unmerge_unittests.cc │ │ │ ├── message_loop_task_queues_unittests.cc │ │ │ ├── message_loop_unittests.cc │ │ │ ├── platform/ │ │ │ │ ├── android/ │ │ │ │ │ ├── cpu_affinity.cc │ │ │ │ │ ├── message_loop_android.cc │ │ │ │ │ ├── message_loop_android_ndk.cc │ │ │ │ │ └── thread_config_setter_android.cc │ │ │ │ ├── darwin/ │ │ │ │ │ ├── cf_utils_unittests.mm │ │ │ │ │ ├── message_loop_darwin.mm │ │ │ │ │ ├── thread_config_setter_darwin.mm │ │ │ │ │ └── thread_name_setter_darwin.cc │ │ │ │ ├── harmony/ │ │ │ │ │ └── message_loop_harmony.cc │ │ │ │ ├── linux/ │ │ │ │ │ ├── message_loop_linux.cc │ │ │ │ │ └── timerfd.cc │ │ │ │ ├── posix/ │ │ │ │ │ └── thread_name_setter_posix.cc │ │ │ │ └── win/ │ │ │ │ ├── message_loop_win.cc │ │ │ │ ├── task_runner_win32.cc │ │ │ │ ├── task_runner_win32_window.cc │ │ │ │ └── thread_name_setter_win.cc │ │ │ ├── raster_thread_merger.cc │ │ │ ├── raster_thread_merger_unittests.cc │ │ │ ├── shared_thread_merger.cc │ │ │ ├── synchronization/ │ │ │ │ ├── count_down_latch.cc │ │ │ │ ├── count_down_latch_unittests.cc │ │ │ │ ├── semaphore.cc │ │ │ │ ├── semaphore_unittest.cc │ │ │ │ ├── shared_mutex_posix.cc │ │ │ │ ├── shared_mutex_std.cc │ │ │ │ ├── sync_switch.cc │ │ │ │ ├── sync_switch_unittest.cc │ │ │ │ ├── waitable_event.cc │ │ │ │ └── waitable_event_unittest.cc │ │ │ ├── task_runner.cc │ │ │ ├── task_runner_unittests.cc │ │ │ ├── task_source.cc │ │ │ ├── task_source_unittests.cc │ │ │ ├── thread.cc │ │ │ ├── thread_host.cc │ │ │ ├── thread_name_setter.h │ │ │ ├── thread_unittests.cc │ │ │ ├── time/ │ │ │ │ ├── chrono_timestamp_provider.cc │ │ │ │ ├── time_delta_unittest.cc │ │ │ │ ├── time_point.cc │ │ │ │ ├── time_point_unittest.cc │ │ │ │ ├── time_unittest.cc │ │ │ │ └── timer.cc │ │ │ └── unique_fd.cc │ │ ├── geometry_unittest.cc │ │ ├── hybrid_map_unittest.cc │ │ ├── linked_hash_map_unittest.cc │ │ ├── log/ │ │ │ ├── alog_wrapper.cc │ │ │ ├── log_stream.cc │ │ │ ├── log_stream_unittest.cc │ │ │ ├── logging.cc │ │ │ ├── logging_android.cc │ │ │ ├── logging_base.cc │ │ │ ├── logging_darwin.mm │ │ │ ├── logging_harmony.cc │ │ │ └── logging_harmony.h │ │ ├── lynx_actor_unittest.cc │ │ ├── md5.cc │ │ ├── path_utils_unittest.cc │ │ ├── platform/ │ │ │ ├── android/ │ │ │ │ ├── java_type.cc │ │ │ │ ├── jni_convert_helper.cc │ │ │ │ ├── jni_utils.cc │ │ │ │ └── scoped_java_ref.cc │ │ │ └── harmony/ │ │ │ ├── harmony_vsync_manager.cc │ │ │ └── napi_util.cc │ │ ├── sorted_for_each_unittest.cc │ │ ├── string/ │ │ │ ├── quickjs_dtoa.c │ │ │ ├── string_conversion_win.cc │ │ │ ├── string_number_convert.cc │ │ │ ├── string_number_convert_unittest.cc │ │ │ ├── string_utils.cc │ │ │ └── string_utils_unittest.cc │ │ ├── thread/ │ │ │ ├── timed_task.cc │ │ │ └── timed_task_unittest.cc │ │ ├── timer/ │ │ │ ├── time_utils.cc │ │ │ └── time_utils_unittest.cc │ │ ├── to_underlying_unittest.cc │ │ ├── type_traits_addon_unittest.cc │ │ ├── value/ │ │ │ ├── base_string.cc │ │ │ ├── base_value.cc │ │ │ ├── base_value_print.cc │ │ │ ├── base_value_unittest.cc │ │ │ ├── byte_array.cc │ │ │ ├── lynx_value_api_impl.cc │ │ │ ├── lynx_value_extended_empty.cc │ │ │ ├── path_parser.cc │ │ │ ├── path_parser_unittest.cc │ │ │ └── table.cc │ │ ├── vector.cc │ │ ├── vector_unittest.cc │ │ └── version_unittest.cc │ └── trace/ │ ├── README.md │ ├── android/ │ │ ├── .gitignore │ │ ├── BUILD.gn │ │ ├── CMakeLists.txt │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── android_test/ │ │ │ └── java/ │ │ │ ├── AndroidManifest.xml │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ └── trace/ │ │ │ └── TraceControllerTest.java │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ ├── tasm/ │ │ │ │ └── base/ │ │ │ │ ├── LynxTraceEnv.java │ │ │ │ ├── TraceController.java │ │ │ │ └── TraceEvent.java │ │ │ └── trace/ │ │ │ └── CalledByNative.java │ │ └── jni/ │ │ ├── .gitignore │ │ ├── BUILD.gn │ │ └── jni_configs.yml │ ├── darwin/ │ │ ├── .gitignore │ │ ├── BUILD.gn │ │ ├── CPPLINT.cfg │ │ ├── LynxTraceController.h │ │ ├── LynxTraceController.mm │ │ ├── LynxTraceController_mock.mm │ │ ├── LynxTraceEvent.h │ │ ├── LynxTraceEvent.mm │ │ ├── LynxTraceEventWrapper.h │ │ ├── LynxTraceEventWrapper.mm │ │ └── trace-prefix.h │ └── native/ │ ├── BUILD.gn │ ├── hook_systrace/ │ │ ├── cpu_info_trace.cc │ │ ├── cpu_info_trace.h │ │ ├── hook_system_trace.h │ │ ├── hook_system_trace_android.cc │ │ ├── hook_system_trace_default.cc │ │ ├── hook_system_trace_harmony.cc │ │ └── hook_systrace.gni │ ├── instance_counter_trace.cc │ ├── instance_counter_trace.h │ ├── internal_trace_category.h │ ├── platform/ │ │ ├── android/ │ │ │ ├── trace_controller_android.cc │ │ │ ├── trace_controller_android.h │ │ │ ├── trace_controller_android_mock.cc │ │ │ ├── trace_event_android_mock.cc │ │ │ ├── trace_event_android_perfetto.cc │ │ │ └── trace_event_android_systrace.cc │ │ ├── darwin/ │ │ │ ├── trace_controller_darwin.h │ │ │ └── trace_controller_darwin.mm │ │ ├── harmony/ │ │ │ ├── trace_controller_delegate_harmony.cc │ │ │ ├── trace_controller_delegate_harmony.h │ │ │ ├── trace_controller_harmony.cc │ │ │ ├── trace_controller_harmony.h │ │ │ └── trace_event_utils_systrace_harmony.cc │ │ ├── platform.gni │ │ └── windows/ │ │ ├── trace_controller_win.cc │ │ ├── trace_controller_win.h │ │ └── trace_controller_win_mock.cc │ ├── trace_controller.cc │ ├── trace_controller.h │ ├── trace_controller_impl.cc │ ├── trace_controller_impl.h │ ├── trace_controller_unittest.cc │ ├── trace_defines.h │ ├── trace_event.h │ ├── trace_event_export_symbol.cc │ ├── trace_event_export_symbol.h │ ├── trace_event_unittest.cc │ ├── trace_event_utils_perfetto.h │ ├── trace_event_utils_perfetto_mock.cc │ ├── trace_event_utils_systrace.h │ ├── trace_event_utils_systrace_android.cc │ ├── trace_event_utils_systrace_default.cc │ ├── trace_export.h │ ├── track_event_wrapper.cc │ ├── track_event_wrapper.h │ └── track_event_wrapper_mock.cc ├── build_overrides/ │ ├── android.gni │ ├── angle.gni │ ├── bindings_files.gni │ ├── build.gni │ ├── codec_files.gni │ ├── darwin.gni │ ├── fml.gni │ ├── glslang.gni │ ├── oliver.gni │ ├── renderer_utils_files.gni │ ├── resource_file.gni │ ├── services_files.gni │ ├── spirv_tools.gni │ ├── swiftshader.gni │ ├── vulkan_headers.gni │ ├── vulkan_loader.gni │ ├── vulkan_tools.gni │ ├── wayland.gni │ └── windows.gni ├── clay/ │ ├── BUILD.gn │ ├── LICENSE │ ├── LICENSE.flutter │ ├── README.md │ ├── assets/ │ │ ├── BUILD.gn │ │ ├── asset_manager.cc │ │ ├── asset_manager.h │ │ ├── asset_resolver.h │ │ ├── directory_asset_bundle.cc │ │ └── directory_asset_bundle.h │ ├── build/ │ │ ├── concurrent_jobs.gni │ │ ├── copy_info_plist.py │ │ ├── generate_coverage.py │ │ ├── get_concurrent_jobs.py │ │ ├── git_revision.py │ │ ├── zip.py │ │ └── zip_bundle.gni │ ├── common/ │ │ ├── BUILD.gn │ │ ├── config.gni │ │ ├── constants.h │ │ ├── element_id.cc │ │ ├── element_id.h │ │ ├── exported_symbols.sym │ │ ├── exported_symbols_mac.sym │ │ ├── graphics/ │ │ │ ├── BUILD.gn │ │ │ ├── drawable_image.cc │ │ │ ├── drawable_image.h │ │ │ ├── gl/ │ │ │ │ ├── gl_api.h │ │ │ │ ├── gl_api_common.cc │ │ │ │ ├── gl_api_common.h │ │ │ │ ├── gl_api_windows.cc │ │ │ │ ├── gl_api_windows.h │ │ │ │ ├── gl_pipeline_helper.cc │ │ │ │ ├── gl_pipeline_helper.h │ │ │ │ ├── gl_shader_program.cc │ │ │ │ ├── gl_shader_program.h │ │ │ │ ├── scoped_framebuffer_binder.cc │ │ │ │ ├── scoped_framebuffer_binder.h │ │ │ │ ├── scoped_texture_binder.cc │ │ │ │ └── scoped_texture_binder.h │ │ │ ├── gl_context_switch.cc │ │ │ ├── gl_context_switch.h │ │ │ ├── graphic_meminfo.h │ │ │ ├── msaa_sample_count.h │ │ │ ├── persistent_cache.cc │ │ │ ├── persistent_cache.h │ │ │ ├── screenshot.h │ │ │ ├── shared_drawable_image.cc │ │ │ ├── shared_drawable_image.h │ │ │ ├── shared_image_external_bitmap.cc │ │ │ ├── shared_image_external_bitmap.h │ │ │ ├── shared_image_external_texture.cc │ │ │ └── shared_image_external_texture.h │ │ ├── recyclable.h │ │ ├── service/ │ │ │ ├── BUILD.gn │ │ │ ├── service.cc │ │ │ ├── service.h │ │ │ ├── service_manager.cc │ │ │ ├── service_manager.h │ │ │ └── service_unittests.cc │ │ ├── settings.cc │ │ ├── settings.h │ │ ├── sha1.cc │ │ ├── sha1.h │ │ ├── sha1_include.cc │ │ ├── sys_info.cc │ │ ├── sys_info.h │ │ ├── task_runners.cc │ │ ├── task_runners.h │ │ ├── thread_host.cc │ │ ├── thread_host.h │ │ ├── thread_host_holder.cc │ │ └── thread_host_holder.h │ ├── example/ │ │ └── glfw/ │ │ ├── BUILD.gn │ │ ├── README.md │ │ ├── clay_glfw.cc │ │ ├── clay_logo.h │ │ ├── custom_task_runner.cc │ │ ├── custom_task_runner.h │ │ ├── event_loop.cc │ │ ├── event_loop.h │ │ ├── platform_view_impl.h │ │ ├── shell_impl.cc │ │ ├── shell_impl.h │ │ ├── surface_gl_impl.h │ │ ├── thread_host_holder.cc │ │ └── thread_host_holder.h │ ├── flow/ │ │ ├── BUILD.gn │ │ ├── animation/ │ │ │ ├── animation_host.cc │ │ │ ├── animation_host.h │ │ │ ├── animation_mutator.cc │ │ │ ├── animation_mutator.h │ │ │ ├── scroll_offset_animation.cc │ │ │ ├── scroll_offset_animation.h │ │ │ └── scroll_offset_animation_unittests.cc │ │ ├── compositor/ │ │ │ ├── compositor_state.cc │ │ │ ├── compositor_state.h │ │ │ ├── compositor_state_unittests.cc │ │ │ └── overlay_views.h │ │ ├── compositor_context.cc │ │ ├── compositor_context.h │ │ ├── diff_context.cc │ │ ├── diff_context.h │ │ ├── diff_context_unittests.cc │ │ ├── drawable_image_unittests.cc │ │ ├── embedded_view_params_unittests.cc │ │ ├── embedded_views.cc │ │ ├── embedded_views.h │ │ ├── flow_rendering_backend.h │ │ ├── flow_run_all_unittests.cc │ │ ├── flow_test_utils.cc │ │ ├── flow_test_utils.h │ │ ├── frame_timings.cc │ │ ├── frame_timings.h │ │ ├── frame_timings_recorder_unittests.cc │ │ ├── gl_context_switch_unittests.cc │ │ ├── layer_snapshot_store.cc │ │ ├── layer_snapshot_store.h │ │ ├── layers/ │ │ │ ├── backdrop_filter_layer.cc │ │ │ ├── backdrop_filter_layer.h │ │ │ ├── backdrop_filter_layer_unittests.cc │ │ │ ├── cacheable_layer.cc │ │ │ ├── cacheable_layer.h │ │ │ ├── checkerboard_layertree_unittests.cc │ │ │ ├── clip_path_layer.cc │ │ │ ├── clip_path_layer.h │ │ │ ├── clip_path_layer_unittests.cc │ │ │ ├── clip_rect_layer.cc │ │ │ ├── clip_rect_layer.h │ │ │ ├── clip_rect_layer_unittests.cc │ │ │ ├── clip_rrect_layer.cc │ │ │ ├── clip_rrect_layer.h │ │ │ ├── clip_rrect_layer_unittests.cc │ │ │ ├── clip_shape_layer.h │ │ │ ├── color_filter_layer.cc │ │ │ ├── color_filter_layer.h │ │ │ ├── color_filter_layer_unittests.cc │ │ │ ├── container_layer.cc │ │ │ ├── container_layer.h │ │ │ ├── container_layer_unittests.cc │ │ │ ├── drawable_image_layer.cc │ │ │ ├── drawable_image_layer.h │ │ │ ├── drawable_image_layer_unittests.cc │ │ │ ├── external_view_layer.cc │ │ │ ├── external_view_layer.h │ │ │ ├── image_filter_layer.cc │ │ │ ├── image_filter_layer.h │ │ │ ├── image_filter_layer_unittests.cc │ │ │ ├── layer.cc │ │ │ ├── layer.h │ │ │ ├── layer_raster_cache_item.cc │ │ │ ├── layer_raster_cache_item.h │ │ │ ├── layer_state_stack.cc │ │ │ ├── layer_state_stack.h │ │ │ ├── layer_state_stack_unittests.cc │ │ │ ├── layer_tree.cc │ │ │ ├── layer_tree.h │ │ │ ├── layer_tree_unittests.cc │ │ │ ├── offscreen_surface.cc │ │ │ ├── offscreen_surface.h │ │ │ ├── offscreen_surface_unittests.cc │ │ │ ├── opacity_layer.cc │ │ │ ├── opacity_layer.h │ │ │ ├── opacity_layer_unittests.cc │ │ │ ├── performance_overlay_layer.cc │ │ │ ├── performance_overlay_layer.h │ │ │ ├── performance_overlay_layer_unittests.cc │ │ │ ├── physical_shape_layer.cc │ │ │ ├── physical_shape_layer.h │ │ │ ├── physical_shape_layer_unittests.cc │ │ │ ├── picture_complexity.cc │ │ │ ├── picture_complexity.h │ │ │ ├── picture_complexity_calculator_skity.cc │ │ │ ├── picture_complexity_calculator_skity.h │ │ │ ├── picture_complexity_gl.cc │ │ │ ├── picture_complexity_gl.h │ │ │ ├── picture_complexity_helper_skia.h │ │ │ ├── picture_complexity_helper_skity.h │ │ │ ├── picture_complexity_metal.cc │ │ │ ├── picture_complexity_metal.h │ │ │ ├── picture_layer.cc │ │ │ ├── picture_layer.h │ │ │ ├── picture_raster_cache_item.cc │ │ │ ├── picture_raster_cache_item.h │ │ │ ├── platform_view_layer.cc │ │ │ ├── platform_view_layer.h │ │ │ ├── platform_view_layer_unittests.cc │ │ │ ├── punch_hole_layer.cc │ │ │ ├── punch_hole_layer.h │ │ │ ├── punch_hole_layer_unittests.cc │ │ │ ├── shader_mask_layer.cc │ │ │ ├── shader_mask_layer.h │ │ │ ├── shader_mask_layer_unittests.cc │ │ │ ├── transform_layer.cc │ │ │ ├── transform_layer.h │ │ │ └── transform_layer_unittests.cc │ │ ├── matrix_clip_tracker.cc │ │ ├── matrix_clip_tracker.h │ │ ├── matrix_clip_tracker_unittests.cc │ │ ├── mutators_stack_unittests.cc │ │ ├── paint_region.cc │ │ ├── paint_region.h │ │ ├── paint_utils.cc │ │ ├── paint_utils.h │ │ ├── raster_cache.cc │ │ ├── raster_cache.h │ │ ├── raster_cache_item.h │ │ ├── raster_cache_key.cc │ │ ├── raster_cache_key.h │ │ ├── raster_cache_unittests.cc │ │ ├── raster_cache_util.cc │ │ ├── raster_cache_util.h │ │ ├── rtree.cc │ │ ├── rtree.h │ │ ├── rtree_unittests.cc │ │ ├── services/ │ │ │ └── animation_event_service.h │ │ ├── stopwatch.cc │ │ ├── stopwatch.h │ │ ├── stopwatch_unittests.cc │ │ ├── surface.cc │ │ ├── surface.h │ │ ├── surface_frame.cc │ │ ├── surface_frame.h │ │ ├── surface_frame_unittests.cc │ │ ├── testing/ │ │ │ ├── diff_context_test.cc │ │ │ ├── diff_context_test.h │ │ │ ├── gl_context_switch_test.cc │ │ │ ├── gl_context_switch_test.h │ │ │ ├── gpu_object_layer_test.cc │ │ │ ├── gpu_object_layer_test.h │ │ │ ├── layer_test.h │ │ │ ├── mock_drawable_image.cc │ │ │ ├── mock_drawable_image.h │ │ │ ├── mock_drawable_image_unittests.cc │ │ │ ├── mock_layer.cc │ │ │ ├── mock_layer.h │ │ │ ├── mock_layer_unittests.cc │ │ │ ├── mock_raster_cache.cc │ │ │ ├── mock_raster_cache.h │ │ │ ├── mock_shared_image_backing.cc │ │ │ ├── mock_shared_image_backing.h │ │ │ ├── mock_shared_image_unittests.cc │ │ │ ├── picture_complexity_unittests.cc │ │ │ ├── picture_test_utils.cc │ │ │ └── picture_test_utils.h │ │ ├── view_slicer.cc │ │ ├── view_slicer.h │ │ └── view_slicer_unittests.cc │ ├── fml/ │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ ├── ascii_trie.cc │ │ ├── ascii_trie.h │ │ ├── ascii_trie_unittests.cc │ │ ├── atomic_sequence_num.h │ │ ├── backtrace.cc │ │ ├── backtrace.h │ │ ├── backtrace_android.cc │ │ ├── backtrace_stub.cc │ │ ├── backtrace_unittests.cc │ │ ├── base32.cc │ │ ├── base32.h │ │ ├── base32_unittest.cc │ │ ├── base64.cc │ │ ├── base64.h │ │ ├── base64_unittests.cc │ │ ├── command_line.cc │ │ ├── command_line.h │ │ ├── command_line_unittest.cc │ │ ├── container.h │ │ ├── container_unittests.cc │ │ ├── endianness.cc │ │ ├── endianness.h │ │ ├── endianness_unittests.cc │ │ ├── file.cc │ │ ├── file.h │ │ ├── file_unittest.cc │ │ ├── fml.gni │ │ ├── hex_codec.cc │ │ ├── hex_codec.h │ │ ├── hex_codec_unittest.cc │ │ ├── icu_util.cc │ │ ├── icu_util.h │ │ ├── log_level.h │ │ ├── log_settings.cc │ │ ├── log_settings.h │ │ ├── logging.cc │ │ ├── logging.h │ │ ├── logging_unittests.cc │ │ ├── mapping.cc │ │ ├── mapping.h │ │ ├── mapping_unittests.cc │ │ ├── math.h │ │ ├── math_unittests.cc │ │ ├── native_library.h │ │ ├── paths.cc │ │ ├── paths.h │ │ ├── paths_unittests.cc │ │ ├── platform/ │ │ │ ├── android/ │ │ │ │ ├── CPPLINT.cfg │ │ │ │ ├── jni_android.cc │ │ │ │ ├── jni_android.h │ │ │ │ ├── jni_weak_ref.cc │ │ │ │ ├── jni_weak_ref.h │ │ │ │ ├── paths_android.cc │ │ │ │ └── paths_android.h │ │ │ ├── darwin/ │ │ │ │ ├── cf_utils.cc │ │ │ │ ├── cf_utils.h │ │ │ │ ├── cf_utils_unittests.mm │ │ │ │ ├── paths_darwin.mm │ │ │ │ ├── platform_version.h │ │ │ │ ├── platform_version.mm │ │ │ │ ├── scoped_block.h │ │ │ │ ├── scoped_block.mm │ │ │ │ ├── scoped_nsobject.h │ │ │ │ ├── scoped_nsobject.mm │ │ │ │ ├── string_range_sanitization.h │ │ │ │ ├── string_range_sanitization.mm │ │ │ │ └── string_range_sanitization_unittests.mm │ │ │ ├── harmony/ │ │ │ │ ├── paths_harmony.cc │ │ │ │ └── paths_harmony.h │ │ │ ├── linux/ │ │ │ │ ├── paths_linux.cc │ │ │ │ ├── proc_maps_linux.cc │ │ │ │ └── proc_maps_linux.h │ │ │ ├── posix/ │ │ │ │ ├── command_line_posix.cc │ │ │ │ ├── file_posix.cc │ │ │ │ ├── mapping_posix.cc │ │ │ │ ├── native_library_posix.cc │ │ │ │ ├── paths_posix.cc │ │ │ │ └── posix_wrappers_posix.cc │ │ │ └── win/ │ │ │ ├── command_line_win.cc │ │ │ ├── errors_win.cc │ │ │ ├── errors_win.h │ │ │ ├── file_win.cc │ │ │ ├── file_win_unittests.cc │ │ │ ├── mapping_win.cc │ │ │ ├── native_library_win.cc │ │ │ ├── paths_win.cc │ │ │ ├── posix_wrappers_win.cc │ │ │ ├── wstring_conversion.cc │ │ │ ├── wstring_conversion.h │ │ │ └── wstring_conversion_unittests.cc │ │ ├── posix_wrappers.h │ │ ├── size.h │ │ └── status.h │ ├── gfx/ │ │ ├── BUILD.gn │ │ ├── animation/ │ │ │ ├── accelerate_decelerate_interpolator.cc │ │ │ ├── accelerate_decelerate_interpolator.h │ │ │ ├── accelerate_interpolator.cc │ │ │ ├── accelerate_interpolator.h │ │ │ ├── animation_data.cc │ │ │ ├── animation_data.h │ │ │ ├── animation_event_handler.h │ │ │ ├── animation_handler.cc │ │ │ ├── animation_handler.h │ │ │ ├── animation_handler_unittests.cc │ │ │ ├── animation_properties_util.h │ │ │ ├── animator.cc │ │ │ ├── animator.h │ │ │ ├── animator_listener.h │ │ │ ├── animator_listener_adapter.h │ │ │ ├── animator_target.h │ │ │ ├── anticipate_interpolator.cc │ │ │ ├── anticipate_interpolator.h │ │ │ ├── anticipate_overshoot_interpolator.cc │ │ │ ├── anticipate_overshoot_interpolator.h │ │ │ ├── bounce_animator.cc │ │ │ ├── bounce_animator.h │ │ │ ├── bounce_interpolator.cc │ │ │ ├── bounce_interpolator.h │ │ │ ├── build.gni │ │ │ ├── cubic_bezier_interpolator.cc │ │ │ ├── cubic_bezier_interpolator.h │ │ │ ├── cubic_bezier_interpolator_unittests.cc │ │ │ ├── cycle_interpolator.cc │ │ │ ├── cycle_interpolator.h │ │ │ ├── decelerate_interpolator.cc │ │ │ ├── decelerate_interpolator.h │ │ │ ├── dynamic_animator.cc │ │ │ ├── dynamic_animator.h │ │ │ ├── fling_animator.cc │ │ │ ├── fling_animator.h │ │ │ ├── interpolator.cc │ │ │ ├── interpolator.h │ │ │ ├── keyframe.cc │ │ │ ├── keyframe.h │ │ │ ├── keyframe_set.cc │ │ │ ├── keyframe_set.h │ │ │ ├── keyframes_manager.cc │ │ │ ├── keyframes_manager.h │ │ │ ├── lut_interpolator.cc │ │ │ ├── lut_interpolator.h │ │ │ ├── overshoot_interpolator.cc │ │ │ ├── overshoot_interpolator.h │ │ │ ├── path_interpolator.cc │ │ │ ├── path_interpolator.h │ │ │ ├── picture_animation_type.h │ │ │ ├── steps_interpolator.cc │ │ │ ├── steps_interpolator.h │ │ │ ├── timing_function_data.cc │ │ │ ├── timing_function_data.h │ │ │ ├── transition_data.cc │ │ │ ├── transition_data.h │ │ │ ├── transition_manager.cc │ │ │ ├── transition_manager.h │ │ │ ├── type_evaluator.h │ │ │ ├── value_animator.cc │ │ │ ├── value_animator.h │ │ │ ├── value_animator_unittests.cc │ │ │ ├── viscous_fluid_interpolator.cc │ │ │ └── viscous_fluid_interpolator.h │ │ ├── attributes.h │ │ ├── attributes_testing.h │ │ ├── comparable.h │ │ ├── geometry/ │ │ │ ├── axis.h │ │ │ ├── box_shadow_operations.cc │ │ │ ├── box_shadow_operations.h │ │ │ ├── box_shadow_value.h │ │ │ ├── build.gni │ │ │ ├── direction.h │ │ │ ├── filter_operations.cc │ │ │ ├── filter_operations.h │ │ │ ├── filter_value.h │ │ │ ├── float_point.cc │ │ │ ├── float_point.h │ │ │ ├── float_point3d.cc │ │ │ ├── float_point3d.h │ │ │ ├── float_rect.cc │ │ │ ├── float_rect.h │ │ │ ├── float_rounded_rect.cc │ │ │ ├── float_rounded_rect.h │ │ │ ├── float_size.h │ │ │ ├── float_vector2d.cc │ │ │ ├── float_vector2d.h │ │ │ ├── float_vector3d.cc │ │ │ ├── float_vector3d.h │ │ │ ├── math_util.h │ │ │ ├── path.cc │ │ │ ├── path.h │ │ │ ├── point.h │ │ │ ├── quaternion.cc │ │ │ ├── quaternion.h │ │ │ ├── rect.h │ │ │ ├── size.h │ │ │ ├── sticky_info.h │ │ │ ├── transform.cc │ │ │ ├── transform.h │ │ │ ├── transform_operation.cc │ │ │ ├── transform_operation.h │ │ │ ├── transform_operations.cc │ │ │ ├── transform_operations.h │ │ │ ├── transform_origin.h │ │ │ ├── transform_raw.h │ │ │ ├── transform_util.cc │ │ │ └── transform_util.h │ │ ├── gfx_rendering_backend.h │ │ ├── gfx_utils.cc │ │ ├── gfx_utils.h │ │ ├── gpu_object.h │ │ ├── gpu_object_unittests.cc │ │ ├── gpu_ref_object.h │ │ ├── graphics_canvas.cc │ │ ├── graphics_canvas.h │ │ ├── graphics_context.cc │ │ ├── graphics_context.h │ │ ├── graphics_isolate.cc │ │ ├── graphics_isolate.h │ │ ├── image/ │ │ │ ├── animated_image.cc │ │ │ ├── animated_image.h │ │ │ ├── base_image.cc │ │ │ ├── base_image.h │ │ │ ├── base_image_instance.cc │ │ │ ├── base_image_instance.h │ │ │ ├── build.gni │ │ │ ├── codec.h │ │ │ ├── decode_priority.h │ │ │ ├── decoding_image.cc │ │ │ ├── decoding_image.h │ │ │ ├── frame_info.h │ │ │ ├── graphics_image.cc │ │ │ ├── graphics_image.h │ │ │ ├── graphics_image_skia.cc │ │ │ ├── graphics_image_skia.h │ │ │ ├── graphics_image_skia_lazy.cc │ │ │ ├── graphics_image_skia_lazy.h │ │ │ ├── graphics_image_skity.cc │ │ │ ├── graphics_image_skity.h │ │ │ ├── graphics_image_skity_lazy.cc │ │ │ ├── graphics_image_skity_lazy.h │ │ │ ├── image.cc │ │ │ ├── image.h │ │ │ ├── image_data.h │ │ │ ├── image_data_cache.cc │ │ │ ├── image_data_cache.h │ │ │ ├── image_data_cache_unittests.cc │ │ │ ├── image_decoder.cc │ │ │ ├── image_decoder.h │ │ │ ├── image_descriptor.cc │ │ │ ├── image_descriptor.h │ │ │ ├── image_descriptor_platform.cc │ │ │ ├── image_descriptor_platform.h │ │ │ ├── image_descriptor_skia.cc │ │ │ ├── image_descriptor_skia.h │ │ │ ├── image_info.h │ │ │ ├── image_produce_context.h │ │ │ ├── image_producer.cc │ │ │ ├── image_producer.h │ │ │ ├── image_resource.cc │ │ │ ├── image_resource.h │ │ │ ├── image_resource_client.h │ │ │ ├── image_upload_manager.cc │ │ │ ├── image_upload_manager.h │ │ │ ├── multi_frame_codec.cc │ │ │ ├── multi_frame_codec.h │ │ │ ├── platform_image.h │ │ │ ├── single_frame_codec.cc │ │ │ ├── single_frame_codec.h │ │ │ ├── skimage_holder.cc │ │ │ ├── skimage_holder.h │ │ │ ├── static_image.cc │ │ │ ├── static_image.h │ │ │ ├── svg_image.cc │ │ │ ├── svg_image.h │ │ │ ├── svg_image_holder.cc │ │ │ └── svg_image_holder.h │ │ ├── paint.cc │ │ ├── paint.h │ │ ├── paint_decoding_image.h │ │ ├── paint_image.cc │ │ ├── paint_image.h │ │ ├── paint_image_skia.cc │ │ ├── paint_image_skia.h │ │ ├── paint_image_skia_lazy.cc │ │ ├── paint_image_skia_lazy.h │ │ ├── paint_image_skity.cc │ │ ├── paint_image_skity.h │ │ ├── paint_recorder.h │ │ ├── paint_recorder_skia.cc │ │ ├── paint_recorder_skity.cc │ │ ├── paint_unittests.cc │ │ ├── picture.cc │ │ ├── picture.h │ │ ├── pixel_helper.h │ │ ├── rendering_backend.h │ │ ├── scroll_direction.h │ │ ├── shared_image/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── android_hardwarebuffer_utils.cc │ │ │ │ ├── android_hardwarebuffer_utils.h │ │ │ │ ├── scoped_a_native_window.cc │ │ │ │ ├── scoped_a_native_window.h │ │ │ │ ├── scoped_java_surface.cc │ │ │ │ ├── scoped_java_surface.h │ │ │ │ ├── surface_texture.cc │ │ │ │ ├── surface_texture.h │ │ │ │ ├── surface_texture_listener.cc │ │ │ │ └── surface_texture_listener.h │ │ │ ├── android_egl_image_representation.cc │ │ │ ├── android_egl_image_representation.h │ │ │ ├── android_hardwarebuffer_image_backing.cc │ │ │ ├── android_hardwarebuffer_image_backing.h │ │ │ ├── android_surface_texture_image_backing.cc │ │ │ ├── android_surface_texture_image_backing.h │ │ │ ├── angle_d3d_image_representation.cc │ │ │ ├── angle_d3d_image_representation.h │ │ │ ├── angle_software_shm_image_backing.cc │ │ │ ├── angle_software_shm_image_backing.h │ │ │ ├── angle_sw_shm_image_representation.cc │ │ │ ├── angle_sw_shm_image_representation.h │ │ │ ├── cgl_image_representation.h │ │ │ ├── cgl_image_representation.mm │ │ │ ├── cv_pixelbuffer_image_backing.h │ │ │ ├── cv_pixelbuffer_image_backing.mm │ │ │ ├── d3d9_texture_image_backing.cc │ │ │ ├── d3d9_texture_image_backing.h │ │ │ ├── d3d_image_representation.cc │ │ │ ├── d3d_image_representation.h │ │ │ ├── d3d_texture_image_backing.cc │ │ │ ├── d3d_texture_image_backing.h │ │ │ ├── eagl_image_representation.h │ │ │ ├── eagl_image_representation.mm │ │ │ ├── egl_image_backing.cc │ │ │ ├── egl_image_backing.h │ │ │ ├── epoxy_shm_image_backing.cc │ │ │ ├── epoxy_shm_image_backing.h │ │ │ ├── epoxy_shm_image_representation.cc │ │ │ ├── epoxy_shm_image_representation.h │ │ │ ├── fence_sync.h │ │ │ ├── iosurface_image_backing.h │ │ │ ├── iosurface_image_backing.mm │ │ │ ├── linux_shm_image_representation.cc │ │ │ ├── linux_shm_image_representation.h │ │ │ ├── mtl_fence_sync.h │ │ │ ├── mtl_fence_sync.mm │ │ │ ├── mtl_image_representation.h │ │ │ ├── mtl_image_representation.mm │ │ │ ├── native_image_egl_image_representation.cc │ │ │ ├── native_image_egl_image_representation.h │ │ │ ├── native_image_image_backing.cc │ │ │ ├── native_image_image_backing.h │ │ │ ├── shared_image_backing.cc │ │ │ ├── shared_image_backing.h │ │ │ ├── shared_image_representation.cc │ │ │ ├── shared_image_representation.h │ │ │ ├── shared_image_sink.cc │ │ │ ├── shared_image_sink.h │ │ │ ├── shared_image_sink_accessor.cc │ │ │ ├── shared_image_sink_accessor.h │ │ │ ├── skia_gl_image_representation.cc │ │ │ ├── skia_gl_image_representation.h │ │ │ ├── skia_mtl_image_representation.h │ │ │ ├── skia_mtl_image_representation.mm │ │ │ ├── skia_shm_image_representation.cc │ │ │ ├── skia_shm_image_representation.h │ │ │ ├── skity_gl_image_representation.cc │ │ │ ├── skity_gl_image_representation.h │ │ │ ├── skity_mtl_image_representation.h │ │ │ ├── skity_mtl_image_representation.mm │ │ │ ├── utils/ │ │ │ │ ├── angle_get_proc.cc │ │ │ │ ├── angle_get_proc.h │ │ │ │ ├── dxgi_utils.cc │ │ │ │ ├── dxgi_utils.h │ │ │ │ ├── functions_angle.cc │ │ │ │ ├── functions_angle.h │ │ │ │ ├── gl_texture_converter.cc │ │ │ │ ├── gl_texture_converter.h │ │ │ │ ├── image_utils.cc │ │ │ │ └── image_utils.h │ │ │ ├── vulkan_image_hardwarebuffer_representation.cc │ │ │ └── vulkan_image_hardwarebuffer_representation.h │ │ ├── skia/ │ │ │ ├── build.gni │ │ │ ├── picture_skia.cc │ │ │ ├── picture_skia.h │ │ │ ├── skia_canvas.cc │ │ │ ├── skia_canvas.h │ │ │ ├── skia_concurrent_executor.cc │ │ │ └── skia_concurrent_executor.h │ │ ├── skity/ │ │ │ ├── BUILD.gn │ │ │ ├── picture_skity.cc │ │ │ ├── picture_skity.h │ │ │ ├── rendering_material.cc │ │ │ ├── rendering_material.h │ │ │ ├── skity_auto_canvas_save.h │ │ │ ├── skity_canvas.cc │ │ │ ├── skity_canvas.h │ │ │ ├── skity_decoding_image.cc │ │ │ ├── skity_decoding_image.h │ │ │ ├── skity_image.cc │ │ │ ├── skity_image.h │ │ │ ├── skity_lazy_image_traveller.cc │ │ │ └── skity_lazy_image_traveller.h │ │ ├── skity_to_skia_utils.h │ │ ├── style/ │ │ │ ├── blend_mode.h │ │ │ ├── borders_data.cc │ │ │ ├── borders_data.h │ │ │ ├── box_data.h │ │ │ ├── build.gni │ │ │ ├── color.cc │ │ │ ├── color.h │ │ │ ├── color.tmpl │ │ │ ├── color_filter.cc │ │ │ ├── color_filter.h │ │ │ ├── color_filter_unittests.cc │ │ │ ├── color_gen.inl │ │ │ ├── color_source.cc │ │ │ ├── color_source.h │ │ │ ├── color_source_unittests.cc │ │ │ ├── color_unittests.cc │ │ │ ├── color_unittests_helper.h │ │ │ ├── enum_unittests.cc │ │ │ ├── image_filter.cc │ │ │ ├── image_filter.h │ │ │ ├── image_filter_unittests.cc │ │ │ ├── length.h │ │ │ ├── mask_filter.cc │ │ │ ├── mask_filter.h │ │ │ ├── mask_filter_unittests.cc │ │ │ ├── outline_data.cc │ │ │ ├── outline_data.h │ │ │ ├── path_effect.cc │ │ │ ├── path_effect.h │ │ │ ├── path_effect_unittests.cc │ │ │ ├── runtime_effect.cc │ │ │ ├── runtime_effect.h │ │ │ ├── sampling_options.h │ │ │ ├── shadow.h │ │ │ ├── tile_mode.h │ │ │ ├── vertices.cc │ │ │ ├── vertices.h │ │ │ └── vertices_unittests.cc │ │ ├── svg/ │ │ │ └── svg_dom.h │ │ ├── testing_utils.h │ │ ├── text_blob.cc │ │ ├── text_blob.h │ │ ├── text_blob_skia.cc │ │ ├── text_blob_skia.h │ │ ├── text_blob_skity.cc │ │ ├── text_blob_skity.h │ │ └── vulkan/ │ │ ├── build.gni │ │ ├── vulkan_buffer.cc │ │ ├── vulkan_buffer.h │ │ ├── vulkan_command_pool_helper.cc │ │ ├── vulkan_command_pool_helper.h │ │ ├── vulkan_fence_helper.cc │ │ ├── vulkan_fence_helper.h │ │ ├── vulkan_helper.cc │ │ ├── vulkan_helper.h │ │ ├── vulkan_image.cc │ │ └── vulkan_image.h │ ├── lynx_adaptor/ │ │ ├── BUILD.gn │ │ ├── base_def.h │ │ ├── clay_value.cc │ │ ├── clay_value.h │ │ ├── layout_context_clay.cc │ │ ├── layout_context_clay.h │ │ ├── lynx_event_dispatcher.cc │ │ ├── lynx_event_dispatcher.h │ │ ├── native_module/ │ │ │ ├── AGENTS.md │ │ │ ├── build.gni │ │ │ ├── lynx_config_module.cc │ │ │ ├── lynx_config_module.h │ │ │ ├── lynx_exposure_module.cc │ │ │ ├── lynx_exposure_module.h │ │ │ ├── lynx_focus_module.cc │ │ │ ├── lynx_focus_module.h │ │ │ ├── lynx_intersection_observer_module.cc │ │ │ ├── lynx_intersection_observer_module.h │ │ │ ├── lynx_module_base.cc │ │ │ ├── lynx_module_base.h │ │ │ ├── lynx_module_factory.cc │ │ │ ├── lynx_module_factory.h │ │ │ ├── lynx_text_info_module.cc │ │ │ ├── lynx_text_info_module.h │ │ │ ├── lynx_ui_method_module.cc │ │ │ ├── lynx_ui_method_module.h │ │ │ ├── lynx_websocket_module.cc │ │ │ ├── lynx_websocket_module.h │ │ │ └── spec/ │ │ │ └── lynx_ui_method.spec.md │ │ ├── native_platform_view.cc │ │ ├── native_platform_view.h │ │ ├── native_platform_view_mock.cc │ │ ├── native_view_service_desktop.cc │ │ ├── native_view_service_desktop.h │ │ ├── painting_context_clay.cc │ │ ├── painting_context_clay.h │ │ ├── perf_controller_clay.cc │ │ ├── perf_controller_clay.h │ │ ├── platform_extra_bundle_clay.h │ │ ├── prop_bundle_impl.cc │ │ ├── prop_bundle_impl.h │ │ ├── resource_loader_embedder.cc │ │ ├── resource_loader_embedder.h │ │ ├── ui_delegate_clay.cc │ │ ├── ui_delegate_clay.h │ │ ├── value_converter.cc │ │ └── value_converter.h │ ├── memory/ │ │ ├── BUILD.gn │ │ ├── discardable_memory.h │ │ ├── discardable_memory_allocator.h │ │ ├── discardable_memory_allocator_impl.cc │ │ ├── discardable_memory_allocator_impl.h │ │ ├── discardable_memory_allocator_unittests.cc │ │ ├── discardable_memory_impl.h │ │ ├── discardable_memory_impl_posix.cc │ │ ├── discardable_memory_impl_win.cc │ │ ├── discardable_memory_unittests.cc │ │ ├── heap_discardable_memory.h │ │ ├── heap_discardable_memory_unittests.cc │ │ ├── memory_pressure_listener.cc │ │ ├── memory_pressure_listener.h │ │ ├── memory_pressure_listener_unittests.cc │ │ ├── memory_pressure_monitor.cc │ │ ├── memory_pressure_monitor.h │ │ ├── system_memory_pressure_evaluator.cc │ │ ├── system_memory_pressure_evaluator.h │ │ ├── system_memory_pressure_evaluator_mac.cc │ │ ├── system_memory_pressure_evaluator_mac.h │ │ ├── system_memory_pressure_evaluator_mac_unittests.cc │ │ ├── system_memory_pressure_evaluator_win.cc │ │ ├── system_memory_pressure_evaluator_win.h │ │ └── system_memory_pressure_evaluator_win_unittests.cc │ ├── net/ │ │ ├── BUILD.gn │ │ ├── cache/ │ │ │ ├── build.gni │ │ │ ├── cache_stats.cc │ │ │ ├── cache_stats.h │ │ │ ├── net_disk_cache.cc │ │ │ ├── net_disk_cache.h │ │ │ ├── net_resource_cache_key.cc │ │ │ └── net_resource_cache_key.h │ │ ├── fetcher/ │ │ │ ├── build.gni │ │ │ ├── http_resource_fetcher.cc │ │ │ ├── http_resource_fetcher.h │ │ │ ├── http_resource_fetcher_factory.cc │ │ │ ├── http_resource_fetcher_factory.h │ │ │ ├── http_resource_fetcher_host.cc │ │ │ ├── http_resource_fetcher_host.h │ │ │ └── http_resource_fetcher_unittests.cc │ │ ├── loader/ │ │ │ ├── build.gni │ │ │ ├── data_image_loader.cc │ │ │ ├── data_image_loader.h │ │ │ ├── resource_loader.h │ │ │ ├── resource_loader_creator_service.h │ │ │ ├── resource_loader_factory.cc │ │ │ ├── resource_loader_factory.h │ │ │ ├── resource_loader_intercept.h │ │ │ └── resource_loader_platform.h │ │ ├── macros.h │ │ ├── net_loader_callback.cc │ │ ├── net_loader_callback.h │ │ ├── net_loader_manager.cc │ │ ├── net_loader_manager.h │ │ ├── net_loader_manager_unittests.cc │ │ ├── resource_type.h │ │ └── url/ │ │ ├── LICENSE.txt │ │ ├── README.chromium │ │ ├── README.md │ │ ├── build.gni │ │ ├── uri.cc │ │ ├── uri.h │ │ ├── url_helper.cc │ │ ├── url_helper.h │ │ ├── url_helper_test.cc │ │ ├── url_parse.cc │ │ ├── url_parse.h │ │ ├── url_parse_internal.cc │ │ └── url_parse_internal.h │ ├── public/ │ │ ├── clay.h │ │ ├── event_delegate.h │ │ ├── layout_delegate.h │ │ ├── style_types.h │ │ ├── ui_component_delegate.h │ │ └── value.h │ ├── shell/ │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ ├── context_options.cc │ │ │ ├── context_options.h │ │ │ ├── devtools_instrumentation.cc │ │ │ ├── devtools_instrumentation.h │ │ │ ├── display.cc │ │ │ ├── display.h │ │ │ ├── display_manager.cc │ │ │ ├── display_manager.h │ │ │ ├── engine.cc │ │ │ ├── engine.h │ │ │ ├── expired_on_task_runner.h │ │ │ ├── frame_timing_listener.h │ │ │ ├── one_shot_callback.h │ │ │ ├── output_surface.cc │ │ │ ├── output_surface.h │ │ │ ├── pipeline_timing_delegate.h │ │ │ ├── platform_view.cc │ │ │ ├── platform_view.h │ │ │ ├── pointer_data_dispatcher.cc │ │ │ ├── pointer_data_dispatcher.h │ │ │ ├── pointer_data_to_event.cc │ │ │ ├── pointer_data_to_event.h │ │ │ ├── rasterizer.cc │ │ │ ├── rasterizer.h │ │ │ ├── resource_cache_limit_calculator.cc │ │ │ ├── resource_cache_limit_calculator.h │ │ │ ├── scheduler/ │ │ │ │ ├── scheduler.cc │ │ │ │ ├── scheduler.h │ │ │ │ ├── scheduler_client.h │ │ │ │ ├── scheduler_state_machine.cc │ │ │ │ └── scheduler_state_machine.h │ │ │ ├── screenshot_utils.cc │ │ │ ├── screenshot_utils.h │ │ │ ├── scroll_fluency_monitor_delegate.h │ │ │ ├── serialization_callbacks.cc │ │ │ ├── serialization_callbacks.h │ │ │ ├── services/ │ │ │ │ ├── animation_event_service_impl.cc │ │ │ │ ├── animation_event_service_impl.h │ │ │ │ ├── animator_info_service.cc │ │ │ │ ├── animator_info_service.h │ │ │ │ ├── compositor/ │ │ │ │ │ ├── compositor_service.cc │ │ │ │ │ ├── compositor_service.h │ │ │ │ │ ├── platform_overlay_service.h │ │ │ │ │ ├── platform_overlay_service_fallback.cc │ │ │ │ │ ├── presenter_service.cc │ │ │ │ │ ├── presenter_service.h │ │ │ │ │ └── presenter_service_fallback.cc │ │ │ │ ├── drag_drop_service.cc │ │ │ │ ├── drag_drop_service.h │ │ │ │ ├── gesture_mediate_service.h │ │ │ │ ├── initialize_service.cc │ │ │ │ ├── initialize_service.h │ │ │ │ ├── instrumentation_service.cc │ │ │ │ ├── instrumentation_service.h │ │ │ │ ├── platform_const_service.cc │ │ │ │ ├── platform_const_service.h │ │ │ │ ├── raster_frame_service.cc │ │ │ │ ├── raster_frame_service.h │ │ │ │ ├── rasterizer_service.cc │ │ │ │ ├── rasterizer_service.h │ │ │ │ ├── screenshot_encoder.cc │ │ │ │ ├── screenshot_encoder.h │ │ │ │ ├── screenshot_service.cc │ │ │ │ ├── screenshot_service.h │ │ │ │ ├── sync_compositor_service.cc │ │ │ │ ├── sync_compositor_service.h │ │ │ │ ├── ui_frame_service.cc │ │ │ │ ├── ui_frame_service.h │ │ │ │ └── vsync_waiter_service.h │ │ │ ├── shell.cc │ │ │ ├── shell.h │ │ │ ├── shell_common_rendering_backend.h │ │ │ ├── skia_event_tracer_impl.cc │ │ │ ├── skia_event_tracer_impl.h │ │ │ ├── switches.cc │ │ │ ├── switches.h │ │ │ ├── variable_refresh_rate_display.cc │ │ │ ├── variable_refresh_rate_display.h │ │ │ ├── variable_refresh_rate_reporter.h │ │ │ ├── vsync_waiter.cc │ │ │ ├── vsync_waiter.h │ │ │ ├── vsync_waiter_fallback.cc │ │ │ ├── vsync_waiter_fallback.h │ │ │ ├── vsync_waiter_macos.h │ │ │ └── vsync_waiter_macos.mm │ │ ├── config.gni │ │ ├── gpu/ │ │ │ ├── BUILD.gn │ │ │ ├── gpu.gni │ │ │ ├── gpu_surface_gl_delegate.cc │ │ │ ├── gpu_surface_gl_delegate.h │ │ │ ├── gpu_surface_gl_skia.cc │ │ │ ├── gpu_surface_gl_skia.h │ │ │ ├── gpu_surface_gl_skity.cc │ │ │ ├── gpu_surface_gl_skity.h │ │ │ ├── gpu_surface_metal_delegate.cc │ │ │ ├── gpu_surface_metal_delegate.h │ │ │ ├── gpu_surface_metal_skia.h │ │ │ ├── gpu_surface_metal_skia.mm │ │ │ ├── gpu_surface_metal_skity.h │ │ │ ├── gpu_surface_metal_skity.mm │ │ │ ├── gpu_surface_software.cc │ │ │ ├── gpu_surface_software.h │ │ │ ├── gpu_surface_software_delegate.cc │ │ │ ├── gpu_surface_software_delegate.h │ │ │ ├── trace_gl_fuctions.cc │ │ │ └── trace_gl_fuctions.h │ │ ├── platform/ │ │ │ ├── common/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── engine_switches.cc │ │ │ │ ├── engine_switches.h │ │ │ │ ├── engine_switches_unittests.cc │ │ │ │ ├── path_utils.cc │ │ │ │ ├── path_utils.h │ │ │ │ ├── path_utils_unittests.cc │ │ │ │ ├── platform_provided_menu.h │ │ │ │ ├── text_editing_delta.cc │ │ │ │ ├── text_editing_delta.h │ │ │ │ ├── text_editing_delta_unittests.cc │ │ │ │ ├── text_input_model.cc │ │ │ │ ├── text_input_model.h │ │ │ │ ├── text_input_model_unittests.cc │ │ │ │ ├── text_range.h │ │ │ │ └── text_range_unittests.cc │ │ │ ├── darwin/ │ │ │ │ ├── CPPLINT.cfg │ │ │ │ ├── common/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── clay_service_manager_service_darwin.h │ │ │ │ │ ├── clay_service_manager_service_darwin.mm │ │ │ │ │ ├── framework/ │ │ │ │ │ │ ├── Headers/ │ │ │ │ │ │ │ ├── ClayServiceManager.h │ │ │ │ │ │ │ └── FlutterMacros.h │ │ │ │ │ │ └── Source/ │ │ │ │ │ │ └── ClayServiceManager.mm │ │ │ │ │ └── framework_shared.gni │ │ │ │ ├── graphics/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── FlutterDarwinContextMetalSkia.h │ │ │ │ │ ├── FlutterDarwinContextMetalSkia.mm │ │ │ │ │ ├── FlutterDarwinContextMetalSkity.h │ │ │ │ │ └── FlutterDarwinContextMetalSkity.mm │ │ │ │ └── macos/ │ │ │ │ ├── BUILD.gn │ │ │ │ └── framework/ │ │ │ │ ├── Headers/ │ │ │ │ │ ├── ClayMacOS.h │ │ │ │ │ ├── ClayViewProvider.h │ │ │ │ │ ├── FlutterAppDelegate.h │ │ │ │ │ ├── FlutterEngine.h │ │ │ │ │ ├── FlutterPlatformViews.h │ │ │ │ │ ├── FlutterPluginMacOS.h │ │ │ │ │ ├── FlutterPluginRegistrarMacOS.h │ │ │ │ │ ├── FlutterView.h │ │ │ │ │ └── FlutterViewController.h │ │ │ │ └── Source/ │ │ │ │ ├── ClayMouseCursorPlugin.h │ │ │ │ ├── ClayMouseCursorPlugin.mm │ │ │ │ ├── ClayViewProvider.mm │ │ │ │ ├── ClayViewProvider_Internal.h │ │ │ │ ├── FlutterAppDelegate.mm │ │ │ │ ├── FlutterEmbedderKeyResponder.h │ │ │ │ ├── FlutterEmbedderKeyResponder.mm │ │ │ │ ├── FlutterEngine.mm │ │ │ │ ├── FlutterEngine_Internal.h │ │ │ │ ├── FlutterKeyPrimaryResponder.h │ │ │ │ ├── FlutterKeyboardManager.h │ │ │ │ ├── FlutterKeyboardManager.mm │ │ │ │ ├── FlutterKeyboardViewDelegate.h │ │ │ │ ├── FlutterPlatformViewController.h │ │ │ │ ├── FlutterPlatformViewController.mm │ │ │ │ ├── FlutterRenderer.h │ │ │ │ ├── FlutterRenderer.mm │ │ │ │ ├── FlutterSurface.h │ │ │ │ ├── FlutterSurface.mm │ │ │ │ ├── FlutterSurfaceManager.h │ │ │ │ ├── FlutterSurfaceManager.mm │ │ │ │ ├── FlutterTextInputPlugin.h │ │ │ │ ├── FlutterTextInputPlugin.mm │ │ │ │ ├── FlutterThreadSynchronizer.h │ │ │ │ ├── FlutterThreadSynchronizer.mm │ │ │ │ ├── FlutterView.h │ │ │ │ ├── FlutterView.mm │ │ │ │ ├── FlutterViewController.mm │ │ │ │ ├── FlutterViewController_Internal.h │ │ │ │ ├── FlutterViewEngineProvider.h │ │ │ │ ├── FlutterViewEngineProvider.mm │ │ │ │ ├── FlutterViewProvider.h │ │ │ │ ├── KeyCodeMap.g.mm │ │ │ │ └── KeyCodeMap_Internal.h │ │ │ ├── embedder/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── embedder_engine.cc │ │ │ │ ├── embedder_engine.h │ │ │ │ ├── embedder_struct_macros.h │ │ │ │ ├── embedder_surface.cc │ │ │ │ ├── embedder_surface.h │ │ │ │ ├── embedder_surface_gl.cc │ │ │ │ ├── embedder_surface_gl.h │ │ │ │ ├── embedder_surface_metal.h │ │ │ │ ├── embedder_surface_metal.mm │ │ │ │ ├── embedder_surface_software.cc │ │ │ │ ├── embedder_surface_software.h │ │ │ │ ├── embedder_task_runner.cc │ │ │ │ ├── embedder_task_runner.h │ │ │ │ ├── embedder_thread_host.cc │ │ │ │ ├── embedder_thread_host.h │ │ │ │ ├── platform_view_embedder.cc │ │ │ │ ├── platform_view_embedder.h │ │ │ │ ├── platform_view_embedder_delegate.cc │ │ │ │ ├── platform_view_embedder_delegate.h │ │ │ │ ├── shell_platform_embedder_rendering_backend.h │ │ │ │ ├── vsync_waiter_embedder.cc │ │ │ │ └── vsync_waiter_embedder.h │ │ │ ├── headless/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── clay_event_loop.cc │ │ │ │ ├── clay_event_loop.h │ │ │ │ ├── clay_headless_engine.cc │ │ │ │ ├── clay_headless_engine.h │ │ │ │ ├── clay_headless_renderer.cc │ │ │ │ ├── clay_headless_renderer.h │ │ │ │ ├── gl/ │ │ │ │ │ ├── clay_headless_renderer_angle.cc │ │ │ │ │ ├── clay_headless_renderer_angle.h │ │ │ │ │ ├── clay_headless_renderer_cgl.cc │ │ │ │ │ ├── clay_headless_renderer_cgl.h │ │ │ │ │ ├── clay_headless_renderer_epoxy.cc │ │ │ │ │ ├── clay_headless_renderer_epoxy.h │ │ │ │ │ ├── clay_headless_renderer_gl.cc │ │ │ │ │ ├── clay_headless_renderer_gl.h │ │ │ │ │ ├── clay_headless_renderer_gles.cc │ │ │ │ │ ├── clay_headless_renderer_gles.h │ │ │ │ │ ├── clay_headless_renderer_host_gl.cc │ │ │ │ │ └── clay_headless_renderer_host_gl.h │ │ │ │ ├── metal/ │ │ │ │ │ ├── clay_headless_renderer_metal.h │ │ │ │ │ └── clay_headless_renderer_metal.mm │ │ │ │ └── public/ │ │ │ │ └── embdder_headless_delegate.h │ │ │ └── windows/ │ │ │ ├── BUILD.gn │ │ │ ├── cursor_handler.cc │ │ │ ├── cursor_handler.h │ │ │ ├── direct_manipulation.cc │ │ │ ├── direct_manipulation.h │ │ │ ├── dpi_utils.cc │ │ │ ├── dpi_utils.h │ │ │ ├── egl/ │ │ │ │ ├── child_window_win.cc │ │ │ │ ├── child_window_win.h │ │ │ │ ├── context.cc │ │ │ │ ├── context.h │ │ │ │ ├── direct_composition_surface.cc │ │ │ │ ├── direct_composition_surface.h │ │ │ │ ├── egl.cc │ │ │ │ ├── egl.h │ │ │ │ ├── manager.cc │ │ │ │ ├── manager.h │ │ │ │ ├── surface.cc │ │ │ │ ├── surface.h │ │ │ │ ├── window_surface.cc │ │ │ │ └── window_surface.h │ │ │ ├── flutter_key_map.g.cc │ │ │ ├── flutter_project_bundle.cc │ │ │ ├── flutter_project_bundle.h │ │ │ ├── flutter_window.cc │ │ │ ├── flutter_window.h │ │ │ ├── flutter_windows_engine.cc │ │ │ ├── flutter_windows_engine.h │ │ │ ├── flutter_windows_view.cc │ │ │ ├── flutter_windows_view.h │ │ │ ├── keyboard_handler_base.h │ │ │ ├── keyboard_key_embedder_handler.cc │ │ │ ├── keyboard_key_embedder_handler.h │ │ │ ├── keyboard_key_handler.cc │ │ │ ├── keyboard_key_handler.h │ │ │ ├── keyboard_manager.cc │ │ │ ├── keyboard_manager.h │ │ │ ├── keyboard_utils.cc │ │ │ ├── keyboard_utils.h │ │ │ ├── platform_handler.cc │ │ │ ├── platform_handler.h │ │ │ ├── sequential_id_generator.cc │ │ │ ├── sequential_id_generator.h │ │ │ ├── task_runner.cc │ │ │ ├── task_runner.h │ │ │ ├── task_runner_window.cc │ │ │ ├── task_runner_window.h │ │ │ ├── text_input_manager.cc │ │ │ ├── text_input_manager.h │ │ │ ├── text_input_plugin.cc │ │ │ ├── text_input_plugin.h │ │ │ ├── text_input_plugin_delegate.h │ │ │ ├── window.cc │ │ │ ├── window.h │ │ │ ├── window_binding_handler.h │ │ │ ├── window_binding_handler_delegate.h │ │ │ ├── window_mouse_drop_handler.cc │ │ │ ├── window_mouse_drop_handler.h │ │ │ ├── window_move_handler.cc │ │ │ ├── window_move_handler.h │ │ │ ├── window_proc_delegate_manager.cc │ │ │ ├── window_proc_delegate_manager.h │ │ │ ├── windows_proc_table.cc │ │ │ ├── windows_proc_table.h │ │ │ └── windowsx_shim.h │ │ └── profiling/ │ │ ├── BUILD.gn │ │ ├── sampling_profiler.cc │ │ ├── sampling_profiler.h │ │ └── sampling_profiler_unittest.cc │ ├── testing/ │ │ ├── .vpython │ │ ├── .vpython3 │ │ ├── BUILD.gn │ │ ├── CPPLINT.cfg │ │ ├── analysis_options.yaml │ │ ├── analyze_core_dump.sh │ │ ├── android_systrace_test.py │ │ ├── assertions.h │ │ ├── assertions_skia.cc │ │ ├── assertions_skia.h │ │ ├── canvas_test.h │ │ ├── debugger_detection.cc │ │ ├── debugger_detection.h │ │ ├── fixture_test.cc │ │ ├── fixture_test.h │ │ ├── lsan_suppressions.txt │ │ ├── mock_canvas.cc │ │ ├── mock_canvas.h │ │ ├── mock_canvas_unittests.cc │ │ ├── post_task_sync.cc │ │ ├── post_task_sync.h │ │ ├── run_all_unittests.cc │ │ ├── run_tests.py │ │ ├── run_tests.sh │ │ ├── sanitizer_suppressions.sh │ │ ├── test_gl_surface.cc │ │ ├── test_gl_surface.h │ │ ├── test_metal_context.h │ │ ├── test_metal_context.mm │ │ ├── test_metal_surface.cc │ │ ├── test_metal_surface.h │ │ ├── test_metal_surface_impl.h │ │ ├── test_metal_surface_impl.mm │ │ ├── test_metal_surface_unittests.cc │ │ ├── test_timeout_listener.cc │ │ ├── test_timeout_listener.h │ │ ├── testing.cc │ │ ├── testing.gni │ │ ├── testing.h │ │ ├── thread_test.cc │ │ ├── thread_test.h │ │ ├── tsan_suppressions.txt │ │ ├── ubsan_suppressions.txt │ │ └── xvfb.py │ ├── third_party/ │ │ ├── CPPLINT.cfg │ │ ├── skity_geometry/ │ │ │ ├── BUILD.gn │ │ │ ├── include/ │ │ │ │ └── skity/ │ │ │ │ ├── geometry/ │ │ │ │ │ ├── matrix.hpp │ │ │ │ │ ├── point.hpp │ │ │ │ │ ├── rect.hpp │ │ │ │ │ ├── rrect.hpp │ │ │ │ │ ├── scalar.hpp │ │ │ │ │ └── vector.hpp │ │ │ │ └── macros.hpp │ │ │ └── src/ │ │ │ └── geometry/ │ │ │ ├── glm_helper.hpp │ │ │ ├── math.hpp │ │ │ ├── matrix.cc │ │ │ ├── rect.cc │ │ │ └── rrect.cc │ │ └── txt/ │ │ ├── .clang-format │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ ├── PATENTS │ │ ├── benchmarks/ │ │ │ ├── paint_record_benchmarks.cc │ │ │ ├── paragraph_benchmarks.cc │ │ │ ├── paragraph_builder_benchmarks.cc │ │ │ ├── skparagraph_benchmarks.cc │ │ │ └── txt_run_all_benchmarks.cc │ │ ├── src/ │ │ │ ├── log/ │ │ │ │ ├── log.cc │ │ │ │ └── log.h │ │ │ ├── minikin/ │ │ │ │ ├── CmapCoverage.cpp │ │ │ │ ├── CmapCoverage.h │ │ │ │ ├── Emoji.cpp │ │ │ │ ├── Emoji.h │ │ │ │ ├── FontCollection.cpp │ │ │ │ ├── FontCollection.h │ │ │ │ ├── FontFamily.cpp │ │ │ │ ├── FontFamily.h │ │ │ │ ├── FontLanguage.cpp │ │ │ │ ├── FontLanguage.h │ │ │ │ ├── FontLanguageListCache.cpp │ │ │ │ ├── FontLanguageListCache.h │ │ │ │ ├── FontUtils.cpp │ │ │ │ ├── FontUtils.h │ │ │ │ ├── GraphemeBreak.cpp │ │ │ │ ├── GraphemeBreak.h │ │ │ │ ├── HbFontCache.cpp │ │ │ │ ├── HbFontCache.h │ │ │ │ ├── Hyphenator.cpp │ │ │ │ ├── Hyphenator.h │ │ │ │ ├── Layout.cpp │ │ │ │ ├── Layout.h │ │ │ │ ├── LayoutUtils.cpp │ │ │ │ ├── LayoutUtils.h │ │ │ │ ├── LineBreaker.cpp │ │ │ │ ├── LineBreaker.h │ │ │ │ ├── Measurement.cpp │ │ │ │ ├── Measurement.h │ │ │ │ ├── MinikinFont.cpp │ │ │ │ ├── MinikinFont.h │ │ │ │ ├── MinikinInternal.cpp │ │ │ │ ├── MinikinInternal.h │ │ │ │ ├── SparseBitSet.cpp │ │ │ │ ├── SparseBitSet.h │ │ │ │ ├── WordBreaker.cpp │ │ │ │ └── WordBreaker.h │ │ │ ├── skia/ │ │ │ │ ├── paragraph_builder_skia.cc │ │ │ │ ├── paragraph_builder_skia.h │ │ │ │ ├── paragraph_skia.cc │ │ │ │ └── paragraph_skia.h │ │ │ ├── tttext/ │ │ │ │ ├── paragraph_builder_tt_text.cc │ │ │ │ ├── paragraph_builder_tt_text.h │ │ │ │ ├── paragraph_tt_text.cc │ │ │ │ ├── paragraph_tt_text.h │ │ │ │ └── tttext_headers.h │ │ │ ├── txt/ │ │ │ │ ├── asset_font_manager_skia.cc │ │ │ │ ├── asset_font_manager_skia.h │ │ │ │ ├── asset_font_manager_skity.cc │ │ │ │ ├── asset_font_manager_skity.h │ │ │ │ ├── font_asset_provider.cc │ │ │ │ ├── font_asset_provider.h │ │ │ │ ├── font_asset_provider_skity.h │ │ │ │ ├── font_collection_skia.cc │ │ │ │ ├── font_collection_skia.h │ │ │ │ ├── font_collection_skity.cc │ │ │ │ ├── font_collection_skity.h │ │ │ │ ├── font_features.cc │ │ │ │ ├── font_features.h │ │ │ │ ├── font_skia.cc │ │ │ │ ├── font_skia.h │ │ │ │ ├── font_style.h │ │ │ │ ├── font_weight.h │ │ │ │ ├── line_metrics.h │ │ │ │ ├── paint_record.cc │ │ │ │ ├── paint_record.h │ │ │ │ ├── paragraph.h │ │ │ │ ├── paragraph_builder.cc │ │ │ │ ├── paragraph_builder.h │ │ │ │ ├── paragraph_builder_txt.cc │ │ │ │ ├── paragraph_builder_txt.h │ │ │ │ ├── paragraph_style.cc │ │ │ │ ├── paragraph_style.h │ │ │ │ ├── paragraph_txt.cc │ │ │ │ ├── paragraph_txt.h │ │ │ │ ├── placeholder_run.cc │ │ │ │ ├── placeholder_run.h │ │ │ │ ├── platform.cc │ │ │ │ ├── platform.h │ │ │ │ ├── platform_android.cc │ │ │ │ ├── platform_fuchsia.cc │ │ │ │ ├── platform_harmony.cc │ │ │ │ ├── platform_linux.cc │ │ │ │ ├── platform_mac.mm │ │ │ │ ├── platform_windows.cc │ │ │ │ ├── run_metrics.h │ │ │ │ ├── styled_runs.cc │ │ │ │ ├── styled_runs.h │ │ │ │ ├── test_font_manager.cc │ │ │ │ ├── test_font_manager.h │ │ │ │ ├── text_baseline.h │ │ │ │ ├── text_decoration.cc │ │ │ │ ├── text_decoration.h │ │ │ │ ├── text_shadow.cc │ │ │ │ ├── text_shadow.h │ │ │ │ ├── text_style.cc │ │ │ │ ├── text_style.h │ │ │ │ ├── typeface_font_asset_provider_skia.cc │ │ │ │ ├── typeface_font_asset_provider_skia.h │ │ │ │ ├── typeface_font_asset_provider_skity.cc │ │ │ │ └── typeface_font_asset_provider_skity.h │ │ │ └── utils/ │ │ │ ├── JenkinsHash.cpp │ │ │ ├── JenkinsHash.h │ │ │ ├── LinuxUtils.h │ │ │ ├── LruCache.h │ │ │ ├── MacUtils.h │ │ │ ├── TypeHelpers.h │ │ │ └── WindowsUtils.h │ │ └── tests/ │ │ ├── CmapCoverageTest.cpp │ │ ├── EmojiTest.cpp │ │ ├── FileUtils.cpp │ │ ├── FileUtils.h │ │ ├── FontCollectionItemizeTest.cpp │ │ ├── FontCollectionTest.cpp │ │ ├── FontFamilyTest.cpp │ │ ├── FontLanguageListCacheTest.cpp │ │ ├── FontTestUtils.cpp │ │ ├── FontTestUtils.h │ │ ├── GraphemeBreakTests.cpp │ │ ├── HbFontCacheTest.cpp │ │ ├── HyphenatorTest.cpp │ │ ├── ICUTestBase.h │ │ ├── LayoutTest.cpp │ │ ├── LayoutUtilsTest.cpp │ │ ├── MeasurementTests.cpp │ │ ├── MinikinFontForTest.cpp │ │ ├── MinikinFontForTest.h │ │ ├── SparseBitSetTest.cpp │ │ ├── UnicodeUtils.cpp │ │ ├── UnicodeUtils.h │ │ ├── UnicodeUtilsTest.cpp │ │ ├── WordBreakerTests.cpp │ │ ├── fake_provider.h │ │ ├── font_collection_unittests.cc │ │ ├── old/ │ │ │ ├── perftests/ │ │ │ │ ├── FontCollection.cpp │ │ │ │ ├── FontFamily.cpp │ │ │ │ ├── FontLanguage.cpp │ │ │ │ ├── GraphemeBreak.cpp │ │ │ │ ├── Hyphenator.cpp │ │ │ │ ├── WordBreaker.cpp │ │ │ │ └── main.cpp │ │ │ └── stresstest/ │ │ │ └── MultithreadTest.cpp │ │ ├── paragraph_unittests.cc │ │ ├── platform_fuchsia_unittests.cc │ │ ├── render_test.cc │ │ ├── render_test.h │ │ ├── txt_run_all_unittests.cc │ │ ├── txt_test_utils.cc │ │ └── txt_test_utils.h │ ├── tools/ │ │ └── make_keywords.py │ ├── ui/ │ │ ├── BUILD.gn │ │ ├── common/ │ │ │ ├── attribute_utils.cc │ │ │ ├── attribute_utils.h │ │ │ ├── attribute_utils_unittests.cc │ │ │ ├── background_data.cc │ │ │ ├── background_data.h │ │ │ ├── build.gni │ │ │ ├── editing_misc.h │ │ │ ├── fps_tracer.cc │ │ │ ├── fps_tracer.h │ │ │ ├── frame_timing_collector.cc │ │ │ ├── frame_timing_collector.h │ │ │ ├── gap_task.h │ │ │ ├── gap_worker.cc │ │ │ ├── gap_worker.h │ │ │ ├── input_client_manager.h │ │ │ ├── isolate.cc │ │ │ ├── isolate.h │ │ │ ├── json_utils.h │ │ │ ├── macros.h │ │ │ ├── measure_constraint.h │ │ │ ├── overlay_manager.cc │ │ │ ├── overlay_manager.h │ │ │ ├── render_settings.cc │ │ │ ├── render_settings.h │ │ │ ├── text_input_type_traits.h │ │ │ ├── text_selection.h │ │ │ ├── type_info.h │ │ │ ├── utils/ │ │ │ │ ├── floating_comparison.h │ │ │ │ ├── value_change_notifier.h │ │ │ │ ├── watch_dog.cc │ │ │ │ └── watch_dog.h │ │ │ ├── value_utils.cc │ │ │ └── value_utils.h │ │ ├── component/ │ │ │ ├── base_image_view.cc │ │ │ ├── base_image_view.h │ │ │ ├── base_view.cc │ │ │ ├── base_view.h │ │ │ ├── base_view_animation_mutator.cc │ │ │ ├── base_view_animation_mutator.h │ │ │ ├── base_view_unittests.cc │ │ │ ├── bounce_view/ │ │ │ │ ├── bounce_view.cc │ │ │ │ └── bounce_view.h │ │ │ ├── build.gni │ │ │ ├── builtin_views.cc │ │ │ ├── builtin_views.h │ │ │ ├── component.cc │ │ │ ├── component.h │ │ │ ├── component_constants.cc │ │ │ ├── component_constants.h │ │ │ ├── css_property.cc │ │ │ ├── css_property.h │ │ │ ├── editable/ │ │ │ │ ├── editable_view.cc │ │ │ │ ├── editable_view.h │ │ │ │ ├── ime_listener.h │ │ │ │ ├── ime_utils.cc │ │ │ │ ├── ime_utils.h │ │ │ │ ├── input_ng_view.cc │ │ │ │ ├── input_ng_view.h │ │ │ │ ├── input_view.cc │ │ │ │ ├── input_view.h │ │ │ │ ├── text_editing_controller.cc │ │ │ │ ├── text_editing_controller.h │ │ │ │ ├── text_input_controller.cc │ │ │ │ ├── text_input_controller.h │ │ │ │ ├── text_span.cc │ │ │ │ ├── text_span.h │ │ │ │ ├── text_utils.h │ │ │ │ ├── textarea_ng_view.cc │ │ │ │ ├── textarea_ng_view.h │ │ │ │ ├── textarea_ng_view_unittests.cc │ │ │ │ ├── textarea_view.cc │ │ │ │ └── textarea_view.h │ │ │ ├── expose_manager/ │ │ │ │ ├── expose_observer.cc │ │ │ │ └── expose_observer.h │ │ │ ├── focus/ │ │ │ │ ├── focus_isolate.cc │ │ │ │ └── focus_isolate.h │ │ │ ├── focus_event_handler.h │ │ │ ├── focus_node.cc │ │ │ ├── focus_node.h │ │ │ ├── hittest_request.h │ │ │ ├── image_view.cc │ │ │ ├── image_view.h │ │ │ ├── inline_image_view.cc │ │ │ ├── inline_image_view.h │ │ │ ├── intersection_observer.cc │ │ │ ├── intersection_observer.h │ │ │ ├── intersection_observer_manager.cc │ │ │ ├── intersection_observer_manager.h │ │ │ ├── isolated_gesture_detector.h │ │ │ ├── key_event_handler.cc │ │ │ ├── key_event_handler.h │ │ │ ├── keyframe_animator_unittests.cc │ │ │ ├── keywords.cc │ │ │ ├── keywords.h │ │ │ ├── keywords.in │ │ │ ├── layout_controller.cc │ │ │ ├── layout_controller.h │ │ │ ├── list/ │ │ │ │ ├── base_list_view.cc │ │ │ │ ├── base_list_view.h │ │ │ │ ├── base_list_view_unittests.cc │ │ │ │ ├── focus_list_adapter.cc │ │ │ │ ├── focus_list_adapter.h │ │ │ │ ├── focus_list_item_view_holder.cc │ │ │ │ ├── focus_list_item_view_holder.h │ │ │ │ ├── focus_list_view.cc │ │ │ │ ├── focus_list_view.h │ │ │ │ ├── focus_list_view_unittests.cc │ │ │ │ ├── list_adapter.cc │ │ │ │ ├── list_adapter.h │ │ │ │ ├── list_adapter_helper.cc │ │ │ │ ├── list_adapter_helper.h │ │ │ │ ├── list_adapter_updater.cc │ │ │ │ ├── list_adapter_updater.h │ │ │ │ ├── list_children_helper.cc │ │ │ │ ├── list_children_helper.h │ │ │ │ ├── list_common/ │ │ │ │ │ ├── layout_types.cc │ │ │ │ │ └── layout_types.h │ │ │ │ ├── list_container/ │ │ │ │ │ ├── list_container_view.cc │ │ │ │ │ ├── list_container_view.h │ │ │ │ │ ├── list_container_wrapper.cc │ │ │ │ │ └── list_container_wrapper.h │ │ │ │ ├── list_item_length_cache.cc │ │ │ │ ├── list_item_length_cache.h │ │ │ │ ├── list_item_length_cache_unittests.cc │ │ │ │ ├── list_item_view.cc │ │ │ │ ├── list_item_view.h │ │ │ │ ├── list_item_view_holder.cc │ │ │ │ ├── list_item_view_holder.h │ │ │ │ ├── list_layout_manager.cc │ │ │ │ ├── list_layout_manager.h │ │ │ │ ├── list_layout_manager_grid.cc │ │ │ │ ├── list_layout_manager_grid.h │ │ │ │ ├── list_layout_manager_linear.cc │ │ │ │ ├── list_layout_manager_linear.h │ │ │ │ ├── list_layout_manager_staggered_grid.cc │ │ │ │ ├── list_layout_manager_staggered_grid.h │ │ │ │ ├── list_orientation_helper.cc │ │ │ │ ├── list_orientation_helper.h │ │ │ │ ├── list_recycler.cc │ │ │ │ ├── list_recycler.h │ │ │ │ ├── list_scroller.cc │ │ │ │ ├── list_scroller.h │ │ │ │ ├── list_view.cc │ │ │ │ ├── list_view.h │ │ │ │ ├── list_wrapper.cc │ │ │ │ ├── list_wrapper.h │ │ │ │ ├── lynx_list_adapter.cc │ │ │ │ ├── lynx_list_adapter.h │ │ │ │ ├── lynx_list_data.cc │ │ │ │ ├── lynx_list_data.h │ │ │ │ ├── lynx_list_item_view_holder.cc │ │ │ │ ├── lynx_list_item_view_holder.h │ │ │ │ └── macros.h │ │ │ ├── measurable.h │ │ │ ├── mouse_cursor.h │ │ │ ├── native_view.cc │ │ │ ├── native_view.h │ │ │ ├── native_view_unittests.cc │ │ │ ├── nested_scroll/ │ │ │ │ ├── nested_scroll_manager.cc │ │ │ │ ├── nested_scroll_manager.h │ │ │ │ ├── nested_scrollable.cc │ │ │ │ ├── nested_scrollable.h │ │ │ │ ├── nested_scrollable_unittests.cc │ │ │ │ ├── overscroll_effect.cc │ │ │ │ ├── overscroll_effect.h │ │ │ │ ├── raster_fling_manager.cc │ │ │ │ └── raster_fling_manager.h │ │ │ ├── overlay_view.cc │ │ │ ├── overlay_view.h │ │ │ ├── overlay_view_unittests.cc │ │ │ ├── page_view.cc │ │ │ ├── page_view.h │ │ │ ├── page_view_unittests.cc │ │ │ ├── rubberband_distance.cc │ │ │ ├── rubberband_distance.h │ │ │ ├── scroll_view.cc │ │ │ ├── scroll_view.h │ │ │ ├── scroll_view_unittests.cc │ │ │ ├── scroll_wrapper.cc │ │ │ ├── scroll_wrapper.h │ │ │ ├── scrollable.cc │ │ │ ├── scrollable.h │ │ │ ├── scrollbar/ │ │ │ │ ├── scrollbar_orientation_helper.cc │ │ │ │ ├── scrollbar_orientation_helper.h │ │ │ │ ├── scrollbar_view.cc │ │ │ │ ├── scrollbar_view.h │ │ │ │ ├── scrollbar_wrapper.cc │ │ │ │ └── scrollbar_wrapper.h │ │ │ ├── scroller.cc │ │ │ ├── scroller.h │ │ │ ├── scroller_animator.cc │ │ │ ├── scroller_animator.h │ │ │ ├── selection_handle_view.cc │ │ │ ├── selection_handle_view.h │ │ │ ├── selection_popup_view.cc │ │ │ ├── selection_popup_view.h │ │ │ ├── soft_keyboard_resources.cc │ │ │ ├── soft_keyboard_resources.h │ │ │ ├── tappable_image_view.h │ │ │ ├── text/ │ │ │ │ ├── base_text_view.cc │ │ │ │ ├── base_text_view.h │ │ │ │ ├── inline_spec_styles.h │ │ │ │ ├── inline_text_view.cc │ │ │ │ ├── inline_text_view.h │ │ │ │ ├── internal_text_view.cc │ │ │ │ ├── internal_text_view.h │ │ │ │ ├── layout_client.h │ │ │ │ ├── layout_context.cc │ │ │ │ ├── layout_context.h │ │ │ │ ├── raw_text_view.cc │ │ │ │ ├── raw_text_view.h │ │ │ │ ├── tappable_text_view.h │ │ │ │ ├── text_paragraph_builder.cc │ │ │ │ ├── text_paragraph_builder.h │ │ │ │ ├── text_style.h │ │ │ │ ├── text_view.cc │ │ │ │ ├── text_view.h │ │ │ │ ├── text_view_unittests.cc │ │ │ │ ├── tttext_headers.h │ │ │ │ └── unicode_util.h │ │ │ ├── title_bar_view.cc │ │ │ ├── title_bar_view.h │ │ │ ├── view.cc │ │ │ ├── view.h │ │ │ ├── view_callback/ │ │ │ │ ├── list_container_event_callback_manager.cc │ │ │ │ ├── list_container_event_callback_manager.h │ │ │ │ ├── list_event_callback_manager.cc │ │ │ │ ├── list_event_callback_manager.h │ │ │ │ ├── scroll_event_callback_manager.cc │ │ │ │ └── scroll_event_callback_manager.h │ │ │ ├── view_context.cc │ │ │ ├── view_context.h │ │ │ ├── view_registry.cc │ │ │ ├── view_registry.h │ │ │ ├── view_tree_observer.cc │ │ │ └── view_tree_observer.h │ │ ├── compositing/ │ │ │ ├── build.gni │ │ │ ├── frame_builder.cc │ │ │ ├── frame_builder.h │ │ │ ├── frame_builder_unittests.cc │ │ │ ├── pending_container_layer.cc │ │ │ ├── pending_container_layer.h │ │ │ ├── pending_container_layer_unittests.cc │ │ │ ├── pending_drawable_image_layer.cc │ │ │ ├── pending_drawable_image_layer.h │ │ │ ├── pending_effect_layer.cc │ │ │ ├── pending_effect_layer.h │ │ │ ├── pending_external_view_layer.cc │ │ │ ├── pending_external_view_layer.h │ │ │ ├── pending_layer.cc │ │ │ ├── pending_layer.h │ │ │ ├── pending_layer_unittests.cc │ │ │ ├── pending_offset_layer.cc │ │ │ ├── pending_offset_layer.h │ │ │ ├── pending_picture_layer.cc │ │ │ ├── pending_picture_layer.h │ │ │ ├── pending_platform_view_layer.cc │ │ │ ├── pending_platform_view_layer.h │ │ │ ├── pending_punch_hole_layer.cc │ │ │ ├── pending_punch_hole_layer.h │ │ │ ├── pending_scroll_offset_layer.cc │ │ │ ├── pending_scroll_offset_layer.h │ │ │ ├── pending_transform_layer.cc │ │ │ ├── pending_transform_layer.h │ │ │ └── testing/ │ │ │ └── mock_pending_layer.h │ │ ├── event/ │ │ │ ├── build.gni │ │ │ ├── event_utils.cc │ │ │ ├── event_utils.h │ │ │ ├── focus_isolate_unittests.cc │ │ │ ├── focus_manager.cc │ │ │ ├── focus_manager.h │ │ │ ├── focus_manager_unittests.cc │ │ │ ├── gesture_event.cc │ │ │ ├── gesture_event.h │ │ │ ├── gesture_event_unittests.cc │ │ │ ├── key_code_converter.cc │ │ │ ├── key_code_converter.h │ │ │ ├── key_codes.h │ │ │ ├── key_event.cc │ │ │ ├── key_event.h │ │ │ └── keyboard_key.h │ │ ├── gesture/ │ │ │ ├── arena.h │ │ │ ├── arena_manager.cc │ │ │ ├── arena_manager.h │ │ │ ├── arena_member.h │ │ │ ├── build.gni │ │ │ ├── drag_drop_manager.cc │ │ │ ├── drag_drop_manager.h │ │ │ ├── drag_gesture_recognizer.cc │ │ │ ├── drag_gesture_recognizer.h │ │ │ ├── gesture_manager.cc │ │ │ ├── gesture_manager.h │ │ │ ├── gesture_manager_unittests.cc │ │ │ ├── gesture_recognizer.cc │ │ │ ├── gesture_recognizer.h │ │ │ ├── hit_test.h │ │ │ ├── hit_test_responsive_result.h │ │ │ ├── long_press_gesture_recognizer.cc │ │ │ ├── long_press_gesture_recognizer.h │ │ │ ├── macros.h │ │ │ ├── mouse_cursor_manager.cc │ │ │ ├── mouse_cursor_manager.h │ │ │ ├── mouse_region_manager.cc │ │ │ ├── mouse_region_manager.h │ │ │ ├── mouse_region_manager_unittests.cc │ │ │ ├── mouse_wheel_phase_handler.cc │ │ │ ├── mouse_wheel_phase_handler.h │ │ │ ├── multi_tap_gesture_recognizer.cc │ │ │ ├── multi_tap_gesture_recognizer.h │ │ │ ├── pointer_router.cc │ │ │ ├── pointer_router.h │ │ │ ├── scrollable_direction.h │ │ │ ├── tap_gesture_recognizer.cc │ │ │ ├── tap_gesture_recognizer.h │ │ │ ├── velocity_tracker.cc │ │ │ ├── velocity_tracker.h │ │ │ └── velocity_tracker_unittests.cc │ │ ├── lynx_module/ │ │ │ ├── build.gni │ │ │ ├── lynx_module_unittests.cc │ │ │ ├── lynx_ui_method_registrar.cc │ │ │ ├── lynx_ui_method_registrar.h │ │ │ ├── lynx_ui_method_types.h │ │ │ ├── lynx_ui_method_unittests.cc │ │ │ ├── type_utils.cc │ │ │ ├── type_utils.h │ │ │ ├── types.cc │ │ │ └── types.h │ │ ├── painter/ │ │ │ ├── border_side.h │ │ │ ├── box_decoration_data.h │ │ │ ├── box_painter.cc │ │ │ ├── box_painter.h │ │ │ ├── box_painter_unittests.cc │ │ │ ├── box_shadow_painter.cc │ │ │ ├── box_shadow_painter.h │ │ │ ├── build.gni │ │ │ ├── gradient.cc │ │ │ ├── gradient.h │ │ │ ├── gradient_factory.cc │ │ │ ├── gradient_factory.h │ │ │ ├── gradient_unittests.cc │ │ │ ├── image_painter.cc │ │ │ ├── image_painter.h │ │ │ ├── image_painter_unittests.cc │ │ │ ├── object_painter.cc │ │ │ ├── object_painter.h │ │ │ ├── painter_graphics_test.cc │ │ │ ├── painter_graphics_test.h │ │ │ ├── painting_context.cc │ │ │ ├── painting_context.h │ │ │ ├── painting_context_unittests.cc │ │ │ ├── text_painter.cc │ │ │ └── text_painter.h │ │ ├── platform/ │ │ │ ├── build.gni │ │ │ ├── common/ │ │ │ │ ├── native_view_service_common.cc │ │ │ │ ├── native_view_service_common.h │ │ │ │ ├── resource_loader_common.cc │ │ │ │ ├── resource_loader_common_net.cc │ │ │ │ ├── resource_loader_common_net.h │ │ │ │ └── utils.h │ │ │ ├── cursor_types.cc │ │ │ ├── cursor_types.h │ │ │ ├── keyboard_bridge.cc │ │ │ ├── keyboard_bridge.h │ │ │ ├── keyboard_types.h │ │ │ └── native_view_service.h │ │ ├── public/ │ │ │ ├── build.gni │ │ │ ├── clay.cc │ │ │ └── value.cc │ │ ├── render_delegate.h │ │ ├── rendering/ │ │ │ ├── abstract_node.cc │ │ │ ├── abstract_node.h │ │ │ ├── abstract_node_unittests.cc │ │ │ ├── build.gni │ │ │ ├── decode_utils.cc │ │ │ ├── decode_utils.h │ │ │ ├── editable/ │ │ │ │ ├── render_editable.cc │ │ │ │ └── render_editable.h │ │ │ ├── render_bounce.h │ │ │ ├── render_box.cc │ │ │ ├── render_box.h │ │ │ ├── render_box_unittests.cc │ │ │ ├── render_container.cc │ │ │ ├── render_container.h │ │ │ ├── render_dummy.h │ │ │ ├── render_external_content.cc │ │ │ ├── render_external_content.h │ │ │ ├── render_external_view.cc │ │ │ ├── render_external_view.h │ │ │ ├── render_image.cc │ │ │ ├── render_image.h │ │ │ ├── render_list.cc │ │ │ ├── render_list.h │ │ │ ├── render_object.cc │ │ │ ├── render_object.h │ │ │ ├── render_object_child_list.cc │ │ │ ├── render_object_child_list.h │ │ │ ├── render_object_child_list_unittests.cc │ │ │ ├── render_object_unittests.cc │ │ │ ├── render_overlay.cc │ │ │ ├── render_overlay.h │ │ │ ├── render_page.cc │ │ │ ├── render_page.h │ │ │ ├── render_scroll.cc │ │ │ ├── render_scroll.h │ │ │ ├── renderer.cc │ │ │ ├── renderer.h │ │ │ └── text/ │ │ │ ├── render_inline_text.cc │ │ │ ├── render_inline_text.h │ │ │ ├── render_text.cc │ │ │ └── render_text.h │ │ ├── resource/ │ │ │ ├── asset_font_manager_clay.h │ │ │ ├── asset_manager_font_provider_skia.cc │ │ │ ├── asset_manager_font_provider_skia.h │ │ │ ├── asset_manager_font_provider_skity.cc │ │ │ ├── asset_manager_font_provider_skity.h │ │ │ ├── build.gni │ │ │ ├── font_collection.cc │ │ │ ├── font_collection.h │ │ │ ├── font_resource_manager.cc │ │ │ ├── font_resource_manager.h │ │ │ ├── font_resource_manager_unittests.cc │ │ │ ├── gpu_resource_cache.cc │ │ │ ├── gpu_resource_cache.h │ │ │ ├── image_cache.h │ │ │ ├── image_fetcher.cc │ │ │ ├── image_fetcher.h │ │ │ ├── image_manager.cc │ │ │ ├── image_manager.h │ │ │ ├── image_resource_fetcher.cc │ │ │ └── image_resource_fetcher.h │ │ ├── semantics/ │ │ │ ├── build.gni │ │ │ ├── semantics_node.cc │ │ │ ├── semantics_node.h │ │ │ ├── semantics_owner.cc │ │ │ ├── semantics_owner.h │ │ │ ├── semantics_update_builder.cc │ │ │ ├── semantics_update_builder.h │ │ │ └── semantics_update_node.h │ │ ├── shadow/ │ │ │ ├── base_text_shadow_node.cc │ │ │ ├── base_text_shadow_node.h │ │ │ ├── build.gni │ │ │ ├── bundle.h │ │ │ ├── editable_ng_shadow_node.cc │ │ │ ├── editable_ng_shadow_node.h │ │ │ ├── editable_shadow_node.cc │ │ │ ├── editable_shadow_node.h │ │ │ ├── icu_no_substitute.cc │ │ │ ├── icu_substitute.cc │ │ │ ├── icu_substitute.h │ │ │ ├── image_shadow_node.cc │ │ │ ├── image_shadow_node.h │ │ │ ├── inline_image_shadow_node.cc │ │ │ ├── inline_image_shadow_node.h │ │ │ ├── inline_text_shadow_node.cc │ │ │ ├── inline_text_shadow_node.h │ │ │ ├── inline_truncation_shadow_node.cc │ │ │ ├── inline_truncation_shadow_node.h │ │ │ ├── inline_view_shadow_node.cc │ │ │ ├── inline_view_shadow_node.h │ │ │ ├── inner_inline_text_shadow_node.cc │ │ │ ├── inner_inline_text_shadow_node.h │ │ │ ├── inner_text_shadow_node.cc │ │ │ ├── inner_text_shadow_node.h │ │ │ ├── measure_utils.h │ │ │ ├── native_view_shadow_node.cc │ │ │ ├── native_view_shadow_node.h │ │ │ ├── raw_text_shadow_node.cc │ │ │ ├── raw_text_shadow_node.h │ │ │ ├── shadow_layout_context.cc │ │ │ ├── shadow_layout_context.h │ │ │ ├── shadow_node.cc │ │ │ ├── shadow_node.h │ │ │ ├── shadow_node_owner.cc │ │ │ ├── shadow_node_owner.h │ │ │ ├── text_render.cc │ │ │ ├── text_render.h │ │ │ ├── text_shadow_node.cc │ │ │ ├── text_shadow_node.h │ │ │ ├── text_unittests.cc │ │ │ ├── text_update_bundle.cc │ │ │ ├── text_update_bundle.h │ │ │ └── vertical_align_style.h │ │ ├── testing/ │ │ │ ├── test_utils.cc │ │ │ ├── test_utils.h │ │ │ ├── test_utils_unittests.cc │ │ │ ├── ui_test.cc │ │ │ └── ui_test.h │ │ ├── ui_rendering_backend.h │ │ └── window/ │ │ ├── build.gni │ │ ├── key_data.cc │ │ ├── key_data.h │ │ ├── key_data_helper.cc │ │ ├── key_data_helper.h │ │ ├── key_data_packet.cc │ │ ├── key_data_packet.h │ │ ├── pointer_data.cc │ │ ├── pointer_data.h │ │ ├── pointer_data_helper.cc │ │ ├── pointer_data_helper.h │ │ ├── pointer_data_packet.cc │ │ ├── pointer_data_packet.h │ │ ├── pointer_data_packet_converter.cc │ │ ├── pointer_data_packet_converter.h │ │ ├── pointer_data_packet_converter_unittests.cc │ │ ├── pointer_data_packet_unittests.cc │ │ ├── viewport_metrics.cc │ │ └── viewport_metrics.h │ └── version/ │ ├── BUILD.gn │ ├── version.cc │ ├── version.gni │ ├── version.h │ └── write_file.py ├── config.gni ├── core/ │ ├── AGENTS.md │ ├── BUILD.gn │ ├── Lynx.gni │ ├── animation/ │ │ ├── AGENTS.md │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ ├── animation.cc │ │ ├── animation.h │ │ ├── animation_curve.cc │ │ ├── animation_curve.h │ │ ├── animation_delegate.h │ │ ├── animation_trace_event_def.h │ │ ├── animation_unittest.cc │ │ ├── basic_animation/ │ │ │ ├── AGENTS.md │ │ │ ├── BUILD.gn │ │ │ ├── animation_effect.cc │ │ │ ├── animation_effect.h │ │ │ ├── animation_effect_timing.cc │ │ │ ├── animation_effect_timing.h │ │ │ ├── animation_event_listener.h │ │ │ ├── animation_frame_callback.h │ │ │ ├── animation_frame_callback_provider.h │ │ │ ├── animation_timeline.cc │ │ │ ├── animation_timeline.h │ │ │ ├── animator_target.h │ │ │ ├── basic_animatable_values/ │ │ │ │ ├── animatable_values_unittest.cc │ │ │ │ ├── color_property_value.cc │ │ │ │ ├── color_property_value.h │ │ │ │ ├── float_property_value.cc │ │ │ │ ├── float_property_value.h │ │ │ │ ├── int_property_value.cc │ │ │ │ └── int_property_value.h │ │ │ ├── basic_animation.cc │ │ │ ├── basic_animation.h │ │ │ ├── basic_animation_curve.cc │ │ │ ├── basic_animation_curve.h │ │ │ ├── basic_keyframe_effect.cc │ │ │ ├── basic_keyframe_effect.h │ │ │ ├── basic_keyframe_model.cc │ │ │ ├── basic_keyframe_model.h │ │ │ ├── keyframe.cc │ │ │ ├── keyframe.h │ │ │ ├── property_value.h │ │ │ ├── thread_local_animation_handler.cc │ │ │ └── thread_local_animation_handler.h │ │ ├── constants.h │ │ ├── css_keyframe_manager.cc │ │ ├── css_keyframe_manager.h │ │ ├── css_keyframe_manager_unittest.cc │ │ ├── css_transition_manager.cc │ │ ├── css_transition_manager.h │ │ ├── css_transition_manager_unittest.cc │ │ ├── keyframe_effect.cc │ │ ├── keyframe_effect.h │ │ ├── keyframe_effect_unittest.cc │ │ ├── keyframe_model.cc │ │ ├── keyframe_model.h │ │ ├── keyframe_model_unittest.cc │ │ ├── keyframed_animation_curve.cc │ │ ├── keyframed_animation_curve.h │ │ ├── keyframed_animation_curve_unittest.cc │ │ ├── lynx_basic_animator/ │ │ │ ├── AGENTS.md │ │ │ ├── BUILD.gn │ │ │ ├── basic_animator.cc │ │ │ ├── basic_animator.h │ │ │ ├── basic_animator_event_listener.cc │ │ │ ├── basic_animator_event_listener.h │ │ │ ├── basic_animator_frame_callback_provider.cc │ │ │ ├── basic_animator_frame_callback_provider.h │ │ │ ├── basic_property_value.cc │ │ │ ├── basic_property_value.h │ │ │ └── lynx_basic_animator_unittest.cc │ │ ├── testing/ │ │ │ ├── mock_animation.cc │ │ │ ├── mock_animation.h │ │ │ ├── mock_css_keyframe_manager.cc │ │ │ ├── mock_css_keyframe_manager.h │ │ │ ├── mock_css_transition_manager.cc │ │ │ └── mock_css_transition_manager.h │ │ ├── transform_animation_curve.cc │ │ ├── transform_animation_curve.h │ │ ├── transform_animation_curve_unittest.cc │ │ └── utils/ │ │ ├── BUILD.gn │ │ ├── cubic_bezier.cc │ │ ├── cubic_bezier.h │ │ ├── cubic_bezier_unittest.cc │ │ ├── timing_function.cc │ │ ├── timing_function.h │ │ └── timing_function_unittest.cc │ ├── base/ │ │ ├── BUILD.gn │ │ ├── android/ │ │ │ ├── android_jni.cc │ │ │ ├── android_jni.h │ │ │ ├── android_jni_unittest.cc │ │ │ ├── callstack_util_android.cc │ │ │ ├── callstack_util_android.h │ │ │ ├── device_utils_android.cc │ │ │ ├── device_utils_android.h │ │ │ ├── fresco_blur_filter.c │ │ │ ├── fresco_blur_filter.h │ │ │ ├── java_only_array.cc │ │ │ ├── java_only_array.h │ │ │ ├── java_only_map.cc │ │ │ ├── java_only_map.h │ │ │ ├── java_value.cc │ │ │ ├── java_value.h │ │ │ ├── java_value_unittest.cc │ │ │ ├── jni_helper.cc │ │ │ ├── jni_helper.h │ │ │ ├── jni_helper_unittest.cc │ │ │ ├── lynx_android_blur.cc │ │ │ ├── lynx_error_android.cc │ │ │ ├── lynx_error_android.h │ │ │ ├── lynx_white_board_android.cc │ │ │ ├── message_loop_android_vsync.cc │ │ │ ├── message_loop_android_vsync.h │ │ │ ├── piper_data.cc │ │ │ ├── piper_data.h │ │ │ ├── vsync_monitor_android.cc │ │ │ └── vsync_monitor_android.h │ │ ├── darwin/ │ │ │ ├── config_darwin.h │ │ │ ├── config_darwin.mm │ │ │ ├── lynx_env_darwin.h │ │ │ ├── lynx_env_darwin.mm │ │ │ ├── lynx_trail_hub_impl_darwin.h │ │ │ ├── lynx_trail_hub_impl_darwin.mm │ │ │ ├── message_loop_darwin_vsync.cc │ │ │ ├── message_loop_darwin_vsync.h │ │ │ ├── vsync_monitor_darwin.h │ │ │ └── vsync_monitor_darwin.mm │ │ ├── debug/ │ │ │ ├── BUILD.gn │ │ │ ├── memory_tracer.cc │ │ │ ├── memory_tracer.h │ │ │ └── memory_tracer_android.cc │ │ ├── harmony/ │ │ │ ├── harmony_function_loader.cc │ │ │ ├── harmony_function_loader.h │ │ │ ├── harmony_napi_env_holder.cc │ │ │ ├── harmony_napi_env_holder.h │ │ │ ├── harmony_trace_event_def.h │ │ │ ├── napi_convert_helper.cc │ │ │ ├── napi_convert_helper.h │ │ │ ├── props_constant.h │ │ │ ├── threading/ │ │ │ │ └── js_thread_config_getter_harmony.cc │ │ │ ├── vsync_monitor_harmony.cc │ │ │ └── vsync_monitor_harmony.h │ │ ├── js_constants.h │ │ ├── json/ │ │ │ ├── json_util.h │ │ │ ├── json_utils.cc │ │ │ └── json_utils_unittests.cc │ │ ├── lynx_export.h │ │ ├── lynx_trace_categories.h │ │ ├── memory/ │ │ │ ├── memory_pressure_callback.cc │ │ │ ├── memory_pressure_callback.h │ │ │ └── memory_pressure_callback_unittest.cc │ │ ├── observer/ │ │ │ ├── observer.h │ │ │ ├── observer_list.cc │ │ │ └── observer_list.h │ │ ├── thread/ │ │ │ ├── atomic_lifecycle.cc │ │ │ ├── atomic_lifecycle.h │ │ │ ├── blocking_queue.h │ │ │ ├── blocking_queue_unittest.cc │ │ │ ├── once_task.h │ │ │ ├── once_task_unittest.cc │ │ │ ├── thread_utils.cc │ │ │ ├── thread_utils.h │ │ │ └── thread_utils_unittest.cc │ │ ├── threading/ │ │ │ ├── js_thread_config_getter.cc │ │ │ ├── js_thread_config_getter.h │ │ │ ├── task_runner_manufactor.cc │ │ │ ├── task_runner_manufactor.h │ │ │ ├── task_runner_manufactor_unittest.cc │ │ │ ├── task_runner_vsync.cc │ │ │ ├── task_runner_vsync.h │ │ │ ├── task_runner_vsync_unittest.cc │ │ │ ├── thread_merger.cc │ │ │ ├── thread_merger.h │ │ │ ├── thread_merger_unittest.cc │ │ │ ├── vsync_monitor.cc │ │ │ ├── vsync_monitor.h │ │ │ ├── vsync_monitor_default.cc │ │ │ └── vsync_monitor_unittest.cc │ │ ├── trace/ │ │ │ └── trace_event_def.h │ │ └── utils/ │ │ ├── any.h │ │ ├── paths_mac.h │ │ ├── paths_mac.mm │ │ ├── paths_win.cc │ │ └── paths_win.h │ ├── base_targets.gni │ ├── build/ │ │ ├── AGENTS.md │ │ └── BUILD.gn │ ├── event/ │ │ ├── AGENTS.md │ │ ├── BUILD.gn │ │ ├── custom_event.cc │ │ ├── custom_event.h │ │ ├── event.cc │ │ ├── event.h │ │ ├── event_dispatch_result.h │ │ ├── event_dispatcher.cc │ │ ├── event_dispatcher.h │ │ ├── event_listener.cc │ │ ├── event_listener.h │ │ ├── event_listener_map.cc │ │ ├── event_listener_map.h │ │ ├── event_listener_map_test.cc │ │ ├── event_listener_map_test.h │ │ ├── event_listener_test.cc │ │ ├── event_listener_test.h │ │ ├── event_target.cc │ │ ├── event_target.h │ │ ├── event_target_test.cc │ │ ├── event_target_test.h │ │ ├── keyboard_event.cc │ │ ├── keyboard_event.h │ │ ├── touch_event.cc │ │ └── touch_event.h │ ├── include/ │ │ ├── AGENTS.md │ │ └── starlight_standalone/ │ │ ├── starlight.h │ │ ├── starlight_config.h │ │ ├── starlight_enums.h │ │ ├── starlight_standalone.h │ │ └── starlight_value.h │ ├── inspector/ │ │ ├── BUILD.gn │ │ ├── console_message_postman.h │ │ ├── lepus_inspector_manager.h │ │ ├── observer/ │ │ │ ├── inspector_common_observer.h │ │ │ ├── inspector_element_observer.h │ │ │ ├── inspector_lepus_observer.h │ │ │ └── inspector_runtime_observer_ng.h │ │ ├── runtime_inspector_manager.h │ │ ├── runtime_inspector_manager_unittest.cc │ │ ├── runtime_inspector_manager_unittest.h │ │ └── style_sheet.h │ ├── list/ │ │ ├── BUILD.gn │ │ ├── decoupled_adapter_helper.cc │ │ ├── decoupled_adapter_helper.h │ │ ├── decoupled_batch_list_adapter.cc │ │ ├── decoupled_batch_list_adapter.h │ │ ├── decoupled_default_list_adapter.cc │ │ ├── decoupled_default_list_adapter.h │ │ ├── decoupled_default_list_adapter_unittest.cc │ │ ├── decoupled_grid_layout_manager.cc │ │ ├── decoupled_grid_layout_manager.h │ │ ├── decoupled_item_holder.cc │ │ ├── decoupled_item_holder.h │ │ ├── decoupled_linear_layout_manager.cc │ │ ├── decoupled_linear_layout_manager.h │ │ ├── decoupled_list_adapter.cc │ │ ├── decoupled_list_adapter.h │ │ ├── decoupled_list_adapter_unittest.cc │ │ ├── decoupled_list_anchor_manager.cc │ │ ├── decoupled_list_anchor_manager.h │ │ ├── decoupled_list_anchor_manager_unittest.cc │ │ ├── decoupled_list_children_helper.cc │ │ ├── decoupled_list_children_helper.h │ │ ├── decoupled_list_children_helper_unittest.cc │ │ ├── decoupled_list_container_default.cc │ │ ├── decoupled_list_container_default.h │ │ ├── decoupled_list_container_impl.cc │ │ ├── decoupled_list_container_impl.h │ │ ├── decoupled_list_container_impl_unittest.cc │ │ ├── decoupled_list_event_manager.cc │ │ ├── decoupled_list_event_manager.h │ │ ├── decoupled_list_event_manager_unittest.cc │ │ ├── decoupled_list_layout_manager.cc │ │ ├── decoupled_list_layout_manager.h │ │ ├── decoupled_list_layout_manager_unittest.cc │ │ ├── decoupled_list_orientation_helper.cc │ │ ├── decoupled_list_orientation_helper.h │ │ ├── decoupled_list_types.h │ │ ├── decoupled_staggered_grid_layout_manager.cc │ │ ├── decoupled_staggered_grid_layout_manager.h │ │ ├── decoupled_staggered_grid_layout_manager_unittest.cc │ │ ├── list_animation_manager.cc │ │ ├── list_animation_manager.h │ │ ├── list_animation_manager_default.cc │ │ ├── list_animation_manager_default.h │ │ ├── list_animation_manager_impl.cc │ │ ├── list_animation_manager_impl.h │ │ ├── list_container_delegate.h │ │ ├── list_element_delegate.h │ │ ├── list_item_element_delegate.h │ │ └── testing/ │ │ ├── fiber_data_source.h │ │ ├── mock_list_element.h │ │ ├── mock_list_item_element.h │ │ ├── radon_data_source.h │ │ └── utils.h │ ├── napi.gni │ ├── parser/ │ │ ├── BUILD.gn │ │ ├── input_stream.cc │ │ └── input_stream.h │ ├── public/ │ │ ├── BUILD.gn │ │ ├── box_model.h │ │ ├── devtool/ │ │ │ ├── lynx_devtool_proxy.h │ │ │ └── lynx_inspector_owner.h │ │ ├── jsb/ │ │ │ ├── extension_module_factory.h │ │ │ ├── lynx_extension_module.h │ │ │ ├── lynx_module_callback.h │ │ │ ├── lynx_native_module.h │ │ │ └── native_module_factory.h │ │ ├── layout_ctx_platform_impl.h │ │ ├── layout_node_manager.h │ │ ├── layout_node_value.h │ │ ├── list_container_proxy.h │ │ ├── list_data.h │ │ ├── list_engine_proxy.h │ │ ├── lynx_engine_proxy.h │ │ ├── lynx_extension_delegate.h │ │ ├── lynx_layout_proxy.h │ │ ├── lynx_resource_loader.h │ │ ├── lynx_runtime_proxy.h │ │ ├── page_options.h │ │ ├── painting_ctx_platform_impl.h │ │ ├── perf_controller_proxy.h │ │ ├── performance_controller_platform_impl.h │ │ ├── pipeline_option.h │ │ ├── platform_extra_bundle.h │ │ ├── platform_renderer_type.h │ │ ├── prop_bundle.h │ │ ├── pub_value.h │ │ ├── runtime_lifecycle_observer.h │ │ ├── text_layout_impl.h │ │ ├── text_utils.h │ │ ├── timing_key.h │ │ ├── ui_delegate.h │ │ ├── ui_operation_queue_interface.h │ │ ├── vsync_monitor_platform_impl.h │ │ └── vsync_observer_interface.h │ ├── renderer/ │ │ ├── BUILD.gn │ │ ├── build.gni │ │ ├── css/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── css_color_utils.cc │ │ │ │ └── css_gradient_utils.cc │ │ │ ├── build.gni │ │ │ ├── computed_css_style.cc │ │ │ ├── computed_css_style.h │ │ │ ├── computed_css_style_css_text_helper.cc │ │ │ ├── computed_css_style_css_text_helper.h │ │ │ ├── computed_css_style_css_text_helper_unittest.cc │ │ │ ├── css_color.cc │ │ │ ├── css_color.h │ │ │ ├── css_color_unittest.cc │ │ │ ├── css_content_data.cc │ │ │ ├── css_content_data.h │ │ │ ├── css_debug_msg.h │ │ │ ├── css_decoder.cc │ │ │ ├── css_decoder.h │ │ │ ├── css_font_face_token.cc │ │ │ ├── css_font_face_token.h │ │ │ ├── css_font_face_token_unittest.cc │ │ │ ├── css_fragment.cc │ │ │ ├── css_fragment.h │ │ │ ├── css_fragment_decorator.cc │ │ │ ├── css_fragment_decorator.h │ │ │ ├── css_fragment_unittest.cc │ │ │ ├── css_keyframes_token.cc │ │ │ ├── css_keyframes_token.h │ │ │ ├── css_keyframes_token_unittest.cc │ │ │ ├── css_keywords.cc │ │ │ ├── css_keywords.h │ │ │ ├── css_keywords.tmpl │ │ │ ├── css_keywords_unittest.cc │ │ │ ├── css_parser_token.cc │ │ │ ├── css_parser_token.h │ │ │ ├── css_parser_token_unittest.cc │ │ │ ├── css_property.cc │ │ │ ├── css_property.h │ │ │ ├── css_property_bitset.h │ │ │ ├── css_property_bitset_unittest.cc │ │ │ ├── css_property_unittest.cc │ │ │ ├── css_selector_constants.cc │ │ │ ├── css_selector_constants.h │ │ │ ├── css_sheet.cc │ │ │ ├── css_sheet.h │ │ │ ├── css_style_sheet_manager.cc │ │ │ ├── css_style_sheet_manager.h │ │ │ ├── css_style_sheet_manager_unittest.cc │ │ │ ├── css_style_utils.cc │ │ │ ├── css_style_utils.h │ │ │ ├── css_style_utils_unittest.cc │ │ │ ├── css_utils.cc │ │ │ ├── css_utils.h │ │ │ ├── css_utils_unittest.cc │ │ │ ├── css_value.cc │ │ │ ├── css_value.h │ │ │ ├── css_value_lldb.py │ │ │ ├── css_value_unittest.cc │ │ │ ├── css_variable_handler.cc │ │ │ ├── css_variable_handler.h │ │ │ ├── css_variable_handler_unittest.cc │ │ │ ├── dynamic_css_configs.h │ │ │ ├── dynamic_css_styles_manager.cc │ │ │ ├── dynamic_css_styles_manager.h │ │ │ ├── dynamic_direction_styles_manager.cc │ │ │ ├── dynamic_direction_styles_manager.h │ │ │ ├── layout_node_unittest.cc │ │ │ ├── layout_property.cc │ │ │ ├── measure_context.cc │ │ │ ├── measure_context.h │ │ │ ├── ng/ │ │ │ │ ├── LICENSE │ │ │ │ ├── css_ng_utils.cc │ │ │ │ ├── css_ng_utils.h │ │ │ │ ├── invalidation/ │ │ │ │ │ ├── invalidation_set.cc │ │ │ │ │ ├── invalidation_set.h │ │ │ │ │ ├── invalidation_set_feature.h │ │ │ │ │ ├── invalidation_set_test.cc │ │ │ │ │ ├── rule_invalidation_set.cc │ │ │ │ │ ├── rule_invalidation_set.h │ │ │ │ │ └── rule_invalidation_set_test.cc │ │ │ │ ├── matcher/ │ │ │ │ │ ├── selector_matcher.cc │ │ │ │ │ ├── selector_matcher.h │ │ │ │ │ └── selector_matcher_test.cc │ │ │ │ ├── parser/ │ │ │ │ │ ├── css_parser_idioms.cc │ │ │ │ │ ├── css_parser_idioms.h │ │ │ │ │ ├── css_parser_token.cc │ │ │ │ │ ├── css_parser_token.h │ │ │ │ │ ├── css_parser_token_range.cc │ │ │ │ │ ├── css_parser_token_range.h │ │ │ │ │ ├── css_parser_token_stream.cc │ │ │ │ │ ├── css_parser_token_stream.h │ │ │ │ │ ├── css_parser_token_stream_test.cc │ │ │ │ │ ├── css_tokenizer.cc │ │ │ │ │ ├── css_tokenizer.h │ │ │ │ │ ├── css_tokenizer_codepoints.cc │ │ │ │ │ ├── css_tokenizer_input_stream.cc │ │ │ │ │ ├── css_tokenizer_input_stream.h │ │ │ │ │ ├── css_tokenizer_test.cc │ │ │ │ │ ├── number_parsing_options.h │ │ │ │ │ ├── string_to_number.cc │ │ │ │ │ └── string_to_number.h │ │ │ │ ├── selector/ │ │ │ │ │ ├── css_parser_context.h │ │ │ │ │ ├── css_selector_parser.cc │ │ │ │ │ ├── css_selector_parser.h │ │ │ │ │ ├── css_selector_parser_test.cc │ │ │ │ │ ├── lynx_css_selector.cc │ │ │ │ │ ├── lynx_css_selector.h │ │ │ │ │ ├── lynx_css_selector_empty.cc │ │ │ │ │ ├── lynx_css_selector_extra_data.cc │ │ │ │ │ ├── lynx_css_selector_extra_data.h │ │ │ │ │ ├── lynx_css_selector_impl.cc │ │ │ │ │ ├── lynx_css_selector_list.cc │ │ │ │ │ ├── lynx_css_selector_list.h │ │ │ │ │ └── lynx_css_selector_test.cc │ │ │ │ └── style/ │ │ │ │ ├── rule_data.h │ │ │ │ ├── rule_set.cc │ │ │ │ ├── rule_set.h │ │ │ │ ├── rule_set_unittest.cc │ │ │ │ └── style_rule.h │ │ │ ├── parser/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── animation_direction_handler.cc │ │ │ │ ├── animation_direction_handler.h │ │ │ │ ├── animation_direction_handler_unittest.cc │ │ │ │ ├── animation_fill_mode_handler.cc │ │ │ │ ├── animation_fill_mode_handler.h │ │ │ │ ├── animation_fill_mode_handler_unittest.cc │ │ │ │ ├── animation_iteration_count_handler.cc │ │ │ │ ├── animation_iteration_count_handler.h │ │ │ │ ├── animation_iteration_count_handler_unittest.cc │ │ │ │ ├── animation_name_handler.cc │ │ │ │ ├── animation_name_handler.h │ │ │ │ ├── animation_play_state_handler.cc │ │ │ │ ├── animation_play_state_handler.h │ │ │ │ ├── animation_property_handler.cc │ │ │ │ ├── animation_property_handler_unittest.cc │ │ │ │ ├── animation_shorthand_handler.cc │ │ │ │ ├── animation_shorthand_handler.h │ │ │ │ ├── animation_shorthand_handler_unittest.cc │ │ │ │ ├── aspect_ratio_handler.cc │ │ │ │ ├── aspect_ratio_handler.h │ │ │ │ ├── aspect_ratio_handler_unittest.cc │ │ │ │ ├── auto_font_size_handler.cc │ │ │ │ ├── auto_font_size_handler.h │ │ │ │ ├── auto_font_size_handler_unittest.cc │ │ │ │ ├── auto_font_size_preset_sizes_handler.cc │ │ │ │ ├── auto_font_size_preset_sizes_handler.h │ │ │ │ ├── auto_font_size_preset_sizes_handler_unittest.cc │ │ │ │ ├── background_box_handler.cc │ │ │ │ ├── background_box_handler.h │ │ │ │ ├── background_box_handler_unittest.cc │ │ │ │ ├── background_clip_handler.cc │ │ │ │ ├── background_clip_handler.h │ │ │ │ ├── background_clip_handler_unittest.cc │ │ │ │ ├── background_image_handler.cc │ │ │ │ ├── background_image_handler.h │ │ │ │ ├── background_image_handler_unittest.cc │ │ │ │ ├── background_position_handler.cc │ │ │ │ ├── background_position_handler.h │ │ │ │ ├── background_position_handler_unittest.cc │ │ │ │ ├── background_repeat_handler.cc │ │ │ │ ├── background_repeat_handler.h │ │ │ │ ├── background_repeat_handler_unittest.cc │ │ │ │ ├── background_shorthand_handler.cc │ │ │ │ ├── background_shorthand_handler.h │ │ │ │ ├── background_shorthand_handler_unittest.cc │ │ │ │ ├── background_size_handler.cc │ │ │ │ ├── background_size_handler.h │ │ │ │ ├── background_size_handler_unittest.cc │ │ │ │ ├── bool_handler.cc │ │ │ │ ├── bool_handler_unittest.cc │ │ │ │ ├── border_handler.cc │ │ │ │ ├── border_handler.h │ │ │ │ ├── border_handler_unittest.cc │ │ │ │ ├── border_radius_handler.cc │ │ │ │ ├── border_radius_handler.h │ │ │ │ ├── border_radius_handler_unittest.cc │ │ │ │ ├── border_style_handler.cc │ │ │ │ ├── border_width_handler.cc │ │ │ │ ├── clip_path_handler.cc │ │ │ │ ├── clip_path_handler.h │ │ │ │ ├── clip_path_handler_unittest.cc │ │ │ │ ├── color_handler.cc │ │ │ │ ├── color_handler_unittest.cc │ │ │ │ ├── css_parser_configs.h │ │ │ │ ├── css_string_parser.cc │ │ │ │ ├── css_string_parser.h │ │ │ │ ├── css_string_parser_unittest.cc │ │ │ │ ├── css_string_scanner.cc │ │ │ │ ├── css_string_scanner.h │ │ │ │ ├── css_string_scanner_unittest.cc │ │ │ │ ├── cursor_handler.cc │ │ │ │ ├── cursor_handler.h │ │ │ │ ├── enum_handler.cc │ │ │ │ ├── enum_handler.h │ │ │ │ ├── enum_handler_unittest.cc │ │ │ │ ├── filter_handler.cc │ │ │ │ ├── filter_handler.h │ │ │ │ ├── filter_handler_unittest.cc │ │ │ │ ├── flex_flow_handler.cc │ │ │ │ ├── flex_flow_handler.h │ │ │ │ ├── flex_flow_handler_unittest.cc │ │ │ │ ├── flex_handler.cc │ │ │ │ ├── flex_handler.h │ │ │ │ ├── flex_handler_unittest.cc │ │ │ │ ├── font_feature_settings_handler.cc │ │ │ │ ├── font_feature_settings_handler.h │ │ │ │ ├── font_length_handler.cc │ │ │ │ ├── font_length_handler.h │ │ │ │ ├── font_length_handler_unittest.cc │ │ │ │ ├── font_variation_settings_handler.cc │ │ │ │ ├── font_variation_settings_handler.h │ │ │ │ ├── four_sides_shorthand_handler.cc │ │ │ │ ├── four_sides_shorthand_handler.h │ │ │ │ ├── four_sides_shorthand_handler_unittest.cc │ │ │ │ ├── gap_handler.cc │ │ │ │ ├── gap_handler.h │ │ │ │ ├── grid_position_handler.cc │ │ │ │ ├── grid_position_handler.h │ │ │ │ ├── grid_template_handler.cc │ │ │ │ ├── grid_template_handler.h │ │ │ │ ├── grid_template_handler_unittest.cc │ │ │ │ ├── handler_defines.h │ │ │ │ ├── length_handler.cc │ │ │ │ ├── length_handler_unittest.cc │ │ │ │ ├── list_gap_handler.cc │ │ │ │ ├── list_gap_handler.h │ │ │ │ ├── list_gap_handler_unittest.cc │ │ │ │ ├── mask_shorthand_handler.cc │ │ │ │ ├── mask_shorthand_handler.h │ │ │ │ ├── number_handler.cc │ │ │ │ ├── number_handler_unittest.cc │ │ │ │ ├── offset_rotate_handler.cc │ │ │ │ ├── offset_rotate_handler.h │ │ │ │ ├── relative_align_handler.cc │ │ │ │ ├── relative_align_handler.h │ │ │ │ ├── shadow_handler.cc │ │ │ │ ├── shadow_handler.h │ │ │ │ ├── shadow_handler_unittest.cc │ │ │ │ ├── string_handler.cc │ │ │ │ ├── string_handler_unittest.cc │ │ │ │ ├── text_decoration_handler.cc │ │ │ │ ├── text_decoration_handler.h │ │ │ │ ├── text_decoration_handler_unittest.cc │ │ │ │ ├── text_stroke_handler.cc │ │ │ │ ├── text_stroke_handler.h │ │ │ │ ├── text_stroke_handler_unittest.cc │ │ │ │ ├── time_handler.cc │ │ │ │ ├── time_handler_unittest.cc │ │ │ │ ├── timing_function_handler.cc │ │ │ │ ├── timing_function_handler_unittest.cc │ │ │ │ ├── transform_handler.cc │ │ │ │ ├── transform_handler.h │ │ │ │ ├── transform_handler_unittest.cc │ │ │ │ ├── transform_origin_handler.cc │ │ │ │ ├── transform_origin_handler.h │ │ │ │ ├── transform_origin_handler_unittest.cc │ │ │ │ ├── transition_shorthand_handler.cc │ │ │ │ ├── transition_shorthand_handler.h │ │ │ │ ├── transition_shorthand_handler_unittest.cc │ │ │ │ ├── vertical_align_handler.cc │ │ │ │ └── vertical_align_handler.h │ │ │ ├── select_element_token.cc │ │ │ ├── select_element_token.h │ │ │ ├── select_element_token_unittest.cc │ │ │ ├── shared_css_fragment.cc │ │ │ ├── shared_css_fragment.h │ │ │ ├── shared_css_fragment_unittest.cc │ │ │ ├── style_node.cc │ │ │ ├── style_node.h │ │ │ ├── text_attributes.cc │ │ │ ├── text_attributes.h │ │ │ ├── transforms/ │ │ │ │ ├── LICENSE │ │ │ │ ├── transform_operation.cc │ │ │ │ ├── transform_operation.h │ │ │ │ ├── transform_operation_unittest.cc │ │ │ │ ├── transform_operations.cc │ │ │ │ ├── transform_operations.h │ │ │ │ └── transform_operations_unittest.cc │ │ │ ├── unit_handler.cc │ │ │ ├── unit_handler.h │ │ │ └── unit_handler_unittest.cc │ │ ├── data/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── platform_data_android.cc │ │ │ │ └── platform_data_android.h │ │ │ ├── build.gni │ │ │ ├── harmony/ │ │ │ │ ├── platform_data_harmony.cc │ │ │ │ ├── platform_data_harmony.h │ │ │ │ ├── template_data_harmony.cc │ │ │ │ └── template_data_harmony.h │ │ │ ├── ios/ │ │ │ │ ├── platform_data_darwin.h │ │ │ │ └── platform_data_darwin.mm │ │ │ ├── lynx_view_data_manager.cc │ │ │ ├── lynx_view_data_manager.h │ │ │ ├── platform_data.h │ │ │ ├── template_data.cc │ │ │ └── template_data.h │ │ ├── dom/ │ │ │ ├── BUILD.gn │ │ │ ├── air/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── air_element/ │ │ │ │ │ ├── air_block_element.cc │ │ │ │ │ ├── air_block_element.h │ │ │ │ │ ├── air_block_element_unittest.cc │ │ │ │ │ ├── air_component_element.cc │ │ │ │ │ ├── air_component_element.h │ │ │ │ │ ├── air_element.cc │ │ │ │ │ ├── air_element.h │ │ │ │ │ ├── air_element_container.cc │ │ │ │ │ ├── air_element_container.h │ │ │ │ │ ├── air_element_container_unittest.cc │ │ │ │ │ ├── air_element_unittest.cc │ │ │ │ │ ├── air_for_element.cc │ │ │ │ │ ├── air_for_element.h │ │ │ │ │ ├── air_if_element.cc │ │ │ │ │ ├── air_if_element.h │ │ │ │ │ ├── air_page_element.cc │ │ │ │ │ └── air_page_element.h │ │ │ │ ├── air_touch_event_handler.cc │ │ │ │ ├── air_touch_event_handler.h │ │ │ │ ├── air_touch_event_handler_unittest.cc │ │ │ │ ├── lynx_air_parsed_style_store.cc │ │ │ │ ├── lynx_air_parsed_style_store.h │ │ │ │ └── testing/ │ │ │ │ └── air_lepus_context_mock.h │ │ │ ├── android/ │ │ │ │ ├── environment_android.cc │ │ │ │ ├── environment_android.h │ │ │ │ ├── lepus_message_consumer.cc │ │ │ │ ├── lepus_message_consumer.h │ │ │ │ ├── lynx_get_ui_result_android.cc │ │ │ │ ├── lynx_get_ui_result_android.h │ │ │ │ ├── lynx_template_bundle_android.cc │ │ │ │ ├── lynx_template_bundle_android.h │ │ │ │ ├── lynx_view_data_manager_android.cc │ │ │ │ └── lynx_view_data_manager_android.h │ │ │ ├── attribute_holder.cc │ │ │ ├── attribute_holder.h │ │ │ ├── attribute_holder_unittest.cc │ │ │ ├── base_element_container.cc │ │ │ ├── base_element_container.h │ │ │ ├── build.gni │ │ │ ├── component_attributes.cc │ │ │ ├── component_attributes.h │ │ │ ├── component_config.h │ │ │ ├── element.cc │ │ │ ├── element.h │ │ │ ├── element_bundle.cc │ │ │ ├── element_bundle.h │ │ │ ├── element_container.cc │ │ │ ├── element_container.h │ │ │ ├── element_container_unittest.cc │ │ │ ├── element_context_delegate.cc │ │ │ ├── element_context_delegate.h │ │ │ ├── element_context_delegate_unittest.cc │ │ │ ├── element_context_task_queue.cc │ │ │ ├── element_context_task_queue.h │ │ │ ├── element_layout_node_manager.cc │ │ │ ├── element_layout_node_manager.h │ │ │ ├── element_manager.cc │ │ │ ├── element_manager.h │ │ │ ├── element_manager_delegate.h │ │ │ ├── element_manager_unittest.cc │ │ │ ├── element_property.cc │ │ │ ├── element_property.h │ │ │ ├── element_unittest.cc │ │ │ ├── element_vsync_proxy.cc │ │ │ ├── element_vsync_proxy.h │ │ │ ├── element_vsync_proxy_unittest.cc │ │ │ ├── fiber/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── block_element.cc │ │ │ │ ├── block_element.h │ │ │ │ ├── block_element_unittest.cc │ │ │ │ ├── component_element.cc │ │ │ │ ├── component_element.h │ │ │ │ ├── fiber_element.cc │ │ │ │ ├── fiber_element.h │ │ │ │ ├── fiber_element_unittest.cc │ │ │ │ ├── fiber_node_info.cc │ │ │ │ ├── fiber_node_info.h │ │ │ │ ├── fiber_node_info_unittest.cc │ │ │ │ ├── for_element.cc │ │ │ │ ├── for_element.h │ │ │ │ ├── frame_element.cc │ │ │ │ ├── frame_element.h │ │ │ │ ├── if_element.cc │ │ │ │ ├── if_element.h │ │ │ │ ├── image_element.cc │ │ │ │ ├── image_element.h │ │ │ │ ├── list_element.cc │ │ │ │ ├── list_element.h │ │ │ │ ├── list_element_unittest.cc │ │ │ │ ├── list_item_scheduler_adapter.cc │ │ │ │ ├── list_item_scheduler_adapter.h │ │ │ │ ├── list_item_scheduler_adapter_unittest.cc │ │ │ │ ├── none_element.cc │ │ │ │ ├── none_element.h │ │ │ │ ├── page_element.cc │ │ │ │ ├── page_element.h │ │ │ │ ├── platform_layout_function_wrapper.cc │ │ │ │ ├── platform_layout_function_wrapper.h │ │ │ │ ├── platform_types.h │ │ │ │ ├── pseudo_element.cc │ │ │ │ ├── pseudo_element.h │ │ │ │ ├── pseudo_element_unittest.cc │ │ │ │ ├── raw_text_element.cc │ │ │ │ ├── raw_text_element.h │ │ │ │ ├── raw_text_element_unittest.cc │ │ │ │ ├── scroll_element.cc │ │ │ │ ├── scroll_element.h │ │ │ │ ├── scroll_element_unittest.cc │ │ │ │ ├── text_element.cc │ │ │ │ ├── text_element.h │ │ │ │ ├── text_element_unittest.cc │ │ │ │ ├── text_props.h │ │ │ │ ├── tree_resolver.cc │ │ │ │ ├── tree_resolver.h │ │ │ │ ├── view_element.cc │ │ │ │ ├── view_element.h │ │ │ │ ├── wrapper_element.cc │ │ │ │ └── wrapper_element.h │ │ │ ├── fragment/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── box_model_recorder.cc │ │ │ │ ├── box_model_recorder.h │ │ │ │ ├── box_model_recorder_unittest.cc │ │ │ │ ├── display_list.cc │ │ │ │ ├── display_list.h │ │ │ │ ├── display_list_builder.cc │ │ │ │ ├── display_list_builder.h │ │ │ │ ├── display_list_builder_unittest.cc │ │ │ │ ├── display_list_unittest.cc │ │ │ │ ├── event/ │ │ │ │ │ ├── platform_event_bundle.h │ │ │ │ │ ├── platform_event_emitter.cc │ │ │ │ │ ├── platform_event_emitter.h │ │ │ │ │ ├── platform_event_handler.cc │ │ │ │ │ ├── platform_event_handler.h │ │ │ │ │ ├── platform_event_target.cc │ │ │ │ │ ├── platform_event_target.h │ │ │ │ │ ├── platform_event_target_exposure.cc │ │ │ │ │ ├── platform_event_target_exposure.h │ │ │ │ │ ├── platform_event_target_helper.cc │ │ │ │ │ ├── platform_event_target_helper.h │ │ │ │ │ ├── platform_input_event.cc │ │ │ │ │ ├── platform_input_event.h │ │ │ │ │ ├── platform_pointer_event.cc │ │ │ │ │ └── platform_pointer_event.h │ │ │ │ ├── fragment.cc │ │ │ │ ├── fragment.h │ │ │ │ ├── fragment_behavior.cc │ │ │ │ ├── fragment_behavior.h │ │ │ │ ├── fragment_unittest.cc │ │ │ │ ├── image_fragment_behavior.cc │ │ │ │ ├── image_fragment_behavior.h │ │ │ │ ├── layout_info.cc │ │ │ │ ├── layout_info.h │ │ │ │ ├── layout_info_unittest.cc │ │ │ │ ├── list_fragment_behavior.cc │ │ │ │ ├── list_fragment_behavior.h │ │ │ │ ├── list_item_fragment_behavior.cc │ │ │ │ ├── list_item_fragment_behavior.h │ │ │ │ ├── page_fragment_behavior.cc │ │ │ │ ├── page_fragment_behavior.h │ │ │ │ ├── platform_extended_fragment_behavior.cc │ │ │ │ ├── platform_extended_fragment_behavior.h │ │ │ │ ├── rounded_rectangle.h │ │ │ │ ├── rounded_rectangle_unittest.cc │ │ │ │ ├── text_fragment_behavior.cc │ │ │ │ ├── text_fragment_behavior.h │ │ │ │ ├── text_fragment_behavior_unittest.cc │ │ │ │ ├── view_fragment_behavior.cc │ │ │ │ └── view_fragment_behavior.h │ │ │ ├── harmony/ │ │ │ │ ├── lynx_template_bundle_harmony.cc │ │ │ │ └── lynx_template_bundle_harmony.h │ │ │ ├── ios/ │ │ │ │ ├── lepus_value_converter.h │ │ │ │ └── lepus_value_converter.mm │ │ │ ├── layout_bundle.h │ │ │ ├── list_component_info.cc │ │ │ ├── list_component_info.h │ │ │ ├── lynx_get_ui_result.h │ │ │ ├── selector/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── element_selector.cc │ │ │ │ ├── element_selector.h │ │ │ │ ├── fiber_element_selector.cc │ │ │ │ ├── fiber_element_selector.h │ │ │ │ ├── matching/ │ │ │ │ │ ├── attribute_selector_matching.cc │ │ │ │ │ └── attribute_selector_matching.h │ │ │ │ ├── select_result.h │ │ │ │ ├── select_result_unittest.cc │ │ │ │ └── selector_item.h │ │ │ ├── style_resolver.cc │ │ │ ├── style_resolver.h │ │ │ ├── style_resolver_unittest.cc │ │ │ ├── testing/ │ │ │ │ ├── fiber_element_test.cc │ │ │ │ ├── fiber_element_test.h │ │ │ │ ├── fiber_mock_painting_context.cc │ │ │ │ ├── fiber_mock_painting_context.h │ │ │ │ ├── fiber_mock_text_layout.cc │ │ │ │ ├── fiber_mock_text_layout.h │ │ │ │ └── fiber_new_fixed_test.cc │ │ │ └── vdom/ │ │ │ └── radon/ │ │ │ ├── BUILD.gn │ │ │ ├── base_component.cc │ │ │ ├── base_component.h │ │ │ ├── list_reuse_pool.cc │ │ │ ├── list_reuse_pool.h │ │ │ ├── node_path_info.cc │ │ │ ├── node_path_info.h │ │ │ ├── node_select_options.h │ │ │ ├── node_selector.cc │ │ │ ├── node_selector.h │ │ │ ├── radon_base.cc │ │ │ ├── radon_base.h │ │ │ ├── radon_component.cc │ │ │ ├── radon_component.h │ │ │ ├── radon_diff_list_node.cc │ │ │ ├── radon_diff_list_node.h │ │ │ ├── radon_diff_list_node2.cc │ │ │ ├── radon_diff_list_node2.h │ │ │ ├── radon_dispatch_option.cc │ │ │ ├── radon_dispatch_option.h │ │ │ ├── radon_factory.cc │ │ │ ├── radon_factory.h │ │ │ ├── radon_lazy_component.cc │ │ │ ├── radon_lazy_component.h │ │ │ ├── radon_list_base.cc │ │ │ ├── radon_list_base.h │ │ │ ├── radon_node.cc │ │ │ ├── radon_node.h │ │ │ ├── radon_node_unittest.cc │ │ │ ├── radon_page.cc │ │ │ ├── radon_page.h │ │ │ ├── radon_slot.cc │ │ │ ├── radon_slot.h │ │ │ ├── radon_types.h │ │ │ └── set_css_variable_op.h │ │ ├── element_manager_delegate_impl.cc │ │ ├── element_manager_delegate_impl.h │ │ ├── events/ │ │ │ ├── BUILD.gn │ │ │ ├── closure_event_listener.cc │ │ │ ├── closure_event_listener.h │ │ │ ├── closure_event_listener_test.cc │ │ │ ├── event_handler.cc │ │ │ ├── events.h │ │ │ ├── gesture.h │ │ │ ├── touch_event_handler.cc │ │ │ ├── touch_event_handler.h │ │ │ └── touch_event_handler_unittest.cc │ │ ├── js_bundle_holder_impl.cc │ │ ├── js_bundle_holder_impl.h │ │ ├── layout_scheduler/ │ │ │ ├── BUILD.gn │ │ │ ├── layout_scheduler.cc │ │ │ └── layout_scheduler.h │ │ ├── lynx_env_config.cc │ │ ├── lynx_env_config.h │ │ ├── lynx_global_pool.cc │ │ ├── lynx_global_pool.h │ │ ├── page_config_unittests.cc │ │ ├── page_proxy.cc │ │ ├── page_proxy.h │ │ ├── pipeline/ │ │ │ ├── BUILD.gn │ │ │ ├── pipeline_context.cc │ │ │ ├── pipeline_context.h │ │ │ ├── pipeline_context_manager.cc │ │ │ ├── pipeline_context_manager.h │ │ │ ├── pipeline_context_manager_unittest.cc │ │ │ ├── pipeline_context_manager_unittest.h │ │ │ ├── pipeline_context_unittest.cc │ │ │ ├── pipeline_context_unittest.h │ │ │ ├── pipeline_layout_data.h │ │ │ ├── pipeline_lifecycle.cc │ │ │ ├── pipeline_lifecycle.h │ │ │ ├── pipeline_lifecycle_observer.h │ │ │ ├── pipeline_lifecycle_unittest.cc │ │ │ ├── pipeline_lifecycle_unittest.h │ │ │ ├── pipeline_scope.cc │ │ │ ├── pipeline_scope.h │ │ │ ├── pipeline_scope_unittest.cc │ │ │ ├── pipeline_scope_unittest.h │ │ │ ├── pipeline_version.h │ │ │ ├── pipeline_version_unittest.cc │ │ │ └── pipeline_version_unittest.h │ │ ├── signal/ │ │ │ ├── BUILD.gn │ │ │ ├── computation.cc │ │ │ ├── computation.h │ │ │ ├── computation_unittest.cc │ │ │ ├── computation_unittest.h │ │ │ ├── lynx_signal.cc │ │ │ ├── lynx_signal.h │ │ │ ├── lynx_signal_unittest.cc │ │ │ ├── lynx_signal_unittest.h │ │ │ ├── memo.cc │ │ │ ├── memo.h │ │ │ ├── memo_unittest.cc │ │ │ ├── memo_unittest.h │ │ │ ├── scope.cc │ │ │ ├── scope.h │ │ │ ├── scope_unittest.cc │ │ │ ├── scope_unittest.h │ │ │ ├── signal_context.cc │ │ │ ├── signal_context.h │ │ │ ├── signal_context_unittest.cc │ │ │ └── signal_context_unittest.h │ │ ├── simple_styling/ │ │ │ ├── BUILD.gn │ │ │ ├── simple_style_node.h │ │ │ ├── simple_styling.gni │ │ │ ├── style_object.cc │ │ │ ├── style_object.h │ │ │ ├── style_object_decoder.h │ │ │ └── style_object_unittest.cc │ │ ├── starlight/ │ │ │ ├── BUILD.gn │ │ │ ├── event/ │ │ │ │ ├── layout_event.h │ │ │ │ ├── layout_event_data.h │ │ │ │ └── layout_event_handler.h │ │ │ ├── layout/ │ │ │ │ ├── box_info.cc │ │ │ │ ├── box_info.h │ │ │ │ ├── cache_manager.cc │ │ │ │ ├── cache_manager.h │ │ │ │ ├── container_node.cc │ │ │ │ ├── container_node.h │ │ │ │ ├── container_node_unittest.cc │ │ │ │ ├── direction_selector.h │ │ │ │ ├── elastic_layout_utils.cc │ │ │ │ ├── elastic_layout_utils.h │ │ │ │ ├── flex_info.cc │ │ │ │ ├── flex_info.h │ │ │ │ ├── flex_layout_algorithm.cc │ │ │ │ ├── flex_layout_algorithm.h │ │ │ │ ├── grid_item_info.cc │ │ │ │ ├── grid_item_info.h │ │ │ │ ├── grid_layout_algorithm.cc │ │ │ │ ├── grid_layout_algorithm.h │ │ │ │ ├── layout_algorithm.cc │ │ │ │ ├── layout_algorithm.h │ │ │ │ ├── layout_global.cc │ │ │ │ ├── layout_global.h │ │ │ │ ├── layout_object.cc │ │ │ │ ├── layout_object.h │ │ │ │ ├── linear_layout_algorithm.cc │ │ │ │ ├── linear_layout_algorithm.h │ │ │ │ ├── logic_direction_utils.cc │ │ │ │ ├── logic_direction_utils.h │ │ │ │ ├── node.h │ │ │ │ ├── position_layout_utils.cc │ │ │ │ ├── position_layout_utils.h │ │ │ │ ├── property_resolving_utils.cc │ │ │ │ ├── property_resolving_utils.h │ │ │ │ ├── relative_layout_algorithm.cc │ │ │ │ ├── relative_layout_algorithm.h │ │ │ │ ├── staggered_grid_layout_algorithm.cc │ │ │ │ └── staggered_grid_layout_algorithm.h │ │ │ ├── style/ │ │ │ │ ├── borders_data.cc │ │ │ │ ├── borders_data.h │ │ │ │ ├── box_data.cc │ │ │ │ ├── box_data.h │ │ │ │ ├── copyable.h │ │ │ │ ├── css_type.h │ │ │ │ ├── data_ref.h │ │ │ │ ├── data_ref_unittest.cc │ │ │ │ ├── default_layout_style.h │ │ │ │ ├── flex_data.cc │ │ │ │ ├── flex_data.h │ │ │ │ ├── grid_data.cc │ │ │ │ ├── grid_data.h │ │ │ │ ├── layout_computed_style.cc │ │ │ │ ├── layout_computed_style.h │ │ │ │ ├── layout_style_utils.cc │ │ │ │ ├── layout_style_utils.h │ │ │ │ ├── linear_data.cc │ │ │ │ ├── linear_data.h │ │ │ │ ├── relative_data.cc │ │ │ │ ├── relative_data.h │ │ │ │ ├── surround_data.cc │ │ │ │ └── surround_data.h │ │ │ └── types/ │ │ │ ├── layout_attribute.h │ │ │ ├── layout_configs.h │ │ │ ├── layout_constraints.h │ │ │ ├── layout_directions.h │ │ │ ├── layout_measurefunc.h │ │ │ ├── layout_result.h │ │ │ ├── layout_types.h │ │ │ ├── layout_unit.h │ │ │ ├── nlength.cc │ │ │ └── nlength.h │ │ ├── tasm/ │ │ │ ├── config.cc │ │ │ ├── config.h │ │ │ ├── i18n/ │ │ │ │ ├── i18n.cc │ │ │ │ ├── i18n.h │ │ │ │ ├── i18n_binder_android.cc │ │ │ │ ├── i18n_binder_android.h │ │ │ │ ├── i18n_binder_darwin.h │ │ │ │ └── i18n_binder_darwin.mm │ │ │ ├── napi_bind.cc │ │ │ ├── react/ │ │ │ │ ├── android/ │ │ │ │ │ └── mapbuffer/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── base_buffer.h │ │ │ │ │ ├── base_buffer_builder.h │ │ │ │ │ ├── compact_array_buffer.cc │ │ │ │ │ ├── compact_array_buffer.h │ │ │ │ │ ├── compact_array_buffer_builder.cc │ │ │ │ │ ├── compact_array_buffer_builder.h │ │ │ │ │ ├── map_buffer.cc │ │ │ │ │ ├── map_buffer.h │ │ │ │ │ ├── map_buffer_builder.cc │ │ │ │ │ ├── map_buffer_builder.h │ │ │ │ │ ├── readable_compact_array_buffer.cc │ │ │ │ │ ├── readable_compact_array_buffer.h │ │ │ │ │ ├── readable_map_buffer.cc │ │ │ │ │ ├── readable_map_buffer.h │ │ │ │ │ └── testing/ │ │ │ │ │ ├── compact_array_buffer_unittest.cc │ │ │ │ │ └── map_buffer_unittest.cc │ │ │ │ └── testing/ │ │ │ │ └── mock_painting_context.h │ │ │ ├── sysinfo/ │ │ │ │ ├── sysinfo_android.cc │ │ │ │ ├── sysinfo_default.cc │ │ │ │ ├── sysinfo_harmony.cc │ │ │ │ ├── sysinfo_headless.cc │ │ │ │ └── sysinfo_ios.cc │ │ │ └── testing/ │ │ │ ├── event_tracker_mock.cc │ │ │ ├── event_tracker_mock.h │ │ │ └── mock_attribute_holder.h │ │ ├── tasm_runtime_bundle.h │ │ ├── template_assembler.cc │ │ ├── template_assembler.h │ │ ├── template_entry.cc │ │ ├── template_entry.h │ │ ├── template_entry_holder.cc │ │ ├── template_entry_holder.h │ │ ├── template_themed.h │ │ ├── trace/ │ │ │ ├── BUILD.gn │ │ │ └── renderer_trace_event_def.h │ │ ├── ui_component/ │ │ │ └── list/ │ │ │ ├── BUILD.gn │ │ │ ├── adapter_helper.cc │ │ │ ├── adapter_helper.h │ │ │ ├── animation_item_holder.cc │ │ │ ├── animation_item_holder.h │ │ │ ├── batch_list_adapter.cc │ │ │ ├── batch_list_adapter.h │ │ │ ├── batch_list_adapter_unittest.cc │ │ │ ├── default_list_adapter.cc │ │ │ ├── default_list_adapter.h │ │ │ ├── default_list_adapter_unittest.cc │ │ │ ├── grid_layout_manager.cc │ │ │ ├── grid_layout_manager.h │ │ │ ├── item_holder.cc │ │ │ ├── item_holder.h │ │ │ ├── linear_layout_manager.cc │ │ │ ├── linear_layout_manager.h │ │ │ ├── list_adapter.cc │ │ │ ├── list_adapter.h │ │ │ ├── list_adapter_unittest.cc │ │ │ ├── list_anchor_manager.cc │ │ │ ├── list_anchor_manager.h │ │ │ ├── list_anchor_manager_unittest.cc │ │ │ ├── list_children_helper.cc │ │ │ ├── list_children_helper.h │ │ │ ├── list_children_helper_unittest.cc │ │ │ ├── list_container_animation_manager.cc │ │ │ ├── list_container_animation_manager.h │ │ │ ├── list_container_default.cc │ │ │ ├── list_container_default.h │ │ │ ├── list_container_delegate_internal.h │ │ │ ├── list_container_impl.cc │ │ │ ├── list_container_impl.h │ │ │ ├── list_event_manager.cc │ │ │ ├── list_event_manager.h │ │ │ ├── list_event_manager_unittest.cc │ │ │ ├── list_layout_manager.cc │ │ │ ├── list_layout_manager.h │ │ │ ├── list_orientation_helper.cc │ │ │ ├── list_orientation_helper.h │ │ │ ├── list_types.h │ │ │ ├── mediator/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── list_item_mediator.cc │ │ │ │ ├── list_item_mediator.h │ │ │ │ ├── list_mediator.cc │ │ │ │ └── list_mediator.h │ │ │ ├── staggered_grid_layout_manager.cc │ │ │ ├── staggered_grid_layout_manager.h │ │ │ ├── staggered_grid_layout_manager_unittest.cc │ │ │ └── testing/ │ │ │ ├── mock_diff_result.h │ │ │ ├── mock_list_element.h │ │ │ ├── utils.cc │ │ │ └── utils.h │ │ ├── ui_wrapper/ │ │ │ ├── BUILD.gn │ │ │ ├── common/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── android/ │ │ │ │ │ ├── platform_extra_bundle_android.cc │ │ │ │ │ ├── platform_extra_bundle_android.h │ │ │ │ │ ├── prop_bundle_android.cc │ │ │ │ │ ├── prop_bundle_android.h │ │ │ │ │ ├── prop_bundle_android_test.cc │ │ │ │ │ └── prop_bundle_android_test.h │ │ │ │ ├── harmony/ │ │ │ │ │ ├── platform_extra_bundle_harmony.cc │ │ │ │ │ ├── platform_extra_bundle_harmony.h │ │ │ │ │ ├── prop_bundle_harmony.cc │ │ │ │ │ └── prop_bundle_harmony.h │ │ │ │ ├── ios/ │ │ │ │ │ ├── platform_extra_bundle_darwin.h │ │ │ │ │ ├── platform_extra_bundle_darwin.mm │ │ │ │ │ ├── prop_bundle_darwin.h │ │ │ │ │ └── prop_bundle_darwin.mm │ │ │ │ ├── native_prop_bundle.cc │ │ │ │ ├── native_prop_bundle.h │ │ │ │ ├── prop_bundle_creator_default.cc │ │ │ │ ├── prop_bundle_creator_default.h │ │ │ │ └── testing/ │ │ │ │ ├── prop_bundle_mock.cc │ │ │ │ └── prop_bundle_mock.h │ │ │ ├── layout/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── android/ │ │ │ │ │ ├── layout_context_android.cc │ │ │ │ │ ├── layout_context_android.h │ │ │ │ │ ├── layout_node_android.cc │ │ │ │ │ ├── layout_node_android.h │ │ │ │ │ ├── layout_node_manager_android.cc │ │ │ │ │ ├── layout_node_manager_android.h │ │ │ │ │ ├── text_layout_android.cc │ │ │ │ │ └── text_layout_android.h │ │ │ │ ├── empty/ │ │ │ │ │ └── layout_context_empty_implementation.h │ │ │ │ ├── harmony/ │ │ │ │ │ ├── layout_context_harmony.cc │ │ │ │ │ └── layout_context_harmony.h │ │ │ │ ├── ios/ │ │ │ │ │ ├── layout_context_darwin.h │ │ │ │ │ ├── layout_context_darwin.mm │ │ │ │ │ ├── text_layout_darwin.h │ │ │ │ │ └── text_layout_darwin.mm │ │ │ │ ├── layout_context.cc │ │ │ │ ├── layout_context.h │ │ │ │ ├── layout_context_data.h │ │ │ │ ├── layout_node.cc │ │ │ │ ├── layout_node.h │ │ │ │ ├── list_node.cc │ │ │ │ ├── list_node.h │ │ │ │ ├── no_needed_layout_list.h │ │ │ │ └── textra/ │ │ │ │ ├── text_layout_api.h │ │ │ │ ├── text_layout_textra.cc │ │ │ │ └── text_layout_textra.h │ │ │ └── painting/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── native_painting_context_android.cc │ │ │ │ ├── native_painting_context_android.h │ │ │ │ ├── native_painting_context_platform_android_ref.cc │ │ │ │ ├── native_painting_context_platform_android_ref.h │ │ │ │ ├── painting_context_android.cc │ │ │ │ ├── painting_context_android.h │ │ │ │ ├── platform_renderer_android.cc │ │ │ │ ├── platform_renderer_android.h │ │ │ │ ├── platform_renderer_context.cc │ │ │ │ ├── platform_renderer_context.h │ │ │ │ ├── ui_delegate_android.cc │ │ │ │ └── ui_delegate_android.h │ │ │ ├── catalyzer.cc │ │ │ ├── catalyzer.h │ │ │ ├── empty/ │ │ │ │ └── painting_context_implementation.h │ │ │ ├── harmony/ │ │ │ │ ├── painting_context_harmony.cc │ │ │ │ ├── painting_context_harmony.h │ │ │ │ ├── ui_delegate_harmony.cc │ │ │ │ └── ui_delegate_harmony.h │ │ │ ├── ios/ │ │ │ │ ├── native_painting_context_darwin.h │ │ │ │ ├── native_painting_context_darwin.mm │ │ │ │ ├── native_painting_context_platform_darwin_ref.h │ │ │ │ ├── native_painting_context_platform_darwin_ref.mm │ │ │ │ ├── painting_context_darwin.h │ │ │ │ ├── painting_context_darwin.mm │ │ │ │ ├── painting_context_darwin_UnitTest.mm │ │ │ │ ├── painting_context_darwin_utils.h │ │ │ │ ├── painting_context_darwin_utils.mm │ │ │ │ ├── platform_renderer_context_darwin.h │ │ │ │ ├── platform_renderer_context_darwin.mm │ │ │ │ ├── platform_renderer_darwin.h │ │ │ │ ├── platform_renderer_darwin.mm │ │ │ │ ├── platform_renderer_darwin_factory.h │ │ │ │ ├── platform_renderer_darwin_factory.mm │ │ │ │ ├── ui_delegate_darwin.h │ │ │ │ └── ui_delegate_darwin.mm │ │ │ ├── native_painting_context.cc │ │ │ ├── native_painting_context.h │ │ │ ├── native_painting_context_platform_ref.cc │ │ │ ├── native_painting_context_platform_ref.h │ │ │ ├── painting_context.cc │ │ │ ├── painting_context.h │ │ │ ├── platform_renderer.h │ │ │ ├── platform_renderer_impl.cc │ │ │ └── platform_renderer_impl.h │ │ ├── utils/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── device_display_info.cc │ │ │ │ ├── devtool_lifecycle_android.cc │ │ │ │ ├── devtool_lifecycle_android.h │ │ │ │ ├── event_converter_android.cc │ │ │ │ ├── event_converter_android.h │ │ │ │ ├── event_converter_android_unittest.cc │ │ │ │ ├── lynx_env_android.cc │ │ │ │ ├── lynx_env_android.h │ │ │ │ ├── lynx_trail_hub_impl_android.cc │ │ │ │ ├── lynx_trail_hub_impl_android.h │ │ │ │ ├── text_utils_android.cc │ │ │ │ ├── text_utils_android.h │ │ │ │ ├── value_converter_android.cc │ │ │ │ └── value_converter_android.h │ │ │ ├── base/ │ │ │ │ ├── base_def.h │ │ │ │ ├── element_template_info.h │ │ │ │ ├── tasm_constants.h │ │ │ │ ├── tasm_utils.cc │ │ │ │ ├── tasm_utils.h │ │ │ │ ├── tasm_worker_basic_task_runner.cc │ │ │ │ ├── tasm_worker_basic_task_runner.h │ │ │ │ ├── tasm_worker_task_runner.cc │ │ │ │ ├── tasm_worker_task_runner.h │ │ │ │ └── tasm_worker_task_runner_unittest.cc │ │ │ ├── build.gni │ │ │ ├── darwin/ │ │ │ │ ├── event_converter_darwin.h │ │ │ │ ├── event_converter_darwin.mm │ │ │ │ └── event_converter_darwin_unittest.mm │ │ │ ├── devtool_lifecycle.cc │ │ │ ├── devtool_lifecycle.h │ │ │ ├── devtool_lifecycle_unittest.cc │ │ │ ├── devtool_state.h │ │ │ ├── diff_algorithm.h │ │ │ ├── diff_algorithm_unittest.cc │ │ │ ├── harmony/ │ │ │ │ ├── lynx_trail_hub_impl_harmony.cc │ │ │ │ ├── lynx_trail_hub_impl_harmony.h │ │ │ │ └── sys_env_harmony.cc │ │ │ ├── ios/ │ │ │ │ ├── text_utils_ios.h │ │ │ │ └── text_utils_ios.mm │ │ │ ├── lynx_env.cc │ │ │ ├── lynx_env.h │ │ │ ├── lynx_trail_hub.cc │ │ │ ├── lynx_trail_hub.h │ │ │ ├── lynx_trail_hub_impl_default.cc │ │ │ ├── prop_bundle_style_writer.cc │ │ │ ├── prop_bundle_style_writer.h │ │ │ ├── prop_bundle_style_writer_unittest.cc │ │ │ ├── prop_bundle_style_writer_unittest.h │ │ │ ├── sys_lynx_env/ │ │ │ │ └── sys_env_default.cc │ │ │ ├── test/ │ │ │ │ ├── text_utils_mock.cc │ │ │ │ └── text_utils_mock.h │ │ │ ├── value_utils.cc │ │ │ └── value_utils.h │ │ └── worklet/ │ │ ├── BUILD.gn │ │ ├── base/ │ │ │ ├── worklet_utils.cc │ │ │ └── worklet_utils.h │ │ ├── lepus_component.cc │ │ ├── lepus_component.h │ │ ├── lepus_element.cc │ │ ├── lepus_element.h │ │ ├── lepus_gesture.cc │ │ ├── lepus_gesture.h │ │ ├── lepus_lynx.cc │ │ ├── lepus_lynx.h │ │ ├── lepus_raf_handler.cc │ │ ├── lepus_raf_handler.h │ │ └── test/ │ │ ├── worklet_api_unittest.cc │ │ ├── worklet_event_unittest.cc │ │ └── worklet_utils_unittest.cc │ ├── resource/ │ │ ├── BUILD.gn │ │ ├── external_resource/ │ │ │ ├── external_resource_loader.cc │ │ │ └── external_resource_loader.h │ │ ├── lazy_bundle/ │ │ │ ├── bundle_resource_info.h │ │ │ ├── lazy_bundle_lifecycle_option.cc │ │ │ ├── lazy_bundle_lifecycle_option.h │ │ │ ├── lazy_bundle_loader.cc │ │ │ ├── lazy_bundle_loader.h │ │ │ ├── lazy_bundle_request.h │ │ │ ├── lazy_bundle_unittest.cc │ │ │ ├── lazy_bundle_utils.cc │ │ │ └── lazy_bundle_utils.h │ │ ├── lynx_info_reporter_helper_harmony.cc │ │ ├── lynx_info_reporter_helper_harmony.h │ │ ├── lynx_resource_loader.cc │ │ ├── lynx_resource_loader_android.cc │ │ ├── lynx_resource_loader_android.h │ │ ├── lynx_resource_loader_darwin.h │ │ ├── lynx_resource_loader_darwin.mm │ │ ├── lynx_resource_loader_harmony.cc │ │ ├── lynx_resource_loader_harmony.h │ │ ├── lynx_resource_setting.cc │ │ ├── lynx_resource_setting.h │ │ └── trace/ │ │ ├── BUILD.gn │ │ └── resource_trace_event_def.h │ ├── runtime/ │ │ ├── BUILD.gn │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ ├── bindings/ │ │ │ │ ├── event/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── context_proxy.cc │ │ │ │ │ ├── context_proxy.h │ │ │ │ │ ├── context_proxy_test.cc │ │ │ │ │ ├── context_proxy_test.h │ │ │ │ │ ├── message_event.cc │ │ │ │ │ ├── message_event.h │ │ │ │ │ ├── message_event_test.cc │ │ │ │ │ ├── message_event_test.h │ │ │ │ │ └── runtime_constants.h │ │ │ │ ├── modules/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── lynx_native_module_manager.cc │ │ │ │ │ ├── lynx_native_module_manager.h │ │ │ │ │ ├── lynx_native_module_manager_unittest.cc │ │ │ │ │ └── mock_native_module.h │ │ │ │ └── resource/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── response_handler_proxy.h │ │ │ │ ├── response_promise.h │ │ │ │ ├── response_promise_unittest.cc │ │ │ │ └── response_promise_unittest.h │ │ │ ├── js_error_reporter.cc │ │ │ ├── js_error_reporter.h │ │ │ ├── js_error_reporter_unittest.cc │ │ │ ├── lynx_console_helper.h │ │ │ └── napi/ │ │ │ ├── BUILD.gn │ │ │ ├── jsbinding_napi_v8_ios_imp.cc │ │ │ ├── napi.gni │ │ │ ├── napi_bench_object.h │ │ │ ├── napi_environment.cc │ │ │ ├── napi_environment.h │ │ │ ├── napi_environment_unittest.cc │ │ │ ├── napi_runtime_proxy.cc │ │ │ ├── napi_runtime_proxy.h │ │ │ ├── napi_runtime_proxy_jsc.cc │ │ │ ├── napi_runtime_proxy_jsc.h │ │ │ ├── napi_runtime_proxy_jsvm.cc │ │ │ ├── napi_runtime_proxy_jsvm.h │ │ │ ├── napi_runtime_proxy_jsvm_factory.h │ │ │ ├── napi_runtime_proxy_quickjs.cc │ │ │ ├── napi_runtime_proxy_quickjs.h │ │ │ ├── napi_runtime_proxy_quickjs_factory.h │ │ │ ├── napi_runtime_proxy_v8.cc │ │ │ ├── napi_runtime_proxy_v8.h │ │ │ ├── napi_runtime_proxy_v8_factory.h │ │ │ └── shim/ │ │ │ ├── README.md │ │ │ ├── shim_napi_env_jsc.h │ │ │ ├── shim_napi_env_quickjs.h │ │ │ └── shim_napi_env_v8.h │ │ ├── js/ │ │ │ ├── BUILD.gn │ │ │ ├── bindings/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── api_call_back-inl.h │ │ │ │ ├── api_call_back.cc │ │ │ │ ├── api_call_back.h │ │ │ │ ├── api_call_back_unittest.cc │ │ │ │ ├── api_invoke_ctrl.h │ │ │ │ ├── big_int/ │ │ │ │ │ ├── big_integer.h │ │ │ │ │ ├── constants.cc │ │ │ │ │ ├── jsbi.cc │ │ │ │ │ └── jsbi.h │ │ │ │ ├── console.h │ │ │ │ ├── event/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── context_proxy_in_js.cc │ │ │ │ │ ├── context_proxy_in_js.h │ │ │ │ │ ├── context_proxy_in_js_test.cc │ │ │ │ │ ├── context_proxy_in_js_test.h │ │ │ │ │ ├── js_event_listener.cc │ │ │ │ │ ├── js_event_listener.h │ │ │ │ │ ├── js_event_listener_test.cc │ │ │ │ │ └── js_event_listener_test.h │ │ │ │ ├── global.cc │ │ │ │ ├── global.h │ │ │ │ ├── interceptor/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── interceptor_factory.cc │ │ │ │ │ └── interceptor_factory.h │ │ │ │ ├── java_script_element.cc │ │ │ │ ├── java_script_element.h │ │ │ │ ├── js_app.cc │ │ │ │ ├── js_app.h │ │ │ │ ├── js_app_unittest.cc │ │ │ │ ├── js_object_destruction_observer.h │ │ │ │ ├── js_task_adapter.cc │ │ │ │ ├── js_task_adapter.h │ │ │ │ ├── js_task_adapter_unittest.cc │ │ │ │ ├── lynx.cc │ │ │ │ ├── lynx.h │ │ │ │ ├── lynx_console.cc │ │ │ │ ├── lynx_js_error.cc │ │ │ │ ├── lynx_js_error.h │ │ │ │ ├── mock_module_delegate.h │ │ │ │ ├── modules/ │ │ │ │ │ ├── android/ │ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ │ ├── callback_impl.cc │ │ │ │ │ │ ├── callback_impl.h │ │ │ │ │ │ ├── java_attribute_descriptor.cc │ │ │ │ │ │ ├── java_attribute_descriptor.h │ │ │ │ │ │ ├── java_method_descriptor.cc │ │ │ │ │ │ ├── java_method_descriptor.h │ │ │ │ │ │ ├── jni_v8_bridge.cc │ │ │ │ │ │ ├── lynx_module_android.cc │ │ │ │ │ │ ├── lynx_module_android.h │ │ │ │ │ │ ├── lynx_promise_impl.cc │ │ │ │ │ │ ├── lynx_promise_impl.h │ │ │ │ │ │ ├── lynx_proxy_runtime_helper.cc │ │ │ │ │ │ ├── lynx_proxy_runtime_helper.h │ │ │ │ │ │ ├── method_invoker.cc │ │ │ │ │ │ ├── method_invoker.h │ │ │ │ │ │ ├── module_factory_android.cc │ │ │ │ │ │ ├── module_factory_android.h │ │ │ │ │ │ ├── platform_jsi/ │ │ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ │ │ ├── jsi_object_utils.cc │ │ │ │ │ │ │ ├── jsi_object_utils.h │ │ │ │ │ │ │ ├── lynx_jsi_object_descriptor.cc │ │ │ │ │ │ │ ├── lynx_jsi_object_descriptor.h │ │ │ │ │ │ │ ├── lynx_platform_jsi_object_android.cc │ │ │ │ │ │ │ └── lynx_platform_jsi_object_android.h │ │ │ │ │ │ └── webassembly_bridge.cc │ │ │ │ │ ├── harmony/ │ │ │ │ │ │ ├── module_factory_harmony.cc │ │ │ │ │ │ ├── module_factory_harmony.h │ │ │ │ │ │ ├── native_module_harmony.cc │ │ │ │ │ │ ├── native_module_harmony.h │ │ │ │ │ │ ├── platform_module_manager.cc │ │ │ │ │ │ └── platform_module_manager.h │ │ │ │ │ ├── ios/ │ │ │ │ │ │ ├── common_module_creator.h │ │ │ │ │ │ ├── common_module_creator.mm │ │ │ │ │ │ ├── lynx_module_creator_darwin.h │ │ │ │ │ │ ├── lynx_module_darwin.h │ │ │ │ │ │ ├── lynx_module_darwin.mm │ │ │ │ │ │ ├── lynx_module_interceptor.h │ │ │ │ │ │ ├── lynx_module_interceptor.mm │ │ │ │ │ │ ├── module_factory_darwin.h │ │ │ │ │ │ ├── module_factory_darwin.mm │ │ │ │ │ │ ├── shared_module_creator.h │ │ │ │ │ │ └── shared_module_creator.mm │ │ │ │ │ ├── lynx_jsi_module.cc │ │ │ │ │ ├── lynx_jsi_module.h │ │ │ │ │ ├── lynx_jsi_module_binding.cc │ │ │ │ │ ├── lynx_jsi_module_binding.h │ │ │ │ │ ├── lynx_jsi_module_callback.cc │ │ │ │ │ ├── lynx_jsi_module_callback.h │ │ │ │ │ ├── lynx_module.cc │ │ │ │ │ ├── lynx_module.h │ │ │ │ │ ├── lynx_module_manager.cc │ │ │ │ │ ├── lynx_module_manager.h │ │ │ │ │ ├── lynx_module_manager_unittest.cc │ │ │ │ │ ├── lynx_module_timing.cc │ │ │ │ │ ├── lynx_module_timing.h │ │ │ │ │ ├── module_delegate.h │ │ │ │ │ ├── module_interceptor.cc │ │ │ │ │ ├── module_interceptor.h │ │ │ │ │ └── native_module_factory_unittest.cc │ │ │ │ ├── resource/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── response_handler_in_js.cc │ │ │ │ │ ├── response_handler_in_js.h │ │ │ │ │ └── response_handler_in_js_unittest.cc │ │ │ │ ├── text_codec_helper.cc │ │ │ │ ├── text_codec_helper.h │ │ │ │ └── text_codec_helper_unittest.cc │ │ │ ├── bytecode/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── android/ │ │ │ │ │ ├── bytecode_callback.cc │ │ │ │ │ ├── bytecode_callback.h │ │ │ │ │ └── js_cache_manager_android.cc │ │ │ │ ├── cache_generator.h │ │ │ │ ├── harmony/ │ │ │ │ │ ├── js_cache_manager_harmony.cc │ │ │ │ │ └── js_cache_manager_harmony.h │ │ │ │ ├── ios/ │ │ │ │ │ └── js_cache_manager_darwin.mm │ │ │ │ ├── js_cache_manager.cc │ │ │ │ ├── js_cache_manager.h │ │ │ │ ├── js_cache_manager_facade.cc │ │ │ │ ├── js_cache_manager_facade.h │ │ │ │ ├── js_cache_manager_facade_unittest.cc │ │ │ │ ├── js_cache_manager_mock.cc │ │ │ │ ├── js_cache_manager_unittest.cc │ │ │ │ ├── js_cache_tracker.cc │ │ │ │ ├── js_cache_tracker.h │ │ │ │ ├── js_cache_tracker_unittest.cc │ │ │ │ ├── js_cache_tracker_unittest.h │ │ │ │ ├── meta_data.cc │ │ │ │ ├── meta_data.h │ │ │ │ ├── meta_data_unittest.cc │ │ │ │ ├── quickjs/ │ │ │ │ │ ├── bytecode/ │ │ │ │ │ │ ├── quickjs_bytecode.h │ │ │ │ │ │ ├── quickjs_bytecode_debug_info_unittest.cc │ │ │ │ │ │ ├── quickjs_bytecode_provider.cc │ │ │ │ │ │ ├── quickjs_bytecode_provider.h │ │ │ │ │ │ ├── quickjs_bytecode_provider_src.cc │ │ │ │ │ │ ├── quickjs_bytecode_provider_src.h │ │ │ │ │ │ └── quickjs_bytecode_provider_unittest.cc │ │ │ │ │ ├── quickjs_cache.gni │ │ │ │ │ ├── quickjs_cache_generator.cc │ │ │ │ │ └── quickjs_cache_generator.h │ │ │ │ └── v8/ │ │ │ │ ├── v8_cache_generator.cc │ │ │ │ └── v8_cache_generator.h │ │ │ ├── js_bundle.cc │ │ │ ├── js_bundle.h │ │ │ ├── js_bundle_holder.h │ │ │ ├── js_bundle_unittest.cc │ │ │ ├── js_context_wrapper.cc │ │ │ ├── js_context_wrapper.h │ │ │ ├── js_executor.cc │ │ │ ├── js_executor.h │ │ │ ├── jsi/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LICENSE │ │ │ │ ├── args_converter.h │ │ │ │ ├── args_converter_unittest.cc │ │ │ │ ├── instrumentation.h │ │ │ │ ├── jsc/ │ │ │ │ │ ├── jsc.gni │ │ │ │ │ ├── jsc_api.h │ │ │ │ │ ├── jsc_context_group_wrapper.cc │ │ │ │ │ ├── jsc_context_group_wrapper.h │ │ │ │ │ ├── jsc_context_wrapper.cc │ │ │ │ │ ├── jsc_context_wrapper.h │ │ │ │ │ ├── jsc_exception.cc │ │ │ │ │ ├── jsc_exception.h │ │ │ │ │ ├── jsc_helper.cc │ │ │ │ │ ├── jsc_helper.h │ │ │ │ │ ├── jsc_host_function.cc │ │ │ │ │ ├── jsc_host_function.h │ │ │ │ │ ├── jsc_host_object.cc │ │ │ │ │ ├── jsc_host_object.h │ │ │ │ │ ├── jsc_runtime.cc │ │ │ │ │ └── jsc_runtime.h │ │ │ │ ├── jsi-inl.h │ │ │ │ ├── jsi.cc │ │ │ │ ├── jsi.h │ │ │ │ ├── jsi_unittest.cc │ │ │ │ ├── jsi_unittest.h │ │ │ │ ├── jslib.h │ │ │ │ ├── jsvm/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── jsvm_api.h │ │ │ │ │ ├── jsvm_context_wrapper.cc │ │ │ │ │ ├── jsvm_context_wrapper.h │ │ │ │ │ ├── jsvm_declare.def │ │ │ │ │ ├── jsvm_dyn_load.h │ │ │ │ │ ├── jsvm_exception.cc │ │ │ │ │ ├── jsvm_exception.h │ │ │ │ │ ├── jsvm_helper.cc │ │ │ │ │ ├── jsvm_helper.h │ │ │ │ │ ├── jsvm_host_function.cc │ │ │ │ │ ├── jsvm_host_function.h │ │ │ │ │ ├── jsvm_host_object.cc │ │ │ │ │ ├── jsvm_host_object.h │ │ │ │ │ ├── jsvm_runtime.cc │ │ │ │ │ ├── jsvm_runtime.h │ │ │ │ │ ├── jsvm_runtime_wrapper.cc │ │ │ │ │ ├── jsvm_runtime_wrapper.h │ │ │ │ │ └── jsvm_util.h │ │ │ │ ├── quickjs/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── build.gni │ │ │ │ │ ├── quickjs_api.h │ │ │ │ │ ├── quickjs_context_wrapper.cc │ │ │ │ │ ├── quickjs_context_wrapper.h │ │ │ │ │ ├── quickjs_exception.cc │ │ │ │ │ ├── quickjs_exception.h │ │ │ │ │ ├── quickjs_helper.cc │ │ │ │ │ ├── quickjs_helper.h │ │ │ │ │ ├── quickjs_helper_unittest.cc │ │ │ │ │ ├── quickjs_host_function.cc │ │ │ │ │ ├── quickjs_host_function.h │ │ │ │ │ ├── quickjs_host_object.cc │ │ │ │ │ ├── quickjs_host_object.h │ │ │ │ │ ├── quickjs_inspector_manager.h │ │ │ │ │ ├── quickjs_runtime.cc │ │ │ │ │ ├── quickjs_runtime.h │ │ │ │ │ ├── quickjs_runtime_unittest.cc │ │ │ │ │ ├── quickjs_runtime_wrapper.cc │ │ │ │ │ └── quickjs_runtime_wrapper.h │ │ │ │ └── v8/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── v8.gni │ │ │ │ ├── v8_api.h │ │ │ │ ├── v8_context_wrapper.h │ │ │ │ ├── v8_context_wrapper_impl.cc │ │ │ │ ├── v8_context_wrapper_impl.h │ │ │ │ ├── v8_exception.cc │ │ │ │ ├── v8_exception.h │ │ │ │ ├── v8_helper.cc │ │ │ │ ├── v8_helper.h │ │ │ │ ├── v8_host_function.cc │ │ │ │ ├── v8_host_function.h │ │ │ │ ├── v8_host_object.cc │ │ │ │ ├── v8_host_object.h │ │ │ │ ├── v8_inspector_manager.h │ │ │ │ ├── v8_isolate_wrapper.h │ │ │ │ ├── v8_isolate_wrapper_impl.cc │ │ │ │ ├── v8_isolate_wrapper_impl.h │ │ │ │ ├── v8_runtime.cc │ │ │ │ └── v8_runtime.h │ │ │ ├── jsi_object_wrapper.cc │ │ │ ├── jsi_object_wrapper.h │ │ │ ├── lynx_api_handler.cc │ │ │ ├── lynx_api_handler.h │ │ │ ├── lynx_runtime_helper.h │ │ │ ├── mock_template_delegate.h │ │ │ ├── napi/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── napi_loader_js.cc │ │ │ │ └── napi_loader_js.h │ │ │ ├── runtime_constant.h │ │ │ ├── runtime_lifecycle_listener_delegate.h │ │ │ ├── runtime_lifecycle_observer_impl.cc │ │ │ ├── runtime_lifecycle_observer_impl.h │ │ │ ├── runtime_lifecycle_observer_unittest.cc │ │ │ ├── runtime_manager.cc │ │ │ ├── runtime_manager.h │ │ │ ├── template_delegate.h │ │ │ ├── update_data_type.h │ │ │ ├── utils.cc │ │ │ ├── utils.h │ │ │ └── utils_unittest.cc │ │ ├── lepus/ │ │ │ ├── BUILD.gn │ │ │ ├── array_api.cc │ │ │ ├── array_api.h │ │ │ ├── ast_dump.cc │ │ │ ├── ast_dump.h │ │ │ ├── base_api.cc │ │ │ ├── base_api.h │ │ │ ├── base_binary_reader.cc │ │ │ ├── base_binary_reader.h │ │ │ ├── big_object.js │ │ │ ├── binary_input_stream.cc │ │ │ ├── binary_input_stream.h │ │ │ ├── binary_input_stream_unittest.cc │ │ │ ├── binary_input_stream_unittest.h │ │ │ ├── binary_reader.cc │ │ │ ├── binary_reader.h │ │ │ ├── binary_writer.cc │ │ │ ├── binary_writer.h │ │ │ ├── bindings/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── build.gni │ │ │ │ ├── empty_renderer_functions.cc │ │ │ │ ├── event/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── context_proxy_in_lepus.cc │ │ │ │ │ ├── context_proxy_in_lepus.h │ │ │ │ │ ├── context_proxy_in_lepus_test.cc │ │ │ │ │ ├── context_proxy_in_lepus_test.h │ │ │ │ │ ├── lepus_event_listener.cc │ │ │ │ │ ├── lepus_event_listener.h │ │ │ │ │ ├── lepus_event_listener_test.cc │ │ │ │ │ └── lepus_event_listener_test.h │ │ │ │ ├── ios/ │ │ │ │ │ ├── lynx_lepus_module_darwin.h │ │ │ │ │ └── lynx_lepus_module_darwin.mm │ │ │ │ ├── modules/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── lepus_module_callback.cc │ │ │ │ │ ├── lepus_module_callback.h │ │ │ │ │ ├── lynx_lepus_module.cc │ │ │ │ │ ├── lynx_lepus_module.h │ │ │ │ │ ├── lynx_lepus_module_manager.cc │ │ │ │ │ └── lynx_lepus_module_manager.h │ │ │ │ ├── renderer.h │ │ │ │ ├── renderer_functions.cc │ │ │ │ ├── renderer_functions.h │ │ │ │ ├── renderer_functions_def.h │ │ │ │ ├── resource/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── response_handler_in_lepus.cc │ │ │ │ │ ├── response_handler_in_lepus.h │ │ │ │ │ └── response_handler_in_lepus_unittest.cc │ │ │ │ └── style/ │ │ │ │ ├── runtime_css_reader.h │ │ │ │ └── shared_css_fragment_wrapper.h │ │ │ ├── build.gni │ │ │ ├── builtin.cc │ │ │ ├── builtin.h │ │ │ ├── builtin_function_table.h │ │ │ ├── bytecode_generator.cc │ │ │ ├── bytecode_generator.h │ │ │ ├── bytecode_print.cc │ │ │ ├── bytecode_print.h │ │ │ ├── code_generator.cc │ │ │ ├── code_generator.h │ │ │ ├── compiler/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── encode_main.cc │ │ │ │ ├── lepus_compiler_unittests.cc │ │ │ │ └── unit_test/ │ │ │ │ ├── LepusDate_test.js │ │ │ │ ├── URIComponent.js │ │ │ │ ├── array.map_test.js │ │ │ │ ├── array.prototype.concat.js │ │ │ │ ├── array.prototype.filter.js │ │ │ │ ├── array.prototype.filter_test.js │ │ │ │ ├── array.prototype.find.js │ │ │ │ ├── array.prototype.findIndex.js │ │ │ │ ├── array.prototype.foreach.js │ │ │ │ ├── array.prototype.includes.js │ │ │ │ ├── array.prototype.join.js │ │ │ │ ├── array.prototype.map_test.js │ │ │ │ ├── array.prototype.shift.js │ │ │ │ ├── array.prototype.slice.js │ │ │ │ ├── array.prototype.substring.js │ │ │ │ ├── array_prototype_test.js │ │ │ │ ├── assignment_args.js │ │ │ │ ├── carash_resolved.js │ │ │ │ ├── check_default_parameters.js │ │ │ │ ├── closure.js │ │ │ │ ├── closure_simple.js │ │ │ │ ├── closure_test.js │ │ │ │ ├── closure_top_level.js │ │ │ │ ├── double_to_size_ub.js │ │ │ │ ├── export_and_import_test.js │ │ │ │ ├── for_statement_test.js │ │ │ │ ├── global_this.js │ │ │ │ ├── lepus_undefined.js │ │ │ │ ├── logical_AND_and_logical_Or.js │ │ │ │ ├── math.js │ │ │ │ ├── nullish_coalescing.js │ │ │ │ ├── nullish_coalescing_break_change.js │ │ │ │ ├── number.prototype.tofixed.js │ │ │ │ ├── numbertostring.js │ │ │ │ ├── object.assign.js │ │ │ │ ├── object.freeze.js │ │ │ │ ├── object_keys.js │ │ │ │ ├── optional_chaining.js │ │ │ │ ├── p0_feature.js │ │ │ │ ├── parseFloat_test.js │ │ │ │ ├── parseInt_test.js │ │ │ │ ├── regexp_test.js │ │ │ │ ├── str_len_test.js │ │ │ │ ├── string.length.js │ │ │ │ ├── string.prototype.replace.js │ │ │ │ ├── string.prototype.slice.js │ │ │ │ ├── string.prototype.substr.js │ │ │ │ ├── string.prototype.trim.js │ │ │ │ ├── string_prototype_split_test.js │ │ │ │ ├── string_prototype_test.js │ │ │ │ ├── ternary_test.js │ │ │ │ ├── to_fixed.js │ │ │ │ ├── try_catch_throw.js │ │ │ │ ├── typeof_test.js │ │ │ │ └── unary_operation.js │ │ │ ├── context_binary_writer.cc │ │ │ ├── context_binary_writer.h │ │ │ ├── context_decoder_unittests.cc │ │ │ ├── context_pool.cc │ │ │ ├── context_pool.h │ │ │ ├── context_pool_unittest.cc │ │ │ ├── date_api.h │ │ │ ├── exception.h │ │ │ ├── function.cc │ │ │ ├── function.h │ │ │ ├── function_api.cc │ │ │ ├── function_api.h │ │ │ ├── function_api_unittest.cc │ │ │ ├── guard.h │ │ │ ├── heap.h │ │ │ ├── js_object.cc │ │ │ ├── js_object.h │ │ │ ├── json_api.h │ │ │ ├── json_parser.cc │ │ │ ├── json_parser.h │ │ │ ├── json_parser_unittest.cc │ │ │ ├── lepus_context_cell.cc │ │ │ ├── lepus_context_cell.h │ │ │ ├── lepus_date.cc │ │ │ ├── lepus_date.h │ │ │ ├── lepus_date_api.cc │ │ │ ├── lepus_date_api.h │ │ │ ├── lepus_error_helper.cc │ │ │ ├── lepus_error_helper.h │ │ │ ├── lepus_error_helper_unittest.cc │ │ │ ├── lepus_global.cc │ │ │ ├── lepus_global.h │ │ │ ├── lepus_inspector.h │ │ │ ├── lepus_utils.h │ │ │ ├── lepus_value_unittest.cc │ │ │ ├── lynx_value_extended.cc │ │ │ ├── lynx_value_extended_unittest.cc │ │ │ ├── marco.h │ │ │ ├── math_api.h │ │ │ ├── op_code.h │ │ │ ├── output_stream.cc │ │ │ ├── output_stream.h │ │ │ ├── parser.cc │ │ │ ├── parser.h │ │ │ ├── regexp.h │ │ │ ├── regexp_api.cc │ │ │ ├── regexp_api.h │ │ │ ├── restricted_value.cc │ │ │ ├── restricted_value.h │ │ │ ├── restricted_value_unittest.cc │ │ │ ├── scanner.cc │ │ │ ├── scanner.h │ │ │ ├── semantic_analysis.cc │ │ │ ├── semantic_analysis.h │ │ │ ├── string_api.cc │ │ │ ├── string_api.h │ │ │ ├── string_api_unittest.cc │ │ │ ├── switch.cc │ │ │ ├── switch.h │ │ │ ├── syntax_tree.cc │ │ │ ├── syntax_tree.h │ │ │ ├── table_api.cc │ │ │ ├── table_api.h │ │ │ ├── tasks/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── lepus_callback_manager.cc │ │ │ │ ├── lepus_callback_manager.h │ │ │ │ ├── lepus_callback_manager_unittest.cc │ │ │ │ ├── lepus_raf_manager.cc │ │ │ │ └── lepus_raf_manager.h │ │ │ ├── token.h │ │ │ ├── tt_tm.h │ │ │ ├── upvalue.h │ │ │ ├── value_deep_check_unittest.cc │ │ │ ├── value_utils_unittest.cc │ │ │ ├── visitor.h │ │ │ ├── vm_context.cc │ │ │ └── vm_context.h │ │ ├── lepusng/ │ │ │ ├── BUILD.gn │ │ │ ├── bindings/ │ │ │ │ └── renderer_ng.cc │ │ │ ├── compiler/ │ │ │ │ └── lepusng_unit_test/ │ │ │ │ └── closure_block.js │ │ │ ├── jsvalue_helper.cc │ │ │ ├── jsvalue_helper.h │ │ │ ├── lynx_api_context_lepusng.h │ │ │ ├── napi/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── test/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── napi_test_context.cc │ │ │ │ │ ├── napi_test_context.h │ │ │ │ │ ├── napi_test_element.cc │ │ │ │ │ ├── napi_test_element.h │ │ │ │ │ ├── test_context.h │ │ │ │ │ ├── test_context.idl │ │ │ │ │ ├── test_element.h │ │ │ │ │ ├── test_element.idl │ │ │ │ │ ├── test_module.cc │ │ │ │ │ └── test_module.h │ │ │ │ └── worklet/ │ │ │ │ ├── lepus_component.idl │ │ │ │ ├── lepus_element.idl │ │ │ │ ├── lepus_gesture.idl │ │ │ │ ├── lepus_lynx.idl │ │ │ │ ├── napi_frame_callback.cc │ │ │ │ ├── napi_frame_callback.h │ │ │ │ ├── napi_func_callback.cc │ │ │ │ ├── napi_func_callback.h │ │ │ │ ├── napi_lepus_component.cc │ │ │ │ ├── napi_lepus_component.h │ │ │ │ ├── napi_lepus_element.cc │ │ │ │ ├── napi_lepus_element.h │ │ │ │ ├── napi_lepus_gesture.cc │ │ │ │ ├── napi_lepus_gesture.h │ │ │ │ ├── napi_lepus_lynx.cc │ │ │ │ ├── napi_lepus_lynx.h │ │ │ │ ├── napi_loader_ui.cc │ │ │ │ └── napi_loader_ui.h │ │ │ ├── qjs_callback.cc │ │ │ ├── qjs_callback.h │ │ │ ├── quick_context.cc │ │ │ ├── quick_context.h │ │ │ ├── quickjs_debug_info.cc │ │ │ ├── quickjs_debug_info.h │ │ │ ├── quickjs_promise_unittest.cc │ │ │ └── quickjs_stack_size_unittest.cc │ │ ├── mts_context.h │ │ ├── mts_context_factory.cc │ │ ├── mts_context_factory.h │ │ ├── profile/ │ │ │ ├── BUILD.gn │ │ │ ├── lepusng/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── lepusng_profiler.cc │ │ │ │ ├── lepusng_profiler.h │ │ │ │ └── lepusng_profiler_unittest.cc │ │ │ ├── quickjs/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── quickjs_runtime_profiler.cc │ │ │ │ ├── quickjs_runtime_profiler.h │ │ │ │ └── quickjs_runtime_profiler_unittest.cc │ │ │ ├── runtime_profiler.cc │ │ │ ├── runtime_profiler.h │ │ │ ├── runtime_profiler_manager.cc │ │ │ ├── runtime_profiler_manager.h │ │ │ ├── runtime_profiler_unittest.cc │ │ │ └── v8/ │ │ │ ├── BUILD.gn │ │ │ ├── v8_runtime_profiler.cc │ │ │ ├── v8_runtime_profiler.h │ │ │ ├── v8_runtime_profiler_helper.cc │ │ │ ├── v8_runtime_profiler_helper.h │ │ │ ├── v8_runtime_profiler_unittest.cc │ │ │ ├── v8_runtime_profiler_wrapper.h │ │ │ ├── v8_runtime_profiler_wrapper_impl.cc │ │ │ └── v8_runtime_profiler_wrapper_impl.h │ │ └── trace/ │ │ ├── BUILD.gn │ │ └── runtime_trace_event_def.h │ ├── services/ │ │ ├── event_report/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ └── event_tracker_platform_impl.cc │ │ │ ├── darwin/ │ │ │ │ ├── event_tracker_platform_impl.mm │ │ │ │ └── event_tracker_platform_impl_unittest.mm │ │ │ ├── embedder/ │ │ │ │ └── event_tracker_platform_embedder_impl.cc │ │ │ ├── event_tracker.cc │ │ │ ├── event_tracker.h │ │ │ ├── event_tracker_nodejs.cc │ │ │ ├── event_tracker_platform_impl.cc │ │ │ ├── event_tracker_platform_impl.h │ │ │ └── harmony/ │ │ │ ├── event_tracker_harmony.h │ │ │ └── event_tracker_platform_impl.cc │ │ ├── feature_count/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ └── feature_counter_android.cc │ │ │ ├── feature_counter.cc │ │ │ ├── feature_counter.h │ │ │ ├── global_feature_counter.cc │ │ │ └── global_feature_counter.h │ │ ├── fluency/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ └── fluency_sample_android.cc │ │ │ ├── fluency_tracer.cc │ │ │ ├── fluency_tracer.h │ │ │ └── harmony/ │ │ │ ├── fluency_trace_helper_harmony.cc │ │ │ └── fluency_trace_helper_harmony.h │ │ ├── fsp_tracing/ │ │ │ ├── BUILD.gn │ │ │ ├── area/ │ │ │ │ ├── fsp_area_tracer_impl.cc │ │ │ │ └── fsp_area_tracer_impl.h │ │ │ ├── axial/ │ │ │ │ ├── fsp_axial_tracer_impl.cc │ │ │ │ └── fsp_axial_tracer_impl.h │ │ │ ├── base/ │ │ │ │ ├── fsp_snapshot.h │ │ │ │ └── fsp_tracer_impl.h │ │ │ ├── fsp_config.h │ │ │ ├── fsp_tracer.cc │ │ │ └── fsp_tracer.h │ │ ├── long_task_timing/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ └── long_task_monitor_android.cc │ │ │ ├── long_batched_tasks_monitor.cc │ │ │ ├── long_batched_tasks_monitor.h │ │ │ ├── long_task_monitor.cc │ │ │ ├── long_task_monitor.h │ │ │ └── long_task_timing.h │ │ ├── performance/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── performance_controller_android.cc │ │ │ │ └── performance_controller_android.h │ │ │ ├── darwin/ │ │ │ │ ├── performance_controller_darwin.h │ │ │ │ └── performance_controller_darwin.mm │ │ │ ├── fsp_tracing/ │ │ │ │ ├── fsp_snapshot.cc │ │ │ │ ├── fsp_snapshot.h │ │ │ │ ├── fsp_tracer.cc │ │ │ │ └── fsp_tracer.h │ │ │ ├── harmony/ │ │ │ │ ├── performance_controller_harmony.cc │ │ │ │ └── performance_controller_harmony.h │ │ │ ├── js_blocking_monitor/ │ │ │ │ ├── js_blocking_monitor.cc │ │ │ │ ├── js_blocking_monitor.h │ │ │ │ └── js_blocking_trace_event_def.h │ │ │ ├── memory_monitor/ │ │ │ │ ├── memory_monitor.cc │ │ │ │ ├── memory_monitor.h │ │ │ │ ├── memory_record.cc │ │ │ │ └── memory_record.h │ │ │ ├── performance_controller.cc │ │ │ ├── performance_controller.h │ │ │ ├── performance_event_sender.h │ │ │ ├── performance_mediator.cc │ │ │ └── performance_mediator.h │ │ ├── recorder/ │ │ │ ├── BUILD.gn │ │ │ ├── ios/ │ │ │ │ ├── template_assembler_recorder_darwin.h │ │ │ │ └── template_assembler_recorder_darwin.mm │ │ │ ├── lynxview_init_recorder.cc │ │ │ ├── lynxview_init_recorder.h │ │ │ ├── native_module_recorder.cc │ │ │ ├── native_module_recorder.h │ │ │ ├── recorder_constants.h │ │ │ ├── recorder_controller.cc │ │ │ ├── recorder_controller.h │ │ │ ├── template_assembler_recorder.cc │ │ │ ├── template_assembler_recorder.h │ │ │ ├── template_assembler_recorder_unittest.cc │ │ │ ├── testbench_base_recorder.cc │ │ │ ├── testbench_base_recorder.h │ │ │ └── testbench_base_recorder_unittest.cc │ │ ├── replay/ │ │ │ ├── BUILD.gn │ │ │ ├── layout_tree_testbench.cc │ │ │ ├── layout_tree_testbench.h │ │ │ ├── layout_tree_testbench_unittest.cc │ │ │ ├── lynx_callback_testbench.cc │ │ │ ├── lynx_callback_testbench.h │ │ │ ├── lynx_module_binding_testbench.cc │ │ │ ├── lynx_module_binding_testbench.h │ │ │ ├── lynx_module_manager_testbench.cc │ │ │ ├── lynx_module_manager_testbench.h │ │ │ ├── lynx_module_testbench.cc │ │ │ ├── lynx_module_testbench.h │ │ │ ├── lynx_module_testbench_unittest.cc │ │ │ ├── lynx_replay_helper.cc │ │ │ ├── lynx_replay_helper.h │ │ │ ├── lynx_replay_helper_unittest.cc │ │ │ ├── replay_controller.cc │ │ │ ├── replay_controller.h │ │ │ ├── testbench_test_replay.cc │ │ │ ├── testbench_test_replay.h │ │ │ ├── testbench_utils_embedder.cc │ │ │ └── testbench_utils_embedder.h │ │ ├── ssr/ │ │ │ ├── BUILD.gn │ │ │ ├── client/ │ │ │ │ ├── ssr_client_utils.cc │ │ │ │ ├── ssr_client_utils.h │ │ │ │ ├── ssr_data_update_manager.cc │ │ │ │ ├── ssr_data_update_manager.h │ │ │ │ ├── ssr_event_utils.cc │ │ │ │ ├── ssr_event_utils.h │ │ │ │ ├── ssr_hydrate_info.h │ │ │ │ └── ssr_style_sheet.h │ │ │ └── ssr_type_info.h │ │ ├── starlight_standalone/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ ├── starlight_android.cc │ │ │ │ └── starlight_android.h │ │ │ ├── core/ │ │ │ │ ├── BUILD.gn │ │ │ │ └── src/ │ │ │ │ ├── starlight.cc │ │ │ │ └── starlight_config.cc │ │ │ └── starlight.gni │ │ ├── timing_handler/ │ │ │ ├── BUILD.gn │ │ │ ├── timing.cc │ │ │ ├── timing.h │ │ │ ├── timing_constants.h │ │ │ ├── timing_constants_deprecated.h │ │ │ ├── timing_handler.cc │ │ │ ├── timing_handler.h │ │ │ ├── timing_handler_delegate.h │ │ │ ├── timing_handler_ng.cc │ │ │ ├── timing_handler_ng.h │ │ │ ├── timing_info.cc │ │ │ ├── timing_info.h │ │ │ ├── timing_info_ng.cc │ │ │ ├── timing_info_ng.h │ │ │ ├── timing_map.cc │ │ │ ├── timing_map.h │ │ │ ├── timing_mediator.cc │ │ │ ├── timing_mediator.h │ │ │ ├── timing_utils.cc │ │ │ └── timing_utils.h │ │ ├── trace/ │ │ │ ├── BUILD.gn │ │ │ └── service_trace_event_def.h │ │ └── watch_dog/ │ │ ├── BUILD.gn │ │ └── watch_dog.h │ ├── shared_data/ │ │ ├── BUILD.gn │ │ ├── lynx_white_board.cc │ │ ├── lynx_white_board.h │ │ ├── lynx_white_board_unittest.cc │ │ ├── shared_data_trace_event_def.h │ │ ├── white_board_delegate.cc │ │ ├── white_board_delegate.h │ │ ├── white_board_inspector.h │ │ ├── white_board_runtime_delegate.cc │ │ ├── white_board_runtime_delegate.h │ │ ├── white_board_tasm_delegate.cc │ │ └── white_board_tasm_delegate.h │ ├── shell/ │ │ ├── BUILD.gn │ │ ├── README.md │ │ ├── android/ │ │ │ ├── js_proxy_android.cc │ │ │ ├── js_proxy_android.h │ │ │ ├── list_container_proxy_android.cc │ │ │ ├── lynx_engine_proxy_android.cc │ │ │ ├── lynx_engine_proxy_android.h │ │ │ ├── lynx_engine_wrapper_android.cc │ │ │ ├── lynx_engine_wrapper_android.h │ │ │ ├── lynx_layout_proxy_android.cc │ │ │ ├── lynx_layout_proxy_android.h │ │ │ ├── lynx_runtime_wrapper_android.cc │ │ │ ├── lynx_runtime_wrapper_android.h │ │ │ ├── lynx_template_render_android.cc │ │ │ ├── native_facade_android.cc │ │ │ ├── native_facade_android.h │ │ │ ├── platform_call_back_android.cc │ │ │ ├── platform_call_back_android.h │ │ │ ├── runtime_lifecycle_listener_delegate_android.cc │ │ │ ├── runtime_lifecycle_listener_delegate_android.h │ │ │ ├── tasm_platform_invoker_android.cc │ │ │ └── tasm_platform_invoker_android.h │ │ ├── bts_runtime_mediator_unittest.cc │ │ ├── common/ │ │ │ ├── platform_call_back.cc │ │ │ ├── platform_call_back.h │ │ │ ├── platform_call_back_manager.cc │ │ │ ├── platform_call_back_manager.h │ │ │ ├── platform_call_back_manager_unittest.cc │ │ │ └── shell_trace_event_def.h │ │ ├── dynamic_ui_operation_queue.cc │ │ ├── dynamic_ui_operation_queue.h │ │ ├── dynamic_ui_operation_queue_unittest.cc │ │ ├── engine_thread_switch.cc │ │ ├── engine_thread_switch.h │ │ ├── engine_thread_switch_unittest.cc │ │ ├── harmony/ │ │ │ ├── embedder_platform_harmony.cc │ │ │ ├── embedder_platform_harmony.h │ │ │ ├── native_facade_harmony.cc │ │ │ ├── native_facade_harmony.h │ │ │ ├── tasm_platform_invoker_harmony.cc │ │ │ └── tasm_platform_invoker_harmony.h │ │ ├── ios/ │ │ │ ├── data_utils.h │ │ │ ├── data_utils.mm │ │ │ ├── js_proxy_darwin.h │ │ │ ├── js_proxy_darwin.mm │ │ │ ├── lynx_engine_proxy_darwin.h │ │ │ ├── lynx_engine_proxy_darwin.mm │ │ │ ├── lynx_layout_proxy_darwin.h │ │ │ ├── lynx_layout_proxy_darwin.mm │ │ │ ├── lynx_runtime_facade_darwin.h │ │ │ ├── lynx_runtime_facade_darwin.mm │ │ │ ├── native_facade_darwin.h │ │ │ ├── native_facade_darwin.mm │ │ │ ├── runtime_lifecycle_listener_delegate_darwin.h │ │ │ ├── runtime_lifecycle_listener_delegate_darwin.mm │ │ │ ├── tasm_platform_invoker_darwin.h │ │ │ └── tasm_platform_invoker_darwin.mm │ │ ├── layout_mediator.cc │ │ ├── layout_mediator.h │ │ ├── layout_result_manager.cc │ │ ├── layout_result_manager.h │ │ ├── layout_result_manager_unittest.cc │ │ ├── list_container_proxy.cc │ │ ├── list_engine_proxy_impl.cc │ │ ├── list_engine_proxy_impl.h │ │ ├── lynx_actor_specialization.h │ │ ├── lynx_card_cache_data_manager.cc │ │ ├── lynx_card_cache_data_manager.h │ │ ├── lynx_card_cache_data_manager_unittest.cc │ │ ├── lynx_card_cache_data_op.h │ │ ├── lynx_engine.cc │ │ ├── lynx_engine.h │ │ ├── lynx_engine_proxy_impl.cc │ │ ├── lynx_engine_proxy_impl.h │ │ ├── lynx_engine_proxy_impl_unittest.cc │ │ ├── lynx_engine_wrapper.cc │ │ ├── lynx_engine_wrapper.h │ │ ├── lynx_layout_proxy_impl.cc │ │ ├── lynx_layout_proxy_impl.h │ │ ├── lynx_shell.cc │ │ ├── lynx_shell.h │ │ ├── lynx_shell_builder.cc │ │ ├── lynx_shell_builder.h │ │ ├── lynx_shell_builder_unitest.cc │ │ ├── lynx_shell_unittest.cc │ │ ├── lynx_ui_operation_async_queue.cc │ │ ├── lynx_ui_operation_async_queue.h │ │ ├── lynx_ui_operation_async_queue_unittest.cc │ │ ├── lynx_ui_operation_queue.cc │ │ ├── lynx_ui_operation_queue.h │ │ ├── lynx_ui_operation_queue_unittest.cc │ │ ├── native_facade.h │ │ ├── native_facade_empty_implementation.h │ │ ├── perf_controller_proxy_impl.cc │ │ ├── perf_controller_proxy_impl.h │ │ ├── runtime/ │ │ │ ├── bts/ │ │ │ │ ├── bts_runtime.cc │ │ │ │ ├── bts_runtime.h │ │ │ │ ├── bts_runtime_mediator.cc │ │ │ │ ├── bts_runtime_mediator.h │ │ │ │ ├── bts_runtime_standalone_helper.cc │ │ │ │ ├── bts_runtime_standalone_helper.h │ │ │ │ ├── lynx_bts_runtime_proxy_impl.cc │ │ │ │ └── lynx_bts_runtime_proxy_impl.h │ │ │ ├── common/ │ │ │ │ ├── module_delegate_impl.cc │ │ │ │ ├── module_delegate_impl.h │ │ │ │ └── module_delegate_mock.cc │ │ │ └── mts/ │ │ │ ├── mts_runtime.cc │ │ │ └── mts_runtime.h │ │ ├── tasm_mediator.cc │ │ ├── tasm_mediator.h │ │ ├── tasm_operation_queue.cc │ │ ├── tasm_operation_queue.h │ │ ├── tasm_operation_queue_async.cc │ │ ├── tasm_operation_queue_async.h │ │ ├── tasm_operation_queue_async_unittest.cc │ │ ├── tasm_operation_queue_unittest.cc │ │ ├── tasm_platform_invoker.h │ │ ├── testing/ │ │ │ ├── BUILD.gn │ │ │ ├── mock_layout_delegate.h │ │ │ ├── mock_layout_platform.h │ │ │ ├── mock_native_facade.cc │ │ │ ├── mock_native_facade.h │ │ │ ├── mock_runner_manufactor.cc │ │ │ ├── mock_runner_manufactor.h │ │ │ ├── mock_tasm_delegate.cc │ │ │ └── mock_tasm_delegate.h │ │ ├── update_mode.h │ │ ├── vsync_observer_impl.cc │ │ └── vsync_observer_impl.h │ ├── style/ │ │ ├── BUILD.gn │ │ ├── animation_data.cc │ │ ├── animation_data.h │ │ ├── background_data.cc │ │ ├── background_data.h │ │ ├── color.h │ │ ├── content_data.h │ │ ├── default_computed_style.h │ │ ├── filter_data.cc │ │ ├── filter_data.h │ │ ├── layout_animation_data.cc │ │ ├── layout_animation_data.h │ │ ├── outline_data.cc │ │ ├── outline_data.h │ │ ├── perspective_data.cc │ │ ├── perspective_data.h │ │ ├── shadow_data.cc │ │ ├── shadow_data.h │ │ ├── style.gni │ │ ├── timing_function_data.cc │ │ ├── timing_function_data.h │ │ ├── transform/ │ │ │ ├── decomposed_transform.cc │ │ │ ├── decomposed_transform.h │ │ │ ├── matrix44.cc │ │ │ ├── matrix44.h │ │ │ ├── quaternion.cc │ │ │ ├── quaternion.h │ │ │ └── quaternion_unittest.cc │ │ ├── transform_origin_data.cc │ │ ├── transform_origin_data.h │ │ ├── transform_raw_data.cc │ │ ├── transform_raw_data.h │ │ ├── transition_data.cc │ │ └── transition_data.h │ ├── template_bundle/ │ │ ├── BUILD.gn │ │ ├── lynx_template_bundle.cc │ │ ├── lynx_template_bundle.h │ │ ├── lynx_template_bundle_converter.cc │ │ ├── lynx_template_bundle_converter.h │ │ └── template_codec/ │ │ ├── BUILD.gn │ │ ├── binary_decoder/ │ │ │ ├── BUILD.gn │ │ │ ├── binary_decoder_trace_event_def.h │ │ │ ├── element_binary_reader.cc │ │ │ ├── element_binary_reader.h │ │ │ ├── lynx_binary_base_css_reader.cc │ │ │ ├── lynx_binary_base_css_reader.h │ │ │ ├── lynx_binary_base_template_reader.cc │ │ │ ├── lynx_binary_base_template_reader.h │ │ │ ├── lynx_binary_config_decoder.cc │ │ │ ├── lynx_binary_config_decoder.h │ │ │ ├── lynx_binary_config_decoder_unittest.cc │ │ │ ├── lynx_binary_config_decoder_unittest.h │ │ │ ├── lynx_binary_config_helper.cc │ │ │ ├── lynx_binary_config_helper.h │ │ │ ├── lynx_binary_lazy_reader_delegate.h │ │ │ ├── lynx_binary_reader.cc │ │ │ ├── lynx_binary_reader.h │ │ │ ├── lynx_config.yml │ │ │ ├── lynx_config_cc.tmpl │ │ │ ├── lynx_config_constant.tmpl │ │ │ ├── lynx_config_decoder.h │ │ │ ├── lynx_config_decoder.tmpl │ │ │ ├── lynx_config_header.tmpl │ │ │ ├── page_config.cc │ │ │ ├── page_config.h │ │ │ ├── parallel_parse_task_scheduler.cc │ │ │ ├── parallel_parse_task_scheduler.h │ │ │ ├── template_binary_reader.cc │ │ │ └── template_binary_reader.h │ │ ├── binary_encoder/ │ │ │ ├── BUILD.gn │ │ │ ├── csr_element_binary_writer.cc │ │ │ ├── csr_element_binary_writer.h │ │ │ ├── css_encoder/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── css_font_face_token.cc │ │ │ │ ├── css_font_face_token.h │ │ │ │ ├── css_font_face_token_unittest.cc │ │ │ │ ├── css_keyframes_token.cc │ │ │ │ ├── css_keyframes_token.h │ │ │ │ ├── css_keyframes_token_unittest.cc │ │ │ │ ├── css_parse_token_group.h │ │ │ │ ├── css_parser.cc │ │ │ │ ├── css_parser.h │ │ │ │ ├── css_parser_token.cc │ │ │ │ ├── css_parser_token.h │ │ │ │ ├── css_parser_token_unittest.cc │ │ │ │ ├── css_parser_unittest.cc │ │ │ │ ├── shared_css_fragment.cc │ │ │ │ ├── shared_css_fragment.h │ │ │ │ └── shared_css_fragment_unittest.cc │ │ │ ├── encode_util.cc │ │ │ ├── encode_util.h │ │ │ ├── encoder.cc │ │ │ ├── encoder.h │ │ │ ├── repack_binary_reader.cc │ │ │ ├── repack_binary_reader.h │ │ │ ├── repack_binary_writer.cc │ │ │ ├── repack_binary_writer.h │ │ │ ├── style_object_encoder/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── style_object_parser.cc │ │ │ │ ├── style_object_parser.h │ │ │ │ └── style_object_parser_unittest.cc │ │ │ ├── template_binary_writer.cc │ │ │ └── template_binary_writer.h │ │ ├── compile_options.h │ │ ├── generator/ │ │ │ ├── BUILD.gn │ │ │ ├── base_struct.h │ │ │ ├── list_parser.cc │ │ │ ├── list_parser.h │ │ │ ├── meta_factory.cc │ │ │ ├── meta_factory.h │ │ │ ├── source_generator.cc │ │ │ ├── source_generator.h │ │ │ ├── template_dynamic_component_parser.cc │ │ │ ├── template_dynamic_component_parser.h │ │ │ ├── template_page_parser.cc │ │ │ ├── template_page_parser.h │ │ │ ├── template_parser.cc │ │ │ ├── template_parser.h │ │ │ ├── template_scope.cc │ │ │ ├── template_scope.h │ │ │ ├── ttml_holder.cc │ │ │ └── ttml_holder.h │ │ ├── header_ext_info.h │ │ ├── lepus_cmd.cc │ │ ├── lepus_cmd.h │ │ ├── magic_number.cc │ │ ├── magic_number.h │ │ ├── moulds.h │ │ ├── template_binary.h │ │ ├── ttml_constant.h │ │ ├── version.h │ │ └── wasm_bind.cc │ └── value_wrapper/ │ ├── BUILD.gn │ ├── android/ │ │ ├── value_impl_android.cc │ │ ├── value_impl_android.h │ │ └── value_impl_android_unittest.cc │ ├── darwin/ │ │ ├── value_impl_darwin.h │ │ ├── value_impl_darwin.mm │ │ └── value_impl_darwin_unittest.mm │ ├── harmony/ │ │ ├── value_impl_napi.cc │ │ └── value_impl_napi.h │ ├── napi/ │ │ ├── napi_util_primjs.cc │ │ ├── napi_util_primjs.h │ │ ├── value_impl_napi_primjs.cc │ │ ├── value_impl_napi_primjs.h │ │ ├── value_impl_napi_primjs_unittest.cc │ │ └── value_impl_opaque_napi_primjs.h │ ├── value_impl_lepus.cc │ ├── value_impl_lepus.h │ ├── value_impl_piper.h │ ├── value_impl_unittest.cc │ ├── value_wrapper_utils.cc │ └── value_wrapper_utils.h ├── dependencies/ │ ├── DEPS │ ├── DEPS.clay │ ├── DEPS.dev │ ├── DEPS.extension │ ├── DEPS.lynxtron │ ├── DEPS.tasm │ └── DEPS.tools_shared ├── devtool/ │ ├── base_devtool/ │ │ ├── android/ │ │ │ └── base_devtool/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── CMakeLists.txt │ │ │ ├── base_devtool_android_source.gni │ │ │ ├── build.gradle │ │ │ ├── consumer-rules.pro │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── android_test/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── basedevtool/ │ │ │ │ ├── LogBoxEnvTest.java │ │ │ │ └── LogBoxManagerTest.java │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── basedevtool/ │ │ │ │ ├── BaseDevToolLoadSoUtils.java │ │ │ │ ├── CalledByNative.java │ │ │ │ ├── DevToolGlobalSlot.java │ │ │ │ ├── DevToolSlot.java │ │ │ │ ├── logbox/ │ │ │ │ │ ├── ILogBoxResourceProvider.java │ │ │ │ │ ├── LogBoxDialog.java │ │ │ │ │ ├── LogBoxDialogBase.java │ │ │ │ │ ├── LogBoxEnv.java │ │ │ │ │ ├── LogBoxLifeCycleListenerFragment.java │ │ │ │ │ ├── LogBoxLogLevel.java │ │ │ │ │ ├── LogBoxManager.java │ │ │ │ │ ├── LogBoxNotification.java │ │ │ │ │ ├── LogBoxOwner.java │ │ │ │ │ └── LogBoxProxy.java │ │ │ │ └── utils/ │ │ │ │ ├── DevToolDownloader.java │ │ │ │ ├── DevToolFileLoadCallback.java │ │ │ │ ├── DevToolFileLoadUtils.java │ │ │ │ ├── DownloadCallback.java │ │ │ │ └── UIThreadUtils.java │ │ │ ├── jni/ │ │ │ │ ├── .gitignore │ │ │ │ ├── BUILD.gn │ │ │ │ └── jni_configs.yml │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ ├── devtool_notification_background.xml │ │ │ │ ├── devtool_notification_close_circle.xml │ │ │ │ └── devtool_notification_log_count_circle.xml │ │ │ ├── layout/ │ │ │ │ └── devtool_logbox_notification.xml │ │ │ └── values/ │ │ │ └── devtool_colors.xml │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ ├── devtool_global_slot_common.cc │ │ │ ├── devtool_global_slot_common.h │ │ │ ├── devtool_slot_common.cc │ │ │ └── devtool_slot_common.h │ │ ├── darwin/ │ │ │ ├── common/ │ │ │ │ └── utils/ │ │ │ │ ├── DevToolDownloader.h │ │ │ │ ├── DevToolDownloader.m │ │ │ │ ├── DevToolFileLoadUtils.h │ │ │ │ ├── DevToolFileLoadUtils.mm │ │ │ │ ├── DevToolToast.h │ │ │ │ └── DevToolToast.m │ │ │ └── ios/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── DevToolGlobalSlotIOS.h │ │ │ ├── DevToolGlobalSlotIOS.mm │ │ │ ├── DevToolSlotIOS.h │ │ │ ├── DevToolSlotIOS.mm │ │ │ └── logbox/ │ │ │ ├── DevToolLogBox.h │ │ │ ├── DevToolLogBox.mm │ │ │ ├── DevToolLogBoxEnv.h │ │ │ ├── DevToolLogBoxEnv.mm │ │ │ ├── DevToolLogBoxHelper.h │ │ │ ├── DevToolLogBoxManager.h │ │ │ ├── DevToolLogBoxManager.m │ │ │ ├── DevToolLogBoxManagerUnitTest.m │ │ │ ├── DevToolLogBoxNotification.h │ │ │ ├── DevToolLogBoxNotification.m │ │ │ ├── DevToolLogBoxOwner.h │ │ │ ├── DevToolLogBoxOwner.mm │ │ │ ├── DevToolLogBoxProxy.h │ │ │ ├── DevToolLogBoxProxy.mm │ │ │ └── DevToolLogBoxResProvider.h │ │ ├── js_libraries/ │ │ │ ├── logbox/ │ │ │ │ ├── .eslintrc.json │ │ │ │ ├── .gitignore │ │ │ │ ├── .prettierignore │ │ │ │ ├── .prettierrc │ │ │ │ ├── build.py │ │ │ │ ├── package.json │ │ │ │ ├── rsbuild.config.ts │ │ │ │ ├── src/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── app.tsx │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ │ └── stackFrame.ts │ │ │ │ │ ├── global.css │ │ │ │ │ ├── jsbridge/ │ │ │ │ │ │ ├── implementations/ │ │ │ │ │ │ │ ├── delay.ts │ │ │ │ │ │ │ ├── immediate.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── interface.ts │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── errorEffects.ts │ │ │ │ │ │ ├── errorReducer.ts │ │ │ │ │ │ ├── store.ts │ │ │ │ │ │ └── viewsInfo.ts │ │ │ │ │ ├── pages/ │ │ │ │ │ │ ├── content/ │ │ │ │ │ │ │ ├── displayError.less │ │ │ │ │ │ │ ├── displayError.tsx │ │ │ │ │ │ │ └── error-container/ │ │ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ │ ├── CodeBlock.jsx │ │ │ │ │ │ │ │ ├── Collapsible.jsx │ │ │ │ │ │ │ │ └── ErrorOverlay.jsx │ │ │ │ │ │ │ ├── containers/ │ │ │ │ │ │ │ │ ├── RuntimeError.jsx │ │ │ │ │ │ │ │ ├── RuntimeErrorContainer.jsx │ │ │ │ │ │ │ │ ├── StackFrame.jsx │ │ │ │ │ │ │ │ ├── StackFrameCodeBlock.jsx │ │ │ │ │ │ │ │ └── StackTrace.jsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── footer/ │ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── header/ │ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── layout/ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── parser/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── dom/ │ │ │ │ │ │ └── absolutifyCaret.js │ │ │ │ │ ├── fileLoader.ts │ │ │ │ │ ├── generateAnsiHTML.js │ │ │ │ │ ├── getLinesAround.ts │ │ │ │ │ ├── getPrettyURL.js │ │ │ │ │ ├── getSourceMap.ts │ │ │ │ │ ├── initSourcemapConsumer.js │ │ │ │ │ ├── isBuiltinErrorName.js │ │ │ │ │ ├── isInternalFile.js │ │ │ │ │ ├── mapper.ts │ │ │ │ │ ├── stackParser.ts │ │ │ │ │ └── vconsole.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── typings.d.ts │ │ │ └── logbox-types/ │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc │ │ │ ├── package.json │ │ │ ├── tsconfig.json │ │ │ └── types/ │ │ │ └── index.d.ts │ │ ├── logbox/ │ │ │ ├── BUILD.gn │ │ │ ├── logbox_base.cc │ │ │ ├── logbox_base.h │ │ │ ├── logbox_dialog_base.cc │ │ │ ├── logbox_dialog_base.h │ │ │ ├── logbox_dialog_windows.cc │ │ │ ├── logbox_dialog_windows.h │ │ │ ├── logbox_manager.cc │ │ │ ├── logbox_manager.h │ │ │ ├── logbox_notification.cc │ │ │ ├── logbox_notification.h │ │ │ ├── logbox_notification_windows.cc │ │ │ ├── logbox_notification_windows.h │ │ │ ├── logbox_owner_windows.cc │ │ │ └── logbox_owner_windows.h │ │ ├── native/ │ │ │ ├── BUILD.gn │ │ │ ├── abstract_devtool.cc │ │ │ ├── android/ │ │ │ │ ├── base_devtool_jni_load.h │ │ │ │ ├── devtool_global_slot_android.cc │ │ │ │ ├── devtool_global_slot_android.h │ │ │ │ ├── devtool_slot_android.cc │ │ │ │ └── devtool_slot_android.h │ │ │ ├── base_devtool.gni │ │ │ ├── cdp_domain_agent_base.cc │ │ │ ├── common/ │ │ │ │ ├── devtool_global_slot_common.cc │ │ │ │ ├── devtool_global_slot_common.h │ │ │ │ ├── devtool_slot_common.cc │ │ │ │ └── devtool_slot_common.h │ │ │ ├── darwin/ │ │ │ │ └── ios/ │ │ │ │ ├── devtool_global_slot_ios.h │ │ │ │ ├── devtool_global_slot_ios.mm │ │ │ │ ├── devtool_slot_ios.h │ │ │ │ └── devtool_slot_ios.mm │ │ │ ├── debug_router_message_subscriber.h │ │ │ ├── devtool_global_slot.cc │ │ │ ├── devtool_global_slot.h │ │ │ ├── devtool_message_dispatcher.cc │ │ │ ├── devtool_slot.cc │ │ │ ├── devtool_slot.h │ │ │ ├── devtool_status.cc │ │ │ ├── global_message_channel.cc │ │ │ ├── global_message_channel.h │ │ │ ├── global_message_dispatcher.cc │ │ │ ├── global_message_dispatcher.h │ │ │ ├── js_inspect/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── inspector_client_delegate_base_impl.cc │ │ │ │ ├── inspector_client_delegate_base_impl.h │ │ │ │ ├── inspector_client_delegate_base_impl_unittest.cc │ │ │ │ ├── inspector_client_delegate_base_impl_unittest.h │ │ │ │ ├── script_manager_ng.cc │ │ │ │ ├── script_manager_ng.h │ │ │ │ └── script_manager_ng_unittest.cc │ │ │ ├── public/ │ │ │ │ ├── abstract_devtool.h │ │ │ │ ├── base_devtool_export.h │ │ │ │ ├── cdp_domain_agent_base.h │ │ │ │ ├── devtool_message_dispatcher.h │ │ │ │ ├── devtool_message_handler.h │ │ │ │ ├── devtool_status.h │ │ │ │ └── message_sender.h │ │ │ ├── test/ │ │ │ │ ├── devtool_global_slot_platform_mock.cc │ │ │ │ ├── devtool_global_slot_platform_mock.h │ │ │ │ ├── devtool_slot_platform_mock.cc │ │ │ │ ├── devtool_slot_platform_mock.h │ │ │ │ ├── message_sender_mock.h │ │ │ │ ├── mock_base_agent.h │ │ │ │ ├── mock_devtool.h │ │ │ │ ├── mock_message_handler.h │ │ │ │ ├── mock_receiver.cc │ │ │ │ └── mock_receiver.h │ │ │ ├── tracing/ │ │ │ │ ├── BUILD.gn │ │ │ │ └── base_devtool_trace_event_def.h │ │ │ ├── view_message_channel.cc │ │ │ ├── view_message_channel.h │ │ │ ├── view_message_dispatcher.cc │ │ │ └── view_message_dispatcher.h │ │ └── resources/ │ │ ├── BUILD.gn │ │ ├── copy_resources.py │ │ └── images/ │ │ └── copy_images.py │ ├── embedder/ │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ ├── debugger_embedder.cc │ │ │ ├── debugger_embedder.h │ │ │ ├── devtools_embedder.cc │ │ │ └── devtools_embedder.h │ │ └── core/ │ │ ├── BUILD.gn │ │ ├── debug_bridge_embedder.cc │ │ ├── debug_bridge_embedder.h │ │ ├── debug_info_helper.cc │ │ ├── debug_info_helper.h │ │ ├── debug_state_listener_embedder.cc │ │ ├── debug_state_listener_embedder.h │ │ ├── devtool_message_handler_embedder.cc │ │ ├── devtool_message_handler_embedder.h │ │ ├── devtool_platform_embedder.cc │ │ ├── devtool_platform_embedder.h │ │ ├── devtoolng_delegate_embedder.cc │ │ ├── devtoolng_delegate_embedder.h │ │ ├── devtools_message_handler.h │ │ ├── env_embedder.h │ │ ├── frame_capturer_embedder.cc │ │ ├── frame_capturer_embedder.h │ │ ├── global_devtool_platform_embedder.cc │ │ ├── global_devtool_platform_embedder.h │ │ ├── inspector_owner_embedder.cc │ │ ├── inspector_owner_embedder.h │ │ ├── invoke_cdp_from_sdk_sender_embedder.h │ │ ├── lynx_devtool_set_module.cc │ │ ├── lynx_devtool_set_module.h │ │ ├── page_reload_helper_embedder.cc │ │ ├── page_reload_helper_embedder.h │ │ ├── screen_cast_helper_embedder.cc │ │ ├── screen_cast_helper_embedder.h │ │ ├── screenshot_thread_manager.cc │ │ ├── screenshot_thread_manager.h │ │ ├── screenshot_timer_trigger_embedder.cc │ │ └── screenshot_timer_trigger_embedder.h │ ├── fundamentals/ │ │ └── js_inspect/ │ │ ├── BUILD.gn │ │ ├── inspector_client_delegate.h │ │ ├── inspector_client_ng.cc │ │ ├── inspector_client_ng.h │ │ ├── inspector_client_quickjs_delegate.h │ │ └── inspector_client_v8_delegate.h │ ├── js_inspect/ │ │ ├── BUILD.gn │ │ ├── inspector_const.h │ │ ├── lepus/ │ │ │ ├── BUILD.gn │ │ │ ├── lepus_inspector_client_impl.cc │ │ │ ├── lepus_inspector_client_impl.h │ │ │ ├── lepus_inspector_client_provider.cc │ │ │ ├── lepus_inspector_client_provider.h │ │ │ └── lepus_internal/ │ │ │ ├── lepus_inspected_context.h │ │ │ ├── lepus_inspected_context_provider.cc │ │ │ ├── lepus_inspected_context_provider.h │ │ │ ├── lepus_inspector_impl.cc │ │ │ ├── lepus_inspector_impl.h │ │ │ ├── lepus_inspector_ng.h │ │ │ └── lepusng/ │ │ │ ├── lepusng_debugger.cc │ │ │ ├── lepusng_debugger.h │ │ │ ├── lepusng_inspected_context_callbacks.cc │ │ │ ├── lepusng_inspected_context_callbacks.h │ │ │ ├── lepusng_inspected_context_impl.cc │ │ │ └── lepusng_inspected_context_impl.h │ │ ├── quickjs/ │ │ │ ├── BUILD.gn │ │ │ ├── quickjs_inspector_client_impl.cc │ │ │ ├── quickjs_inspector_client_impl.h │ │ │ ├── quickjs_inspector_client_provider.cc │ │ │ ├── quickjs_inspector_client_provider.h │ │ │ └── quickjs_internal/ │ │ │ ├── inspector_primjs_interrupt_helper.cc │ │ │ ├── inspector_primjs_interrupt_helper.h │ │ │ ├── interface.h │ │ │ ├── quickjs_debugger_ng.cc │ │ │ ├── quickjs_debugger_ng.h │ │ │ ├── quickjs_inspected_context.cc │ │ │ ├── quickjs_inspected_context.h │ │ │ ├── quickjs_inspected_context_callbacks.cc │ │ │ ├── quickjs_inspected_context_callbacks.h │ │ │ ├── quickjs_inspector.h │ │ │ ├── quickjs_inspector_impl.cc │ │ │ └── quickjs_inspector_impl.h │ │ └── v8/ │ │ ├── BUILD.gn │ │ ├── v8_inspector_client_impl.cc │ │ ├── v8_inspector_client_impl.h │ │ ├── v8_inspector_client_provider.cc │ │ └── v8_inspector_client_provider.h │ ├── lynx_devtool/ │ │ ├── BUILD.gn │ │ ├── CPPLINT.cfg │ │ ├── agent/ │ │ │ ├── BUILD.gn │ │ │ ├── agent_constants.h │ │ │ ├── agent_defines.h │ │ │ ├── android/ │ │ │ │ ├── devtool_platform_android.cc │ │ │ │ ├── devtool_platform_android.h │ │ │ │ ├── global_devtool_platform_android.cc │ │ │ │ └── global_devtool_platform_android.h │ │ │ ├── console_message_manager.cc │ │ │ ├── console_message_manager.h │ │ │ ├── devtool_platform_facade.cc │ │ │ ├── devtool_platform_facade.h │ │ │ ├── domain_agent/ │ │ │ │ ├── inspector_agent.cc │ │ │ │ ├── inspector_agent.h │ │ │ │ ├── inspector_component_agent.cc │ │ │ │ ├── inspector_component_agent.h │ │ │ │ ├── inspector_css_agent_ng.cc │ │ │ │ ├── inspector_css_agent_ng.h │ │ │ │ ├── inspector_debugger_agent.cc │ │ │ │ ├── inspector_debugger_agent.h │ │ │ │ ├── inspector_dom_agent_ng.cc │ │ │ │ ├── inspector_dom_agent_ng.h │ │ │ │ ├── inspector_heap_profiler_agent.cc │ │ │ │ ├── inspector_heap_profiler_agent.h │ │ │ │ ├── inspector_input_agent.cc │ │ │ │ ├── inspector_input_agent.h │ │ │ │ ├── inspector_io_agent.cc │ │ │ │ ├── inspector_io_agent.h │ │ │ │ ├── inspector_layer_tree_agent_ng.cc │ │ │ │ ├── inspector_layer_tree_agent_ng.h │ │ │ │ ├── inspector_log_agent.cc │ │ │ │ ├── inspector_log_agent.h │ │ │ │ ├── inspector_log_agent_unittest.cc │ │ │ │ ├── inspector_lynx_agent_ng.cc │ │ │ │ ├── inspector_lynx_agent_ng.h │ │ │ │ ├── inspector_memory_agent.cc │ │ │ │ ├── inspector_memory_agent.h │ │ │ │ ├── inspector_overlay_agent_ng.cc │ │ │ │ ├── inspector_overlay_agent_ng.h │ │ │ │ ├── inspector_page_agent_ng.cc │ │ │ │ ├── inspector_page_agent_ng.h │ │ │ │ ├── inspector_performance_agent.cc │ │ │ │ ├── inspector_performance_agent.h │ │ │ │ ├── inspector_profiler_agent.cc │ │ │ │ ├── inspector_profiler_agent.h │ │ │ │ ├── inspector_runtime_agent.cc │ │ │ │ ├── inspector_runtime_agent.h │ │ │ │ ├── inspector_template_agent.cc │ │ │ │ ├── inspector_template_agent.h │ │ │ │ ├── inspector_testbench_recorder_agent.cc │ │ │ │ ├── inspector_testbench_recorder_agent.h │ │ │ │ ├── inspector_testbench_replay_agent.cc │ │ │ │ ├── inspector_testbench_replay_agent.h │ │ │ │ ├── inspector_tracing_agent.cc │ │ │ │ ├── inspector_tracing_agent.h │ │ │ │ ├── inspector_ui_tree_agent.cc │ │ │ │ ├── inspector_ui_tree_agent.h │ │ │ │ ├── inspector_white_board_agent.cc │ │ │ │ ├── inspector_white_board_agent.h │ │ │ │ ├── system_info_agent.cc │ │ │ │ └── system_info_agent.h │ │ │ ├── global_devtool_platform_facade.h │ │ │ ├── hierarchy_observer_impl.cc │ │ │ ├── hierarchy_observer_impl.h │ │ │ ├── inspector_common_observer_impl.cc │ │ │ ├── inspector_common_observer_impl.h │ │ │ ├── inspector_default_executor.cc │ │ │ ├── inspector_default_executor.h │ │ │ ├── inspector_element_observer_impl.cc │ │ │ ├── inspector_element_observer_impl.h │ │ │ ├── inspector_tasm_executor.cc │ │ │ ├── inspector_tasm_executor.h │ │ │ ├── inspector_tasm_executor_unittest.cc │ │ │ ├── inspector_ui_executor.cc │ │ │ ├── inspector_ui_executor.h │ │ │ ├── inspector_ui_executor_unittest.cc │ │ │ ├── inspector_util.cc │ │ │ ├── inspector_util.h │ │ │ ├── lynx_devtool_mediator.cc │ │ │ ├── lynx_devtool_mediator.h │ │ │ ├── lynx_devtool_mediator_base.h │ │ │ ├── lynx_global_devtool_mediator.cc │ │ │ └── lynx_global_devtool_mediator.h │ │ ├── android/ │ │ │ ├── cdp_event_listener_sender_android.cc │ │ │ ├── cdp_event_listener_sender_android.h │ │ │ ├── devtool_message_handler_android.cc │ │ │ ├── devtool_message_handler_android.h │ │ │ ├── devtool_qjs_bridge.cc │ │ │ ├── devtool_v8_bridge.cc │ │ │ ├── invoke_cdp_from_sdk_sender_android.cc │ │ │ ├── invoke_cdp_from_sdk_sender_android.h │ │ │ └── lynx_devtool_ng_android.cc │ │ ├── base/ │ │ │ ├── BUILD.gn │ │ │ ├── file_stream.cc │ │ │ ├── file_stream.h │ │ │ ├── mouse_event.h │ │ │ └── screen_metadata.h │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ └── android/ │ │ │ ├── lynx_inspector_owner_native_glue.cc │ │ │ └── lynx_inspector_owner_native_glue.h │ │ ├── config/ │ │ │ ├── BUILD.gn │ │ │ ├── devtool_config.cc │ │ │ └── devtool_config.h │ │ ├── devtool.gni │ │ ├── element/ │ │ │ ├── BUILD.gn │ │ │ ├── element_helper.cc │ │ │ ├── element_helper.h │ │ │ ├── element_helper_unittest.cc │ │ │ ├── element_inspector.cc │ │ │ ├── element_inspector.h │ │ │ ├── helper_util.cc │ │ │ ├── helper_util.h │ │ │ ├── helper_util_unittest.cc │ │ │ ├── inspector_css_helper.cc │ │ │ ├── inspector_css_helper.h │ │ │ └── inspector_css_helper_unittest.cc │ │ ├── js_debug/ │ │ │ ├── BUILD.gn │ │ │ ├── helper/ │ │ │ │ ├── js_debug_helper.cc │ │ │ │ ├── js_debug_helper.h │ │ │ │ ├── js_debug_helper_unittest.cc │ │ │ │ └── js_debug_proxy.h │ │ │ ├── inspector_client_delegate_impl.cc │ │ │ ├── inspector_client_delegate_impl.h │ │ │ ├── inspector_client_delegate_impl_unittest.cc │ │ │ ├── inspector_const_extend.h │ │ │ ├── java_script_debugger_ng.h │ │ │ ├── java_script_debugger_ng_unittest.cc │ │ │ ├── js/ │ │ │ │ ├── console_message_postman_impl.cc │ │ │ │ ├── console_message_postman_impl.h │ │ │ │ ├── inspector_java_script_debugger_impl.cc │ │ │ │ ├── inspector_java_script_debugger_impl.h │ │ │ │ ├── inspector_runtime_observer_impl.cc │ │ │ │ ├── inspector_runtime_observer_impl.h │ │ │ │ ├── inspector_runtime_observer_impl_unittest.cc │ │ │ │ ├── quickjs/ │ │ │ │ │ ├── manager/ │ │ │ │ │ │ ├── quickjs_inspector_manager_impl.cc │ │ │ │ │ │ └── quickjs_inspector_manager_impl.h │ │ │ │ │ └── proxy/ │ │ │ │ │ ├── js_debug_proxy_quickjs.cc │ │ │ │ │ └── js_debug_proxy_quickjs.h │ │ │ │ ├── runtime_manager_delegate_impl.cc │ │ │ │ ├── runtime_manager_delegate_impl.h │ │ │ │ └── v8/ │ │ │ │ ├── manager/ │ │ │ │ │ ├── v8_inspector_manager_impl.cc │ │ │ │ │ └── v8_inspector_manager_impl.h │ │ │ │ └── proxy/ │ │ │ │ ├── js_debug_proxy_v8.cc │ │ │ │ └── js_debug_proxy_v8.h │ │ │ └── lepus/ │ │ │ ├── inspector_lepus_debugger_impl.cc │ │ │ ├── inspector_lepus_debugger_impl.h │ │ │ ├── inspector_lepus_debugger_impl_unittest.cc │ │ │ ├── inspector_lepus_observer_impl.cc │ │ │ ├── inspector_lepus_observer_impl.h │ │ │ ├── inspector_lepus_observer_impl_unittest.cc │ │ │ ├── manager/ │ │ │ │ ├── lepus_inspector_manager_impl.cc │ │ │ │ └── lepus_inspector_manager_impl.h │ │ │ └── proxy/ │ │ │ ├── js_debug_proxy_lepus.cc │ │ │ └── js_debug_proxy_lepus.h │ │ ├── logbox/ │ │ │ ├── BUILD.gn │ │ │ ├── lynx_logbox_wrapper.cc │ │ │ └── lynx_logbox_wrapper.h │ │ ├── lynx_devtool_ng.cc │ │ ├── lynx_devtool_ng.h │ │ ├── lynx_devtool_ng_unittest.cc │ │ ├── message_handler/ │ │ │ ├── BUILD.gn │ │ │ ├── fetch_debug_info_handler.cc │ │ │ ├── fetch_debug_info_handler.h │ │ │ ├── fetch_debug_info_handler_unittest.cc │ │ │ ├── stop_at_entry_handler.cc │ │ │ ├── stop_at_entry_handler.h │ │ │ └── stop_at_entry_handler_unittest.cc │ │ ├── recorder/ │ │ │ ├── BUILD.gn │ │ │ ├── android/ │ │ │ │ └── recorder_controller_native_glue.cc │ │ │ ├── test_bench_utils.cc │ │ │ ├── test_bench_utils.h │ │ │ └── test_bench_utils_unittest.cc │ │ ├── resources/ │ │ │ ├── BUILD.gn │ │ │ ├── arrange_resources.py │ │ │ ├── copy_resources.py │ │ │ ├── devtool-switch/ │ │ │ │ ├── .gitignore │ │ │ │ ├── .npmrc │ │ │ │ ├── LICENSE │ │ │ │ ├── build.py │ │ │ │ ├── lynx.config.ts │ │ │ │ ├── package.json │ │ │ │ ├── src/ │ │ │ │ │ ├── App.tsx │ │ │ │ │ ├── atoms/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Basic.css │ │ │ │ │ │ ├── Radio.css │ │ │ │ │ │ ├── Radio.tsx │ │ │ │ │ │ ├── Status.css │ │ │ │ │ │ ├── Status.tsx │ │ │ │ │ │ ├── Switch.css │ │ │ │ │ │ └── Switch.tsx │ │ │ │ │ ├── i18n.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── locales/ │ │ │ │ │ │ ├── en.json │ │ │ │ │ │ └── zh.json │ │ │ │ │ ├── rspeedy-env.d.ts │ │ │ │ │ └── sections/ │ │ │ │ │ ├── CurrentJSEngine.tsx │ │ │ │ │ ├── DOMInspector.tsx │ │ │ │ │ ├── DevTool.tsx │ │ │ │ │ ├── FSPScreenshot.tsx │ │ │ │ │ ├── Header.tsx │ │ │ │ │ ├── HighlightTouch.tsx │ │ │ │ │ ├── JSEngine.tsx │ │ │ │ │ ├── LogBox.tsx │ │ │ │ │ ├── LongPress.tsx │ │ │ │ │ ├── PixelCopy.tsx │ │ │ │ │ └── TestBench.tsx │ │ │ │ └── tsconfig.json │ │ │ └── lynx-error-parser/ │ │ │ ├── .eslintrc.json │ │ │ ├── .gitignore │ │ │ ├── .prettierignore │ │ │ ├── .prettierrc │ │ │ ├── build.py │ │ │ ├── package.json │ │ │ ├── rsbuild.config.ts │ │ │ ├── src/ │ │ │ │ ├── base.ts │ │ │ │ ├── btsErrorParser.ts │ │ │ │ ├── defaultParser.ts │ │ │ │ ├── index.ts │ │ │ │ └── mtsErrorParser.ts │ │ │ └── tsconfig.json │ │ ├── shared_data/ │ │ │ ├── BUILD.gn │ │ │ ├── white_board_inspector_delegate.cc │ │ │ ├── white_board_inspector_delegate.h │ │ │ ├── white_board_inspector_delegate_unittest.cc │ │ │ ├── white_board_inspector_impl.cc │ │ │ ├── white_board_inspector_impl.h │ │ │ ├── white_board_inspector_impl_unittest.cc │ │ │ ├── white_board_inspector_runtime_delegate.cc │ │ │ ├── white_board_inspector_runtime_delegate.h │ │ │ ├── white_board_inspector_runtime_delegate_unittest.cc │ │ │ ├── white_board_inspector_tasm_delegate.cc │ │ │ ├── white_board_inspector_tasm_delegate.h │ │ │ └── white_board_inspector_tasm_delegate_unittest.cc │ │ └── tracing/ │ │ ├── BUILD.gn │ │ ├── devtool_trace_event_def.h │ │ ├── frame_trace_service.cc │ │ ├── frame_trace_service.h │ │ ├── instance_counter_trace_impl.cc │ │ ├── instance_counter_trace_impl.h │ │ └── platform/ │ │ ├── fps_trace_plugin_android.cc │ │ ├── fps_trace_plugin_android.h │ │ ├── fps_trace_plugin_darwin.h │ │ ├── fps_trace_plugin_darwin.mm │ │ ├── frame_trace_service_android.cc │ │ ├── frame_trace_service_android.h │ │ ├── frameview_trace_plugin_android.cc │ │ ├── frameview_trace_plugin_android.h │ │ ├── frameview_trace_plugin_darwin.h │ │ ├── frameview_trace_plugin_darwin.mm │ │ ├── instance_trace_plugin_android.cc │ │ ├── instance_trace_plugin_android.h │ │ ├── instance_trace_plugin_darwin.h │ │ └── instance_trace_plugin_darwin.mm │ └── testing/ │ ├── BUILD.gn │ ├── agent/ │ │ ├── BUILD.gn │ │ └── devtool_mediator_unittest.cc │ ├── base_devtool/ │ │ ├── BUILD.gn │ │ └── base_devtool_unittest.cc │ ├── mock/ │ │ ├── BUILD.gn │ │ ├── cdp_event_listener_sender_mock.h │ │ ├── devtool_platform_facade_mock.cc │ │ ├── devtool_platform_facade_mock.h │ │ ├── element_manager_mock.cc │ │ ├── element_manager_mock.h │ │ ├── element_observer_mock.h │ │ ├── global_devtool_platform_facade_mock.cc │ │ ├── global_devtool_platform_facade_mock.h │ │ ├── inspector_client_ng_mock.h │ │ ├── inspector_tasm_executor_mock.cc │ │ ├── inspector_tasm_executor_mock.h │ │ ├── lynx_devtool_mediator_mock.cc │ │ ├── lynx_devtool_mediator_mock.h │ │ ├── lynx_devtool_ng_mock.cc │ │ ├── lynx_devtool_ng_mock.h │ │ └── white_board_inspector_delegate_mock.h │ ├── transition/ │ │ ├── BUILD.gn │ │ └── devtool_transition_unittest.cc │ └── utils/ │ ├── BUILD.gn │ ├── devtool_env_testing.cc │ ├── devtool_env_testing.h │ ├── method_tracker.cc │ └── method_tracker.h ├── explorer/ │ ├── .npmrc │ ├── BUILD.gn │ ├── README.md │ ├── android/ │ │ ├── README.md │ │ ├── THIRD-PARTY-LICENSE │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── lynx_explorer/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── myapp-release-key.keystore │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── explorer/ │ │ │ │ ├── ExplorerApplication.java │ │ │ │ ├── ImageBehavior.java │ │ │ │ ├── LynxViewShellActivity.java │ │ │ │ ├── input/ │ │ │ │ │ ├── LynxExplorerInput.java │ │ │ │ │ └── kt/ │ │ │ │ │ └── LynxExplorerInput.kt │ │ │ │ ├── modules/ │ │ │ │ │ ├── ExplorerModule.java │ │ │ │ │ ├── LynxModuleAdapter.java │ │ │ │ │ ├── LynxSettingManager.java │ │ │ │ │ └── SettingInfo.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── DemoGenericResourceFetcher.java │ │ │ │ │ ├── DemoMediaResourceFetcher.java │ │ │ │ │ ├── DemoTemplateProvider.java │ │ │ │ │ ├── DemoTemplateResourceFetcher.java │ │ │ │ │ └── TemplateApi.java │ │ │ │ ├── scan/ │ │ │ │ │ └── QRScanActivity.java │ │ │ │ ├── shell/ │ │ │ │ │ ├── HttpTemplateDispatcher.java │ │ │ │ │ ├── LocalTemplateDispatcher.java │ │ │ │ │ ├── LynxRecorderDefaultActionCallback.java │ │ │ │ │ ├── LynxRecorderDispatcher.java │ │ │ │ │ ├── TemplateDispatcher.java │ │ │ │ │ └── TemplateLoader.java │ │ │ │ └── utils/ │ │ │ │ └── QueryMapUtils.java │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ ├── back_dark.xml │ │ │ │ ├── back_light.xml │ │ │ │ └── explorer.xml │ │ │ ├── layout/ │ │ │ │ ├── default_display.xml │ │ │ │ ├── fullscreen_display.xml │ │ │ │ └── scan.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── settings.gradle │ ├── darwin/ │ │ ├── CPPLINT.cfg │ │ ├── ios/ │ │ │ ├── README.md │ │ │ └── lynx_explorer/ │ │ │ ├── LynxExplorer/ │ │ │ │ ├── AppDelegate.h │ │ │ │ ├── AppDelegate.mm │ │ │ │ ├── Assets.xcassets/ │ │ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── back_dark.imageset/ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── back_light.imageset/ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Base.lproj/ │ │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ │ └── Main.storyboard │ │ │ │ ├── Info.plist │ │ │ │ ├── LynxInitProcessor.h │ │ │ │ ├── LynxInitProcessor.m │ │ │ │ ├── LynxViewShellViewController.h │ │ │ │ ├── LynxViewShellViewController.m │ │ │ │ ├── TasmDispatcher.h │ │ │ │ ├── TasmDispatcher.m │ │ │ │ ├── input/ │ │ │ │ │ ├── LynxExplorerInput.h │ │ │ │ │ └── LynxExplorerInput.m │ │ │ │ ├── lynxrecorder/ │ │ │ │ │ ├── LynxRecorderDefaultActionCallback.h │ │ │ │ │ └── LynxRecorderDefaultActionCallback.m │ │ │ │ ├── main.m │ │ │ │ ├── modules/ │ │ │ │ │ ├── ExplorerModule.h │ │ │ │ │ ├── ExplorerModule.m │ │ │ │ │ ├── LynxSettingManager.h │ │ │ │ │ └── LynxSettingManager.m │ │ │ │ ├── provider/ │ │ │ │ │ ├── DemoGenericResourceFetcher.h │ │ │ │ │ ├── DemoGenericResourceFetcher.m │ │ │ │ │ ├── DemoMediaResourceFetcher.h │ │ │ │ │ ├── DemoMeidaResourceFetcher.m │ │ │ │ │ ├── DemoTemplateResourceFetcher.h │ │ │ │ │ ├── DemoTemplateResourceFetcher.m │ │ │ │ │ ├── TemplateProvider.h │ │ │ │ │ └── TemplateProvider.m │ │ │ │ ├── scan/ │ │ │ │ │ ├── ScanViewController.h │ │ │ │ │ └── ScanViewController.m │ │ │ │ └── utils/ │ │ │ │ ├── UIHelper.h │ │ │ │ └── UIHelper.m │ │ │ ├── LynxExplorer.xcodeproj/ │ │ │ │ ├── project.pbxproj │ │ │ │ └── xcshareddata/ │ │ │ │ └── xcschemes/ │ │ │ │ ├── LynxExplorer.xcscheme │ │ │ │ └── LynxExplorerTests.xcscheme │ │ │ ├── LynxExplorerTests/ │ │ │ │ └── LynxExplorerTests.m │ │ │ ├── Podfile │ │ │ ├── TestPlan/ │ │ │ │ └── UTTest.xctestplan │ │ │ └── bundle_install.sh │ │ └── macos/ │ │ ├── README.md │ │ └── lynx_explorer/ │ │ ├── BUILD.gn │ │ ├── LynxExplorer/ │ │ │ ├── AppDelegate.h │ │ │ ├── AppDelegate.mm │ │ │ ├── Base.lproj/ │ │ │ │ └── MainMenu.xib │ │ │ ├── Info.plist │ │ │ ├── LynxWindow.h │ │ │ ├── LynxWindow.m │ │ │ ├── LynxWindowController.h │ │ │ ├── LynxWindowController.m │ │ │ ├── ViewController.h │ │ │ ├── ViewController.mm │ │ │ ├── fetcher/ │ │ │ │ ├── ExampleGenericResourceFetcher.h │ │ │ │ └── ExampleGenericResourceFetcher.mm │ │ │ ├── main.m │ │ │ ├── module/ │ │ │ │ ├── LynxDemoModule.h │ │ │ │ └── LynxDemoModule.mm │ │ │ ├── runtime/ │ │ │ │ ├── ExampleLynxRuntimeLifecycleObserver.h │ │ │ │ └── ExampleLynxRuntimeLifecycleObserver.mm │ │ │ └── service/ │ │ │ ├── LynxHttpService.h │ │ │ └── LynxHttpService.mm │ │ ├── Resource/ │ │ │ └── Info.plist │ │ └── build_resources.py │ ├── embedder/ │ │ └── lynx_explorer/ │ │ ├── BUILD.gn │ │ └── module/ │ │ ├── lynx_demo_extension_module.cc │ │ └── lynx_demo_extension_module.h │ ├── harmony/ │ │ ├── .gitignore │ │ ├── .ohpmrc │ │ ├── AppScope/ │ │ │ ├── app.json5 │ │ │ └── resources/ │ │ │ └── base/ │ │ │ └── element/ │ │ │ └── string.json │ │ ├── README.md │ │ ├── build-profile.json5 │ │ ├── hvigor/ │ │ │ └── hvigor-config.json5 │ │ ├── hvigorfile.ts │ │ ├── lynx_explorer/ │ │ │ ├── .gitignore │ │ │ ├── build-profile.json5 │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── cpp/ │ │ │ │ └── CMakeLists.txt │ │ │ ├── ets/ │ │ │ │ ├── client/ │ │ │ │ │ └── EntryLynxClient.ets │ │ │ │ ├── common/ │ │ │ │ │ ├── LynxInitProcessor.ets │ │ │ │ │ └── constants.ets │ │ │ │ ├── component/ │ │ │ │ │ ├── LynxExplorerInput.ets │ │ │ │ │ ├── UIClickShadowNode.ets │ │ │ │ │ └── UIClickView.ets │ │ │ │ ├── entryability/ │ │ │ │ │ ├── EntryAbility.ets │ │ │ │ │ └── LynxAbilityStage.ets │ │ │ │ ├── module/ │ │ │ │ │ └── ExplorerModule.ets │ │ │ │ ├── pages/ │ │ │ │ │ ├── Index.ets │ │ │ │ │ ├── Lynx.ets │ │ │ │ │ ├── LynxRecorder.ets │ │ │ │ │ └── Scan.ets │ │ │ │ └── provider/ │ │ │ │ ├── ExampleGenericResourceFetcher.ets │ │ │ │ ├── ExampleMediaResourceFetcher.ets │ │ │ │ └── ExampleTemplateResourceFetcher.ets │ │ │ ├── module.json5 │ │ │ └── resources/ │ │ │ ├── base/ │ │ │ │ ├── element/ │ │ │ │ │ ├── color.json │ │ │ │ │ └── string.json │ │ │ │ └── profile/ │ │ │ │ └── main_pages.json │ │ │ └── rawfile/ │ │ │ └── .gitignore │ │ ├── oh-package.json5 │ │ ├── parameter.json │ │ └── script/ │ │ ├── build.py │ │ ├── generate_changelog.py │ │ ├── patch_lynx_version.py │ │ └── publish.py │ ├── homepage/ │ │ ├── .gitignore │ │ ├── build.py │ │ ├── components/ │ │ │ ├── homepage/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── navigator/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── settingspage/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ └── shared.scss │ │ ├── index.tsx │ │ ├── lynx.config.mjs │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── typing.d.ts │ ├── package.json │ ├── showcase/ │ │ ├── .gitignore │ │ ├── .npmrc │ │ ├── build_and_copy.py │ │ ├── menu/ │ │ │ ├── components/ │ │ │ │ ├── menu/ │ │ │ │ │ ├── index.scss │ │ │ │ │ └── index.tsx │ │ │ │ └── menu-item/ │ │ │ │ ├── index.scss │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── lynx.config.mjs │ │ │ ├── package.json │ │ │ ├── sub-menu/ │ │ │ │ ├── animation.tsx │ │ │ │ ├── css.tsx │ │ │ │ ├── layout.tsx │ │ │ │ ├── list.tsx │ │ │ │ ├── scrollview.tsx │ │ │ │ └── text.tsx │ │ │ └── typing.d.ts │ │ ├── package.json │ │ └── pnpm-workspace.yaml │ └── windows/ │ ├── README.md │ └── lynx_explorer/ │ ├── BUILD.gn │ ├── build_resources.py │ ├── dpi_utils_win32.cc │ ├── dpi_utils_win32.h │ ├── fetcher/ │ │ ├── example_generic_resource_fetcher.cc │ │ └── example_generic_resource_fetcher.h │ ├── httplib/ │ │ ├── httplib_client.cc │ │ └── httplib_client.h │ ├── lynx_explorer.exe.manifest │ ├── lynx_window.cc │ ├── lynx_window.h │ ├── lynx_window_manager.cc │ ├── lynx_window_manager.h │ ├── main.cc │ ├── module/ │ │ ├── lynx_demo_module.cc │ │ └── lynx_demo_module.h │ └── runtime/ │ ├── example_lynx_runtime_lifecycle_observer.cc │ └── example_lynx_runtime_lifecycle_observer.h ├── js_libraries/ │ ├── .gitignore │ ├── lynx-core/ │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── esbuild.mjs │ │ ├── kernel-build/ │ │ │ ├── android-polyfill.js │ │ │ └── web-polyfill.js │ │ ├── lynx_core.d.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.ts │ │ │ │ ├── index.ts │ │ │ │ └── interface.ts │ │ │ ├── appManager.ts │ │ │ ├── common/ │ │ │ │ ├── amd.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── jsbi.ts │ │ │ │ ├── log.ts │ │ │ │ ├── nativeGlobal.ts │ │ │ │ ├── ttConsole.ts │ │ │ │ └── version.ts │ │ │ ├── global.d.ts │ │ │ ├── index.build.ts │ │ │ ├── index.card.ts │ │ │ ├── index.ts │ │ │ ├── index.web.ts │ │ │ ├── lynx/ │ │ │ │ ├── index.ts │ │ │ │ ├── interface.ts │ │ │ │ └── lynx.ts │ │ │ ├── modules/ │ │ │ │ ├── animation/ │ │ │ │ │ ├── animation.ts │ │ │ │ │ ├── animationV2.ts │ │ │ │ │ ├── effect.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── element/ │ │ │ │ │ ├── element.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── event/ │ │ │ │ │ ├── aop.ts │ │ │ │ │ ├── eventEmitter.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── fetch/ │ │ │ │ │ ├── AbortController.ts │ │ │ │ │ ├── BodyMixin.ts │ │ │ │ │ ├── EventSource.ts │ │ │ │ │ ├── Headers.ts │ │ │ │ │ ├── ReadableStream.ts │ │ │ │ │ ├── Request.ts │ │ │ │ │ ├── Response.ts │ │ │ │ │ ├── TextDecoder.ts │ │ │ │ │ ├── TextEncoder.ts │ │ │ │ │ ├── URL.js │ │ │ │ │ ├── UrlSearchParamsPolyfill.js │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── nativeModules/ │ │ │ │ │ ├── exposure.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── intersectionObserver.ts │ │ │ │ │ └── textInfo.ts │ │ │ │ ├── performance/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── performance.ts │ │ │ │ │ └── performanceObserver.ts │ │ │ │ ├── report/ │ │ │ │ │ ├── errors.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── report-error.ts │ │ │ │ │ ├── reporter.ts │ │ │ │ │ └── wrapper.ts │ │ │ │ ├── selectorQuery/ │ │ │ │ │ ├── SelectorQuery.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interface.ts │ │ │ │ │ └── nodeRef.ts │ │ │ │ └── sharedData/ │ │ │ │ └── ShareDataSubject.ts │ │ │ ├── polyfill/ │ │ │ │ ├── arraybuffer.ts │ │ │ │ └── index.ts │ │ │ ├── react/ │ │ │ │ └── reactApp.ts │ │ │ ├── standalone/ │ │ │ │ └── StandaloneApp.ts │ │ │ └── util/ │ │ │ ├── TraceEventDef.ts │ │ │ ├── cachedFunctionProxy.ts │ │ │ ├── index.ts │ │ │ └── setup-promise.ts │ │ └── tsconfig.json │ ├── lynx-polyfill/ │ │ ├── LICENSE │ │ ├── package.json │ │ ├── src/ │ │ │ └── index.js │ │ └── test/ │ │ ├── browsers-runner.js │ │ ├── index.html │ │ ├── node-runner.js │ │ └── tests.js │ ├── lynx-promise/ │ │ ├── package.json │ │ └── src/ │ │ ├── LICENSE │ │ ├── core.js │ │ ├── es6-extensions.js │ │ ├── index.js │ │ └── rejection-tracking.js │ ├── lynx-runtime-shared/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── nativeGlobal.ts │ │ │ ├── ttConsole.ts │ │ │ ├── typings/ │ │ │ │ └── global.d.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── type-config/ │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── CONTRIBUTING.md │ │ ├── README.md │ │ ├── config-keys.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── package.json │ │ ├── test/ │ │ │ ├── index.test-d.ts │ │ │ └── index.test.js │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── compiler-options.d.ts │ │ │ ├── config.d.ts │ │ │ └── index.d.ts │ │ └── vitest.config.ts │ ├── type-element-api/ │ │ ├── .prettierignore │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── package.json │ │ ├── test/ │ │ │ └── index.test-d.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── element-api.d.ts │ │ │ └── index.d.ts │ │ └── vitest.config.ts │ └── types/ │ ├── .prettierignore │ ├── .prettierrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package.json │ ├── skills/ │ │ ├── image.md │ │ ├── svg.md │ │ ├── text.md │ │ └── view.md │ ├── test/ │ │ ├── common/ │ │ │ ├── animation.test-d.ts │ │ │ ├── css.test-d.ts │ │ │ ├── element/ │ │ │ │ ├── list-item.test-d.ts │ │ │ │ ├── list.test-d.ts │ │ │ │ └── scroll-view.test-d.tsx │ │ │ ├── events.test-d.ts │ │ │ ├── global.test-d.ts │ │ │ ├── main-element.test-d.ts │ │ │ ├── nodes-ref.test-d.ts │ │ │ └── test-utils.ts │ │ └── pages/ │ │ ├── frame.test-d.tsx │ │ ├── image.test-d.tsx │ │ ├── index.tsx │ │ ├── input.test-d.tsx │ │ ├── overlay.test-d.tsx │ │ ├── refresh.test-d.tsx │ │ ├── svg.test-d.tsx │ │ ├── text.test-d.tsx │ │ ├── title-bar-view.test-d.tsx │ │ └── view.test-d.tsx │ ├── tsconfig.json │ ├── types/ │ │ ├── background-thread/ │ │ │ ├── animation.d.ts │ │ │ ├── app.d.ts │ │ │ ├── event.d.ts │ │ │ ├── fetch.d.ts │ │ │ ├── index.d.ts │ │ │ ├── lynx.d.ts │ │ │ ├── native-modules.d.ts │ │ │ ├── nodes-ref.d.ts │ │ │ ├── performance.d.ts │ │ │ └── text-encoder-decoder.d.ts │ │ ├── common/ │ │ │ ├── console.d.ts │ │ │ ├── csstype.d.ts │ │ │ ├── element/ │ │ │ │ ├── attributes.d.ts │ │ │ │ ├── common.d.ts │ │ │ │ ├── component.d.ts │ │ │ │ ├── element.d.ts │ │ │ │ ├── filter-image.d.ts │ │ │ │ ├── frame.d.ts │ │ │ │ ├── image.d.ts │ │ │ │ ├── index.d.ts │ │ │ │ ├── input.d.ts │ │ │ │ ├── list-item.d.ts │ │ │ │ ├── list.d.ts │ │ │ │ ├── methods.d.ts │ │ │ │ ├── overlay.d.ts │ │ │ │ ├── page.d.ts │ │ │ │ ├── refresh.d.ts │ │ │ │ ├── scroll-view.d.ts │ │ │ │ ├── svg.d.ts │ │ │ │ ├── text.d.ts │ │ │ │ ├── textarea.d.ts │ │ │ │ ├── title-bar-view.d.ts │ │ │ │ └── view.d.ts │ │ │ ├── events.d.ts │ │ │ ├── global.d.ts │ │ │ ├── index.d.ts │ │ │ ├── lynx.d.ts │ │ │ ├── performance.d.ts │ │ │ ├── props.d.ts │ │ │ └── system-info.d.ts │ │ ├── index.d.ts │ │ └── main-thread/ │ │ ├── animation.d.ts │ │ ├── element.d.ts │ │ ├── events.d.ts │ │ ├── index.d.ts │ │ └── lynx.d.ts │ └── vitest.config.ts ├── oliver/ │ ├── BUILD.gn │ ├── build_gn.py │ ├── copy_node_headers.py │ ├── gen_wasm_js.py │ ├── lynx-tasm/ │ │ ├── .gitignore │ │ ├── BUILD.gn │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── cli.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── package.json │ │ └── tsconfig.json │ └── oliver.gni ├── package.json ├── patches/ │ ├── 0002-SkXMLParser-parse-Optimize-memory-backed-streams.patch │ ├── angle/ │ │ ├── 0001-BugFix-Fix-some-problem.patch │ │ └── 0002-Infra-Remove-r8.patch │ ├── expat/ │ │ └── 0001-Infra-Support-system-expat.patch │ ├── freetype2/ │ │ ├── 0001-Infra-Adaption-for-lynx-and-skity.patch │ │ └── 0002-add-FREETYPE_STATIC_LIB-1-in-static_library.patch │ ├── harfbuzz/ │ │ └── 0001-Adaption-for-lynx.patch │ ├── httplib/ │ │ ├── 0001-Infra-Split-httplib.h-into-separate-header-and-source-files.patch │ │ └── 0002-Infra-Add-BUILD.gn-file-for-httplib.patch │ ├── icu/ │ │ └── 0001-Feature-Support-system-icu.patch │ ├── libcxx/ │ │ ├── 0001-Fix-some-issues-on-windows-and-linux.patch │ │ └── 0002-add-_LIBCPP_DECLSPEC_EMPTY_BASES-for-variant.patch │ ├── libjpeg-turbo/ │ │ ├── 0001-Infra-Adaption-for-gn_to_spec-build.patch │ │ └── 0002-infra-support-macos-build.patch │ ├── libpng/ │ │ ├── 0001-Infra-Support-harmony-and-sync-patch-from-upstream.patch │ │ └── 0002-disable-fp-header-include.patch │ ├── modp_b64/ │ │ ├── 0001-add-new-modp_b64-APIs.patch │ │ └── 0002-optimize-rename-modp-method-with-lynx-prefix.patch │ ├── nanopng/ │ │ └── 0001-Adapt-nanopng-to-the-Skity-project.patch │ ├── nasm/ │ │ └── 0001-delete-depfile-arg.patch │ ├── perfetto/ │ │ └── 0001-Add-zlib-dependency-for-perfetto.patch │ ├── skia/ │ │ └── 0001-Infra-Adaption-for-lynx.patch │ ├── swiftshader/ │ │ └── 0001-Infra-Adaption-for-lynx.patch │ ├── vulkan-loader/ │ │ └── 0001-Infra-Fix-compile-error.patch │ ├── xhook/ │ │ ├── 0001-Infra-Add-BUILD.gn-file-of-xhook.patch │ │ └── 0002-Infra-Add-Harmony-OS-support.patch │ └── zlib/ │ ├── 0001-Adapt-zlib-to-the-Lynx-project.patch │ ├── 0002-Infra-support-Harmony-OS.patch │ ├── 0003-BugFix-Fix-Xcode-build-problem.patch │ └── 0004-bugfix-fix-macos-compile.patch ├── platform/ │ ├── android/ │ │ ├── .gitignore │ │ ├── Android.gni │ │ ├── BUILD.gn │ │ ├── api/ │ │ │ ├── doxygen.cfg │ │ │ └── lynx_android.api │ │ ├── build.gradle │ │ ├── gradle/ │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── jacoco.gradle │ │ ├── lynx_android/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── CMakeLists.txt │ │ │ ├── LynxAndroid.gni │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── BUILD.gn │ │ │ ├── android_test/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ ├── devtoolwrapper/ │ │ │ │ │ ├── DevToolLifecycleTest.java │ │ │ │ │ ├── DevToolSettingsTest.java │ │ │ │ │ ├── DevToolStateTest.java │ │ │ │ │ └── LynxDevToolEnvUtilsTest.java │ │ │ │ ├── jsbridge/ │ │ │ │ │ ├── LynxAccessibilityModuleTest.java │ │ │ │ │ ├── LynxCommonModuleFactoryTest.java │ │ │ │ │ ├── LynxExposureModuleTest.java │ │ │ │ │ ├── LynxResourceModuleTest.java │ │ │ │ │ ├── LynxSharedModuleFactoryTest.java │ │ │ │ │ ├── LynxTextInfoModuleTest.java │ │ │ │ │ └── network/ │ │ │ │ │ ├── HttpStreamingDelegateTest.java │ │ │ │ │ └── LynxFetchModuleEventSenderTest.java │ │ │ │ ├── react/ │ │ │ │ │ └── bridge/ │ │ │ │ │ ├── JavaOnlyArrayTest.java │ │ │ │ │ └── JavaOnlyMapTest.java │ │ │ │ └── tasm/ │ │ │ │ ├── ComponentStatisticTest.java │ │ │ │ ├── LynxErrorTest.java │ │ │ │ ├── LynxEventEmitterTest.java │ │ │ │ ├── LynxInfoReportHelperTest.java │ │ │ │ ├── LynxLoadMetaTest.java │ │ │ │ ├── ResourceHelper.java │ │ │ │ ├── TemplateDataTest.java │ │ │ │ ├── base/ │ │ │ │ │ ├── CleanupReferenceTest.java │ │ │ │ │ ├── GlobalRefQueueTest.java │ │ │ │ │ └── MemoryPressureCallbackDispatcherTest.java │ │ │ │ ├── behavior/ │ │ │ │ │ ├── BehaviorOverrideRegistryTest.java │ │ │ │ │ ├── BehaviorRegistryTest.java │ │ │ │ │ ├── LynxContextTest.java │ │ │ │ │ ├── LynxUIOwnerTest.java │ │ │ │ │ ├── StylesDiffMapTest.java │ │ │ │ │ ├── TouchEventDispatcherTest.java │ │ │ │ │ ├── render/ │ │ │ │ │ │ ├── ContainerRendererTest.java │ │ │ │ │ │ ├── DisplayListApplierTest.java │ │ │ │ │ │ ├── NativePaintingContextTest.java │ │ │ │ │ │ ├── PlatformRendererContextTest.java │ │ │ │ │ │ └── RoundedRectangleTest.java │ │ │ │ │ ├── shadow/ │ │ │ │ │ │ └── text/ │ │ │ │ │ │ ├── CustomLineHeightSpanTest.java │ │ │ │ │ │ ├── CustomStyleSpanTest.java │ │ │ │ │ │ ├── DoubleFormatTest.java │ │ │ │ │ │ ├── FontTest.java │ │ │ │ │ │ ├── ForegroundColorSpanTest.java │ │ │ │ │ │ ├── InlineTextBaselineShiftSpanTest.java │ │ │ │ │ │ └── TextShadowNodeTest.java │ │ │ │ │ └── ui/ │ │ │ │ │ ├── LynxBaseUITest.java │ │ │ │ │ ├── LynxUITest.java │ │ │ │ │ ├── PropBundleTest.java │ │ │ │ │ ├── ViewInfoTest.java │ │ │ │ │ ├── accessibility/ │ │ │ │ │ │ ├── LynxAccessibilityDelegateTest.java │ │ │ │ │ │ ├── LynxAccessibilityMutationHelperTest.java │ │ │ │ │ │ └── LynxAccessibilityWrapperTest.java │ │ │ │ │ ├── background/ │ │ │ │ │ │ └── BackgroundConicGradientLayerTest.java │ │ │ │ │ ├── frame/ │ │ │ │ │ │ └── FrameShadowNodeTest.java │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── LynxImageConfigTest.java │ │ │ │ │ │ ├── LynxImageLoadInfoTest.java │ │ │ │ │ │ └── LynxImageManagerTest.java │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── FactoredPagerSnapHelperTest.java │ │ │ │ │ │ ├── LynxSnapHelperTest.java │ │ │ │ │ │ ├── UIListContainerTest.java │ │ │ │ │ │ └── container/ │ │ │ │ │ │ └── ListCustomScrollerTest.java │ │ │ │ │ ├── scroll/ │ │ │ │ │ │ ├── BounceGestureHelperTest.java │ │ │ │ │ │ ├── LynxUIScrollViewTest.java │ │ │ │ │ │ └── base/ │ │ │ │ │ │ ├── LynxBaseScrollViewDraggingTest.java │ │ │ │ │ │ ├── LynxBaseScrollViewNestedTest.java │ │ │ │ │ │ ├── LynxBaseScrollViewScrollerTest.java │ │ │ │ │ │ ├── LynxBaseScrollViewScrollingTest.java │ │ │ │ │ │ ├── LynxBaseScrollViewTest.java │ │ │ │ │ │ └── LynxNestedScrollingChildHelperTest.java │ │ │ │ │ ├── swiper/ │ │ │ │ │ │ └── ViewPagerTest.java │ │ │ │ │ └── text/ │ │ │ │ │ ├── AndroidTextTest.java │ │ │ │ │ └── FlattenUITextTest.java │ │ │ │ ├── core/ │ │ │ │ │ └── ResourceLoaderTest.java │ │ │ │ ├── featurecount/ │ │ │ │ │ └── LynxFeatureCounterTest.java │ │ │ │ ├── fluency/ │ │ │ │ │ ├── FluencyTraceHelperTest.java │ │ │ │ │ └── LynxFpsTracerTest.java │ │ │ │ ├── gesture/ │ │ │ │ │ ├── arena/ │ │ │ │ │ │ └── GestureArenaManagerTest.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── GestureExtraBundleTest.java │ │ │ │ │ ├── detector/ │ │ │ │ │ │ └── GestureDetectorManagerTest.java │ │ │ │ │ └── handler/ │ │ │ │ │ ├── DefaultGestureHandlerTest.java │ │ │ │ │ ├── FlingGestureHandlerTest.java │ │ │ │ │ ├── GestureHandlerTriggerTest.java │ │ │ │ │ ├── NativeGestureHandlerTest.java │ │ │ │ │ └── PanGestureHandlerTest.java │ │ │ │ ├── group/ │ │ │ │ │ ├── BitmapSizeTest.java │ │ │ │ │ └── LynxGroupTest.java │ │ │ │ ├── performance/ │ │ │ │ │ ├── PerformanceControllerTest.java │ │ │ │ │ ├── fsp/ │ │ │ │ │ │ ├── FSPConfigTest.java │ │ │ │ │ │ ├── FSPSnapshotTest.java │ │ │ │ │ │ └── FSPTracerTest.java │ │ │ │ │ └── performanceobserver/ │ │ │ │ │ ├── MemoryUsageEntryTest.java │ │ │ │ │ ├── MemoryUsageItemTest.java │ │ │ │ │ └── PerformanceEntryConverterTest.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── LynxResResponseTest.java │ │ │ │ │ └── LynxResourceServiceProviderTest.java │ │ │ │ ├── resourceprovider/ │ │ │ │ │ └── template/ │ │ │ │ │ └── TemplateProviderResultTest.java │ │ │ │ ├── service/ │ │ │ │ │ ├── LynxLazyInitializerTest.java │ │ │ │ │ ├── LynxServiceCenterTest.java │ │ │ │ │ └── security/ │ │ │ │ │ └── SecurityResultTest.java │ │ │ │ └── utils/ │ │ │ │ ├── BasicShapeTest.java │ │ │ │ ├── CallStackUtilTest.java │ │ │ │ ├── ContextUtilsTest.java │ │ │ │ ├── FloatUtilsTest.java │ │ │ │ ├── ImageUtilsTest.java │ │ │ │ ├── MockLynxTrailService.java │ │ │ │ ├── PixelUtilsTest.java │ │ │ │ ├── PlatformLengthTest.java │ │ │ │ ├── RunOnceRunnableTest.java │ │ │ │ ├── StringUtilsTest.java │ │ │ │ └── ui/ │ │ │ │ └── utils/ │ │ │ │ └── ViewHelperTest.java │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ ├── config/ │ │ │ │ │ └── LynxLiteConfigs.java │ │ │ │ ├── devtoolwrapper/ │ │ │ │ │ ├── CDPEventListener.java │ │ │ │ │ ├── CDPResultCallback.java │ │ │ │ │ ├── CustomizedMessage.java │ │ │ │ │ ├── DevToolLifecycle.java │ │ │ │ │ ├── DevToolOverlayDelegate.java │ │ │ │ │ ├── DevToolSettings.java │ │ │ │ │ ├── DevToolState.java │ │ │ │ │ ├── GlobalPropsObserver.java │ │ │ │ │ ├── IDevToolDelegate.java │ │ │ │ │ ├── ILynxLogBox.java │ │ │ │ │ ├── LogBoxLogLevel.java │ │ │ │ │ ├── LynxBaseInspectorController.java │ │ │ │ │ ├── LynxBaseInspectorOwner.java │ │ │ │ │ ├── LynxBaseInspectorOwnerNG.java │ │ │ │ │ ├── LynxDevToolEnvUtils.java │ │ │ │ │ ├── LynxDevToolUtils.java │ │ │ │ │ ├── LynxDevtool.java │ │ │ │ │ ├── LynxDevtoolCardListener.java │ │ │ │ │ ├── LynxDevtoolGlobalHelper.java │ │ │ │ │ ├── LynxInspectorConsoleDelegate.java │ │ │ │ │ ├── MemoryListener.java │ │ │ │ │ ├── MessageHandler.java │ │ │ │ │ ├── OverlayService.java │ │ │ │ │ ├── ScreenshotBitmapHandler.java │ │ │ │ │ └── ScreenshotMode.java │ │ │ │ ├── jsbridge/ │ │ │ │ │ ├── Arguments.java │ │ │ │ │ ├── AttributeDescriptor.java │ │ │ │ │ ├── CallbackImpl.java │ │ │ │ │ ├── CommonModuleCreator.java │ │ │ │ │ ├── IContextFinder.java │ │ │ │ │ ├── IModuleCreator.java │ │ │ │ │ ├── JSModule.java │ │ │ │ │ ├── LynxAccessibilityModule.java │ │ │ │ │ ├── LynxAttribute.java │ │ │ │ │ ├── LynxBytecodeCallback.java │ │ │ │ │ ├── LynxContextModule.java │ │ │ │ │ ├── LynxEmbeddedModule.java │ │ │ │ │ ├── LynxExposureModule.java │ │ │ │ │ ├── LynxExtensionModule.java │ │ │ │ │ ├── LynxFetchModule.java │ │ │ │ │ ├── LynxIntersectionObserverModule.java │ │ │ │ │ ├── LynxMethod.java │ │ │ │ │ ├── LynxMethodWrapper.java │ │ │ │ │ ├── LynxModule.java │ │ │ │ │ ├── LynxModuleFactory.java │ │ │ │ │ ├── LynxModuleWrapper.java │ │ │ │ │ ├── LynxResourceModule.java │ │ │ │ │ ├── LynxSetModule.java │ │ │ │ │ ├── LynxTextInfoModule.java │ │ │ │ │ ├── LynxUIMethodModule.java │ │ │ │ │ ├── MethodDescriptor.java │ │ │ │ │ ├── ParamWrapper.java │ │ │ │ │ ├── Promise.java │ │ │ │ │ ├── PromiseImpl.java │ │ │ │ │ ├── RuntimeLifecycleListener.java │ │ │ │ │ ├── RuntimeLifecycleListenerDelegate.java │ │ │ │ │ ├── SharedContextFinder.java │ │ │ │ │ ├── SharedModuleCreator.java │ │ │ │ │ ├── jsi/ │ │ │ │ │ │ ├── AbsLynxJSIObjectDescriptor.java │ │ │ │ │ │ ├── ILynxJSIObject.java │ │ │ │ │ │ ├── ILynxJSIObjectDescriptor.java │ │ │ │ │ │ ├── LynxJSIObjectHub.java │ │ │ │ │ │ └── LynxJSPropertyDescriptor.java │ │ │ │ │ ├── network/ │ │ │ │ │ │ ├── HttpRequest.java │ │ │ │ │ │ ├── HttpResponse.java │ │ │ │ │ │ ├── HttpStreamingDelegate.java │ │ │ │ │ │ ├── LynxFetchModuleEventSender.java │ │ │ │ │ │ └── LynxHttpRunner.java │ │ │ │ │ └── webassembly/ │ │ │ │ │ ├── WebAssemblyBridge.java │ │ │ │ │ └── WebAssemblyReflect.java │ │ │ │ ├── lepus/ │ │ │ │ │ └── LynxLepusModule.java │ │ │ │ ├── react/ │ │ │ │ │ └── bridge/ │ │ │ │ │ ├── Callback.java │ │ │ │ │ ├── Dynamic.java │ │ │ │ │ ├── DynamicFromArray.java │ │ │ │ │ ├── DynamicFromMap.java │ │ │ │ │ ├── JavaOnlyArray.java │ │ │ │ │ ├── JavaOnlyMap.java │ │ │ │ │ ├── NativeArrayInterface.java │ │ │ │ │ ├── PiperData.java │ │ │ │ │ ├── ReadableArray.java │ │ │ │ │ ├── ReadableMap.java │ │ │ │ │ ├── ReadableMapKeySetIterator.java │ │ │ │ │ ├── ReadableType.java │ │ │ │ │ ├── SafeRunnable.java │ │ │ │ │ ├── WritableArray.java │ │ │ │ │ ├── WritableMap.java │ │ │ │ │ └── mapbuffer/ │ │ │ │ │ ├── CompactArrayBuffer.java │ │ │ │ │ ├── DynamicFromMapBuffer.java │ │ │ │ │ ├── MapBuffer.java │ │ │ │ │ ├── MapBufferUtils.java │ │ │ │ │ ├── ReadableBaseBuffer.java │ │ │ │ │ ├── ReadableCompactArrayBuffer.java │ │ │ │ │ ├── ReadableMapBuffer.java │ │ │ │ │ └── ReadableMapBufferWrapper.java │ │ │ │ ├── recorder/ │ │ │ │ │ └── LynxDebugInfoRecorder.java │ │ │ │ ├── ref/ │ │ │ │ │ ├── ResourceReleaser.java │ │ │ │ │ ├── ShareRef.java │ │ │ │ │ └── Wrap.java │ │ │ │ └── tasm/ │ │ │ │ ├── BehaviorClassWarmer.java │ │ │ │ ├── DefaultLogicExecutor.java │ │ │ │ ├── EmbeddedMode.java │ │ │ │ ├── EventEmitter.java │ │ │ │ ├── IDynamicHandler.java │ │ │ │ ├── IListNodeInfoFetcher.java │ │ │ │ ├── ILynxEngine.java │ │ │ │ ├── ILynxErrorReceiver.java │ │ │ │ ├── ILynxLogicExecutor.java │ │ │ │ ├── INativeLibraryLoader.java │ │ │ │ ├── IUIRendererCreator.java │ │ │ │ ├── ListNodeInfoFetcher.java │ │ │ │ ├── LynxBackgroundRuntime.java │ │ │ │ ├── LynxBackgroundRuntimeClient.java │ │ │ │ ├── LynxBackgroundRuntimeOptions.java │ │ │ │ ├── LynxBooleanOption.java │ │ │ │ ├── LynxConfigInfo.java │ │ │ │ ├── LynxDevToolDelegateImpl.java │ │ │ │ ├── LynxEngine.java │ │ │ │ ├── LynxEngineBuilder.java │ │ │ │ ├── LynxEnginePool.java │ │ │ │ ├── LynxEnv.java │ │ │ │ ├── LynxEnvKey.java │ │ │ │ ├── LynxEnvLazyInitializer.java │ │ │ │ ├── LynxError.java │ │ │ │ ├── LynxErrorCodeLegacy.java │ │ │ │ ├── LynxEventEmitter.java │ │ │ │ ├── LynxGetDataCallback.java │ │ │ │ ├── LynxGetUIResult.java │ │ │ │ ├── LynxGroup.java │ │ │ │ ├── LynxInfoReportHelper.java │ │ │ │ ├── LynxLoadMeta.java │ │ │ │ ├── LynxLoadMode.java │ │ │ │ ├── LynxLoadOption.java │ │ │ │ ├── LynxPerfMetric.java │ │ │ │ ├── LynxSSRHelper.java │ │ │ │ ├── LynxTemplateRender.java │ │ │ │ ├── LynxUpdateMeta.java │ │ │ │ ├── LynxView.java │ │ │ │ ├── LynxViewBuilder.java │ │ │ │ ├── LynxViewClient.java │ │ │ │ ├── LynxViewClientGroup.java │ │ │ │ ├── LynxViewClientGroupV2.java │ │ │ │ ├── LynxViewClientV2.java │ │ │ │ ├── LynxWhiteBoard.java │ │ │ │ ├── NativeFacade.java │ │ │ │ ├── PageConfig.java │ │ │ │ ├── PlatformCallBack.java │ │ │ │ ├── TasmPlatformInvoker.java │ │ │ │ ├── TemplateAssembler.java │ │ │ │ ├── TemplateBundle.java │ │ │ │ ├── TemplateBundleOption.java │ │ │ │ ├── TemplateData.java │ │ │ │ ├── ThreadStrategyForRendering.java │ │ │ │ ├── TimingHandler.java │ │ │ │ ├── animation/ │ │ │ │ │ ├── AnimationConstant.java │ │ │ │ │ ├── AnimationInfo.java │ │ │ │ │ ├── InterpolatorFactory.java │ │ │ │ │ ├── PropertyFactory.java │ │ │ │ │ ├── keyframe/ │ │ │ │ │ │ ├── KeyframeManager.java │ │ │ │ │ │ └── LynxKeyframeAnimator.java │ │ │ │ │ ├── layout/ │ │ │ │ │ │ ├── AbstractLayoutAnimation.java │ │ │ │ │ │ ├── BaseLayoutAnimation.java │ │ │ │ │ │ ├── LayoutAnimationManager.java │ │ │ │ │ │ ├── LayoutCreateAnimation.java │ │ │ │ │ │ ├── LayoutDeleteAnimation.java │ │ │ │ │ │ ├── LayoutHandlingAnimation.java │ │ │ │ │ │ ├── LayoutUpdateAnimation.java │ │ │ │ │ │ ├── OpacityAnimation.java │ │ │ │ │ │ └── PositionAndSizeAnimation.java │ │ │ │ │ └── transition/ │ │ │ │ │ └── TransitionAnimationManager.java │ │ │ │ ├── base/ │ │ │ │ │ ├── AbsLogDelegate.java │ │ │ │ │ ├── Assertions.java │ │ │ │ │ ├── BaseLogDelegate.java │ │ │ │ │ ├── CalledByNative.java │ │ │ │ │ ├── CleanupReference.java │ │ │ │ │ ├── GlobalRefQueue.java │ │ │ │ │ ├── IComplicatedLogDelegate.java │ │ │ │ │ ├── JNINamespace.java │ │ │ │ │ ├── LLog.java │ │ │ │ │ ├── LogSource.java │ │ │ │ │ ├── LynxConsumer.java │ │ │ │ │ ├── LynxNativeMemoryTracer.java │ │ │ │ │ ├── LynxPageLoadListener.java │ │ │ │ │ ├── MemoryPressureCallbackDispatcher.java │ │ │ │ │ ├── OnceTask.java │ │ │ │ │ ├── PageReloadHelper.java │ │ │ │ │ └── trace/ │ │ │ │ │ └── TraceEventDef.java │ │ │ │ ├── behavior/ │ │ │ │ │ ├── Behavior.java │ │ │ │ │ ├── BehaviorBundle.java │ │ │ │ │ ├── BehaviorRegistry.java │ │ │ │ │ ├── BuiltInBehavior.java │ │ │ │ │ ├── BuiltInUIRegistry.java │ │ │ │ │ ├── CSSPropertySetter.java │ │ │ │ │ ├── ClayRenderMode.java │ │ │ │ │ ├── ExceptionHandler.java │ │ │ │ │ ├── ForegroundListener.java │ │ │ │ │ ├── GestureRecognizer.java │ │ │ │ │ ├── ILynxUIRenderer.java │ │ │ │ │ ├── IPaintingContext.java │ │ │ │ │ ├── ImageInterceptor.java │ │ │ │ │ ├── KeyboardEvent.java │ │ │ │ │ ├── KeyboardMonitor.java │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── LayoutContext.java │ │ │ │ │ ├── LayoutNodeManager.java │ │ │ │ │ ├── LynxBaseContext.java │ │ │ │ │ ├── LynxBehavior.java │ │ │ │ │ ├── LynxContext.java │ │ │ │ │ ├── LynxFrameViewProvider.java │ │ │ │ │ ├── LynxGeneratorName.java │ │ │ │ │ ├── LynxIntersectionObserver.java │ │ │ │ │ ├── LynxIntersectionObserverManager.java │ │ │ │ │ ├── LynxObserverManager.java │ │ │ │ │ ├── LynxProp.java │ │ │ │ │ ├── LynxPropGroup.java │ │ │ │ │ ├── LynxPropsHolder.java │ │ │ │ │ ├── LynxShadowNode.java │ │ │ │ │ ├── LynxUIMethod.java │ │ │ │ │ ├── LynxUIMethodConstants.java │ │ │ │ │ ├── LynxUIMethodsHolder.java │ │ │ │ │ ├── LynxUIOwner.java │ │ │ │ │ ├── LynxUIRenderer.java │ │ │ │ │ ├── LynxUIRendererCreator.java │ │ │ │ │ ├── MODULE_LICENSE_APACHE2 │ │ │ │ │ ├── NOTICE │ │ │ │ │ ├── PaintingContext.java │ │ │ │ │ ├── PatchFinishListener.java │ │ │ │ │ ├── PlatformExtraBundleHolder.java │ │ │ │ │ ├── PropertiesDispatcher.java │ │ │ │ │ ├── PropertyIDConstants.java │ │ │ │ │ ├── PropsConstants.java │ │ │ │ │ ├── ShadowNodeOwner.java │ │ │ │ │ ├── ShadowNodeRegistry.java │ │ │ │ │ ├── StyleConstants.java │ │ │ │ │ ├── StylesDiffMap.java │ │ │ │ │ ├── TouchEventDispatcher.java │ │ │ │ │ ├── event/ │ │ │ │ │ │ ├── EventTarget.java │ │ │ │ │ │ └── EventTargetBase.java │ │ │ │ │ ├── herotransition/ │ │ │ │ │ │ ├── HeroAnimOwner.java │ │ │ │ │ │ └── HeroTransitionManager.java │ │ │ │ │ ├── render/ │ │ │ │ │ │ ├── ContainerRenderer.java │ │ │ │ │ │ ├── DisplayList.java │ │ │ │ │ │ ├── DisplayListApplier.java │ │ │ │ │ │ ├── IRendererHost.java │ │ │ │ │ │ ├── NativePaintingContext.java │ │ │ │ │ │ ├── PlatformRendererContext.java │ │ │ │ │ │ ├── Renderer.java │ │ │ │ │ │ └── RoundedRectangle.java │ │ │ │ │ ├── shadow/ │ │ │ │ │ │ ├── AlignContext.java │ │ │ │ │ │ ├── AlignParam.java │ │ │ │ │ │ ├── ChoreographerLayoutTick.java │ │ │ │ │ │ ├── CustomLayoutShadowNode.java │ │ │ │ │ │ ├── CustomMeasureFunc.java │ │ │ │ │ │ ├── LayoutNode.java │ │ │ │ │ │ ├── LayoutTick.java │ │ │ │ │ │ ├── MeasureContext.java │ │ │ │ │ │ ├── MeasureFunc.java │ │ │ │ │ │ ├── MeasureMode.java │ │ │ │ │ │ ├── MeasureOutput.java │ │ │ │ │ │ ├── MeasureParam.java │ │ │ │ │ │ ├── MeasureResult.java │ │ │ │ │ │ ├── MeasureUtils.java │ │ │ │ │ │ ├── NativeLayoutNodeRef.java │ │ │ │ │ │ ├── ShadowNode.java │ │ │ │ │ │ ├── ShadowNodeType.java │ │ │ │ │ │ ├── ShadowStyle.java │ │ │ │ │ │ ├── Style.java │ │ │ │ │ │ ├── TextLayout.java │ │ │ │ │ │ ├── TextMeasurerProvider.java │ │ │ │ │ │ ├── ViewLayoutTick.java │ │ │ │ │ │ └── text/ │ │ │ │ │ │ ├── AbsBaselineShiftCalculatorSpan.java │ │ │ │ │ │ ├── AbsInlineImageShadowNode.java │ │ │ │ │ │ ├── AbsoluteSizeSpan.java │ │ │ │ │ │ ├── AttributedTextBundle.java │ │ │ │ │ │ ├── BackgroundColorSpan.java │ │ │ │ │ │ ├── BaseTextShadowNode.java │ │ │ │ │ │ ├── BaselineShiftCalculator.java │ │ │ │ │ │ ├── CustomBaselineShiftSpan.java │ │ │ │ │ │ ├── CustomLetterSpacingSpan.java │ │ │ │ │ │ ├── CustomLineHeightSpan.java │ │ │ │ │ │ ├── CustomStyleSpan.java │ │ │ │ │ │ ├── EventTargetSpan.java │ │ │ │ │ │ ├── FontFamilySpan.java │ │ │ │ │ │ ├── ForegroundColorSpan.java │ │ │ │ │ │ ├── InlineTextBaselineShiftSpan.java │ │ │ │ │ │ ├── InlineTextShadowNode.java │ │ │ │ │ │ ├── InlineTruncationShadowNode.java │ │ │ │ │ │ ├── LynxStrikethroughSpan.java │ │ │ │ │ │ ├── LynxTextBackgroundSpan.java │ │ │ │ │ │ ├── LynxTextGradientSpan.java │ │ │ │ │ │ ├── LynxUnderlineSpan.java │ │ │ │ │ │ ├── NativeLayoutNodeSpan.java │ │ │ │ │ │ ├── RawTextShadowNode.java │ │ │ │ │ │ ├── ShadowStyleSpan.java │ │ │ │ │ │ ├── StaticLayoutCompat.java │ │ │ │ │ │ ├── TextAttributes.java │ │ │ │ │ │ ├── TextDecorationSpan.java │ │ │ │ │ │ ├── TextHelper.java │ │ │ │ │ │ ├── TextIndent.java │ │ │ │ │ │ ├── TextLayoutWarmer.java │ │ │ │ │ │ ├── TextMeasurer.java │ │ │ │ │ │ ├── TextRenderer.java │ │ │ │ │ │ ├── TextRendererCache.java │ │ │ │ │ │ ├── TextRendererKey.java │ │ │ │ │ │ ├── TextShadowNode.java │ │ │ │ │ │ ├── TextUpdateBundle.java │ │ │ │ │ │ └── TypefaceCache.java │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── IDrawChildHook.java │ │ │ │ │ │ ├── ILynxUIMeaningfulContent.java │ │ │ │ │ │ ├── IProcessViewInfoHook.java │ │ │ │ │ │ ├── LynxAccessibilityNodeProvider.java │ │ │ │ │ │ ├── LynxBaseUI.java │ │ │ │ │ │ ├── LynxFlattenUI.java │ │ │ │ │ │ ├── LynxUI.java │ │ │ │ │ │ ├── LynxViewVisibleHelper.java │ │ │ │ │ │ ├── MeaningfulPaintingArea.java │ │ │ │ │ │ ├── PropBundle.java │ │ │ │ │ │ ├── ScrollStateChangeListener.java │ │ │ │ │ │ ├── ShadowData.java │ │ │ │ │ │ ├── UIBody.java │ │ │ │ │ │ ├── UIExposure.java │ │ │ │ │ │ ├── UIGroup.java │ │ │ │ │ │ ├── UIParams.java │ │ │ │ │ │ ├── UIParent.java │ │ │ │ │ │ ├── UIShadowProxy.java │ │ │ │ │ │ ├── ViewGroupDrawingOrderHelper.java │ │ │ │ │ │ ├── ViewInfo.java │ │ │ │ │ │ ├── accessibility/ │ │ │ │ │ │ │ ├── CustomAccessibilityDelegateCompat.java │ │ │ │ │ │ │ ├── LynxAccessibilityDelegate.java │ │ │ │ │ │ │ ├── LynxAccessibilityHelper.java │ │ │ │ │ │ │ ├── LynxAccessibilityMutationHelper.java │ │ │ │ │ │ │ ├── LynxAccessibilityStateHelper.java │ │ │ │ │ │ │ ├── LynxAccessibilityWrapper.java │ │ │ │ │ │ │ └── LynxNodeProvider.java │ │ │ │ │ │ ├── background/ │ │ │ │ │ │ │ ├── BackgroundConicGradientLayer.java │ │ │ │ │ │ │ ├── BackgroundGradientLayer.java │ │ │ │ │ │ │ ├── BackgroundImageLoader.java │ │ │ │ │ │ │ ├── BackgroundLayerDrawable.java │ │ │ │ │ │ │ ├── BackgroundLayerManager.java │ │ │ │ │ │ │ ├── BackgroundLinearGradientLayer.java │ │ │ │ │ │ │ ├── BackgroundNoneLayer.java │ │ │ │ │ │ │ ├── BackgroundPosition.java │ │ │ │ │ │ │ ├── BackgroundRadialGradientLayer.java │ │ │ │ │ │ │ ├── BackgroundRepeat.java │ │ │ │ │ │ │ ├── BackgroundSize.java │ │ │ │ │ │ │ ├── LayerManager.java │ │ │ │ │ │ │ └── MaskLayerManager.java │ │ │ │ │ │ ├── frame/ │ │ │ │ │ │ │ ├── FrameShadowNode.java │ │ │ │ │ │ │ ├── LynxFrameView.java │ │ │ │ │ │ │ └── UIFrame.java │ │ │ │ │ │ ├── image/ │ │ │ │ │ │ │ ├── AbsUIImage.java │ │ │ │ │ │ │ ├── BackgroundImageDrawable.java │ │ │ │ │ │ │ ├── FlattenUIImage.java │ │ │ │ │ │ │ ├── ImageUrlRedirectUtils.java │ │ │ │ │ │ │ ├── InlineImageShadowNode.java │ │ │ │ │ │ │ ├── InlineImageSpan.java │ │ │ │ │ │ │ ├── LynxImageLoader.java │ │ │ │ │ │ │ ├── LynxImageManager.java │ │ │ │ │ │ │ └── UIImage.java │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── AbsLynxList.java │ │ │ │ │ │ │ ├── AppearEventCourier.java │ │ │ │ │ │ │ ├── AppearEventCourierImpl.java │ │ │ │ │ │ │ ├── AppearEventCourierImplV2.java │ │ │ │ │ │ │ ├── FactoredPagerSnapHelper.java │ │ │ │ │ │ │ ├── GapItemDecoration.java │ │ │ │ │ │ │ ├── ListEventManager.java │ │ │ │ │ │ │ ├── ListLayoutManager.java │ │ │ │ │ │ │ ├── ListPreloadCache.java │ │ │ │ │ │ │ ├── ListScroller.java │ │ │ │ │ │ │ ├── ListStickyManager.java │ │ │ │ │ │ │ ├── ListViewHolder.java │ │ │ │ │ │ │ ├── LynxSnapHelper.java │ │ │ │ │ │ │ ├── ScrollContainerDrawHelper.java │ │ │ │ │ │ │ ├── UIList.java │ │ │ │ │ │ │ ├── UIListAdapter.java │ │ │ │ │ │ │ ├── UIListItem.java │ │ │ │ │ │ │ └── container/ │ │ │ │ │ │ │ ├── ListContainerProxy.java │ │ │ │ │ │ │ ├── ListContainerView.java │ │ │ │ │ │ │ ├── ListCustomScroller.java │ │ │ │ │ │ │ ├── NestedScrollContainerView.java │ │ │ │ │ │ │ ├── UIListAutoScroller.java │ │ │ │ │ │ │ └── UIListContainer.java │ │ │ │ │ │ ├── scroll/ │ │ │ │ │ │ │ ├── AbsLynxUIScroll.java │ │ │ │ │ │ │ ├── AndroidScrollView.java │ │ │ │ │ │ │ ├── BounceGestureHelper.java │ │ │ │ │ │ │ ├── IScrollSticky.java │ │ │ │ │ │ │ ├── LynxUIScrollView.java │ │ │ │ │ │ │ ├── LynxUIScrollViewInternal.java │ │ │ │ │ │ │ ├── NestedHorizontalScrollView.java │ │ │ │ │ │ │ ├── NestedScrollView.java │ │ │ │ │ │ │ ├── UIBounceView.java │ │ │ │ │ │ │ ├── UIScrollView.java │ │ │ │ │ │ │ └── base/ │ │ │ │ │ │ │ ├── LynxBaseScrollView.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewAuto.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewDragging.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewHorizontal.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewInternal.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewNested.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewNestedInternal.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewPublic.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewScroller.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewScrolling.java │ │ │ │ │ │ │ ├── LynxBaseScrollViewVertical.java │ │ │ │ │ │ │ └── LynxNestedScrollingChildHelper.java │ │ │ │ │ │ ├── shapes/ │ │ │ │ │ │ │ ├── BasicShape.java │ │ │ │ │ │ │ └── LynxOffsetCalculator.java │ │ │ │ │ │ ├── swiper/ │ │ │ │ │ │ │ ├── ModeCarryTransformer.java │ │ │ │ │ │ │ ├── ModeCoverFlowTransformer.java │ │ │ │ │ │ │ ├── SwiperShadowNode.java │ │ │ │ │ │ │ ├── SwiperView.java │ │ │ │ │ │ │ ├── ViewPager.java │ │ │ │ │ │ │ └── XSwiperUI.java │ │ │ │ │ │ ├── text/ │ │ │ │ │ │ │ ├── AbsInlineImageSpan.java │ │ │ │ │ │ │ ├── AndroidText.java │ │ │ │ │ │ │ ├── FlattenUIText.java │ │ │ │ │ │ │ ├── IUIText.java │ │ │ │ │ │ │ ├── UIText.java │ │ │ │ │ │ │ └── UITextUtils.java │ │ │ │ │ │ ├── utils/ │ │ │ │ │ │ │ ├── BackgroundDrawable.java │ │ │ │ │ │ │ ├── BackgroundManager.java │ │ │ │ │ │ │ ├── BorderDrawingUtil.java │ │ │ │ │ │ │ ├── BorderRadius.java │ │ │ │ │ │ │ ├── BorderStyle.java │ │ │ │ │ │ │ ├── BorderWidth.java │ │ │ │ │ │ │ ├── ColorUtil.java │ │ │ │ │ │ │ ├── LayerDrawable.java │ │ │ │ │ │ │ ├── LynxBackground.java │ │ │ │ │ │ │ ├── LynxDrawableManager.java │ │ │ │ │ │ │ ├── LynxMask.java │ │ │ │ │ │ │ ├── LynxUIHelper.java │ │ │ │ │ │ │ ├── MaskDrawable.java │ │ │ │ │ │ │ ├── PlatformLength.java │ │ │ │ │ │ │ ├── Spacing.java │ │ │ │ │ │ │ ├── TransformOrigin.java │ │ │ │ │ │ │ ├── TransformProps.java │ │ │ │ │ │ │ ├── TransformRaw.java │ │ │ │ │ │ │ └── ViewHelper.java │ │ │ │ │ │ └── view/ │ │ │ │ │ │ ├── AndroidView.java │ │ │ │ │ │ ├── ComponentView.java │ │ │ │ │ │ ├── UIComponent.java │ │ │ │ │ │ ├── UISimpleView.java │ │ │ │ │ │ └── UIView.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── LynxUIMethodInvoker.java │ │ │ │ │ ├── LynxUIMethodsCache.java │ │ │ │ │ ├── LynxUIMethodsExecutor.java │ │ │ │ │ ├── LynxUIMethodsHolderAutoRegister.java │ │ │ │ │ ├── LynxUISetter.java │ │ │ │ │ ├── PropsHolderAutoRegister.java │ │ │ │ │ ├── PropsSetterCache.java │ │ │ │ │ ├── PropsUpdater.java │ │ │ │ │ ├── Settable.java │ │ │ │ │ ├── ShadowNodeSetter.java │ │ │ │ │ └── UnicodeFontUtils.java │ │ │ │ ├── common/ │ │ │ │ │ ├── LepusBuffer.java │ │ │ │ │ ├── MessageCodec.java │ │ │ │ │ ├── NullableConcurrentHashMap.java │ │ │ │ │ └── SingleThreadAsserter.java │ │ │ │ ├── component/ │ │ │ │ │ └── DynamicComponentFetcher.java │ │ │ │ ├── core/ │ │ │ │ │ ├── JSProxy.java │ │ │ │ │ ├── LynxEngineProxy.java │ │ │ │ │ ├── LynxLayoutProxy.java │ │ │ │ │ ├── LynxThreadPool.java │ │ │ │ │ ├── ResManager.java │ │ │ │ │ ├── ResourceLoader.java │ │ │ │ │ ├── VSyncMonitor.java │ │ │ │ │ └── resource/ │ │ │ │ │ ├── ExternalScriptResourceCallback.java │ │ │ │ │ ├── GenericResourceCallback.java │ │ │ │ │ ├── GuardedResourceCallback.java │ │ │ │ │ ├── LynxResourceLoader.java │ │ │ │ │ ├── LynxResourceType.java │ │ │ │ │ ├── TemplateLoaderHelper.java │ │ │ │ │ └── TemplateResourceCallback.java │ │ │ │ ├── event/ │ │ │ │ │ ├── EventsListener.java │ │ │ │ │ ├── LynxCustomEvent.java │ │ │ │ │ ├── LynxDetailEvent.java │ │ │ │ │ ├── LynxEvent.java │ │ │ │ │ ├── LynxEventDetail.java │ │ │ │ │ ├── LynxImpressionEvent.java │ │ │ │ │ ├── LynxInternalEvent.java │ │ │ │ │ ├── LynxKeyboardEvent.java │ │ │ │ │ ├── LynxListEvent.java │ │ │ │ │ ├── LynxScrollEvent.java │ │ │ │ │ ├── LynxSwiperEvent.java │ │ │ │ │ └── LynxTouchEvent.java │ │ │ │ ├── eventreport/ │ │ │ │ │ ├── ILynxEventReportObserver.java │ │ │ │ │ └── LynxEventReporter.java │ │ │ │ ├── fluency/ │ │ │ │ │ ├── FluencySample.java │ │ │ │ │ ├── FluencyTraceHelper.java │ │ │ │ │ ├── FluencyTracerImpl.java │ │ │ │ │ └── LynxFpsTracer.java │ │ │ │ ├── fontface/ │ │ │ │ │ ├── FontFace.java │ │ │ │ │ ├── FontFaceGroup.java │ │ │ │ │ ├── FontFaceManager.java │ │ │ │ │ ├── FontSettingsKey.java │ │ │ │ │ └── StyledTypeface.java │ │ │ │ ├── gesture/ │ │ │ │ │ ├── GestureArenaMember.java │ │ │ │ │ ├── LynxNewGestureDelegate.java │ │ │ │ │ ├── arena/ │ │ │ │ │ │ └── GestureArenaManager.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── GestureExtraBundle.java │ │ │ │ │ ├── detector/ │ │ │ │ │ │ ├── GestureDetector.java │ │ │ │ │ │ └── GestureDetectorManager.java │ │ │ │ │ └── handler/ │ │ │ │ │ ├── BaseGestureHandler.java │ │ │ │ │ ├── DefaultGestureHandler.java │ │ │ │ │ ├── FlingGestureHandler.java │ │ │ │ │ ├── GestureConstants.java │ │ │ │ │ ├── GestureHandlerTrigger.java │ │ │ │ │ ├── LongPressGestureHandler.java │ │ │ │ │ ├── NativeGestureHandler.java │ │ │ │ │ ├── PanGestureHandler.java │ │ │ │ │ └── TapGestureHandler.java │ │ │ │ ├── group/ │ │ │ │ │ ├── BitmapSize.java │ │ │ │ │ ├── ILynxViewConfigProvider.java │ │ │ │ │ ├── ILynxViewGroup.java │ │ │ │ │ ├── ILynxViewRuntimeCacheManager.java │ │ │ │ │ ├── LynxBaseConfigurator.java │ │ │ │ │ ├── LynxViewGroup.java │ │ │ │ │ └── LynxViewGroupBuilder.java │ │ │ │ ├── icu/ │ │ │ │ │ └── ICURegister.java │ │ │ │ ├── image/ │ │ │ │ │ ├── AutoSizeImage.java │ │ │ │ │ ├── ImageErrorCodeUtils.java │ │ │ │ │ ├── ImageUtils.java │ │ │ │ │ ├── LynxImageConfig.java │ │ │ │ │ ├── LynxImageLoadInfo.java │ │ │ │ │ ├── LynxImageMediaFetcherProxy.java │ │ │ │ │ ├── LynxScaleTypeDrawable.java │ │ │ │ │ ├── NinePatchHelper.java │ │ │ │ │ ├── ScalingUtils.java │ │ │ │ │ ├── attr/ │ │ │ │ │ │ └── MaskImage.java │ │ │ │ │ └── model/ │ │ │ │ │ ├── ImageBlurPostProcessor.java │ │ │ │ │ └── LynxImageFetcher.java │ │ │ │ ├── loader/ │ │ │ │ │ └── LynxFontFaceLoader.java │ │ │ │ ├── navigator/ │ │ │ │ │ ├── LynxCardManager.java │ │ │ │ │ ├── LynxHolder.java │ │ │ │ │ ├── LynxNavigator.java │ │ │ │ │ ├── LynxRoute.java │ │ │ │ │ ├── LynxRouteLruCache.java │ │ │ │ │ ├── LynxSchemaInterceptor.java │ │ │ │ │ ├── LynxViewCreationListener.java │ │ │ │ │ └── NavigationModule.java │ │ │ │ ├── performance/ │ │ │ │ │ ├── IPerformanceObserver.java │ │ │ │ │ ├── PerformanceController.java │ │ │ │ │ ├── TimingOption.java │ │ │ │ │ ├── fsp/ │ │ │ │ │ │ ├── FSPConfig.java │ │ │ │ │ │ ├── FSPSnapshot.java │ │ │ │ │ │ ├── FSPTracer.java │ │ │ │ │ │ ├── IMeaningfulContentSnapshotCaptureHandler.java │ │ │ │ │ │ └── MeaningfulContentSnapshot.java │ │ │ │ │ ├── longtasktiming/ │ │ │ │ │ │ └── LynxLongTaskMonitor.java │ │ │ │ │ ├── memory/ │ │ │ │ │ │ ├── IMemoryMonitor.java │ │ │ │ │ │ ├── IMemoryRecordBuilder.java │ │ │ │ │ │ └── MemoryRecord.java │ │ │ │ │ └── timing/ │ │ │ │ │ ├── EmbeddedTimingCollector.java │ │ │ │ │ ├── ITimingCollector.java │ │ │ │ │ └── TimingConstants.java │ │ │ │ ├── provider/ │ │ │ │ │ ├── AbsNetworkingModuleProvider.java │ │ │ │ │ ├── AbsTemplateProvider.java │ │ │ │ │ ├── ILynxResourceRequestOperation.java │ │ │ │ │ ├── ILynxResourceResponseDataInfo.java │ │ │ │ │ ├── LynxExternalResourceFetcherWrapper.java │ │ │ │ │ ├── LynxProviderRegistry.java │ │ │ │ │ ├── LynxResCallback.java │ │ │ │ │ ├── LynxResRequest.java │ │ │ │ │ ├── LynxResResponse.java │ │ │ │ │ ├── LynxResourceCallback.java │ │ │ │ │ ├── LynxResourceFetcher.java │ │ │ │ │ ├── LynxResourceProvider.java │ │ │ │ │ ├── LynxResourceRequest.java │ │ │ │ │ ├── LynxResourceResponse.java │ │ │ │ │ ├── LynxResourceServiceProvider.java │ │ │ │ │ ├── ResProvider.java │ │ │ │ │ └── ThemeResourceProvider.java │ │ │ │ ├── rendernode/ │ │ │ │ │ └── compat/ │ │ │ │ │ ├── RenderNodeCompat.java │ │ │ │ │ ├── RenderNodeImpl.java │ │ │ │ │ └── factory/ │ │ │ │ │ └── RenderNodeFactory.java │ │ │ │ ├── resourceprovider/ │ │ │ │ │ ├── LynxResourceCallback.java │ │ │ │ │ ├── LynxResourceRequest.java │ │ │ │ │ ├── LynxResourceResponse.java │ │ │ │ │ ├── generic/ │ │ │ │ │ │ ├── LynxGenericResourceFetcher.java │ │ │ │ │ │ └── StreamDelegate.java │ │ │ │ │ ├── media/ │ │ │ │ │ │ ├── LynxMediaResourceFetcher.java │ │ │ │ │ │ └── OptionalBool.java │ │ │ │ │ └── template/ │ │ │ │ │ ├── LynxTemplateResourceFetcher.java │ │ │ │ │ └── TemplateProviderResult.java │ │ │ │ ├── service/ │ │ │ │ │ ├── ILynxDevToolService.java │ │ │ │ │ ├── ILynxEventReporterService.java │ │ │ │ │ ├── ILynxExtensionService.java │ │ │ │ │ ├── ILynxHttpService.java │ │ │ │ │ ├── ILynxI18nService.java │ │ │ │ │ ├── ILynxImageServiceExtension.java │ │ │ │ │ ├── ILynxMemoryMonitorService.java │ │ │ │ │ ├── ILynxMonitorService.java │ │ │ │ │ ├── ILynxResourceService.java │ │ │ │ │ ├── ILynxResourceServiceRequestOperation.java │ │ │ │ │ ├── ILynxResourceServiceResponse.java │ │ │ │ │ ├── ILynxSystemInvokeService.java │ │ │ │ │ ├── ILynxTrailServiceExtension.java │ │ │ │ │ ├── LynxHttpRequestCallback.java │ │ │ │ │ ├── LynxImageInfo.java │ │ │ │ │ ├── LynxLazyInitializer.java │ │ │ │ │ ├── LynxMemoryInfo.java │ │ │ │ │ ├── LynxResourceServiceCallback.java │ │ │ │ │ ├── LynxResourceServiceProxyErrorResponse.java │ │ │ │ │ ├── LynxResourceServiceRequestParams.java │ │ │ │ │ └── security/ │ │ │ │ │ ├── ILynxSecurityService.java │ │ │ │ │ └── SecurityResult.java │ │ │ │ ├── theme/ │ │ │ │ │ └── LynxTheme.java │ │ │ │ └── utils/ │ │ │ │ ├── BitmapUtils.java │ │ │ │ ├── BlurUtils.java │ │ │ │ ├── CallStackUtil.java │ │ │ │ ├── ColorUtils.java │ │ │ │ ├── ContextUtils.java │ │ │ │ ├── DeviceUtils.java │ │ │ │ ├── DisplayMetricsHolder.java │ │ │ │ ├── EnvUtils.java │ │ │ │ ├── FloatUtils.java │ │ │ │ ├── FontFaceParser.java │ │ │ │ ├── GradientUtils.java │ │ │ │ ├── I18nUtil.java │ │ │ │ ├── LICENSE │ │ │ │ ├── LRUHashMap.java │ │ │ │ ├── LynxConstants.java │ │ │ │ ├── LynxFrameRateControl.java │ │ │ │ ├── LynxViewBuilderProperty.java │ │ │ │ ├── MatrixMathUtils.java │ │ │ │ ├── PixelUtils.java │ │ │ │ ├── ReadableMapUtils.java │ │ │ │ ├── RunOnceRunnable.java │ │ │ │ ├── SizeValue.java │ │ │ │ ├── StringUtils.java │ │ │ │ ├── StyleCompatUtils.java │ │ │ │ ├── TextUtils.java │ │ │ │ ├── TypefaceUtils.java │ │ │ │ ├── UIThreadUtils.java │ │ │ │ ├── UnitUtils.java │ │ │ │ └── Value.java │ │ │ ├── jni/ │ │ │ │ ├── .gitignore │ │ │ │ ├── BUILD.gn │ │ │ │ └── jni_configs.yml │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ ├── lynx_text_select_handle_left_material.xml │ │ │ │ └── lynx_text_select_handle_right_material.xml │ │ │ ├── values/ │ │ │ │ ├── ids.xml │ │ │ │ └── strings.xml │ │ │ └── values-zh-rCN/ │ │ │ └── strings.xml │ │ ├── lynx_devtool/ │ │ │ ├── .gitignore │ │ │ ├── BUILD.gn │ │ │ ├── CMakeLists.txt │ │ │ ├── build.gradle │ │ │ ├── consumer-rules.pro │ │ │ ├── gradle.properties │ │ │ ├── lynx_devtool.gni │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ ├── androidTest/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── devtool/ │ │ │ │ ├── ConsoleDelegateManagerTest.java │ │ │ │ ├── LynxDevtoolEnvTest.java │ │ │ │ ├── LynxInspectorOwnerTest.java │ │ │ │ ├── MockSharedPreferences.java │ │ │ │ ├── helper/ │ │ │ │ │ ├── LepusDebugInfoHelperTest.java │ │ │ │ │ └── UITreeHelperTest.java │ │ │ │ ├── logbox/ │ │ │ │ │ └── LynxLogBoxWrapperTest.java │ │ │ │ ├── module/ │ │ │ │ │ ├── LynxWebSocketModuleTest.java │ │ │ │ │ └── LynxWebSocketTest.java │ │ │ │ └── utils/ │ │ │ │ └── ErrorUtilsTest.java │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets/ │ │ │ │ └── lynx_recorder.js │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── devtool/ │ │ │ │ ├── CDPEventListenerWrapper.java │ │ │ │ ├── CDPResultCallbackWrapper.java │ │ │ │ ├── ConsoleDelegateManager.java │ │ │ │ ├── DevOptionHandler.java │ │ │ │ ├── DevToolMessageHandlerDelegate.java │ │ │ │ ├── DevToolPlatformAndroidDelegate.java │ │ │ │ ├── GlobalDevToolPlatformAndroidDelegate.java │ │ │ │ ├── LynxDevMenu.java │ │ │ │ ├── LynxDevToolNGDelegate.java │ │ │ │ ├── LynxDevtoolEnv.java │ │ │ │ ├── LynxGlobalDebugBridge.java │ │ │ │ ├── LynxInspectorConsoleDelegate.java │ │ │ │ ├── LynxInspectorOwner.java │ │ │ │ ├── RecorderController.java │ │ │ │ ├── framecapture/ │ │ │ │ │ ├── FrameCapturer.java │ │ │ │ │ └── FrameTraceUtil.java │ │ │ │ ├── helper/ │ │ │ │ │ ├── EmulateTouchHelper.java │ │ │ │ │ ├── LepusDebugInfoHelper.java │ │ │ │ │ ├── ScreenCapturer.java │ │ │ │ │ ├── ScreenCastHelper.java │ │ │ │ │ ├── TestbenchDumpFileHelper.java │ │ │ │ │ ├── TestbenchFileUtil.java │ │ │ │ │ ├── ToastHelper.java │ │ │ │ │ └── UITreeHelper.java │ │ │ │ ├── logbox/ │ │ │ │ │ └── LynxLogBoxWrapper.java │ │ │ │ ├── memory/ │ │ │ │ │ └── MemoryController.java │ │ │ │ ├── module/ │ │ │ │ │ ├── LynxDevToolSetModule.java │ │ │ │ │ ├── LynxTrailModule.java │ │ │ │ │ ├── LynxWebSocket.java │ │ │ │ │ └── LynxWebSocketModule.java │ │ │ │ ├── recorder/ │ │ │ │ │ ├── LynxRecorderActionCallback.java │ │ │ │ │ ├── LynxRecorderActionManager.java │ │ │ │ │ ├── LynxRecorderActivity.java │ │ │ │ │ ├── LynxRecorderEnv.java │ │ │ │ │ ├── LynxRecorderEventSend.java │ │ │ │ │ ├── LynxRecorderFetcher.java │ │ │ │ │ ├── LynxRecorderMultiPagesActivity.java │ │ │ │ │ ├── LynxRecorderOpenUrlModule.java │ │ │ │ │ ├── LynxRecorderPageManager.java │ │ │ │ │ ├── LynxRecorderReplayDataModule.java │ │ │ │ │ ├── LynxRecorderReplayDataProvider.java │ │ │ │ │ ├── LynxRecorderReplayStateView.java │ │ │ │ │ ├── LynxRecorderSourceProvider.java │ │ │ │ │ ├── LynxRecorderTemplateProvider.java │ │ │ │ │ ├── LynxRecorderView.java │ │ │ │ │ ├── QueryMapUtils.java │ │ │ │ │ ├── SettingUtils.java │ │ │ │ │ ├── ThreadUtils.java │ │ │ │ │ └── Utils.java │ │ │ │ ├── tracing/ │ │ │ │ │ ├── FPSTrace.java │ │ │ │ │ ├── FrameTraceService.java │ │ │ │ │ ├── FrameViewTrace.java │ │ │ │ │ └── InstanceTrace.java │ │ │ │ └── utils/ │ │ │ │ └── ErrorUtils.java │ │ │ ├── jni/ │ │ │ │ ├── .gitignore │ │ │ │ ├── BUILD.gn │ │ │ │ └── jni_configs.yml │ │ │ └── res/ │ │ │ ├── drawable/ │ │ │ │ └── ic_recorder.xml │ │ │ ├── layout/ │ │ │ │ ├── devtool_fps_view.xml │ │ │ │ ├── recorder_activity.xml │ │ │ │ ├── recorder_full_screen_activity.xml │ │ │ │ ├── recorder_multi_pages_activity.xml │ │ │ │ ├── recorder_replay_state.xml │ │ │ │ ├── recorder_tool_bar.xml │ │ │ │ └── recorder_toolbar_content.xml │ │ │ └── values/ │ │ │ ├── colors.xml │ │ │ ├── ids.xml │ │ │ └── strings.xml │ │ ├── lynx_js_sdk/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── jssdk_build.py │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── AndroidManifest.xml │ │ ├── lynx_processor/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ ├── jsbridge/ │ │ │ │ └── jsi/ │ │ │ │ ├── LynxJSProperty.java │ │ │ │ └── LynxJSPropertyProcessor.java │ │ │ ├── processor/ │ │ │ │ ├── LynxBehaviorProcessor.java │ │ │ │ ├── LynxPropsProcessor.java │ │ │ │ └── LynxUIMethodsProcessor.java │ │ │ └── tasm/ │ │ │ └── behavior/ │ │ │ ├── LynxBehavior.java │ │ │ ├── LynxGeneratorName.java │ │ │ ├── LynxProp.java │ │ │ ├── LynxPropGroup.java │ │ │ ├── LynxPropsHolder.java │ │ │ ├── LynxShadowNode.java │ │ │ ├── LynxUIMethod.java │ │ │ └── LynxUIMethodsHolder.java │ │ ├── lynx_service/ │ │ │ ├── lynx_service_devtool/ │ │ │ │ ├── build.gradle │ │ │ │ ├── gradle.properties │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── service/ │ │ │ │ └── devtool/ │ │ │ │ └── LynxDevToolService.kt │ │ │ ├── lynx_service_http/ │ │ │ │ ├── build.gradle │ │ │ │ ├── gradle.properties │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── service/ │ │ │ │ └── http/ │ │ │ │ └── LynxHttpService.kt │ │ │ ├── lynx_service_image/ │ │ │ │ ├── build.gradle │ │ │ │ ├── gradle.properties │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── service/ │ │ │ │ └── image/ │ │ │ │ ├── FrescoReleasableImage.java │ │ │ │ ├── LynxImageService.java │ │ │ │ ├── decoder/ │ │ │ │ │ ├── LoopCountModifyingBackend.java │ │ │ │ │ └── MultiPostProcessor.java │ │ │ │ └── utils/ │ │ │ │ └── ImageUtils.java │ │ │ └── lynx_service_log/ │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ └── service/ │ │ │ └── log/ │ │ │ └── LynxLogService.kt │ │ ├── lynx_xelement/ │ │ │ ├── ext.gradle │ │ │ ├── gradle.properties │ │ │ ├── gradlew │ │ │ ├── lynx_xelement/ │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── consumer-rules.pro │ │ │ │ ├── gradle.properties │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── xelement/ │ │ │ │ ├── LynxUIInputAutoRegistry.kt │ │ │ │ ├── LynxUIInputShadowNodeAutoRegistry.kt │ │ │ │ ├── LynxUIOverlayAutoRegistry.kt │ │ │ │ ├── LynxUIOverlayShadowNodeAutoRegistry.kt │ │ │ │ ├── LynxUIRefreshAutoRegistry.kt │ │ │ │ ├── LynxUIRefreshHeaderAutoRegistry.kt │ │ │ │ ├── LynxUIRefreshShadowNodeAutoRegistry.kt │ │ │ │ ├── LynxUISVGAutoRegistry.kt │ │ │ │ ├── LynxUITextAreaAutoRegistry.kt │ │ │ │ ├── LynxUITextAreaShadowNodeAutoRegistry.kt │ │ │ │ └── XElementBehaviors.kt │ │ │ ├── lynx_xelement_input/ │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── consumer-rules.pro │ │ │ │ ├── gradle.properties │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── xelement/ │ │ │ │ └── input/ │ │ │ │ ├── LynxEditText.kt │ │ │ │ ├── LynxEditTextView.kt │ │ │ │ ├── LynxInputConnectionWrapper.kt │ │ │ │ ├── LynxInputUtils.kt │ │ │ │ ├── LynxUIBaseInput.kt │ │ │ │ ├── LynxUIBaseInputShadowNode.kt │ │ │ │ ├── LynxUIInput.kt │ │ │ │ ├── LynxUIInputShadowNode.kt │ │ │ │ ├── LynxUITextArea.kt │ │ │ │ └── LynxUITextAreaShadowNode.kt │ │ │ ├── lynx_xelement_overlay/ │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── consumer-rules.pro │ │ │ │ ├── gradle.properties │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── lynx/ │ │ │ │ │ └── xelement/ │ │ │ │ │ └── overlay/ │ │ │ │ │ ├── LynxOverlayDialog.kt │ │ │ │ │ ├── LynxOverlayManager.kt │ │ │ │ │ ├── LynxOverlayView.kt │ │ │ │ │ ├── LynxUIOverlay.kt │ │ │ │ │ └── LynxUIOverlayShadowNode.kt │ │ │ │ └── res/ │ │ │ │ └── values/ │ │ │ │ └── styles.xml │ │ │ ├── lynx_xelement_refresh/ │ │ │ │ ├── .gitignore │ │ │ │ ├── build.gradle │ │ │ │ ├── consumer-rules.pro │ │ │ │ ├── gradle.properties │ │ │ │ ├── proguard-rules.pro │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── lynx/ │ │ │ │ └── xelement/ │ │ │ │ └── refresh/ │ │ │ │ ├── LynxRefreshHeaderView.kt │ │ │ │ ├── LynxUIRefresh.kt │ │ │ │ ├── LynxUIRefreshHeader.kt │ │ │ │ └── LynxUIRefreshShadowNode.kt │ │ │ └── lynx_xelement_svg/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle │ │ │ ├── consumer-rules.pro │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ └── xelement/ │ │ │ └── svg/ │ │ │ ├── LynxUISVG.kt │ │ │ ├── SVGImageView.java │ │ │ └── SvgDefaultResourceManager.java │ │ ├── package.gradle │ │ ├── publish.gradle │ │ ├── service_api/ │ │ │ ├── BUILD.gn │ │ │ ├── CMakeLists.txt │ │ │ ├── build.gradle │ │ │ ├── gradle.properties │ │ │ ├── proguard-rules.pro │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── lynx/ │ │ │ └── tasm/ │ │ │ ├── image/ │ │ │ │ ├── ImageContent.java │ │ │ │ ├── ReleasableImage.java │ │ │ │ └── model/ │ │ │ │ ├── AnimationListener.java │ │ │ │ ├── BitmapPostProcessor.java │ │ │ │ ├── CacheChoice.java │ │ │ │ ├── DiskCacheChoice.java │ │ │ │ ├── ImageInfo.java │ │ │ │ ├── ImageLoadListener.java │ │ │ │ ├── ImageRequestInfo.java │ │ │ │ └── ImageRequestInfoBuilder.java │ │ │ └── service/ │ │ │ ├── ILynxImageService.java │ │ │ ├── ILynxLogService.java │ │ │ ├── ILynxTextService.java │ │ │ ├── ILynxTraceService.java │ │ │ ├── ILynxTrailService.java │ │ │ ├── IServiceExtension.java │ │ │ ├── IServiceProvider.java │ │ │ └── LynxServiceCenter.java │ │ ├── settings.gradle │ │ └── testing_base/ │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── consumer-rules.pro │ │ ├── proguard-rules.pro │ │ └── src/ │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ └── java/ │ │ └── com/ │ │ └── lynx/ │ │ └── testing/ │ │ └── base/ │ │ ├── TestingLynxContext.java │ │ ├── TestingUIUtils.java │ │ ├── TestingUtils.java │ │ └── instrumentation/ │ │ ├── CaseResult.java │ │ ├── LynxInstrumentTestListener.java │ │ └── TaskResult.java │ ├── darwin/ │ │ ├── BUILD.gn │ │ ├── CPPLINT.cfg │ │ ├── common/ │ │ │ ├── .gitignore │ │ │ ├── Lynx-prefix.h │ │ │ ├── lazy_load/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LynxLazyLoad.h │ │ │ │ ├── LynxLazyRegister.h │ │ │ │ └── LynxLazyRegister.m │ │ │ ├── lynx/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LynxBytecodeResponseBlock+Converter.h │ │ │ │ ├── LynxBytecodeResponseBlock.mm │ │ │ │ ├── LynxConfig.mm │ │ │ │ ├── LynxConfigInfo.m │ │ │ │ ├── LynxContext.mm │ │ │ │ ├── LynxEngineProxy+Native.h │ │ │ │ ├── LynxEngineProxy.mm │ │ │ │ ├── LynxEnv+Internal.h │ │ │ │ ├── LynxEnv.mm │ │ │ │ ├── LynxEnvUnitTest.mm │ │ │ │ ├── LynxError.m │ │ │ │ ├── LynxErrorCode.m │ │ │ │ ├── LynxErrorReceiverProtocol.h │ │ │ │ ├── LynxErrorUnitTest.m │ │ │ │ ├── LynxGlobalObserver+Internal.h │ │ │ │ ├── LynxGroup+Internal.h │ │ │ │ ├── LynxGroup.mm │ │ │ │ ├── LynxLifecycleDispatcher.m │ │ │ │ ├── LynxLoadMeta.m │ │ │ │ ├── LynxResourceLoaderDarwinUnitTest.mm │ │ │ │ ├── LynxSSRHelper.h │ │ │ │ ├── LynxSSRHelper.m │ │ │ │ ├── LynxScreenMetrics.m │ │ │ │ ├── LynxServiceInfo.m │ │ │ │ ├── LynxTemplateBundle+Converter.h │ │ │ │ ├── LynxTemplateBundle.mm │ │ │ │ ├── LynxTemplateBundleOption.m │ │ │ │ ├── LynxTemplateData+Converter.h │ │ │ │ ├── LynxTemplateData.mm │ │ │ │ ├── LynxTemplateDataUnitTest.mm │ │ │ │ ├── LynxTemplateRenderDelegateExternal.m │ │ │ │ ├── LynxTheme.m │ │ │ │ ├── LynxUpdateMeta.m │ │ │ │ ├── LynxView+Identify.m │ │ │ │ ├── LynxViewClientUnitTest.mm │ │ │ │ ├── LynxViewClientV2.mm │ │ │ │ ├── TemplateRenderCallbackProtocol.h │ │ │ │ ├── base/ │ │ │ │ │ ├── LynxBacktrace.mm │ │ │ │ │ ├── LynxBaseTraceService.h │ │ │ │ │ ├── LynxBaseTraceService.mm │ │ │ │ │ ├── LynxCallStackUtil.h │ │ │ │ │ ├── LynxCallStackUtil.mm │ │ │ │ │ ├── LynxComponent.m │ │ │ │ │ ├── LynxComponentRegistry.m │ │ │ │ │ ├── LynxComponentRegistryUnitTest.m │ │ │ │ │ ├── LynxConverter+LynxCSSType.m │ │ │ │ │ ├── LynxConverter+UI.m │ │ │ │ │ ├── LynxConverter+UIUnitTest.m │ │ │ │ │ ├── LynxConverter.m │ │ │ │ │ ├── LynxExternalResourceFetcherWrapper.mm │ │ │ │ │ ├── LynxLog.mm │ │ │ │ │ ├── LynxPageReloadHelper.mm │ │ │ │ │ ├── LynxPageReloadHelperUnitTest.m │ │ │ │ │ ├── LynxPerformance.m │ │ │ │ │ ├── LynxResourceServiceFetcher.mm │ │ │ │ │ ├── LynxResourceServiceFetcherUnitTest.m │ │ │ │ │ ├── LynxThreadManager.mm │ │ │ │ │ ├── LynxVersion.m │ │ │ │ │ └── LynxVersionUnitTest.m │ │ │ │ ├── devtool_wrapper/ │ │ │ │ │ ├── CustomizedMessage.mm │ │ │ │ │ ├── DevToolLogLevel.h │ │ │ │ │ ├── DevToolOverlayDelegate.h │ │ │ │ │ ├── DevToolOverlayDelegate.mm │ │ │ │ │ ├── DevToolSettings.mm │ │ │ │ │ ├── DevToolSettingsUnitTest.mm │ │ │ │ │ ├── LynxBaseInspectorController.h │ │ │ │ │ ├── LynxDebugger+Internal.h │ │ │ │ │ ├── LynxDebugger.m │ │ │ │ │ ├── LynxDevToolEnvUtils.h │ │ │ │ │ ├── LynxDevToolEnvUtils.mm │ │ │ │ │ ├── LynxDevtool.h │ │ │ │ │ ├── LynxDevtool.mm │ │ │ │ │ ├── LynxLogBoxProtocol.h │ │ │ │ │ ├── LynxMemoryListener.h │ │ │ │ │ ├── LynxMemoryListener.m │ │ │ │ │ ├── LynxMemoryListenerUnitTest.m │ │ │ │ │ └── OverlayService.h │ │ │ │ ├── event/ │ │ │ │ │ ├── LynxEvent.m │ │ │ │ │ └── LynxTouchEvent.m │ │ │ │ ├── event_report/ │ │ │ │ │ ├── LynxEventReporter.mm │ │ │ │ │ ├── LynxEventReporterUnitTest.m │ │ │ │ │ ├── LynxEventReporterUtils.h │ │ │ │ │ ├── LynxEventReporterUtils.m │ │ │ │ │ └── LynxEventReporterUtilsUnitTest.m │ │ │ │ ├── feature_count/ │ │ │ │ │ ├── LynxFeatureCounter.h │ │ │ │ │ ├── LynxFeatureCounter.mm │ │ │ │ │ └── LynxFeatureCounterUnitTest.mm │ │ │ │ ├── module/ │ │ │ │ │ ├── JSModule+Internal.h │ │ │ │ │ ├── JSModule.mm │ │ │ │ │ └── LynxSetModule.mm │ │ │ │ ├── navigator/ │ │ │ │ │ ├── LynxBaseCardManager+Private.h │ │ │ │ │ ├── LynxBaseCardManager.m │ │ │ │ │ ├── LynxCardManager.m │ │ │ │ │ ├── LynxNavigator.m │ │ │ │ │ ├── LynxRoute.m │ │ │ │ │ ├── NavigationModule.m │ │ │ │ │ └── cache/ │ │ │ │ │ ├── LynxLruCache.m │ │ │ │ │ └── LynxLruCacheNode.m │ │ │ │ ├── network/ │ │ │ │ │ └── LynxHttpRequest.m │ │ │ │ ├── performance/ │ │ │ │ │ ├── LynxPerformanceController+Native.h │ │ │ │ │ ├── LynxPerformanceController.h │ │ │ │ │ ├── LynxPerformanceController.mm │ │ │ │ │ ├── LynxPerformanceControllerUnitTest.mm │ │ │ │ │ ├── fsp/ │ │ │ │ │ │ ├── LynxFSPTracer+Native.h │ │ │ │ │ │ ├── LynxFSPTracer.h │ │ │ │ │ │ ├── LynxFSPTracer.mm │ │ │ │ │ │ ├── LynxMeaningfulContentSnapshot.h │ │ │ │ │ │ └── LynxMeaningfulContentSnapshot.mm │ │ │ │ │ ├── memory/ │ │ │ │ │ │ ├── LynxMemoryMonitorProtocol.h │ │ │ │ │ │ ├── LynxMemoryRecord.h │ │ │ │ │ │ └── LynxMemoryRecord.m │ │ │ │ │ └── timing/ │ │ │ │ │ ├── LynxEmbeddedTimingCollector.h │ │ │ │ │ ├── LynxEmbeddedTimingCollector.mm │ │ │ │ │ ├── LynxExtraTiming.m │ │ │ │ │ ├── LynxTimingCollectorProtocol.h │ │ │ │ │ ├── LynxTimingConstants.h │ │ │ │ │ └── LynxTimingConstants.m │ │ │ │ ├── public/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── LynxBytecodeResponseBlock.h │ │ │ │ │ ├── LynxConfig.h │ │ │ │ │ ├── LynxConfigInfo.h │ │ │ │ │ ├── LynxContext.h │ │ │ │ │ ├── LynxDynamicComponentFetcher.h │ │ │ │ │ ├── LynxEngineProxy.h │ │ │ │ │ ├── LynxEnv.h │ │ │ │ │ ├── LynxEnvKey.h │ │ │ │ │ ├── LynxError.h │ │ │ │ │ ├── LynxErrorCode.h │ │ │ │ │ ├── LynxGlobalObserver.h │ │ │ │ │ ├── LynxGroup.h │ │ │ │ │ ├── LynxHttpRequest.h │ │ │ │ │ ├── LynxHttpStreamingDelegate.h │ │ │ │ │ ├── LynxLifecycleDispatcher.h │ │ │ │ │ ├── LynxLoadMeta.h │ │ │ │ │ ├── LynxScreenMetrics.h │ │ │ │ │ ├── LynxServiceInfo.h │ │ │ │ │ ├── LynxTemplateBundle.h │ │ │ │ │ ├── LynxTemplateBundleOption.h │ │ │ │ │ ├── LynxTemplateData.h │ │ │ │ │ ├── LynxTemplateProvider.h │ │ │ │ │ ├── LynxTemplateRenderDelegate.h │ │ │ │ │ ├── LynxTemplateRenderDelegateExternal.h │ │ │ │ │ ├── LynxTemplateRenderProtocol.h │ │ │ │ │ ├── LynxTheme.h │ │ │ │ │ ├── LynxUpdateMeta.h │ │ │ │ │ ├── LynxView+Identify.h │ │ │ │ │ ├── LynxViewClient.h │ │ │ │ │ ├── LynxViewClientV2.h │ │ │ │ │ ├── LynxViewEnum.h │ │ │ │ │ ├── LynxViewInternal.h │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── LynxBacktrace.h │ │ │ │ │ │ ├── LynxBooleanOption.h │ │ │ │ │ │ ├── LynxCSSType.h │ │ │ │ │ │ ├── LynxClassAliasDefines.h │ │ │ │ │ │ ├── LynxComponent.h │ │ │ │ │ │ ├── LynxComponentRegistry.h │ │ │ │ │ │ ├── LynxConverter+LynxCSSType.h │ │ │ │ │ │ ├── LynxConverter+UI.h │ │ │ │ │ │ ├── LynxConverter.h │ │ │ │ │ │ ├── LynxDefines.h │ │ │ │ │ │ ├── LynxExternalResourceFetcherWrapper.h │ │ │ │ │ │ ├── LynxForegroundProtocol.h │ │ │ │ │ │ ├── LynxLog.h │ │ │ │ │ │ ├── LynxPageReloadHelper+Internal.h │ │ │ │ │ │ ├── LynxPageReloadHelper.h │ │ │ │ │ │ ├── LynxPageReloadHelperProto.h │ │ │ │ │ │ ├── LynxPerformance.h │ │ │ │ │ │ ├── LynxResourceFetcher.h │ │ │ │ │ │ ├── LynxResourceServiceFetcher.h │ │ │ │ │ │ ├── LynxThreadManager.h │ │ │ │ │ │ └── LynxVersion.h │ │ │ │ │ ├── devtool_wrapper/ │ │ │ │ │ │ ├── CustomizedMessage.h │ │ │ │ │ │ ├── DevToolSettings.h │ │ │ │ │ │ ├── LynxBaseInspectorOwner.h │ │ │ │ │ │ ├── LynxBaseInspectorOwnerNG.h │ │ │ │ │ │ ├── LynxDebugger.h │ │ │ │ │ │ └── LynxInspectorConsoleDelegate.h │ │ │ │ │ ├── event/ │ │ │ │ │ │ ├── LynxEvent.h │ │ │ │ │ │ ├── LynxEventTarget.h │ │ │ │ │ │ ├── LynxEventTargetBase.h │ │ │ │ │ │ └── LynxTouchEvent.h │ │ │ │ │ ├── event_report/ │ │ │ │ │ │ └── LynxEventReporter.h │ │ │ │ │ ├── module/ │ │ │ │ │ │ ├── JSModule.h │ │ │ │ │ │ ├── LynxContextModule.h │ │ │ │ │ │ ├── LynxExtensionModule.h │ │ │ │ │ │ ├── LynxModule.h │ │ │ │ │ │ └── LynxSetModule.h │ │ │ │ │ ├── navigator/ │ │ │ │ │ │ ├── LynxBaseCardManager.h │ │ │ │ │ │ ├── LynxCardManager.h │ │ │ │ │ │ ├── LynxHolder.h │ │ │ │ │ │ ├── LynxNavigator.h │ │ │ │ │ │ ├── LynxRoute.h │ │ │ │ │ │ ├── LynxSchemaInterceptor.h │ │ │ │ │ │ ├── NavigationModule.h │ │ │ │ │ │ └── cache/ │ │ │ │ │ │ ├── LynxLruCache.h │ │ │ │ │ │ └── LynxLruCacheNode.h │ │ │ │ │ ├── performance/ │ │ │ │ │ │ ├── LynxExtraTiming.h │ │ │ │ │ │ ├── LynxPerformanceObserverProtocol.h │ │ │ │ │ │ └── LynxUIMeaningfulContentProtocol.h │ │ │ │ │ ├── recorder/ │ │ │ │ │ │ └── LynxDebugInfoRecorderProtocol.h │ │ │ │ │ ├── resource/ │ │ │ │ │ │ ├── LynxGenericResourceFetcher.h │ │ │ │ │ │ ├── LynxMediaResourceFetcher.h │ │ │ │ │ │ ├── LynxProviderRegistry.h │ │ │ │ │ │ ├── LynxResourceProvider.h │ │ │ │ │ │ ├── LynxResourceRequest.h │ │ │ │ │ │ ├── LynxResourceResponse.h │ │ │ │ │ │ ├── LynxResourceResponseDataInfoProtocol.h │ │ │ │ │ │ ├── LynxTemplateResource.h │ │ │ │ │ │ └── LynxTemplateResourceFetcher.h │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── LynxService.h │ │ │ │ │ │ ├── LynxServiceContainerProtocol.h │ │ │ │ │ │ ├── LynxServiceDevToolProtocol.h │ │ │ │ │ │ ├── LynxServiceEventReporterProtocol.h │ │ │ │ │ │ ├── LynxServiceExtensionProtocol.h │ │ │ │ │ │ ├── LynxServiceHttpProtocol.h │ │ │ │ │ │ ├── LynxServiceI18nProtocol.h │ │ │ │ │ │ ├── LynxServiceImageProtocol.h │ │ │ │ │ │ ├── LynxServiceModuleProtocol.h │ │ │ │ │ │ ├── LynxServiceMonitorProtocol.h │ │ │ │ │ │ ├── LynxServiceResourceProtocol.h │ │ │ │ │ │ ├── LynxServiceResourceRequestOperationProtocol.h │ │ │ │ │ │ ├── LynxServiceResourceRequestParameters.h │ │ │ │ │ │ ├── LynxServiceResourceResponseProtocol.h │ │ │ │ │ │ ├── LynxServiceSecurityProtocol.h │ │ │ │ │ │ ├── LynxServiceSystemInvokeProtocol.h │ │ │ │ │ │ ├── LynxServiceTextProtocol.h │ │ │ │ │ │ ├── LynxServiceTrailExtensionProtocol.h │ │ │ │ │ │ └── LynxServiceTrailProtocol.h │ │ │ │ │ ├── sources_list.gni │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── LUIBodyView.h │ │ │ │ │ │ ├── LUIConfig.h │ │ │ │ │ │ └── LUIErrorHandling.h │ │ │ │ │ └── utils/ │ │ │ │ │ ├── LynxColorUtils.h │ │ │ │ │ ├── LynxHtmlEscape.h │ │ │ │ │ ├── LynxSizeValue.h │ │ │ │ │ ├── LynxUnitUtils.h │ │ │ │ │ ├── LynxVersionUtils.h │ │ │ │ │ ├── LynxWeakProxy.h │ │ │ │ │ └── thread_safe_dictionary/ │ │ │ │ │ └── LynxThreadSafeDictionary.h │ │ │ │ ├── resource/ │ │ │ │ │ ├── LynxProviderRegistry.m │ │ │ │ │ ├── LynxResourceRequest.m │ │ │ │ │ ├── LynxResourceResponse.m │ │ │ │ │ └── LynxTemplateResource.m │ │ │ │ ├── service/ │ │ │ │ │ ├── LynxService.m │ │ │ │ │ ├── LynxServiceResourceRequestParameters.m │ │ │ │ │ └── LynxVerificationResult.m │ │ │ │ ├── trace/ │ │ │ │ │ └── LynxTraceEventDef.h │ │ │ │ └── utils/ │ │ │ │ ├── LynxColorUtils.mm │ │ │ │ ├── LynxConvertUtils.h │ │ │ │ ├── LynxConvertUtils.m │ │ │ │ ├── LynxHtmlEscape.m │ │ │ │ ├── LynxSizeValue.m │ │ │ │ ├── LynxUnitUtils.m │ │ │ │ ├── LynxVersionUtils.mm │ │ │ │ ├── LynxWeakProxy.m │ │ │ │ └── thread_safe_dictionary/ │ │ │ │ ├── LICENSE.txt │ │ │ │ └── LynxThreadSafeDictionary.m │ │ │ └── lynx_devtool/ │ │ │ ├── BUILD.gn │ │ │ ├── Helper/ │ │ │ │ ├── LynxBaseDeviceInfo.h │ │ │ │ ├── LynxScreenCastHelper.h │ │ │ │ └── LynxScreenCastHelper.mm │ │ │ ├── LogBox/ │ │ │ │ ├── LynxLogBoxWrapper.h │ │ │ │ └── LynxLogBoxWrapper.mm │ │ │ ├── LynxDebugBridge.h │ │ │ ├── LynxDebugBridge.mm │ │ │ ├── LynxDevMenu.h │ │ │ ├── LynxDevMenu.mm │ │ │ ├── LynxDevTool-prefix-ios.pch │ │ │ ├── LynxDevTool-prefix-osx.pch │ │ │ ├── LynxDevToolDownloader.m │ │ │ ├── LynxDevToolFrameCapturer.h │ │ │ ├── LynxDevToolFrameCapturer.mm │ │ │ ├── LynxDevtoolEnv.h │ │ │ ├── LynxDevtoolEnv.mm │ │ │ ├── LynxInspectorOwner+Internal.h │ │ │ ├── Memory/ │ │ │ │ ├── LynxMemoryController.h │ │ │ │ └── LynxMemoryController.mm │ │ │ ├── Module/ │ │ │ │ ├── LynxDevToolSetModule.h │ │ │ │ ├── LynxDevToolSetModule.mm │ │ │ │ ├── LynxTrailModule.h │ │ │ │ ├── LynxTrailModule.mm │ │ │ │ ├── LynxWebSocketModule.h │ │ │ │ └── LynxWebSocketModule.mm │ │ │ └── Tracing/ │ │ │ ├── LynxFPSTrace.h │ │ │ ├── LynxFPSTrace.mm │ │ │ ├── LynxFrameTraceService.h │ │ │ ├── LynxFrameTraceService.mm │ │ │ ├── LynxFrameViewTrace.h │ │ │ ├── LynxFrameViewTrace.mm │ │ │ ├── LynxInstanceTrace.h │ │ │ └── LynxInstanceTrace.mm │ │ ├── ios/ │ │ │ ├── BUILD.gn │ │ │ ├── api/ │ │ │ │ ├── doxygen.cfg │ │ │ │ └── lynx_ios.api │ │ │ ├── lynx/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LUIConfigAdapter.h │ │ │ │ ├── LUIConfigAdapter.mm │ │ │ │ ├── LynxBackgroundRuntime+Internal.h │ │ │ │ ├── LynxBackgroundRuntime.mm │ │ │ │ ├── LynxBaseConfigurator+Internal.h │ │ │ │ ├── LynxBaseConfigurator.mm │ │ │ │ ├── LynxConfig+Internal.h │ │ │ │ ├── LynxContext+Internal.h │ │ │ │ ├── LynxDefaultLogicExecutor.mm │ │ │ │ ├── LynxEngine.h │ │ │ │ ├── LynxEngine.mm │ │ │ │ ├── LynxEnginePool.h │ │ │ │ ├── LynxEnginePool.mm │ │ │ │ ├── LynxModuleManagerDarwinUnitTest.mm │ │ │ │ ├── LynxTemplateRender+Internal.h │ │ │ │ ├── LynxTemplateRender+Protected.h │ │ │ │ ├── LynxTemplateRender.mm │ │ │ │ ├── LynxTemplateRenderHelper.h │ │ │ │ ├── LynxTemplateRenderHelper.mm │ │ │ │ ├── LynxUIRenderer.h │ │ │ │ ├── LynxUIRenderer.mm │ │ │ │ ├── LynxUIRendererCreator.h │ │ │ │ ├── LynxUIRendererCreator.mm │ │ │ │ ├── LynxUIRendererProtocol.h │ │ │ │ ├── LynxUnitTestUtils.h │ │ │ │ ├── LynxUnitTestUtils.mm │ │ │ │ ├── LynxView+Protected.h │ │ │ │ ├── LynxView.mm │ │ │ │ ├── LynxViewBuilder+Internal.h │ │ │ │ ├── LynxViewBuilder.mm │ │ │ │ ├── LynxViewGroup.mm │ │ │ │ ├── LynxWasmFuncRegistry.mm │ │ │ │ ├── PaintingContextProxy.h │ │ │ │ ├── PaintingContextProxy.mm │ │ │ │ ├── Podspecs.gni │ │ │ │ ├── animation/ │ │ │ │ │ ├── LynxAnimationDelegate.m │ │ │ │ │ ├── LynxAnimationInfo.m │ │ │ │ │ ├── LynxAnimationTransformRotation.m │ │ │ │ │ ├── LynxAnimationUtils.m │ │ │ │ │ ├── LynxKeyframeAnimator.m │ │ │ │ │ ├── LynxKeyframeManager.m │ │ │ │ │ ├── LynxKeyframes.m │ │ │ │ │ ├── LynxLayoutAnimationManager.m │ │ │ │ │ └── LynxTransitionAnimationManager.m │ │ │ │ ├── base/ │ │ │ │ │ ├── LynxBoxShadowManager.m │ │ │ │ │ ├── LynxComponentStatisticUnitTest.m │ │ │ │ │ ├── LynxConverter+Transform.m │ │ │ │ │ ├── LynxFPSMonitorUnitTest.m │ │ │ │ │ ├── LynxFontFaceManager.m │ │ │ │ │ ├── LynxGradient.m │ │ │ │ │ ├── LynxLayoutStyle.mm │ │ │ │ │ ├── LynxLogUnitTest.m │ │ │ │ │ ├── LynxPropsProcessor.mm │ │ │ │ │ ├── LynxTextStyle.m │ │ │ │ │ ├── LynxTextUtils.m │ │ │ │ │ ├── LynxTransformOriginRaw.m │ │ │ │ │ ├── LynxTransformRaw.m │ │ │ │ │ ├── LynxUIMethodProcessor.m │ │ │ │ │ ├── UIDevice+Lynx.m │ │ │ │ │ └── background/ │ │ │ │ │ ├── LynxBackgroundCapInsets.m │ │ │ │ │ ├── LynxBackgroundDrawable.mm │ │ │ │ │ ├── LynxBackgroundImageLayerInfo.m │ │ │ │ │ ├── LynxBackgroundInfo.m │ │ │ │ │ ├── LynxBackgroundLinearGradientDrawable.mm │ │ │ │ │ ├── LynxBackgroundManager.m │ │ │ │ │ ├── LynxBackgroundManagerUnitTest.m │ │ │ │ │ ├── LynxBackgroundSubBackgroundLayer.m │ │ │ │ │ ├── LynxBackgroundUtils.m │ │ │ │ │ ├── LynxBoxShadowLayer.m │ │ │ │ │ └── LynxBoxShadowLayerUnitTest.m │ │ │ │ ├── event/ │ │ │ │ │ ├── LynxEventDetail.m │ │ │ │ │ ├── LynxEventEmitter.mm │ │ │ │ │ ├── LynxEventHandler+Internal.h │ │ │ │ │ ├── LynxEventHandler.m │ │ │ │ │ ├── LynxEventSpec.m │ │ │ │ │ ├── LynxKeyboardEventDispatcher.m │ │ │ │ │ ├── LynxTouchHandler+Internal.h │ │ │ │ │ ├── LynxTouchHandler.mm │ │ │ │ │ └── test/ │ │ │ │ │ ├── LynxEventHandlerUnitTest.h │ │ │ │ │ ├── LynxEventHandlerUnitTest.mm │ │ │ │ │ ├── LynxTouchHandlerUnitTest.h │ │ │ │ │ └── LynxTouchHandlerUnitTest.mm │ │ │ │ ├── fluency/ │ │ │ │ │ ├── LynxFluencyMonitor.h │ │ │ │ │ ├── LynxFluencyMonitor.mm │ │ │ │ │ ├── LynxScrollFluency.h │ │ │ │ │ ├── LynxScrollFluency.m │ │ │ │ │ └── base/ │ │ │ │ │ ├── LynxFPSMonitor.h │ │ │ │ │ ├── LynxFPSMonitor.mm │ │ │ │ │ ├── LynxFPSRecord.h │ │ │ │ │ └── LynxFPSRecord.m │ │ │ │ ├── gesture/ │ │ │ │ │ ├── LynxBaseGestureHandler.m │ │ │ │ │ ├── LynxBaseGestureHandlerUnitTest.m │ │ │ │ │ ├── LynxCustomGestureRecognizer.h │ │ │ │ │ ├── LynxCustomGestureRecognizer.m │ │ │ │ │ ├── LynxCustomGestureRecognizerUnitTest.m │ │ │ │ │ ├── LynxDefaultGestureHandler.m │ │ │ │ │ ├── LynxDefaultGestureHandlerUnitTest.m │ │ │ │ │ ├── LynxFlingGestureHandler.m │ │ │ │ │ ├── LynxFlingGestureHandlerUnitTest.m │ │ │ │ │ ├── LynxGestureArenaManager.h │ │ │ │ │ ├── LynxGestureArenaManager.m │ │ │ │ │ ├── LynxGestureArenaManagerUnitTest.m │ │ │ │ │ ├── LynxGestureDetectorDarwin.m │ │ │ │ │ ├── LynxGestureDetectorManager.h │ │ │ │ │ ├── LynxGestureDetectorManager.m │ │ │ │ │ ├── LynxGestureExtraBundle.h │ │ │ │ │ ├── LynxGestureExtraBundle.m │ │ │ │ │ ├── LynxGestureExtraBundleUnitTest.m │ │ │ │ │ ├── LynxGestureFlingTrigger.h │ │ │ │ │ ├── LynxGestureFlingTrigger.m │ │ │ │ │ ├── LynxGestureFlingTriggerUnitTest.m │ │ │ │ │ ├── LynxGestureHandlerTrigger.h │ │ │ │ │ ├── LynxGestureHandlerTrigger.m │ │ │ │ │ ├── LynxGestureHandlerTriggerUnitTest.m │ │ │ │ │ ├── LynxLongPressGestureHandler.m │ │ │ │ │ ├── LynxLongPressGestureHandlerUnitTest.m │ │ │ │ │ ├── LynxNativeGestureHandler.m │ │ │ │ │ ├── LynxPanGestureHandler.m │ │ │ │ │ ├── LynxPanGestureHandlerUnitTest.m │ │ │ │ │ ├── LynxTapGestureHandler.m │ │ │ │ │ └── LynxTapGestureHandlerUnitTest.m │ │ │ │ ├── hero_transitions/ │ │ │ │ │ ├── CALayer+LynxHeroTransition.m │ │ │ │ │ ├── LynxHeroAnimator.m │ │ │ │ │ ├── LynxHeroModifiers.m │ │ │ │ │ ├── LynxHeroTransition.m │ │ │ │ │ ├── LynxUI+LynxHeroTransition.m │ │ │ │ │ ├── UIView+LynxHeroTransition.m │ │ │ │ │ └── UIViewController+LynxHeroTransition.m │ │ │ │ ├── module/ │ │ │ │ │ ├── LynxAccessibilityModule.h │ │ │ │ │ ├── LynxAccessibilityModule.mm │ │ │ │ │ ├── LynxAccessibilityModuleUnitTest.m │ │ │ │ │ ├── LynxEmbeddedModule.h │ │ │ │ │ ├── LynxEmbeddedModule.mm │ │ │ │ │ ├── LynxExposureModule.h │ │ │ │ │ ├── LynxExposureModule.mm │ │ │ │ │ ├── LynxExposureModuleUnitTest.h │ │ │ │ │ ├── LynxExposureModuleUnitTest.m │ │ │ │ │ ├── LynxFetchModule.h │ │ │ │ │ ├── LynxFetchModule.m │ │ │ │ │ ├── LynxHttpStreamingDelegate.m │ │ │ │ │ ├── LynxHttpStreamingDelegateUnitTest.m │ │ │ │ │ ├── LynxIntersectionObserverModule.h │ │ │ │ │ ├── LynxIntersectionObserverModule.mm │ │ │ │ │ ├── LynxResourceModule.h │ │ │ │ │ ├── LynxResourceModule.mm │ │ │ │ │ ├── LynxResourceModuleUnitTest.m │ │ │ │ │ ├── LynxTextInfoModule.h │ │ │ │ │ ├── LynxTextInfoModule.mm │ │ │ │ │ ├── LynxUIMethodModule.h │ │ │ │ │ └── LynxUIMethodModule.mm │ │ │ │ ├── public/ │ │ │ │ │ ├── BUILD.gn │ │ │ │ │ ├── ListNodeInfoFetcher.h │ │ │ │ │ ├── ListNodeInfoFetcherProtocol.h │ │ │ │ │ ├── LynxBackgroundRuntime.h │ │ │ │ │ ├── LynxBaseConfigurator.h │ │ │ │ │ ├── LynxBlurImageProcessor.h │ │ │ │ │ ├── LynxDefaultLogicExecutor.h │ │ │ │ │ ├── LynxFatImageProcessor.h │ │ │ │ │ ├── LynxImageBlurUtils.h │ │ │ │ │ ├── LynxImageConfig.h │ │ │ │ │ ├── LynxImageLoadInfo.h │ │ │ │ │ ├── LynxImageLoader.h │ │ │ │ │ ├── LynxImageProcessor.h │ │ │ │ │ ├── LynxLogicExecutor.h │ │ │ │ │ ├── LynxNinePatchImageProcessor.h │ │ │ │ │ ├── LynxRuntimeLifecycleListener.h │ │ │ │ │ ├── LynxServiceProtocol.h │ │ │ │ │ ├── LynxTemplateRender.h │ │ │ │ │ ├── LynxUIFilterImage.h │ │ │ │ │ ├── LynxUIImage.h │ │ │ │ │ ├── LynxUIInlineImage.h │ │ │ │ │ ├── LynxUIRendererCreatorProtocol.h │ │ │ │ │ ├── LynxURL.h │ │ │ │ │ ├── LynxView+Internal.h │ │ │ │ │ ├── LynxView.h │ │ │ │ │ ├── LynxViewBuilder.h │ │ │ │ │ ├── LynxViewGroup+Internal.h │ │ │ │ │ ├── LynxViewGroup.h │ │ │ │ │ ├── LynxWasmFuncRegistry.h │ │ │ │ │ ├── animation/ │ │ │ │ │ │ ├── LynxAnimationDelegate.h │ │ │ │ │ │ ├── LynxAnimationInfo.h │ │ │ │ │ │ ├── LynxAnimationTransformRotation.h │ │ │ │ │ │ ├── LynxAnimationUtils.h │ │ │ │ │ │ ├── LynxKeyframeAnimator.h │ │ │ │ │ │ ├── LynxKeyframeManager.h │ │ │ │ │ │ ├── LynxKeyframes.h │ │ │ │ │ │ ├── LynxLayoutAnimationManager.h │ │ │ │ │ │ └── LynxTransitionAnimationManager.h │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── LynxBoxShadowManager.h │ │ │ │ │ │ ├── LynxConverter+Transform.h │ │ │ │ │ │ ├── LynxFontFaceManager.h │ │ │ │ │ │ ├── LynxGradient.h │ │ │ │ │ │ ├── LynxImageFetcher.h │ │ │ │ │ │ ├── LynxLayoutStyle.h │ │ │ │ │ │ ├── LynxPreprocessingUtils.h │ │ │ │ │ │ ├── LynxPropsProcessor.h │ │ │ │ │ │ ├── LynxTextStyle.h │ │ │ │ │ │ ├── LynxTextUtils.h │ │ │ │ │ │ ├── LynxTransformOriginRaw.h │ │ │ │ │ │ ├── LynxTransformRaw.h │ │ │ │ │ │ ├── LynxUIMethodProcessor.h │ │ │ │ │ │ ├── UIDevice+Lynx.h │ │ │ │ │ │ └── background/ │ │ │ │ │ │ ├── LynxBackgroundCapInsets.h │ │ │ │ │ │ ├── LynxBackgroundDrawable.h │ │ │ │ │ │ ├── LynxBackgroundImageLayerInfo.h │ │ │ │ │ │ ├── LynxBackgroundInfo.h │ │ │ │ │ │ ├── LynxBackgroundManager.h │ │ │ │ │ │ ├── LynxBackgroundRenderer+Internal.h │ │ │ │ │ │ ├── LynxBackgroundRenderer.h │ │ │ │ │ │ ├── LynxBackgroundUtils.h │ │ │ │ │ │ └── LynxBoxShadowLayer.h │ │ │ │ │ ├── event/ │ │ │ │ │ │ ├── LynxEventDetail.h │ │ │ │ │ │ ├── LynxEventEmitter.h │ │ │ │ │ │ ├── LynxEventHandler.h │ │ │ │ │ │ ├── LynxEventSpec.h │ │ │ │ │ │ ├── LynxKeyboardEventDispatcher.h │ │ │ │ │ │ └── LynxTouchHandler.h │ │ │ │ │ ├── gesture/ │ │ │ │ │ │ ├── LynxBaseGestureHandler.h │ │ │ │ │ │ ├── LynxDefaultGestureHandler.h │ │ │ │ │ │ ├── LynxFlingGestureHandler.h │ │ │ │ │ │ ├── LynxGestureArenaMember.h │ │ │ │ │ │ ├── LynxGestureDetectorDarwin.h │ │ │ │ │ │ ├── LynxLongPressGestureHandler.h │ │ │ │ │ │ ├── LynxNativeGestureHandler.h │ │ │ │ │ │ ├── LynxPanGestureHandler.h │ │ │ │ │ │ └── LynxTapGestureHandler.h │ │ │ │ │ ├── hero_transitions/ │ │ │ │ │ │ ├── CALayer+LynxHeroTransition.h │ │ │ │ │ │ ├── LynxHeroAnimator.h │ │ │ │ │ │ ├── LynxHeroModifiers.h │ │ │ │ │ │ ├── LynxHeroTransition.h │ │ │ │ │ │ ├── LynxUI+LynxHeroTransition.h │ │ │ │ │ │ ├── UIView+LynxHeroTransition.h │ │ │ │ │ │ └── UIViewController+LynxHeroTransition.h │ │ │ │ │ ├── shadow_node/ │ │ │ │ │ │ ├── LynxCustomMeasureDelegate+Internal.h │ │ │ │ │ │ ├── LynxCustomMeasureDelegate.h │ │ │ │ │ │ ├── LynxCustomMeasureShadowNode.h │ │ │ │ │ │ ├── LynxLayoutNode.h │ │ │ │ │ │ ├── LynxLayoutNodeManager.h │ │ │ │ │ │ ├── LynxLayoutTick.h │ │ │ │ │ │ ├── LynxMeasureDelegate.h │ │ │ │ │ │ ├── LynxNativeLayoutNode.h │ │ │ │ │ │ ├── LynxShadowNode+VirtualAnchor.h │ │ │ │ │ │ ├── LynxShadowNode.h │ │ │ │ │ │ ├── LynxShadowNodeOwner.h │ │ │ │ │ │ ├── LynxShadowNodeStyle.h │ │ │ │ │ │ ├── frame/ │ │ │ │ │ │ │ └── LynxFrameShadowNode.h │ │ │ │ │ │ └── text/ │ │ │ │ │ │ ├── LynxBaseTextShadowNode.h │ │ │ │ │ │ ├── LynxBaselineShiftLayoutManager.h │ │ │ │ │ │ ├── LynxConverter+NSShadow.h │ │ │ │ │ │ ├── LynxEventTargetSpan.h │ │ │ │ │ │ ├── LynxInlineTextShadowNode.h │ │ │ │ │ │ ├── LynxInlineTruncationShadowNode.h │ │ │ │ │ │ ├── LynxRawTextShadowNode.h │ │ │ │ │ │ ├── LynxTextLayoutManager.h │ │ │ │ │ │ ├── LynxTextLayoutSpec.h │ │ │ │ │ │ ├── LynxTextRenderManager.h │ │ │ │ │ │ ├── LynxTextRenderer.h │ │ │ │ │ │ ├── LynxTextRendererCache.h │ │ │ │ │ │ └── LynxTextShadowNode.h │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── LynxBasicShape.h │ │ │ │ │ │ ├── LynxLayer.h │ │ │ │ │ │ ├── LynxNewGestureDelegate.h │ │ │ │ │ │ ├── LynxRootUI.h │ │ │ │ │ │ ├── LynxScrollEventManager.h │ │ │ │ │ │ ├── LynxScrollListener.h │ │ │ │ │ │ ├── LynxUI+Accessibility.h │ │ │ │ │ │ ├── LynxUI+Fluency.h │ │ │ │ │ │ ├── LynxUI+Internal.h │ │ │ │ │ │ ├── LynxUI.h │ │ │ │ │ │ ├── LynxUIComponent.h │ │ │ │ │ │ ├── LynxUIContext.h │ │ │ │ │ │ ├── LynxUIExposure.h │ │ │ │ │ │ ├── LynxUIOwner.h │ │ │ │ │ │ ├── LynxUIReportInfoDelegate.h │ │ │ │ │ │ ├── LynxUITarget.h │ │ │ │ │ │ ├── LynxUIView.h │ │ │ │ │ │ ├── LynxViewVisibleHelper.h │ │ │ │ │ │ ├── UIScrollView+Lynx.h │ │ │ │ │ │ ├── UIScrollView+LynxFadingEdge.h │ │ │ │ │ │ ├── UIScrollView+LynxGesture.h │ │ │ │ │ │ ├── UIView+Lynx.h │ │ │ │ │ │ ├── frame/ │ │ │ │ │ │ │ ├── LynxFrameView.h │ │ │ │ │ │ │ └── LynxUIFrame.h │ │ │ │ │ │ ├── image/ │ │ │ │ │ │ │ └── LynxImageLoadOptions.h │ │ │ │ │ │ ├── list/ │ │ │ │ │ │ │ ├── LynxListAppearEventEmitter.h │ │ │ │ │ │ │ ├── LynxListDebug.h │ │ │ │ │ │ │ ├── LynxListScrollEventEmitter.h │ │ │ │ │ │ │ ├── LynxUIListDelegate.h │ │ │ │ │ │ │ ├── LynxUIListInspector.h │ │ │ │ │ │ │ ├── LynxUIListLoader.h │ │ │ │ │ │ │ ├── LynxUIListScrollEvent.h │ │ │ │ │ │ │ ├── container/ │ │ │ │ │ │ │ │ └── LynxUIListContainer.h │ │ │ │ │ │ │ ├── list_light/ │ │ │ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ │ │ │ ├── LynxListHorizontalLayoutManager.h │ │ │ │ │ │ │ │ │ ├── LynxListLayoutManager.h │ │ │ │ │ │ │ │ │ ├── LynxListLayoutModelLight.h │ │ │ │ │ │ │ │ │ └── LynxListVerticalLayoutManager.h │ │ │ │ │ │ │ │ ├── ui/ │ │ │ │ │ │ │ │ │ ├── LynxUIListInvalidationContext.h │ │ │ │ │ │ │ │ │ ├── LynxUIListLight.h │ │ │ │ │ │ │ │ │ ├── LynxUIListProtocol.h │ │ │ │ │ │ │ │ │ └── LynxUIListScrollManager.h │ │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ │ ├── LynxListViewCellLight.h │ │ │ │ │ │ │ │ └── LynxListViewLight.h │ │ │ │ │ │ │ └── lynx_collection/ │ │ │ │ │ │ │ ├── LynxCollectionDataSource.h │ │ │ │ │ │ │ ├── LynxCollectionScroll.h │ │ │ │ │ │ │ ├── LynxCollectionScroller.h │ │ │ │ │ │ │ ├── LynxCollectionViewCell.h │ │ │ │ │ │ │ ├── LynxUICollection+Delegate.h │ │ │ │ │ │ │ ├── LynxUICollection+Internal.h │ │ │ │ │ │ │ ├── LynxUICollection+PropSetter.h │ │ │ │ │ │ │ ├── LynxUICollection.h │ │ │ │ │ │ │ ├── LynxUIListItem.h │ │ │ │ │ │ │ └── layout/ │ │ │ │ │ │ │ ├── LynxCollectionInvalidationContext.h │ │ │ │ │ │ │ ├── LynxCollectionViewLayout.h │ │ │ │ │ │ │ ├── LynxCollectionViewLayoutModel.h │ │ │ │ │ │ │ └── LynxCollectionViewLayoutSectionModel.h │ │ │ │ │ │ ├── scroll_view/ │ │ │ │ │ │ │ ├── AbsLynxUIScroller.h │ │ │ │ │ │ │ ├── LynxBounceView.h │ │ │ │ │ │ │ ├── LynxImpressionView.h │ │ │ │ │ │ │ ├── LynxScrollView.h │ │ │ │ │ │ │ ├── LynxUIScrollView.h │ │ │ │ │ │ │ ├── LynxUIScrollViewInternal.h │ │ │ │ │ │ │ ├── LynxUIScroller.h │ │ │ │ │ │ │ ├── UIScrollView+Nested.h │ │ │ │ │ │ │ └── base/ │ │ │ │ │ │ │ ├── LynxBaseScrollView+Auto.h │ │ │ │ │ │ │ ├── LynxBaseScrollView+Horizontal.h │ │ │ │ │ │ │ ├── LynxBaseScrollView+Internal.h │ │ │ │ │ │ │ ├── LynxBaseScrollView+Nested.h │ │ │ │ │ │ │ ├── LynxBaseScrollView+Public.h │ │ │ │ │ │ │ ├── LynxBaseScrollView+Vertical.h │ │ │ │ │ │ │ └── LynxBaseScrollView.h │ │ │ │ │ │ └── text/ │ │ │ │ │ │ ├── LynxTextOverflowLayer.h │ │ │ │ │ │ ├── LynxTextView.h │ │ │ │ │ │ └── LynxUIText.h │ │ │ │ │ └── utils/ │ │ │ │ │ ├── LynxGradientUtils.h │ │ │ │ │ ├── LynxPropertyDiffMap.h │ │ │ │ │ ├── LynxUIKitAPIAdapter.h │ │ │ │ │ └── LynxUIUnitUtils.h │ │ │ │ ├── recorder/ │ │ │ │ │ ├── LynxRecorder.h │ │ │ │ │ └── LynxRecorder.mm │ │ │ │ ├── renderer/ │ │ │ │ │ ├── LynxContainerView.h │ │ │ │ │ ├── LynxContainerView.mm │ │ │ │ │ ├── LynxContainerViewUnitTest.mm │ │ │ │ │ ├── LynxDisplayListApplier+Internal.h │ │ │ │ │ ├── LynxDisplayListApplier.mm │ │ │ │ │ ├── LynxDisplayListApplierUnitTest.mm │ │ │ │ │ ├── LynxRenderer+Internal.h │ │ │ │ │ ├── LynxRenderer.h │ │ │ │ │ ├── LynxRenderer.mm │ │ │ │ │ ├── LynxRendererContext.h │ │ │ │ │ ├── LynxRendererContext.mm │ │ │ │ │ ├── LynxRendererContextUnitTest.mm │ │ │ │ │ ├── LynxRendererHost.h │ │ │ │ │ ├── LynxRendererUnitTest.mm │ │ │ │ │ ├── LynxTextLayer.h │ │ │ │ │ ├── LynxTextLayer.mm │ │ │ │ │ └── LynxTextLayerUnitTest.mm │ │ │ │ ├── shadow_node/ │ │ │ │ │ ├── LynxCustomMeasureShadowNode.mm │ │ │ │ │ ├── LynxLayoutNode.mm │ │ │ │ │ ├── LynxLayoutNodeManager.mm │ │ │ │ │ ├── LynxLayoutTick.m │ │ │ │ │ ├── LynxMeasureFuncDarwin.h │ │ │ │ │ ├── LynxMeasureFuncDarwin.mm │ │ │ │ │ ├── LynxNativeLayoutNode.mm │ │ │ │ │ ├── LynxShadowNode.m │ │ │ │ │ ├── LynxShadowNodeOwner.m │ │ │ │ │ ├── LynxUILayoutTick.h │ │ │ │ │ ├── LynxUILayoutTick.m │ │ │ │ │ ├── frame/ │ │ │ │ │ │ └── LynxFrameShadowNode.m │ │ │ │ │ └── text/ │ │ │ │ │ ├── LynxBaseTextShadowNode.m │ │ │ │ │ ├── LynxBaselineShiftLayoutManager.m │ │ │ │ │ ├── LynxConverter+NSShadow.m │ │ │ │ │ ├── LynxEventTargetSpan.m │ │ │ │ │ ├── LynxInlineTextShadowNode.m │ │ │ │ │ ├── LynxInlineTruncationShadowNode.m │ │ │ │ │ ├── LynxRawTextShadowNode.m │ │ │ │ │ ├── LynxTextLayoutManager.m │ │ │ │ │ ├── LynxTextLayoutSpec.m │ │ │ │ │ ├── LynxTextRenderManager.m │ │ │ │ │ ├── LynxTextRenderer.m │ │ │ │ │ ├── LynxTextRendererCache.m │ │ │ │ │ ├── LynxTextRendererUnitTest.m │ │ │ │ │ └── LynxTextShadowNode.m │ │ │ │ ├── ui/ │ │ │ │ │ ├── LynxFilterUtil+System.m │ │ │ │ │ ├── LynxFilterUtil.h │ │ │ │ │ ├── LynxFilterUtil.m │ │ │ │ │ ├── LynxGlobalObserver.m │ │ │ │ │ ├── LynxLRUMap.h │ │ │ │ │ ├── LynxLRUMap.m │ │ │ │ │ ├── LynxLayer.m │ │ │ │ │ ├── LynxOffsetCalculator.h │ │ │ │ │ ├── LynxOffsetCalculator.mm │ │ │ │ │ ├── LynxRootUI.m │ │ │ │ │ ├── LynxScrollEventManager.mm │ │ │ │ │ ├── LynxScrollListener.m │ │ │ │ │ ├── LynxUI+Accessibility.m │ │ │ │ │ ├── LynxUI+AccessibilityUnitTest.m │ │ │ │ │ ├── LynxUI+AsyncDisplay.m │ │ │ │ │ ├── LynxUI+Fluency.m │ │ │ │ │ ├── LynxUI+Gesture.h │ │ │ │ │ ├── LynxUI+Private.h │ │ │ │ │ ├── LynxUI+PropSetterUnitTest.mm │ │ │ │ │ ├── LynxUI.m │ │ │ │ │ ├── LynxUIComponent.m │ │ │ │ │ ├── LynxUIContext+Internal.h │ │ │ │ │ ├── LynxUIContext.mm │ │ │ │ │ ├── LynxUIDetachUnitTest.m │ │ │ │ │ ├── LynxUIExposure+Internal.h │ │ │ │ │ ├── LynxUIExposure.m │ │ │ │ │ ├── LynxUIExposureUnitTest.h │ │ │ │ │ ├── LynxUIExposureUnitTest.m │ │ │ │ │ ├── LynxUIIntersectionObserver+Internal.h │ │ │ │ │ ├── LynxUIIntersectionObserver.h │ │ │ │ │ ├── LynxUIIntersectionObserver.mm │ │ │ │ │ ├── LynxUIIntersectionObserverUnitTest.h │ │ │ │ │ ├── LynxUIIntersectionObserverUnitTest.m │ │ │ │ │ ├── LynxUIOwner+Accessibility.h │ │ │ │ │ ├── LynxUIOwner+Accessibility.m │ │ │ │ │ ├── LynxUIOwner+AccessibilityUnitTest.m │ │ │ │ │ ├── LynxUIOwner+Private.h │ │ │ │ │ ├── LynxUIOwner.m │ │ │ │ │ ├── LynxUIOwnerUnitTest.m │ │ │ │ │ ├── LynxUIUnitTest.m │ │ │ │ │ ├── LynxUIUnitTestUtils.h │ │ │ │ │ ├── LynxUIUnitTestUtils.m │ │ │ │ │ ├── LynxUIView.m │ │ │ │ │ ├── UIScrollView+Lynx.m │ │ │ │ │ ├── UIScrollView+LynxFadingEdge.m │ │ │ │ │ ├── UIScrollView+LynxGesture.m │ │ │ │ │ ├── UIScrollView+LynxUnitTest.m │ │ │ │ │ ├── UIView+Lynx.m │ │ │ │ │ ├── frame/ │ │ │ │ │ │ ├── LynxFrameView.mm │ │ │ │ │ │ └── LynxUIFrame.mm │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── LynxBlurImageProcessor.m │ │ │ │ │ │ ├── LynxFatImageProcessor.m │ │ │ │ │ │ ├── LynxImageBlurUtils.m │ │ │ │ │ │ ├── LynxImageLoadOptions.m │ │ │ │ │ │ ├── LynxImageLoader.mm │ │ │ │ │ │ ├── LynxImageManager.h │ │ │ │ │ │ ├── LynxImageManager.mm │ │ │ │ │ │ ├── LynxNinePatchImageProcessor.m │ │ │ │ │ │ ├── LynxUIFilterImage.m │ │ │ │ │ │ ├── LynxUIImage.mm │ │ │ │ │ │ ├── LynxUIImageUnitTest.m │ │ │ │ │ │ ├── LynxUIInlineImage.m │ │ │ │ │ │ └── LynxURL.m │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── LynxListAppearEventEmitter.m │ │ │ │ │ │ ├── LynxListScrollEventEmitter.m │ │ │ │ │ │ ├── LynxUIListLoader.mm │ │ │ │ │ │ ├── container/ │ │ │ │ │ │ │ ├── ListNodeInfoFetcher.mm │ │ │ │ │ │ │ ├── LynxUIListContainer.mm │ │ │ │ │ │ │ └── LynxUIListContainerUnitTest.m │ │ │ │ │ │ ├── list_light/ │ │ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ │ │ ├── LynxListHorizontalLayoutManager.mm │ │ │ │ │ │ │ │ ├── LynxListLayoutManager.mm │ │ │ │ │ │ │ │ ├── LynxListLayoutManagerUnitTest.mm │ │ │ │ │ │ │ │ ├── LynxListLayoutModelLight.mm │ │ │ │ │ │ │ │ └── LynxListVerticalLayoutManager.mm │ │ │ │ │ │ │ ├── ui/ │ │ │ │ │ │ │ │ ├── LynxUIListCellContentProducer.h │ │ │ │ │ │ │ │ ├── LynxUIListCellContentProducer.mm │ │ │ │ │ │ │ │ ├── LynxUIListDataSource.h │ │ │ │ │ │ │ │ ├── LynxUIListDataSource.mm │ │ │ │ │ │ │ │ ├── LynxUIListInvalidationContext.m │ │ │ │ │ │ │ │ ├── LynxUIListLight+PropSetter.h │ │ │ │ │ │ │ │ ├── LynxUIListLight+PropSetter.mm │ │ │ │ │ │ │ │ ├── LynxUIListLight.mm │ │ │ │ │ │ │ │ └── LynxUIListScrollManager.mm │ │ │ │ │ │ │ └── view/ │ │ │ │ │ │ │ ├── LynxListAnchorManager.h │ │ │ │ │ │ │ ├── LynxListAnchorManager.mm │ │ │ │ │ │ │ ├── LynxListCachedCellManager.h │ │ │ │ │ │ │ ├── LynxListCachedCellManager.mm │ │ │ │ │ │ │ ├── LynxListReusePool.h │ │ │ │ │ │ │ ├── LynxListReusePool.mm │ │ │ │ │ │ │ ├── LynxListViewCellLight.mm │ │ │ │ │ │ │ ├── LynxListViewLight.mm │ │ │ │ │ │ │ └── LynxListViewLightUnitTest.mm │ │ │ │ │ │ └── lynx_collection/ │ │ │ │ │ │ ├── LynxCollectionDataSource.m │ │ │ │ │ │ ├── LynxCollectionScroll.m │ │ │ │ │ │ ├── LynxCollectionScroller.m │ │ │ │ │ │ ├── LynxCollectionViewCell.m │ │ │ │ │ │ ├── LynxUICollection+Delegate.m │ │ │ │ │ │ ├── LynxUICollection+DelegateUnitTest.m │ │ │ │ │ │ ├── LynxUICollection+PropSetter.m │ │ │ │ │ │ ├── LynxUICollection.m │ │ │ │ │ │ ├── LynxUIListItem.m │ │ │ │ │ │ └── layout/ │ │ │ │ │ │ ├── LynxCollectionInvalidationContext.m │ │ │ │ │ │ ├── LynxCollectionViewLayout.m │ │ │ │ │ │ ├── LynxCollectionViewLayoutModel.m │ │ │ │ │ │ └── LynxCollectionViewLayoutSectionModel.m │ │ │ │ │ ├── lynx_basic_shapes/ │ │ │ │ │ │ ├── LBSCoreGraphicsPathParser.h │ │ │ │ │ │ ├── LBSCoreGraphicsPathParser.m │ │ │ │ │ │ ├── LBSPathParser.h │ │ │ │ │ │ ├── LBSPathParser.m │ │ │ │ │ │ ├── LynxBasicShape.m │ │ │ │ │ │ └── LynxBasicShapeUnitTest.m │ │ │ │ │ ├── scroll_view/ │ │ │ │ │ │ ├── AbsLynxUIScroller.m │ │ │ │ │ │ ├── LynxBounceView.m │ │ │ │ │ │ ├── LynxImpressionView.m │ │ │ │ │ │ ├── LynxScrollView.m │ │ │ │ │ │ ├── LynxUIScrollView.m │ │ │ │ │ │ ├── LynxUIScrollViewInternal.m │ │ │ │ │ │ ├── LynxUIScroller.m │ │ │ │ │ │ ├── LynxUIScroller.xctestplan │ │ │ │ │ │ ├── LynxUIScrollerBasicUnitTest.m │ │ │ │ │ │ ├── LynxUIScrollerScrollEventUnitTest.m │ │ │ │ │ │ ├── LynxUIScrollerUIMethodScrollToUnitTest.m │ │ │ │ │ │ ├── LynxUIScrollerUnitTest.m │ │ │ │ │ │ ├── LynxUIScrollerUnitTestUtils.h │ │ │ │ │ │ ├── LynxUIScrollerUnitTestUtils.m │ │ │ │ │ │ ├── UIScrollView+Nested.m │ │ │ │ │ │ └── base/ │ │ │ │ │ │ ├── LynxBaseScrollView+Auto.m │ │ │ │ │ │ ├── LynxBaseScrollView+Horizontal.m │ │ │ │ │ │ ├── LynxBaseScrollView+Internal.m │ │ │ │ │ │ ├── LynxBaseScrollView+Nested.m │ │ │ │ │ │ ├── LynxBaseScrollView+Public.m │ │ │ │ │ │ ├── LynxBaseScrollView+Vertical.m │ │ │ │ │ │ ├── LynxBaseScrollView.m │ │ │ │ │ │ ├── LynxBaseScrollViewAutoUnitTest.m │ │ │ │ │ │ ├── LynxBaseScrollViewHorizontalUnitTest.m │ │ │ │ │ │ ├── LynxBaseScrollViewNestedUnitTest.m │ │ │ │ │ │ ├── LynxBaseScrollViewPublicUnitTest.m │ │ │ │ │ │ ├── LynxBaseScrollViewUnitTest.m │ │ │ │ │ │ └── LynxBaseScrollViewVerticalUnitTest.m │ │ │ │ │ └── text/ │ │ │ │ │ ├── LynxTextOverflowLayer.m │ │ │ │ │ ├── LynxTextView.m │ │ │ │ │ └── LynxUIText.m │ │ │ │ └── utils/ │ │ │ │ ├── LynxColorUtilsUnitTest.m │ │ │ │ ├── LynxConvertUtilsUnitTest.m │ │ │ │ ├── LynxGradientUtils.mm │ │ │ │ ├── LynxGradientUtilsUnitTest.m │ │ │ │ ├── LynxHtmlEscapeUnitTest.m │ │ │ │ ├── LynxPlatFormLengthUnitTest.m │ │ │ │ ├── LynxPropertyDiffMap.m │ │ │ │ ├── LynxPropertyDiffMapUnitTest.m │ │ │ │ ├── LynxUIKitAPIAdapter.m │ │ │ │ ├── LynxUIUnitUtils.m │ │ │ │ ├── LynxUnitUtilsUnitTest.m │ │ │ │ └── LynxVersionUtilsUnitTest.m │ │ │ ├── lynx_devtool/ │ │ │ │ ├── .gitignore │ │ │ │ ├── BUILD.gn │ │ │ │ ├── ConsoleDelegateManager.h │ │ │ │ ├── ConsoleDelegateManager.mm │ │ │ │ ├── ConsoleDelegateManagerUnitTest.mm │ │ │ │ ├── DevToolMonitorView.h │ │ │ │ ├── DevToolMonitorView.m │ │ │ │ ├── DevToolPlatformDarwinDelegate.h │ │ │ │ ├── DevToolPlatformDarwinDelegate.mm │ │ │ │ ├── GlobalDevToolPlatformDarwinDelegate.h │ │ │ │ ├── GlobalDevToolPlatformDarwinDelegate.mm │ │ │ │ ├── Helper/ │ │ │ │ │ ├── LepusDebugInfoHelper.h │ │ │ │ │ ├── LepusDebugInfoHelper.mm │ │ │ │ │ ├── LepusDebugInfoHelperUnitTest.mm │ │ │ │ │ ├── LynxDeviceInfoHelper.h │ │ │ │ │ ├── LynxDeviceInfoHelper.m │ │ │ │ │ ├── LynxEmulateTouchHelper.h │ │ │ │ │ ├── LynxEmulateTouchHelper.mm │ │ │ │ │ ├── LynxUITreeHelper.h │ │ │ │ │ ├── LynxUITreeHelper.mm │ │ │ │ │ ├── LynxUITreeHelperUnitTest.m │ │ │ │ │ ├── TestBenchTraceProfileHelper.h │ │ │ │ │ ├── TestBenchTraceProfileHelper.mm │ │ │ │ │ ├── TestbenchDumpFileHelper.h │ │ │ │ │ └── TestbenchDumpFileHelper.mm │ │ │ │ ├── LynxDevToolErrorUtils.h │ │ │ │ ├── LynxDevToolErrorUtils.mm │ │ │ │ ├── LynxDevToolErrorUtilsUnitTest.m │ │ │ │ ├── LynxDevToolNGDarwinDelegate.h │ │ │ │ ├── LynxDevToolNGDarwinDelegate.mm │ │ │ │ ├── LynxInspectorOwner.h │ │ │ │ ├── LynxInspectorOwner.mm │ │ │ │ ├── LynxWebSocket.h │ │ │ │ ├── LynxWebSocket.mm │ │ │ │ ├── Memory/ │ │ │ │ │ └── LynxMemoryControllerUnitTest.m │ │ │ │ └── lynx_recorder/ │ │ │ │ ├── LynxDebugInfoRecorderDelegate.h │ │ │ │ ├── LynxDebugInfoRecorderDelegate.mm │ │ │ │ ├── LynxRecorderActionManager.h │ │ │ │ ├── LynxRecorderActionManager.mm │ │ │ │ ├── LynxRecorderDynamicComponentFetcher.h │ │ │ │ ├── LynxRecorderDynamicComponentFetcher.m │ │ │ │ ├── LynxRecorderEntranceViewController.h │ │ │ │ ├── LynxRecorderEntranceViewController.m │ │ │ │ ├── LynxRecorderEnv.h │ │ │ │ ├── LynxRecorderEnv.m │ │ │ │ ├── LynxRecorderOpenUrlModule.h │ │ │ │ ├── LynxRecorderOpenUrlModule.m │ │ │ │ ├── LynxRecorderPageManager.h │ │ │ │ ├── LynxRecorderPageManager.m │ │ │ │ ├── LynxRecorderReplayConfig.h │ │ │ │ ├── LynxRecorderReplayConfig.m │ │ │ │ ├── LynxRecorderReplayDataModule.h │ │ │ │ ├── LynxRecorderReplayDataModule.m │ │ │ │ ├── LynxRecorderReplayStateView.h │ │ │ │ ├── LynxRecorderReplayStateView.m │ │ │ │ ├── LynxRecorderTouchHelper.h │ │ │ │ ├── LynxRecorderUIHelper.h │ │ │ │ ├── LynxRecorderUIHelper.m │ │ │ │ ├── LynxRecorderURLAnalyzer.h │ │ │ │ ├── LynxRecorderURLAnalyzer.m │ │ │ │ ├── LynxRecorderView.h │ │ │ │ ├── LynxRecorderView.m │ │ │ │ ├── LynxRecorderViewClient.h │ │ │ │ ├── LynxRecorderViewClient.m │ │ │ │ ├── LynxRecorderViewController.h │ │ │ │ ├── LynxRecorderViewController.m │ │ │ │ └── lynx_recorder.js │ │ │ ├── lynx_service/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── devtool/ │ │ │ │ │ ├── LynxDevToolService.h │ │ │ │ │ └── LynxDevToolService.mm │ │ │ │ ├── http/ │ │ │ │ │ ├── LynxHttpService.h │ │ │ │ │ ├── LynxHttpService.m │ │ │ │ │ ├── LynxNSUrlSessionDelegate.h │ │ │ │ │ └── LynxNSUrlSessionDelegate.m │ │ │ │ ├── image/ │ │ │ │ │ ├── LynxImageService.h │ │ │ │ │ └── LynxImageService.m │ │ │ │ └── log/ │ │ │ │ ├── LynxLogService.h │ │ │ │ └── LynxLogService.mm │ │ │ ├── lynx_service_api/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LynxServiceLogProtocol.h │ │ │ │ ├── LynxServiceProtocol.h │ │ │ │ ├── LynxServiceTraceProtocol.h │ │ │ │ ├── LynxServiceTrailProtocol.h │ │ │ │ ├── ServiceAPI.h │ │ │ │ ├── ServiceAPI.m │ │ │ │ └── ServiceLazyLoad.h │ │ │ └── lynx_xelement/ │ │ │ ├── BUILD.gn │ │ │ ├── behavior/ │ │ │ │ ├── LynxUIInputAutoRegistry.h │ │ │ │ ├── LynxUIInputAutoRegistry.m │ │ │ │ ├── LynxUIOverlayAutoRegistry.h │ │ │ │ ├── LynxUIOverlayAutoRegistry.m │ │ │ │ ├── LynxUIRefreshAutoRegistry.h │ │ │ │ ├── LynxUIRefreshAutoRegistry.m │ │ │ │ ├── LynxUISVGAutoRegistry.h │ │ │ │ ├── LynxUISVGAutoRegistry.m │ │ │ │ ├── LynxUITextAreaAutoRegistry.h │ │ │ │ └── LynxUITextAreaAutoRegistry.m │ │ │ ├── input/ │ │ │ │ ├── .clang-format │ │ │ │ ├── LynxUIBaseInput.h │ │ │ │ ├── LynxUIBaseInput.m │ │ │ │ ├── LynxUIBaseInputShadowNode.h │ │ │ │ ├── LynxUIBaseInputShadowNode.m │ │ │ │ ├── LynxUIInput.h │ │ │ │ ├── LynxUIInput.m │ │ │ │ ├── LynxUITextArea.h │ │ │ │ ├── LynxUITextArea.m │ │ │ │ └── key_listener/ │ │ │ │ ├── LynxDialerKeyListener.h │ │ │ │ ├── LynxDialerKeyListener.m │ │ │ │ ├── LynxDigitKeyListener.h │ │ │ │ ├── LynxDigitKeyListener.m │ │ │ │ ├── LynxInputType.h │ │ │ │ ├── LynxKeyListener.h │ │ │ │ ├── LynxNumberKeyListener.h │ │ │ │ ├── LynxNumberKeyListener.m │ │ │ │ ├── LynxTextKeyListener.h │ │ │ │ └── LynxTextKeyListener.m │ │ │ ├── overlay/ │ │ │ │ ├── LynxOverlayContainer.h │ │ │ │ ├── LynxOverlayContainer.m │ │ │ │ ├── LynxOverlayGlobalManager.h │ │ │ │ ├── LynxOverlayGlobalManager.m │ │ │ │ ├── LynxUIOverlay.h │ │ │ │ └── LynxUIOverlay.m │ │ │ ├── refresh/ │ │ │ │ ├── LynxUIRefresh.h │ │ │ │ ├── LynxUIRefresh.m │ │ │ │ ├── LynxUIRefreshHeader.h │ │ │ │ ├── LynxUIRefreshHeader.m │ │ │ │ ├── LynxUIRefreshShadowNode.h │ │ │ │ └── LynxUIRefreshShadowNode.m │ │ │ └── svg/ │ │ │ ├── LynxSVGView.h │ │ │ ├── LynxSVGView.m │ │ │ ├── LynxUISVG.h │ │ │ └── LynxUISVG.m │ │ └── macos/ │ │ ├── BUILD.gn │ │ ├── Resource/ │ │ │ └── Info.plist │ │ ├── common/ │ │ │ ├── BUILD.gn │ │ │ ├── LynxUIRenderer.h │ │ │ ├── LynxUIRenderer.mm │ │ │ ├── vsync_monitor_macos.h │ │ │ └── vsync_monitor_macos.mm │ │ ├── exported_symbols.sym │ │ ├── lynx_devtool/ │ │ │ └── .gitignore │ │ └── package_sdk.py │ ├── embedder/ │ │ ├── BUILD.gn │ │ ├── core/ │ │ │ ├── BUILD.gn │ │ │ ├── lynx_template_renderer.cc │ │ │ ├── lynx_template_renderer.h │ │ │ ├── native_facade_impl.cc │ │ │ ├── native_facade_impl.h │ │ │ ├── performance/ │ │ │ │ ├── generic_info_storage.cc │ │ │ │ ├── generic_info_storage.h │ │ │ │ ├── lynx_event_reporter.cc │ │ │ │ ├── lynx_event_reporter.h │ │ │ │ ├── lynx_event_reporter_observer.h │ │ │ │ ├── performance_controller_impl.cc │ │ │ │ └── performance_controller_impl.h │ │ │ ├── tasm_platform_invoker_impl.cc │ │ │ └── tasm_platform_invoker_impl.h │ │ ├── fetcher/ │ │ │ ├── BUILD.gn │ │ │ ├── lynx_generic_resource_fetcher.cc │ │ │ ├── lynx_generic_resource_fetcher_priv.h │ │ │ ├── lynx_generic_resource_fetcher_unittests.cc │ │ │ ├── lynx_resource_fetcher_holder.cc │ │ │ ├── lynx_resource_fetcher_holder.h │ │ │ ├── lynx_resource_request.cc │ │ │ ├── lynx_resource_request_priv.h │ │ │ ├── lynx_resource_request_unittests.cc │ │ │ ├── lynx_resource_response.cc │ │ │ ├── lynx_resource_response_priv.h │ │ │ └── lynx_resource_response_unittests.cc │ │ ├── lynx_devtool/ │ │ │ ├── BUILD.gn │ │ │ ├── SwitchPersist.mm │ │ │ ├── devtool_env_embedder.cc │ │ │ ├── devtool_env_embedder.h │ │ │ ├── switch_persist.cc │ │ │ ├── switch_persist.h │ │ │ └── switch_persist_win.cc │ │ ├── lynx_env.cc │ │ ├── lynx_env_unittests.cc │ │ ├── lynx_group.cc │ │ ├── lynx_group_priv.h │ │ ├── lynx_group_unittests.cc │ │ ├── lynx_load_meta.cc │ │ ├── lynx_load_meta_priv.h │ │ ├── lynx_load_meta_unittests.cc │ │ ├── lynx_log.cc │ │ ├── lynx_log_unittests.cc │ │ ├── lynx_native_view.cc │ │ ├── lynx_recorder/ │ │ │ ├── BUILD.gn │ │ │ ├── test_bench_action_manager.cc │ │ │ ├── test_bench_action_manager.h │ │ │ ├── test_bench_replay_config.cc │ │ │ ├── test_bench_replay_config.h │ │ │ ├── test_bench_replay_data_module.cc │ │ │ ├── test_bench_replay_data_module.h │ │ │ ├── test_bench_url_analyzer.cc │ │ │ ├── test_bench_url_analyzer.h │ │ │ ├── test_bench_utils.cc │ │ │ └── test_bench_utils.h │ │ ├── lynx_runtime_lifecycle_observer.cc │ │ ├── lynx_runtime_lifecycle_observer_priv.h │ │ ├── lynx_service/ │ │ │ ├── BUILD.gn │ │ │ ├── lynx_event_reporter_service.cc │ │ │ ├── lynx_event_reporter_service_priv.h │ │ │ ├── lynx_http_request.cc │ │ │ ├── lynx_http_request.h │ │ │ ├── lynx_http_request_unittests.cc │ │ │ ├── lynx_http_response.cc │ │ │ ├── lynx_http_response.h │ │ │ ├── lynx_http_response_unittests.cc │ │ │ ├── lynx_http_service.cc │ │ │ ├── lynx_http_service_priv.h │ │ │ ├── lynx_security_service.cc │ │ │ ├── lynx_security_service_priv.h │ │ │ ├── lynx_service_base.h │ │ │ ├── lynx_service_center.cc │ │ │ ├── lynx_service_center_priv.h │ │ │ └── lynx_service_unittests.cc │ │ ├── lynx_template_bundle.cc │ │ ├── lynx_template_bundle_priv.h │ │ ├── lynx_template_bundle_unittests.cc │ │ ├── lynx_template_data.cc │ │ ├── lynx_template_data_priv.h │ │ ├── lynx_template_data_unittests.cc │ │ ├── lynx_trace.cc │ │ ├── lynx_ui_renderer.h │ │ ├── lynx_ui_renderer_mock.cc │ │ ├── lynx_update_meta.cc │ │ ├── lynx_update_meta_priv.h │ │ ├── lynx_update_meta_unittests.cc │ │ ├── lynx_value_unittest.cc │ │ ├── lynx_view.cc │ │ ├── lynx_view_builder.cc │ │ ├── lynx_view_builder_priv.h │ │ ├── lynx_view_builder_unittests.cc │ │ ├── lynx_view_client.cc │ │ ├── lynx_view_client_priv.h │ │ ├── lynx_view_client_unittests.cc │ │ ├── lynx_view_clients.cc │ │ ├── lynx_view_clients.h │ │ ├── lynx_view_priv.h │ │ ├── lynx_view_unittests.cc │ │ ├── lynx_vsync_monitor.cc │ │ ├── lynx_vsync_monitor_priv.h │ │ ├── memory/ │ │ │ └── lynx_memory.cc │ │ ├── module/ │ │ │ ├── BUILD.gn │ │ │ ├── extension_module_factory_impl.cc │ │ │ ├── extension_module_factory_impl.h │ │ │ ├── global_module_registry.cc │ │ │ ├── global_module_registry.h │ │ │ ├── lynx_extension_module.cc │ │ │ ├── lynx_extension_module_priv.h │ │ │ ├── lynx_fetch_module.cc │ │ │ ├── lynx_fetch_module.h │ │ │ ├── lynx_module_factory_napi.cc │ │ │ ├── lynx_module_factory_napi.h │ │ │ ├── lynx_module_manager_napi.cc │ │ │ ├── lynx_module_manager_napi.h │ │ │ ├── lynx_native_module_napi.cc │ │ │ └── lynx_native_module_napi.h │ │ ├── native_view/ │ │ │ ├── lynx_texture_view.cc │ │ │ └── lynx_texture_view.h │ │ ├── plugin/ │ │ │ └── cef/ │ │ │ ├── .gitignore │ │ │ ├── CMakeLists.txt │ │ │ ├── include/ │ │ │ │ └── cef_extension_module_creator.h │ │ │ └── src/ │ │ │ ├── CMakeLists.txt │ │ │ ├── cef_extension_module.cc │ │ │ ├── cef_extension_module.h │ │ │ ├── cef_webview.cc │ │ │ ├── cef_webview.h │ │ │ ├── cef_webview_client.cc │ │ │ ├── cef_webview_client.h │ │ │ ├── cef_webview_constants.h │ │ │ ├── macos/ │ │ │ │ ├── CEFTextInputClientOSRMac.h │ │ │ │ ├── CEFTextInputClientOSRMac.mm │ │ │ │ ├── CEFWebviewClientMac.h │ │ │ │ ├── CEFWebviewClientMac.mm │ │ │ │ ├── CEFWebviewInitializer.mm │ │ │ │ ├── CEFWebviewMac.h │ │ │ │ ├── CEFWebviewMac.mm │ │ │ │ ├── Helper-Info.plist.in │ │ │ │ ├── NSApplication+HandlingSendEvent.h │ │ │ │ ├── NSApplication+HandlingSendEvent.m │ │ │ │ └── process_helper_mac.cc │ │ │ └── win/ │ │ │ ├── cef_webview_client_win.cc │ │ │ ├── cef_webview_client_win.h │ │ │ ├── cef_webview_initializer.cc │ │ │ ├── cef_webview_win.cc │ │ │ ├── cef_webview_win.h │ │ │ ├── dpi_utils_win32.cc │ │ │ ├── dpi_utils_win32.h │ │ │ ├── osr_ime_handler_win.cc │ │ │ └── osr_ime_handler_win.h │ │ ├── public/ │ │ │ ├── capi/ │ │ │ │ ├── lynx_env_capi.h │ │ │ │ ├── lynx_event_reporter_service_capi.h │ │ │ │ ├── lynx_export.h │ │ │ │ ├── lynx_extension_module_capi.h │ │ │ │ ├── lynx_extension_module_types_capi.h │ │ │ │ ├── lynx_generic_resource_fetcher_capi.h │ │ │ │ ├── lynx_group_capi.h │ │ │ │ ├── lynx_http_service_capi.h │ │ │ │ ├── lynx_load_meta_capi.h │ │ │ │ ├── lynx_log_capi.h │ │ │ │ ├── lynx_memory_capi.h │ │ │ │ ├── lynx_native_module_capi.h │ │ │ │ ├── lynx_native_view_capi.h │ │ │ │ ├── lynx_resource_request_capi.h │ │ │ │ ├── lynx_resource_response_capi.h │ │ │ │ ├── lynx_runtime_lifecycle_observer_capi.h │ │ │ │ ├── lynx_security_service_capi.h │ │ │ │ ├── lynx_service_center_capi.h │ │ │ │ ├── lynx_template_bundle_capi.h │ │ │ │ ├── lynx_template_data_capi.h │ │ │ │ ├── lynx_trace_capi.h │ │ │ │ ├── lynx_types.h │ │ │ │ ├── lynx_update_meta_capi.h │ │ │ │ ├── lynx_view_builder_capi.h │ │ │ │ ├── lynx_view_capi.h │ │ │ │ ├── lynx_view_client_capi.h │ │ │ │ ├── lynx_vsync_monitor_capi.h │ │ │ │ └── lynx_windowless_renderer_capi.h │ │ │ ├── lynx_env.h │ │ │ ├── lynx_event_reporter_service.h │ │ │ ├── lynx_extension_module.h │ │ │ ├── lynx_generic_resource_fetcher.h │ │ │ ├── lynx_group.h │ │ │ ├── lynx_http_service.h │ │ │ ├── lynx_load_meta.h │ │ │ ├── lynx_native_module.h │ │ │ ├── lynx_native_view.h │ │ │ ├── lynx_resource_request.h │ │ │ ├── lynx_resource_response.h │ │ │ ├── lynx_runtime_lifecycle_observer.h │ │ │ ├── lynx_security_service.h │ │ │ ├── lynx_service_center.h │ │ │ ├── lynx_template_bundle.h │ │ │ ├── lynx_template_data.h │ │ │ ├── lynx_update_meta.h │ │ │ ├── lynx_value.h │ │ │ ├── lynx_view.h │ │ │ ├── lynx_view_client.h │ │ │ ├── lynx_vsync_monitor.h │ │ │ └── lynx_windowless_renderer.h │ │ ├── resource/ │ │ │ ├── BUILD.gn │ │ │ ├── core_js_loader_manager.cc │ │ │ ├── core_js_loader_manager.h │ │ │ ├── js_source_loader_desktop.cc │ │ │ ├── js_source_loader_desktop.h │ │ │ ├── js_source_loader_desktop.mm │ │ │ ├── lynx_resource_loader_embedder.cc │ │ │ └── lynx_resource_loader_embedder.h │ │ ├── sysinfo_embedder.cc │ │ ├── vsync_monitor_fallback.cc │ │ ├── vsync_monitor_fallback.h │ │ └── windowless/ │ │ ├── BUILD.gn │ │ ├── lynx_ui_renderer_windowless.cc │ │ ├── lynx_ui_renderer_windowless.h │ │ ├── lynx_windowless_renderer.cc │ │ └── lynx_windowless_renderer_priv.h │ ├── harmony/ │ │ ├── .gitignore │ │ ├── .ohpmrc │ │ ├── BUILD.gn │ │ ├── api/ │ │ │ └── lynx_harmony.api │ │ ├── cliff.toml │ │ ├── harmony.gni │ │ ├── lynx_devtool/ │ │ │ ├── .gitignore │ │ │ ├── .ohpmignore │ │ │ ├── BUILD.gn │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build-profile.json5 │ │ │ ├── consumer-rules.txt │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── cpp/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── debug_bridge_harmony.cc │ │ │ │ ├── debug_bridge_harmony.h │ │ │ │ ├── debug_router_wrapper.cc │ │ │ │ ├── debug_router_wrapper.h │ │ │ │ ├── devtool_env_harmony.cc │ │ │ │ ├── devtool_env_harmony.h │ │ │ │ ├── entry.cc │ │ │ │ ├── harmony_global_handler.cc │ │ │ │ ├── harmony_global_handler.h │ │ │ │ ├── harmony_session_handler.cc │ │ │ │ ├── harmony_session_handler.h │ │ │ │ ├── inspector_owner_embedder_harmony.cc │ │ │ │ ├── inspector_owner_embedder_harmony.h │ │ │ │ ├── inspector_owner_harmony.cc │ │ │ │ ├── inspector_owner_harmony.h │ │ │ │ ├── message_handler_harmony.cc │ │ │ │ └── message_handler_harmony.h │ │ │ ├── ets/ │ │ │ │ ├── ConsoleDelegateManager.ets │ │ │ │ ├── DebugRouter.ets │ │ │ │ ├── Index.ets │ │ │ │ ├── LynxDebugBridge.ets │ │ │ │ ├── LynxDevToolEnv.ets │ │ │ │ ├── LynxInspectorOwner.ets │ │ │ │ ├── jsbridge/ │ │ │ │ │ └── LynxWebSocketModule.ets │ │ │ │ ├── logbox/ │ │ │ │ │ └── LogBox.ets │ │ │ │ ├── recorder/ │ │ │ │ │ ├── DataType.ets │ │ │ │ │ ├── LynxRecorderEnv.ets │ │ │ │ │ ├── LynxRecorderView.ets │ │ │ │ │ ├── ReplayDataModule.ets │ │ │ │ │ └── index.ets │ │ │ │ └── types/ │ │ │ │ ├── index.d.ts │ │ │ │ └── oh-package.json5 │ │ │ ├── module.json5 │ │ │ └── resources/ │ │ │ ├── .gitignore │ │ │ └── rawfile/ │ │ │ └── .gitignore │ │ ├── lynx_harmony/ │ │ │ ├── .gitignore │ │ │ ├── .ohpmignore │ │ │ ├── BUILD.gn │ │ │ ├── Index.ets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build-profile.json5 │ │ │ ├── consumer-rules.txt │ │ │ ├── entry.cc │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── cpp/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── animation/ │ │ │ │ │ ├── animation_info.cc │ │ │ │ │ ├── animation_info.h │ │ │ │ │ ├── keyframe_animator.cc │ │ │ │ │ ├── keyframe_animator.h │ │ │ │ │ ├── keyframe_manager.cc │ │ │ │ │ └── keyframe_manager.h │ │ │ │ ├── base/ │ │ │ │ │ ├── base_trace_backend.cc │ │ │ │ │ └── base_trace_backend.h │ │ │ │ ├── event/ │ │ │ │ │ ├── custom_event.h │ │ │ │ │ ├── event_dispatcher.cc │ │ │ │ │ ├── event_dispatcher.h │ │ │ │ │ ├── event_emitter.cc │ │ │ │ │ ├── event_emitter.h │ │ │ │ │ ├── event_target.h │ │ │ │ │ ├── gesture_event.h │ │ │ │ │ ├── lynx_event.h │ │ │ │ │ ├── touch_event.cc │ │ │ │ │ └── touch_event.h │ │ │ │ ├── font/ │ │ │ │ │ ├── font_face_manager.cc │ │ │ │ │ ├── font_face_manager.h │ │ │ │ │ ├── system_font_manager.cc │ │ │ │ │ └── system_font_manager.h │ │ │ │ ├── gesture/ │ │ │ │ │ ├── arena/ │ │ │ │ │ │ ├── gesture_arena_manager.cc │ │ │ │ │ │ └── gesture_arena_manager.h │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── gesture_extra_bundle.cc │ │ │ │ │ │ └── gesture_extra_bundle.h │ │ │ │ │ ├── detector/ │ │ │ │ │ │ ├── gesture_detector_manager.cc │ │ │ │ │ │ └── gesture_detector_manager.h │ │ │ │ │ ├── gesture_arena_member.h │ │ │ │ │ ├── gesture_handler_delegate.h │ │ │ │ │ └── handler/ │ │ │ │ │ ├── base_gesture_handler.cc │ │ │ │ │ ├── base_gesture_handler.h │ │ │ │ │ ├── default_gesture_handler.cc │ │ │ │ │ ├── default_gesture_handler.h │ │ │ │ │ ├── fling_gesture_handler.cc │ │ │ │ │ ├── fling_gesture_handler.h │ │ │ │ │ ├── fling_scroller.cc │ │ │ │ │ ├── fling_scroller.h │ │ │ │ │ ├── gesture_handler_trigger.cc │ │ │ │ │ ├── gesture_handler_trigger.h │ │ │ │ │ ├── longpress_gesture_handler.cc │ │ │ │ │ ├── longpress_gesture_handler.h │ │ │ │ │ ├── native_gesture_handler.cc │ │ │ │ │ ├── native_gesture_handler.h │ │ │ │ │ ├── pan_gesture_handler.cc │ │ │ │ │ ├── pan_gesture_handler.h │ │ │ │ │ ├── tap_gesture_handler.cc │ │ │ │ │ └── tap_gesture_handler.h │ │ │ │ ├── lynx_context.cc │ │ │ │ ├── lynx_context.h │ │ │ │ ├── lynx_napi_export.h │ │ │ │ ├── lynx_runtime_wrapper.cc │ │ │ │ ├── lynx_runtime_wrapper.h │ │ │ │ ├── lynx_template_renderer.cc │ │ │ │ ├── lynx_template_renderer.h │ │ │ │ ├── lynx_white_board_harmony.cc │ │ │ │ ├── lynx_white_board_harmony.h │ │ │ │ ├── module/ │ │ │ │ │ ├── lynx_exposure_module.cc │ │ │ │ │ ├── lynx_exposure_module.h │ │ │ │ │ ├── lynx_intersection_observer_module.cc │ │ │ │ │ ├── lynx_intersection_observer_module.h │ │ │ │ │ ├── lynx_text_info_module.cc │ │ │ │ │ ├── lynx_text_info_module.h │ │ │ │ │ ├── lynx_ui_method_module.cc │ │ │ │ │ ├── lynx_ui_method_module.h │ │ │ │ │ ├── module_factory_capi.cc │ │ │ │ │ ├── module_factory_capi.h │ │ │ │ │ ├── native_module_capi.cc │ │ │ │ │ └── native_module_capi.h │ │ │ │ ├── public/ │ │ │ │ │ ├── image_service.h │ │ │ │ │ ├── pub_lynx_context.cc │ │ │ │ │ ├── pub_lynx_context.h │ │ │ │ │ ├── pub_lynx_resource_loader_harmony.cc │ │ │ │ │ ├── pub_lynx_resource_loader_harmony.h │ │ │ │ │ ├── pub_prop_bundle_harmony.cc │ │ │ │ │ ├── pub_prop_bundle_harmony.h │ │ │ │ │ ├── pub_shadow_node_owner.cc │ │ │ │ │ ├── pub_shadow_node_owner.h │ │ │ │ │ ├── pub_ui_owner.cc │ │ │ │ │ └── pub_ui_owner.h │ │ │ │ ├── shadow_node/ │ │ │ │ │ ├── base_text_shadow_node.cc │ │ │ │ │ ├── base_text_shadow_node.h │ │ │ │ │ ├── image_shadow_node.cc │ │ │ │ │ ├── image_shadow_node.h │ │ │ │ │ ├── inline_placeholder_shadow_node.cc │ │ │ │ │ ├── inline_placeholder_shadow_node.h │ │ │ │ │ ├── inline_text_shadow_node.cc │ │ │ │ │ ├── inline_text_shadow_node.h │ │ │ │ │ ├── inline_truncation_shadow_node.cc │ │ │ │ │ ├── inline_truncation_shadow_node.h │ │ │ │ │ ├── js_shadow_node.cc │ │ │ │ │ ├── js_shadow_node.h │ │ │ │ │ ├── measure_mode.h │ │ │ │ │ ├── raw_text_shadow_node.cc │ │ │ │ │ ├── raw_text_shadow_node.h │ │ │ │ │ ├── shadow_node.cc │ │ │ │ │ ├── shadow_node.h │ │ │ │ │ ├── shadow_node_owner.cc │ │ │ │ │ ├── shadow_node_owner.h │ │ │ │ │ ├── text/ │ │ │ │ │ │ ├── text_attributes.h │ │ │ │ │ │ ├── text_measure_cache.h │ │ │ │ │ │ └── text_measure_cache_key.h │ │ │ │ │ ├── text_shadow_node.cc │ │ │ │ │ └── text_shadow_node.h │ │ │ │ ├── text/ │ │ │ │ │ ├── font_collection_harmony.h │ │ │ │ │ ├── font_metrics_harmony.h │ │ │ │ │ ├── line_harmony.h │ │ │ │ │ ├── paragraph_builder_harmony.cc │ │ │ │ │ ├── paragraph_builder_harmony.h │ │ │ │ │ ├── paragraph_content.h │ │ │ │ │ ├── paragraph_harmony.cc │ │ │ │ │ ├── paragraph_harmony.h │ │ │ │ │ ├── shadow_layer_harmony.h │ │ │ │ │ ├── style_harmony.cc │ │ │ │ │ ├── style_harmony.h │ │ │ │ │ ├── text_event_target.cc │ │ │ │ │ ├── text_event_target.h │ │ │ │ │ └── utils/ │ │ │ │ │ ├── text_utils.cc │ │ │ │ │ ├── text_utils.h │ │ │ │ │ ├── unicode_decode_utils.cc │ │ │ │ │ └── unicode_decode_utils.h │ │ │ │ └── ui/ │ │ │ │ ├── background/ │ │ │ │ │ ├── background_conic_gradient_layer.cc │ │ │ │ │ ├── background_conic_gradient_layer.h │ │ │ │ │ ├── background_drawable.cc │ │ │ │ │ ├── background_drawable.h │ │ │ │ │ ├── background_gradient_layer.cc │ │ │ │ │ ├── background_gradient_layer.h │ │ │ │ │ ├── background_image_layer.cc │ │ │ │ │ ├── background_image_layer.h │ │ │ │ │ ├── background_layer.cc │ │ │ │ │ ├── background_layer.h │ │ │ │ │ ├── background_linear_gradient_layer.cc │ │ │ │ │ ├── background_linear_gradient_layer.h │ │ │ │ │ ├── background_none_layer.cc │ │ │ │ │ ├── background_none_layer.h │ │ │ │ │ ├── background_radial_gradient_layer.cc │ │ │ │ │ ├── background_radial_gradient_layer.h │ │ │ │ │ ├── box_shadow_layer.cc │ │ │ │ │ ├── box_shadow_layer.h │ │ │ │ │ ├── layer_manager.cc │ │ │ │ │ └── layer_manager.h │ │ │ │ ├── base/ │ │ │ │ │ ├── lynx_base_image.cc │ │ │ │ │ ├── lynx_base_image.h │ │ │ │ │ ├── lynx_image_config.cc │ │ │ │ │ ├── lynx_image_config.h │ │ │ │ │ ├── lynx_image_constants.h │ │ │ │ │ ├── lynx_image_effect_processor.cc │ │ │ │ │ ├── lynx_image_effect_processor.h │ │ │ │ │ ├── lynx_image_helper.cc │ │ │ │ │ ├── lynx_image_helper.h │ │ │ │ │ ├── lynx_pixel_map.cc │ │ │ │ │ ├── lynx_pixel_map.h │ │ │ │ │ ├── native_node_content.cc │ │ │ │ │ ├── native_node_content.h │ │ │ │ │ ├── node_manager.cc │ │ │ │ │ ├── node_manager.h │ │ │ │ │ ├── shader_effect.cc │ │ │ │ │ └── shader_effect.h │ │ │ │ ├── image_drawable.cc │ │ │ │ ├── image_drawable.h │ │ │ │ ├── js_ui_base.cc │ │ │ │ ├── js_ui_base.h │ │ │ │ ├── scroll/ │ │ │ │ │ ├── base/ │ │ │ │ │ │ ├── lynx_base_scroll_view.cc │ │ │ │ │ │ ├── lynx_base_scroll_view.h │ │ │ │ │ │ ├── lynx_base_scroll_view_auto.cc │ │ │ │ │ │ ├── lynx_base_scroll_view_auto.h │ │ │ │ │ │ ├── lynx_base_scroll_view_auto_scroller.cc │ │ │ │ │ │ ├── lynx_base_scroll_view_auto_scroller.h │ │ │ │ │ │ ├── lynx_base_scroll_view_fundamental.cc │ │ │ │ │ │ ├── lynx_base_scroll_view_fundamental.h │ │ │ │ │ │ ├── lynx_base_scroll_view_horizontal.cc │ │ │ │ │ │ ├── lynx_base_scroll_view_horizontal.h │ │ │ │ │ │ ├── lynx_base_scroll_view_nested.cc │ │ │ │ │ │ ├── lynx_base_scroll_view_nested.h │ │ │ │ │ │ ├── lynx_base_scroll_view_vertical.cc │ │ │ │ │ │ └── lynx_base_scroll_view_vertical.h │ │ │ │ │ ├── lynx_ui_scroll_view.cc │ │ │ │ │ ├── lynx_ui_scroll_view.h │ │ │ │ │ ├── lynx_ui_scroll_view_internal.cc │ │ │ │ │ └── lynx_ui_scroll_view_internal.h │ │ │ │ ├── ui_base.cc │ │ │ │ ├── ui_base.h │ │ │ │ ├── ui_bounce.cc │ │ │ │ ├── ui_bounce.h │ │ │ │ ├── ui_component.cc │ │ │ │ ├── ui_component.h │ │ │ │ ├── ui_exposure.cc │ │ │ │ ├── ui_exposure.h │ │ │ │ ├── ui_flatten_image.cc │ │ │ │ ├── ui_flatten_image.h │ │ │ │ ├── ui_image.cc │ │ │ │ ├── ui_image.h │ │ │ │ ├── ui_intersection_observer.cc │ │ │ │ ├── ui_intersection_observer.h │ │ │ │ ├── ui_list.cc │ │ │ │ ├── ui_list.h │ │ │ │ ├── ui_new_image.cc │ │ │ │ ├── ui_new_image.h │ │ │ │ ├── ui_observer.cc │ │ │ │ ├── ui_observer.h │ │ │ │ ├── ui_owner.cc │ │ │ │ ├── ui_owner.h │ │ │ │ ├── ui_root.cc │ │ │ │ ├── ui_root.h │ │ │ │ ├── ui_scroll.cc │ │ │ │ ├── ui_scroll.h │ │ │ │ ├── ui_text.cc │ │ │ │ ├── ui_text.h │ │ │ │ ├── ui_view.cc │ │ │ │ ├── ui_view.h │ │ │ │ └── utils/ │ │ │ │ ├── auto_scroller.cc │ │ │ │ ├── auto_scroller.h │ │ │ │ ├── base_scroll_container.cc │ │ │ │ ├── base_scroll_container.h │ │ │ │ ├── basic_shape.cc │ │ │ │ ├── basic_shape.h │ │ │ │ ├── border_radius.cc │ │ │ │ ├── border_radius.h │ │ │ │ ├── lynx_ui_helper.cc │ │ │ │ ├── lynx_ui_helper.h │ │ │ │ ├── lynx_unit_utils.cc │ │ │ │ ├── lynx_unit_utils.h │ │ │ │ ├── platform_length.cc │ │ │ │ ├── platform_length.h │ │ │ │ ├── svg_path_utils.h │ │ │ │ ├── transform.cc │ │ │ │ ├── transform.h │ │ │ │ └── ui_observer_callback.h │ │ │ ├── ets/ │ │ │ │ ├── Index.ets │ │ │ │ ├── base/ │ │ │ │ │ ├── LLog.ets │ │ │ │ │ ├── LynxBaseTraceService.ets │ │ │ │ │ ├── TraceController.ets │ │ │ │ │ ├── TraceEvent.ets │ │ │ │ │ ├── TraceEventDef.ets │ │ │ │ │ └── memory/ │ │ │ │ │ ├── MemoryPressureCallbackDispatcher.ets │ │ │ │ │ └── MemoryPressureLevel.ets │ │ │ │ ├── devtool_wrapper/ │ │ │ │ │ ├── ILogBox.ets │ │ │ │ │ ├── LynxBaseInspectorController.ets │ │ │ │ │ ├── LynxBaseInspectorOwner.ets │ │ │ │ │ ├── LynxDebugger.ets │ │ │ │ │ ├── LynxDevTool.ets │ │ │ │ │ ├── LynxInspectorConsoleDelegate.ets │ │ │ │ │ └── MessageHandler.ets │ │ │ │ ├── extension/ │ │ │ │ │ └── LynxExtensionModule.ets │ │ │ │ ├── jsbridge/ │ │ │ │ │ ├── LynxAccessibilityModule.ets │ │ │ │ │ ├── LynxBackgroundRuntimeOptions.ets │ │ │ │ │ ├── LynxGroup.ets │ │ │ │ │ ├── LynxModule.ets │ │ │ │ │ ├── LynxModuleManager.ets │ │ │ │ │ ├── LynxResourceModule.ets │ │ │ │ │ ├── LynxSetModule.ets │ │ │ │ │ ├── RuntimeLifecycleListener.ets │ │ │ │ │ ├── Util.ts │ │ │ │ │ └── network/ │ │ │ │ │ ├── LynxFetchModule.ets │ │ │ │ │ ├── LynxHttpRequest.ets │ │ │ │ │ └── LynxHttpResponse.ets │ │ │ │ ├── lepus/ │ │ │ │ │ └── LynxLepusModule.ets │ │ │ │ ├── provider/ │ │ │ │ │ ├── LynxGenericResourceFetcher.ets │ │ │ │ │ ├── LynxMediaResourceFetcher.ets │ │ │ │ │ ├── LynxResourceProvider.ets │ │ │ │ │ ├── LynxResourceRequest.ets │ │ │ │ │ ├── LynxStreamDelegate.ets │ │ │ │ │ └── LynxTemplateResourceFetcher.ets │ │ │ │ └── tasm/ │ │ │ │ ├── DisplayInfo.ets │ │ │ │ ├── IContext.ets │ │ │ │ ├── LynxBackgroundRuntime.ets │ │ │ │ ├── LynxContext.ets │ │ │ │ ├── LynxEnv.ets │ │ │ │ ├── LynxEnvKey.ets │ │ │ │ ├── LynxError.ets │ │ │ │ ├── LynxErrorCodeLegacy.ets │ │ │ │ ├── LynxLoadOption.ets │ │ │ │ ├── LynxTemplateRenderer.ets │ │ │ │ ├── LynxTrailHub.ets │ │ │ │ ├── LynxUIRenderer.ets │ │ │ │ ├── LynxUIRendererCreator.ets │ │ │ │ ├── LynxView.ets │ │ │ │ ├── LynxViewClient.ets │ │ │ │ ├── MetaData.ets │ │ │ │ ├── SessionStorage.ets │ │ │ │ ├── TemplateBundle.ets │ │ │ │ ├── TemplateBundleOption.ets │ │ │ │ ├── behavior/ │ │ │ │ │ ├── Behavior.ets │ │ │ │ │ ├── CAPIView.ets │ │ │ │ │ ├── HarmonyUIRenderer.ets │ │ │ │ │ ├── LynxScreenMetrics.ets │ │ │ │ │ ├── ShadowNodeOwner.ets │ │ │ │ │ ├── UIOwner.ets │ │ │ │ │ ├── Util.ts │ │ │ │ │ ├── shadow/ │ │ │ │ │ │ └── ShadowNode.ets │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── EventHandler.ets │ │ │ │ │ │ ├── UIBase.ets │ │ │ │ │ │ └── UIGroup.ets │ │ │ │ │ └── util/ │ │ │ │ │ ├── LynxConstants.ets │ │ │ │ │ └── LynxUIMethodConstants.ets │ │ │ │ ├── eventreport/ │ │ │ │ │ ├── ILynxEventReportObserver.ets │ │ │ │ │ ├── LynxEventReporter.ets │ │ │ │ │ └── LynxInfoReporterHelper.ets │ │ │ │ ├── gen/ │ │ │ │ │ └── .gitignore │ │ │ │ ├── image/ │ │ │ │ │ ├── LynxImageConfig.ets │ │ │ │ │ └── LynxImageLoadInfo.ets │ │ │ │ ├── performance/ │ │ │ │ │ ├── DrawEndTimingFrameCallback.ets │ │ │ │ │ ├── IPerformanceObserver.ets │ │ │ │ │ ├── PerformanceController.ets │ │ │ │ │ ├── fluency/ │ │ │ │ │ │ ├── FluencyTraceHelper.ets │ │ │ │ │ │ ├── LynxFpsRecord.ets │ │ │ │ │ │ └── LynxFpsTracer.ets │ │ │ │ │ └── timing/ │ │ │ │ │ ├── ITimingCollector.ets │ │ │ │ │ ├── LynxExtraTiming.ets │ │ │ │ │ ├── TimingConstants.ets │ │ │ │ │ └── TimingOption.ets │ │ │ │ ├── service/ │ │ │ │ │ ├── ILynxDevToolService.ets │ │ │ │ │ ├── ILynxEventReporterService.ets │ │ │ │ │ ├── ILynxExtensionService.ets │ │ │ │ │ ├── ILynxHttpService.ets │ │ │ │ │ ├── ILynxImageService.ets │ │ │ │ │ ├── ILynxSecurityService.ets │ │ │ │ │ ├── ILynxTrailService.ets │ │ │ │ │ ├── IServiceProvider.ets │ │ │ │ │ ├── Index.ets │ │ │ │ │ └── LynxServiceCenter.ets │ │ │ │ └── types/ │ │ │ │ └── liblynx/ │ │ │ │ ├── index.d.ts │ │ │ │ └── oh-package.json5 │ │ │ ├── module.json5 │ │ │ └── resources/ │ │ │ ├── base/ │ │ │ │ ├── element/ │ │ │ │ │ ├── color.json │ │ │ │ │ └── string.json │ │ │ │ └── profile/ │ │ │ │ └── main_pages.json │ │ │ └── rawfile/ │ │ │ └── .gitignore │ │ ├── lynx_services/ │ │ │ ├── lynx_devtool_service/ │ │ │ │ ├── .gitignore │ │ │ │ ├── Index.ets │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── build-profile.json5 │ │ │ │ ├── consumer-rules.txt │ │ │ │ ├── hvigorfile.ts │ │ │ │ ├── obfuscation-rules.txt │ │ │ │ ├── oh-package.json5 │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── ets/ │ │ │ │ │ └── LynxDevToolService.ets │ │ │ │ └── module.json5 │ │ │ ├── lynx_http_service/ │ │ │ │ ├── .gitignore │ │ │ │ ├── Index.ets │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── build-profile.json5 │ │ │ │ ├── consumer-rules.txt │ │ │ │ ├── hvigorfile.ts │ │ │ │ ├── obfuscation-rules.txt │ │ │ │ ├── oh-package.json5 │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── ets/ │ │ │ │ │ └── LynxHttpService.ets │ │ │ │ └── module.json5 │ │ │ ├── lynx_image_service/ │ │ │ │ ├── .gitignore │ │ │ │ ├── BUILD.gn │ │ │ │ ├── Index.ets │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── build-profile.json5 │ │ │ │ ├── consumer-rules.txt │ │ │ │ ├── hvigorfile.ts │ │ │ │ ├── obfuscation-rules.txt │ │ │ │ ├── oh-package.json5 │ │ │ │ ├── source.gni │ │ │ │ └── src/ │ │ │ │ └── main/ │ │ │ │ ├── cpp/ │ │ │ │ │ ├── entry.cc │ │ │ │ │ ├── image_service_harmony.cc │ │ │ │ │ ├── image_service_harmony.h │ │ │ │ │ ├── image_service_node.cc │ │ │ │ │ ├── image_service_node.h │ │ │ │ │ ├── image_transform.cc │ │ │ │ │ ├── image_transform.h │ │ │ │ │ └── types/ │ │ │ │ │ └── liblynx_image_service/ │ │ │ │ │ ├── index.d.ts │ │ │ │ │ └── oh-package.json5 │ │ │ │ ├── ets/ │ │ │ │ │ └── LynxImageService.ets │ │ │ │ └── module.json5 │ │ │ └── lynx_log_service/ │ │ │ ├── .gitignore │ │ │ ├── Index.ets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build-profile.json5 │ │ │ ├── consumer-rules.txt │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── ets/ │ │ │ │ └── LynxLogService.ets │ │ │ └── module.json5 │ │ ├── lynx_xelement/ │ │ │ ├── BUILD.gn │ │ │ ├── input/ │ │ │ │ ├── input_shadow_node.cc │ │ │ │ ├── input_shadow_node.h │ │ │ │ ├── ui_base_input.cc │ │ │ │ ├── ui_base_input.h │ │ │ │ ├── ui_input.cc │ │ │ │ ├── ui_input.h │ │ │ │ ├── ui_textarea.cc │ │ │ │ └── ui_textarea.h │ │ │ ├── overlay/ │ │ │ │ ├── overlay_shadow_node.cc │ │ │ │ ├── overlay_shadow_node.h │ │ │ │ ├── ui_overlay.cc │ │ │ │ └── ui_overlay.h │ │ │ ├── refresh/ │ │ │ │ ├── refresh_shadow_node.cc │ │ │ │ ├── refresh_shadow_node.h │ │ │ │ ├── ui_refresh.cc │ │ │ │ └── ui_refresh.h │ │ │ ├── registry.cc │ │ │ ├── registry.h │ │ │ └── svg/ │ │ │ ├── .gitignore │ │ │ ├── Index.ets │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build-profile.json5 │ │ │ ├── consumer-rules.txt │ │ │ ├── hvigorfile.ts │ │ │ ├── obfuscation-rules.txt │ │ │ ├── oh-package.json5 │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── ets/ │ │ │ │ └── UISVG.ets │ │ │ └── module.json5 │ │ └── oh-package.json5 │ └── windows/ │ ├── BUILD.gn │ ├── common/ │ │ ├── BUILD.gn │ │ ├── lynx_ui_renderer_win.cc │ │ └── lynx_ui_renderer_win.h │ └── package_sdk.py ├── pnpm-workspace.yaml ├── service_api/ │ ├── BUILD.gn │ ├── service_api.cc │ ├── service_api.gni │ ├── service_api.h │ ├── service_api_services.h │ ├── service_api_utils.h │ ├── service_lazy_load.h │ ├── services/ │ │ └── README.md │ └── testing/ │ ├── BUILD.gn │ ├── a/ │ │ └── a_service.h │ ├── b/ │ │ └── b_service.h │ └── service_api_test.cpp ├── service_impls/ │ ├── README.md │ └── testing/ │ ├── a/ │ │ ├── BUILD.gn │ │ └── a_service_impl.cc │ └── b/ │ ├── BUILD.gn │ └── b_service_impl.cc ├── testing/ │ ├── BUILD.gn │ ├── README.md │ ├── README_UT.md │ ├── integration_test/ │ │ ├── ENV_SETUP.md │ │ ├── README.md │ │ ├── demo_pages/ │ │ │ ├── .gitignore │ │ │ ├── build_and_copy.py │ │ │ ├── event/ │ │ │ │ ├── index.css │ │ │ │ ├── index.tsx │ │ │ │ ├── lynx.config.mjs │ │ │ │ └── package.json │ │ │ ├── package.json │ │ │ └── pnpm-workspace.yaml │ │ └── test_script/ │ │ ├── .gitignore │ │ ├── android_test/ │ │ │ ├── __init__.py │ │ │ └── core.py │ │ ├── case_sets/ │ │ │ └── core/ │ │ │ ├── Event.py │ │ │ ├── Image.py │ │ │ ├── LayoutLinear.py │ │ │ ├── ListBase.py │ │ │ ├── TextEvent.py │ │ │ ├── __init__.py │ │ │ └── runner.py │ │ ├── clean_files.py │ │ ├── ios_test/ │ │ │ ├── __init__.py │ │ │ └── core.py │ │ ├── lib/ │ │ │ ├── android/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app.py │ │ │ │ └── test.py │ │ │ ├── common/ │ │ │ │ └── utils.py │ │ │ ├── ios/ │ │ │ │ ├── __init__.py │ │ │ │ ├── app.py │ │ │ │ └── test.py │ │ │ └── test_runner/ │ │ │ ├── __init__.py │ │ │ ├── case_set.py │ │ │ ├── mixin/ │ │ │ │ ├── img_diff_mixin.py │ │ │ │ ├── report_mixin.py │ │ │ │ └── result_mixin.py │ │ │ ├── plugins/ │ │ │ │ ├── basic_plugin.py │ │ │ │ └── devtool_connect_plugin.py │ │ │ ├── test_runner.py │ │ │ ├── testcase.py │ │ │ ├── testcase_check_image.py │ │ │ ├── testcase_check_result.py │ │ │ └── testcase_custom.py │ │ ├── manage.py │ │ ├── package.json │ │ ├── requirements.in │ │ ├── requirements.txt │ │ └── settings.py │ ├── lynx/ │ │ ├── BUILD.gn │ │ └── tasm/ │ │ └── databinding/ │ │ ├── data_update_replayer.cc │ │ ├── data_update_replayer.h │ │ ├── databinding_test.cc │ │ ├── databinding_test.h │ │ ├── element_dump_helper.cc │ │ ├── element_dump_helper.h │ │ ├── mock_replayer_component_loader.cc │ │ └── mock_replayer_component_loader.h │ ├── lynx_devtool/ │ │ └── BUILD.gn │ ├── telemetry/ │ │ ├── BUILD.gn │ │ ├── base/ │ │ │ ├── BUILD.gn │ │ │ ├── array_based_flat_map_benchmark.cc │ │ │ ├── linked_hash_map_benchmark.cc │ │ │ ├── message_loop_benchmark_ci.cc │ │ │ ├── vector_benchmark.cc │ │ │ └── vector_benchmark_ci.cc │ │ └── lepus/ │ │ ├── BUILD.gn │ │ ├── big_object.js │ │ ├── leak_objects.js │ │ ├── lepus_benchmark.cc │ │ ├── lepus_heap_sensitive_benchmark.cc │ │ ├── lepus_js_array_snippet_benchmark.cc │ │ └── lepus_js_snippet_benchmark.cc │ ├── test.gni │ └── utils/ │ ├── BUILD.gn │ ├── gmock_main.cc │ ├── gtest_custom_init.cc │ ├── gtest_main.cc │ ├── make_js_runtime.cc │ └── make_js_runtime.h ├── third_party/ │ ├── NativeScript/ │ │ ├── BUILD.gn │ │ └── LICENSE │ ├── aes/ │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ ├── aes.cc │ │ └── aes.h │ ├── binding/ │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ ├── README.md │ │ ├── common/ │ │ │ ├── base.cc │ │ │ ├── base.h │ │ │ ├── common.gni │ │ │ ├── env.cc │ │ │ ├── env.h │ │ │ ├── object.cc │ │ │ ├── object.h │ │ │ ├── object_ref.cc │ │ │ ├── object_ref.h │ │ │ ├── value.cc │ │ │ ├── value.h │ │ │ └── value_to_json.cc │ │ ├── gen_test/ │ │ │ ├── BUILD.gn │ │ │ ├── binding_generator_unittest.cc │ │ │ ├── jsbridge/ │ │ │ │ └── bindings/ │ │ │ │ └── gen_test/ │ │ │ │ ├── napi_async_object.cc │ │ │ │ ├── napi_async_object.h │ │ │ │ ├── napi_gen_test_command_buffer.cc │ │ │ │ ├── napi_gen_test_command_buffer.h │ │ │ │ ├── napi_gen_test_command_buffer_gen.cc │ │ │ │ ├── napi_test_context.cc │ │ │ │ ├── napi_test_context.h │ │ │ │ ├── napi_test_element.cc │ │ │ │ ├── napi_test_element.h │ │ │ │ ├── testContext.ts │ │ │ │ ├── test_async_object.idl │ │ │ │ ├── test_context.idl │ │ │ │ └── test_element.idl │ │ │ ├── test_async_object.h │ │ │ ├── test_context.cc │ │ │ ├── test_context.h │ │ │ ├── test_element.h │ │ │ ├── test_module.cc │ │ │ └── test_module.h │ │ ├── idl-codegen/ │ │ │ ├── .gitignore │ │ │ ├── IDLExtendedAttributes.txt │ │ │ ├── README.md │ │ │ ├── scripts/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── aggregate_generated_bindings.py │ │ │ │ ├── base/ │ │ │ │ │ ├── blinkbuild/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── name_style_converter.py │ │ │ │ │ └── json5_generator.py │ │ │ │ ├── bind_gen/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── blink_v8_bridge.py │ │ │ │ │ ├── callback_function.py │ │ │ │ │ ├── callback_interface.py │ │ │ │ │ ├── code_node.py │ │ │ │ │ ├── code_node_cxx.py │ │ │ │ │ ├── code_node_cxx_test.py │ │ │ │ │ ├── code_node_test.py │ │ │ │ │ ├── codegen_accumulator.py │ │ │ │ │ ├── codegen_context.py │ │ │ │ │ ├── codegen_expr.py │ │ │ │ │ ├── codegen_format.py │ │ │ │ │ ├── codegen_utils.py │ │ │ │ │ ├── dictionary.py │ │ │ │ │ ├── enumeration.py │ │ │ │ │ ├── interface.py │ │ │ │ │ ├── mako_renderer.py │ │ │ │ │ ├── name_style.py │ │ │ │ │ ├── namespace.py │ │ │ │ │ ├── package_initializer.py │ │ │ │ │ ├── path_manager.py │ │ │ │ │ ├── style_format.py │ │ │ │ │ ├── task_queue.py │ │ │ │ │ └── union.py │ │ │ │ ├── blink_idl_lexer.py │ │ │ │ ├── blink_idl_parser.py │ │ │ │ ├── blink_idl_parser_test.py │ │ │ │ ├── build_web_idl_database.py │ │ │ │ ├── build_web_idl_database.pydeps │ │ │ │ ├── code_generator.py │ │ │ │ ├── code_generator_napi.py │ │ │ │ ├── collect_idl_files.py │ │ │ │ ├── collect_idl_files.pydeps │ │ │ │ ├── compute_global_objects.py │ │ │ │ ├── compute_interfaces_info_individual.py │ │ │ │ ├── compute_interfaces_info_overall.py │ │ │ │ ├── generate_bindings.py │ │ │ │ ├── generate_bindings.pydeps │ │ │ │ ├── generate_event_interfaces.py │ │ │ │ ├── generate_global_constructors.py │ │ │ │ ├── generate_init_partial_interfaces.py │ │ │ │ ├── generate_origin_trial_features.py │ │ │ │ ├── generate_v8_context_snapshot_external_references.py │ │ │ │ ├── idl_compiler.py │ │ │ │ ├── idl_definitions.py │ │ │ │ ├── idl_definitions_test.py │ │ │ │ ├── idl_parser/ │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── PRESUBMIT.py │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── idl_lexer.py │ │ │ │ │ ├── idl_lexer_test.py │ │ │ │ │ ├── idl_node.py │ │ │ │ │ ├── idl_parser.py │ │ │ │ │ ├── idl_parser_test.py │ │ │ │ │ ├── run_tests.py │ │ │ │ │ ├── test_lexer/ │ │ │ │ │ │ ├── keywords.in │ │ │ │ │ │ └── values.in │ │ │ │ │ └── test_parser/ │ │ │ │ │ ├── callback_web.idl │ │ │ │ │ ├── dictionary_web.idl │ │ │ │ │ ├── interface_web.idl │ │ │ │ │ ├── namespace_web.idl │ │ │ │ │ └── typedef_web.idl │ │ │ │ ├── idl_reader.py │ │ │ │ ├── idl_types.py │ │ │ │ ├── idl_types_test.py │ │ │ │ ├── idl_validator.py │ │ │ │ ├── interface_dependency_resolver.py │ │ │ │ ├── known_modules.py │ │ │ │ ├── napi_attributes.py │ │ │ │ ├── napi_callback_function.py │ │ │ │ ├── napi_dictionary.py │ │ │ │ ├── napi_globals.py │ │ │ │ ├── napi_interface.py │ │ │ │ ├── napi_methods.py │ │ │ │ ├── napi_types.py │ │ │ │ ├── napi_utilities.py │ │ │ │ ├── overload_set_algorithm.py │ │ │ │ ├── overload_set_algorithm_test.py │ │ │ │ ├── scripts.gni │ │ │ │ ├── utilities.py │ │ │ │ └── web_idl/ │ │ │ │ ├── __init__.py │ │ │ │ ├── argument.py │ │ │ │ ├── ast_group.py │ │ │ │ ├── attribute.py │ │ │ │ ├── callback_function.py │ │ │ │ ├── callback_interface.py │ │ │ │ ├── code_generator_info.py │ │ │ │ ├── composition_parts.py │ │ │ │ ├── constant.py │ │ │ │ ├── constructor.py │ │ │ │ ├── database.py │ │ │ │ ├── database_builder.py │ │ │ │ ├── dictionary.py │ │ │ │ ├── enumeration.py │ │ │ │ ├── exposure.py │ │ │ │ ├── extended_attribute.py │ │ │ │ ├── extended_attribute_test.py │ │ │ │ ├── file_io.py │ │ │ │ ├── function_like.py │ │ │ │ ├── idl_compiler.py │ │ │ │ ├── idl_type.py │ │ │ │ ├── idl_type_test.py │ │ │ │ ├── includes.py │ │ │ │ ├── interface.py │ │ │ │ ├── ir_builder.py │ │ │ │ ├── ir_map.py │ │ │ │ ├── literal_constant.py │ │ │ │ ├── make_copy.py │ │ │ │ ├── make_copy_test.py │ │ │ │ ├── namespace.py │ │ │ │ ├── operation.py │ │ │ │ ├── reference.py │ │ │ │ ├── runtime_enabled_features.py │ │ │ │ ├── typedef.py │ │ │ │ ├── union.py │ │ │ │ ├── user_defined_type.py │ │ │ │ └── validator.py │ │ │ ├── templates/ │ │ │ │ ├── lynx_copyright_block.txt │ │ │ │ ├── lynx_copyright_block_2024.txt │ │ │ │ ├── lynx_copyright_block_js.txt │ │ │ │ ├── macros.tmpl │ │ │ │ ├── napi_callback_function.cc.tmpl │ │ │ │ ├── napi_callback_function.h.tmpl │ │ │ │ ├── napi_command_buffer.cc.tmpl │ │ │ │ ├── napi_command_buffer.h.tmpl │ │ │ │ ├── napi_dictionary.cc.tmpl │ │ │ │ ├── napi_dictionary.h.tmpl │ │ │ │ ├── napi_interface.cc.tmpl │ │ │ │ ├── napi_interface.h.tmpl │ │ │ │ ├── napi_shared_impl.cc.tmpl │ │ │ │ ├── napi_shared_impl.h.tmpl │ │ │ │ ├── opts.js.tmpl │ │ │ │ └── opts_hardcode.js.tmpl │ │ │ ├── third_party/ │ │ │ │ ├── .gitattributes │ │ │ │ ├── AUTHORS │ │ │ │ ├── CHANGES │ │ │ │ ├── DIR_METADATA │ │ │ │ ├── LICENSE │ │ │ │ ├── MANIFEST.in │ │ │ │ ├── Mako.egg-info/ │ │ │ │ │ ├── PKG-INFO │ │ │ │ │ ├── SOURCES.txt │ │ │ │ │ ├── dependency_links.txt │ │ │ │ │ ├── entry_points.txt │ │ │ │ │ ├── not-zip-safe │ │ │ │ │ ├── requires.txt │ │ │ │ │ └── top_level.txt │ │ │ │ ├── PKG-INFO │ │ │ │ ├── README.chromium │ │ │ │ ├── README.rst │ │ │ │ ├── doc/ │ │ │ │ │ ├── _static/ │ │ │ │ │ │ ├── basic.css │ │ │ │ │ │ ├── changelog.css │ │ │ │ │ │ ├── docs.css │ │ │ │ │ │ ├── doctools.js │ │ │ │ │ │ ├── documentation_options.js │ │ │ │ │ │ ├── jquery-3.5.1.js │ │ │ │ │ │ ├── jquery.js │ │ │ │ │ │ ├── language_data.js │ │ │ │ │ │ ├── pygments.css │ │ │ │ │ │ ├── searchtools.js │ │ │ │ │ │ ├── sphinx_paramlinks.css │ │ │ │ │ │ ├── underscore-1.3.1.js │ │ │ │ │ │ └── underscore.js │ │ │ │ │ ├── build/ │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── caching.rst │ │ │ │ │ │ ├── changelog.rst │ │ │ │ │ │ ├── conf.py │ │ │ │ │ │ ├── defs.rst │ │ │ │ │ │ ├── filtering.rst │ │ │ │ │ │ ├── index.rst │ │ │ │ │ │ ├── inheritance.rst │ │ │ │ │ │ ├── namespaces.rst │ │ │ │ │ │ ├── requirements.txt │ │ │ │ │ │ ├── runtime.rst │ │ │ │ │ │ ├── syntax.rst │ │ │ │ │ │ ├── unicode.rst │ │ │ │ │ │ ├── unreleased/ │ │ │ │ │ │ │ └── README.txt │ │ │ │ │ │ └── usage.rst │ │ │ │ │ ├── caching.html │ │ │ │ │ ├── changelog.html │ │ │ │ │ ├── defs.html │ │ │ │ │ ├── filtering.html │ │ │ │ │ ├── genindex.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── inheritance.html │ │ │ │ │ ├── namespaces.html │ │ │ │ │ ├── runtime.html │ │ │ │ │ ├── search.html │ │ │ │ │ ├── searchindex.js │ │ │ │ │ ├── syntax.html │ │ │ │ │ ├── unicode.html │ │ │ │ │ └── usage.html │ │ │ │ ├── examples/ │ │ │ │ │ ├── bench/ │ │ │ │ │ │ ├── basic.py │ │ │ │ │ │ ├── cheetah/ │ │ │ │ │ │ │ ├── footer.tmpl │ │ │ │ │ │ │ ├── header.tmpl │ │ │ │ │ │ │ └── template.tmpl │ │ │ │ │ │ ├── django/ │ │ │ │ │ │ │ └── templatetags/ │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── bench.py │ │ │ │ │ │ ├── kid/ │ │ │ │ │ │ │ ├── base.kid │ │ │ │ │ │ │ └── template.kid │ │ │ │ │ │ └── myghty/ │ │ │ │ │ │ ├── base.myt │ │ │ │ │ │ └── template.myt │ │ │ │ │ └── wsgi/ │ │ │ │ │ └── run_wsgi.py │ │ │ │ ├── jinja2/ │ │ │ │ │ ├── AUTHORS │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── Jinja2-2.10.tar.gz.md5 │ │ │ │ │ ├── Jinja2-2.10.tar.gz.sha512 │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.chromium │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── _compat.py │ │ │ │ │ ├── _identifier.py │ │ │ │ │ ├── asyncfilters.py │ │ │ │ │ ├── asyncsupport.py │ │ │ │ │ ├── bccache.py │ │ │ │ │ ├── compiler.py │ │ │ │ │ ├── constants.py │ │ │ │ │ ├── debug.py │ │ │ │ │ ├── defaults.py │ │ │ │ │ ├── environment.py │ │ │ │ │ ├── exceptions.py │ │ │ │ │ ├── ext.py │ │ │ │ │ ├── filters.py │ │ │ │ │ ├── get_jinja2.sh │ │ │ │ │ ├── idtracking.py │ │ │ │ │ ├── jinja2.gni │ │ │ │ │ ├── lexer.py │ │ │ │ │ ├── loaders.py │ │ │ │ │ ├── meta.py │ │ │ │ │ ├── nativetypes.py │ │ │ │ │ ├── nodes.py │ │ │ │ │ ├── optimizer.py │ │ │ │ │ ├── parser.py │ │ │ │ │ ├── runtime.py │ │ │ │ │ ├── sandbox.py │ │ │ │ │ ├── tests.py │ │ │ │ │ ├── utils.py │ │ │ │ │ └── visitor.py │ │ │ │ ├── mako/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── _ast_util.py │ │ │ │ │ ├── ast.py │ │ │ │ │ ├── cache.py │ │ │ │ │ ├── cmd.py │ │ │ │ │ ├── codegen.py │ │ │ │ │ ├── compat.py │ │ │ │ │ ├── exceptions.py │ │ │ │ │ ├── ext/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── autohandler.py │ │ │ │ │ │ ├── babelplugin.py │ │ │ │ │ │ ├── beaker_cache.py │ │ │ │ │ │ ├── extract.py │ │ │ │ │ │ ├── linguaplugin.py │ │ │ │ │ │ ├── preprocessors.py │ │ │ │ │ │ ├── pygmentplugin.py │ │ │ │ │ │ └── turbogears.py │ │ │ │ │ ├── filters.py │ │ │ │ │ ├── lexer.py │ │ │ │ │ ├── lookup.py │ │ │ │ │ ├── parsetree.py │ │ │ │ │ ├── pygen.py │ │ │ │ │ ├── pyparser.py │ │ │ │ │ ├── runtime.py │ │ │ │ │ ├── template.py │ │ │ │ │ └── util.py │ │ │ │ ├── markupsafe/ │ │ │ │ │ ├── AUTHORS │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── MarkupSafe-0.18.tar.gz.md5 │ │ │ │ │ ├── MarkupSafe-0.18.tar.gz.sha512 │ │ │ │ │ ├── README.chromium │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── _compat.py │ │ │ │ │ ├── _constants.py │ │ │ │ │ ├── _native.py │ │ │ │ │ ├── _speedups.c │ │ │ │ │ └── get_markupsafe.sh │ │ │ │ ├── ply/ │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.chromium │ │ │ │ │ ├── README.md │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── lex.py │ │ │ │ │ ├── license.patch │ │ │ │ │ └── yacc.py │ │ │ │ ├── pyjson5/ │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── README.chromium │ │ │ │ │ └── src/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── MANIFEST.in │ │ │ │ │ ├── README.md │ │ │ │ │ ├── README.rst │ │ │ │ │ ├── benchmarks/ │ │ │ │ │ │ ├── chromium.linux.json │ │ │ │ │ │ ├── chromium.perf.json │ │ │ │ │ │ ├── ios-simulator.json │ │ │ │ │ │ ├── mb_config.json │ │ │ │ │ │ └── run.py │ │ │ │ │ ├── json5/ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── __main__.py │ │ │ │ │ │ ├── arg_parser.py │ │ │ │ │ │ ├── fakes/ │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ └── host_fake.py │ │ │ │ │ │ ├── host.py │ │ │ │ │ │ ├── json5.g │ │ │ │ │ │ ├── lib.py │ │ │ │ │ │ ├── parser.py │ │ │ │ │ │ ├── tests/ │ │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ │ ├── coverage_test.py │ │ │ │ │ │ │ ├── json5_test.py │ │ │ │ │ │ │ └── tool_test.py │ │ │ │ │ │ ├── tool.py │ │ │ │ │ │ └── version.py │ │ │ │ │ ├── pylintrc │ │ │ │ │ ├── run │ │ │ │ │ ├── sample.json5 │ │ │ │ │ ├── setup.cfg │ │ │ │ │ ├── setup.py │ │ │ │ │ └── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── host_fake.py │ │ │ │ │ ├── host_test.py │ │ │ │ │ ├── lib_test.py │ │ │ │ │ └── tool_test.py │ │ │ │ ├── setup.cfg │ │ │ │ ├── setup.py │ │ │ │ ├── tox.ini │ │ │ │ └── typ/ │ │ │ │ ├── BUILD.gn │ │ │ │ ├── LICENSE │ │ │ │ ├── README.chromium │ │ │ │ ├── README.rst │ │ │ │ ├── pylintrc │ │ │ │ ├── run │ │ │ │ ├── setup.cfg │ │ │ │ ├── setup.py │ │ │ │ ├── tools/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── cov.py │ │ │ │ └── typ/ │ │ │ │ ├── __init__.py │ │ │ │ ├── __main__.py │ │ │ │ ├── arg_parser.py │ │ │ │ ├── artifacts.py │ │ │ │ ├── expectations_parser.py │ │ │ │ ├── fakes/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── host_fake.py │ │ │ │ │ ├── test_result_server_fake.py │ │ │ │ │ └── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── host_fake_test.py │ │ │ │ │ └── test_result_server_fake_test.py │ │ │ │ ├── host.py │ │ │ │ ├── json_results.py │ │ │ │ ├── pool.py │ │ │ │ ├── printer.py │ │ │ │ ├── python_2_3_compat.py │ │ │ │ ├── result_sink.py │ │ │ │ ├── runner.py │ │ │ │ ├── stats.py │ │ │ │ ├── test_case.py │ │ │ │ ├── tests/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── arg_parser_test.py │ │ │ │ │ ├── artifacts_test.py │ │ │ │ │ ├── expectations_parser_test.py │ │ │ │ │ ├── host_test.py │ │ │ │ │ ├── json_results_test.py │ │ │ │ │ ├── main_test.py │ │ │ │ │ ├── pool_test.py │ │ │ │ │ ├── printer_test.py │ │ │ │ │ ├── result_sink_test.py │ │ │ │ │ ├── runner_test.py │ │ │ │ │ ├── stats_test.py │ │ │ │ │ └── test_case_test.py │ │ │ │ └── version.py │ │ │ └── tools/ │ │ │ ├── blink_idls/ │ │ │ │ └── core/ │ │ │ │ └── uint8_array.idl │ │ │ ├── blinkpy/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bindings/ │ │ │ │ │ ├── DIR_METADATA │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── bindings_tests.py │ │ │ │ │ ├── collect_idls_into_json.py │ │ │ │ │ ├── collect_idls_into_json_test.py │ │ │ │ │ ├── generate_idl_diff.py │ │ │ │ │ ├── generate_idl_diff_test.py │ │ │ │ │ ├── print_idl_diff.py │ │ │ │ │ └── testdata/ │ │ │ │ │ ├── new_blink_idls.json │ │ │ │ │ ├── old_blink_idls.json │ │ │ │ │ ├── test_filepath.txt │ │ │ │ │ └── test_interface.idl │ │ │ │ └── common/ │ │ │ │ ├── __init__.py │ │ │ │ ├── base85.py │ │ │ │ ├── base85_unittest.py │ │ │ │ ├── checkout/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── baseline_optimizer.py │ │ │ │ │ ├── baseline_optimizer_unittest.py │ │ │ │ │ ├── diff_parser.py │ │ │ │ │ ├── diff_parser_unittest.py │ │ │ │ │ ├── diff_test_data.py │ │ │ │ │ ├── git.py │ │ │ │ │ ├── git_mock.py │ │ │ │ │ └── git_unittest.py │ │ │ │ ├── config/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── builders.json │ │ │ │ ├── exit_codes.py │ │ │ │ ├── find_files.py │ │ │ │ ├── find_files_unittest.py │ │ │ │ ├── host.py │ │ │ │ ├── host_mock.py │ │ │ │ ├── html_diff.py │ │ │ │ ├── html_diff_unittest.py │ │ │ │ ├── memoized.py │ │ │ │ ├── memoized_unittest.py │ │ │ │ ├── message_pool.py │ │ │ │ ├── multiprocessing_bootstrap.py │ │ │ │ ├── net/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── file_uploader.py │ │ │ │ │ ├── git_cl.py │ │ │ │ │ ├── git_cl_mock.py │ │ │ │ │ ├── git_cl_unittest.py │ │ │ │ │ ├── luci_auth.py │ │ │ │ │ ├── luci_auth_unittest.py │ │ │ │ │ ├── network_transaction.py │ │ │ │ │ ├── network_transaction_unittest.py │ │ │ │ │ ├── results_fetcher.py │ │ │ │ │ ├── results_fetcher_mock.py │ │ │ │ │ ├── results_fetcher_test.py │ │ │ │ │ ├── web.py │ │ │ │ │ ├── web_mock.py │ │ │ │ │ ├── web_test_results.py │ │ │ │ │ └── web_test_results_unittest.py │ │ │ │ ├── path_finder.py │ │ │ │ ├── path_finder_unittest.py │ │ │ │ ├── pretty_diff.py │ │ │ │ ├── pretty_diff_unittest.py │ │ │ │ ├── read_checksum_from_png.py │ │ │ │ ├── read_checksum_from_png_unittest.py │ │ │ │ ├── system/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── crash_logs.py │ │ │ │ │ ├── crash_logs_unittest.py │ │ │ │ │ ├── executive.py │ │ │ │ │ ├── executive_mock.py │ │ │ │ │ ├── executive_unittest.py │ │ │ │ │ ├── filesystem.py │ │ │ │ │ ├── filesystem_mock.py │ │ │ │ │ ├── filesystem_mock_unittest.py │ │ │ │ │ ├── filesystem_unittest.py │ │ │ │ │ ├── log_testing.py │ │ │ │ │ ├── log_testing_unittest.py │ │ │ │ │ ├── log_utils.py │ │ │ │ │ ├── log_utils_unittest.py │ │ │ │ │ ├── output_capture.py │ │ │ │ │ ├── output_capture_unittest.py │ │ │ │ │ ├── path.py │ │ │ │ │ ├── path_unittest.py │ │ │ │ │ ├── platform_info.py │ │ │ │ │ ├── platform_info_mock.py │ │ │ │ │ ├── platform_info_unittest.py │ │ │ │ │ ├── profiler.py │ │ │ │ │ ├── profiler_unittest.py │ │ │ │ │ ├── stack_utils.py │ │ │ │ │ ├── stack_utils_unittest.py │ │ │ │ │ ├── system_host.py │ │ │ │ │ ├── system_host_mock.py │ │ │ │ │ ├── user.py │ │ │ │ │ ├── user_mock.py │ │ │ │ │ └── user_unittest.py │ │ │ │ ├── unified_diff.py │ │ │ │ ├── unified_diff_unittest.py │ │ │ │ └── version_check.py │ │ │ ├── gen_bindings.py │ │ │ └── run_bindings_tests.py │ │ └── napi/ │ │ ├── BUILD.gn │ │ ├── array_buffer_view.h │ │ ├── callback_helper.cc │ │ ├── callback_helper.h │ │ ├── exception_message.cc │ │ ├── exception_message.h │ │ ├── exception_state.h │ │ ├── napi_base_wrap.cc │ │ ├── napi_base_wrap.h │ │ ├── napi_binding_unittest.cc │ │ ├── napi_bridge.cc │ │ ├── napi_bridge.h │ │ ├── napi_object.cc │ │ ├── napi_object.h │ │ ├── napi_object_ref.cc │ │ ├── napi_object_ref.h │ │ ├── napi_value.cc │ │ ├── napi_value.h │ │ ├── native_value_traits.cc │ │ ├── native_value_traits.h │ │ └── shim/ │ │ ├── README.md │ │ ├── shim_napi.h │ │ ├── shim_napi_env.h │ │ └── shim_napi_runtime.h │ ├── double-conversion/ │ │ ├── BUILD.gn │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── README │ │ ├── README.lynx │ │ └── double-conversion/ │ │ ├── bignum-dtoa.cc │ │ ├── bignum-dtoa.h │ │ ├── bignum.cc │ │ ├── bignum.h │ │ ├── cached-powers.cc │ │ ├── cached-powers.h │ │ ├── diy-fp.h │ │ ├── double-conversion.h │ │ ├── double-to-string.cc │ │ ├── double-to-string.h │ │ ├── fast-dtoa.cc │ │ ├── fast-dtoa.h │ │ ├── fixed-dtoa.cc │ │ ├── fixed-dtoa.h │ │ ├── ieee.h │ │ ├── string-to-double.cc │ │ ├── string-to-double.h │ │ ├── strtod.cc │ │ ├── strtod.h │ │ └── utils.h │ ├── jsoncpp/ │ │ ├── .clang-format │ │ ├── .travis.yml │ │ ├── AUTHORS │ │ ├── BUILD.gn │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── NEWS.txt │ │ ├── README.md │ │ ├── SConstruct │ │ ├── amalgamate.py │ │ ├── appveyor.yml │ │ ├── dev.makefile │ │ ├── devtools/ │ │ │ ├── __init__.py │ │ │ ├── agent_vmw7.json │ │ │ ├── agent_vmxp.json │ │ │ ├── antglob.py │ │ │ ├── batchbuild.py │ │ │ ├── fixeol.py │ │ │ ├── licenseupdater.py │ │ │ └── tarball.py │ │ ├── doc/ │ │ │ ├── doxyfile.in │ │ │ ├── footer.html │ │ │ ├── header.html │ │ │ ├── jsoncpp.dox │ │ │ ├── readme.txt │ │ │ ├── roadmap.dox │ │ │ └── web_doxyfile.in │ │ ├── doxybuild.py │ │ ├── include/ │ │ │ ├── CMakeLists.txt │ │ │ └── json/ │ │ │ ├── allocator.h │ │ │ ├── assertions.h │ │ │ ├── autolink.h │ │ │ ├── config.h │ │ │ ├── features.h │ │ │ ├── forwards.h │ │ │ ├── json.h │ │ │ ├── reader.h │ │ │ ├── value.h │ │ │ ├── version.h │ │ │ └── writer.h │ │ ├── makefiles/ │ │ │ └── vs71/ │ │ │ ├── jsontest.vcproj │ │ │ ├── lib_json.vcproj │ │ │ └── test_lib_json.vcproj │ │ ├── makerelease.py │ │ ├── meson.build │ │ ├── pkg-config/ │ │ │ └── jsoncpp.pc.in │ │ ├── scons-tools/ │ │ │ ├── globtool.py │ │ │ ├── srcdist.py │ │ │ ├── substinfile.py │ │ │ └── targz.py │ │ ├── src/ │ │ │ ├── CMakeLists.txt │ │ │ ├── jsontestrunner/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── main.cpp │ │ │ │ └── sconscript │ │ │ ├── lib_json/ │ │ │ │ ├── CMakeLists.txt │ │ │ │ ├── json_reader.cpp │ │ │ │ ├── json_tool.h │ │ │ │ ├── json_value.cpp │ │ │ │ ├── json_valueiterator.inl │ │ │ │ ├── json_writer.cpp │ │ │ │ ├── sconscript │ │ │ │ └── version.h.in │ │ │ └── test_lib_json/ │ │ │ ├── CMakeLists.txt │ │ │ ├── jsontest.cpp │ │ │ ├── jsontest.h │ │ │ ├── main.cpp │ │ │ └── sconscript │ │ ├── test/ │ │ │ ├── cleantests.py │ │ │ ├── data/ │ │ │ │ ├── fail_test_array_01.json │ │ │ │ ├── fail_test_stack_limit.json │ │ │ │ ├── test_array_01.expected │ │ │ │ ├── test_array_01.json │ │ │ │ ├── test_array_02.expected │ │ │ │ ├── test_array_02.json │ │ │ │ ├── test_array_03.expected │ │ │ │ ├── test_array_03.json │ │ │ │ ├── test_array_04.expected │ │ │ │ ├── test_array_04.json │ │ │ │ ├── test_array_05.expected │ │ │ │ ├── test_array_05.json │ │ │ │ ├── test_array_06.expected │ │ │ │ ├── test_array_06.json │ │ │ │ ├── test_array_07.expected │ │ │ │ ├── test_array_07.json │ │ │ │ ├── test_basic_01.expected │ │ │ │ ├── test_basic_01.json │ │ │ │ ├── test_basic_02.expected │ │ │ │ ├── test_basic_02.json │ │ │ │ ├── test_basic_03.expected │ │ │ │ ├── test_basic_03.json │ │ │ │ ├── test_basic_04.expected │ │ │ │ ├── test_basic_04.json │ │ │ │ ├── test_basic_05.expected │ │ │ │ ├── test_basic_05.json │ │ │ │ ├── test_basic_06.expected │ │ │ │ ├── test_basic_06.json │ │ │ │ ├── test_basic_07.expected │ │ │ │ ├── test_basic_07.json │ │ │ │ ├── test_basic_08.expected │ │ │ │ ├── test_basic_08.json │ │ │ │ ├── test_basic_09.expected │ │ │ │ ├── test_basic_09.json │ │ │ │ ├── test_comment_00.expected │ │ │ │ ├── test_comment_00.json │ │ │ │ ├── test_comment_01.expected │ │ │ │ ├── test_comment_01.json │ │ │ │ ├── test_comment_02.expected │ │ │ │ ├── test_comment_02.json │ │ │ │ ├── test_complex_01.expected │ │ │ │ ├── test_complex_01.json │ │ │ │ ├── test_integer_01.expected │ │ │ │ ├── test_integer_01.json │ │ │ │ ├── test_integer_02.expected │ │ │ │ ├── test_integer_02.json │ │ │ │ ├── test_integer_03.expected │ │ │ │ ├── test_integer_03.json │ │ │ │ ├── test_integer_04.expected │ │ │ │ ├── test_integer_04.json │ │ │ │ ├── test_integer_05.expected │ │ │ │ ├── test_integer_05.json │ │ │ │ ├── test_integer_06_64bits.expected │ │ │ │ ├── test_integer_06_64bits.json │ │ │ │ ├── test_integer_07_64bits.expected │ │ │ │ ├── test_integer_07_64bits.json │ │ │ │ ├── test_integer_08_64bits.expected │ │ │ │ ├── test_integer_08_64bits.json │ │ │ │ ├── test_large_01.expected │ │ │ │ ├── test_large_01.json │ │ │ │ ├── test_object_01.expected │ │ │ │ ├── test_object_01.json │ │ │ │ ├── test_object_02.expected │ │ │ │ ├── test_object_02.json │ │ │ │ ├── test_object_03.expected │ │ │ │ ├── test_object_03.json │ │ │ │ ├── test_object_04.expected │ │ │ │ ├── test_object_04.json │ │ │ │ ├── test_preserve_comment_01.expected │ │ │ │ ├── test_preserve_comment_01.json │ │ │ │ ├── test_real_01.expected │ │ │ │ ├── test_real_01.json │ │ │ │ ├── test_real_02.expected │ │ │ │ ├── test_real_02.json │ │ │ │ ├── test_real_03.expected │ │ │ │ ├── test_real_03.json │ │ │ │ ├── test_real_04.expected │ │ │ │ ├── test_real_04.json │ │ │ │ ├── test_real_05.expected │ │ │ │ ├── test_real_05.json │ │ │ │ ├── test_real_06.expected │ │ │ │ ├── test_real_06.json │ │ │ │ ├── test_real_07.expected │ │ │ │ ├── test_real_07.json │ │ │ │ ├── test_real_08.expected │ │ │ │ ├── test_real_08.json │ │ │ │ ├── test_real_09.expected │ │ │ │ ├── test_real_09.json │ │ │ │ ├── test_real_10.expected │ │ │ │ ├── test_real_10.json │ │ │ │ ├── test_real_11.expected │ │ │ │ ├── test_real_11.json │ │ │ │ ├── test_real_12.expected │ │ │ │ ├── test_real_12.json │ │ │ │ ├── test_string_01.expected │ │ │ │ ├── test_string_01.json │ │ │ │ ├── test_string_02.expected │ │ │ │ ├── test_string_02.json │ │ │ │ ├── test_string_03.expected │ │ │ │ ├── test_string_03.json │ │ │ │ ├── test_string_04.expected │ │ │ │ ├── test_string_04.json │ │ │ │ ├── test_string_05.expected │ │ │ │ ├── test_string_05.json │ │ │ │ ├── test_string_unicode_01.expected │ │ │ │ ├── test_string_unicode_01.json │ │ │ │ ├── test_string_unicode_02.expected │ │ │ │ ├── test_string_unicode_02.json │ │ │ │ ├── test_string_unicode_03.expected │ │ │ │ ├── test_string_unicode_03.json │ │ │ │ ├── test_string_unicode_04.expected │ │ │ │ ├── test_string_unicode_04.json │ │ │ │ ├── test_string_unicode_05.expected │ │ │ │ └── test_string_unicode_05.json │ │ │ ├── generate_expected.py │ │ │ ├── jsonchecker/ │ │ │ │ ├── fail1.json │ │ │ │ ├── fail10.json │ │ │ │ ├── fail11.json │ │ │ │ ├── fail12.json │ │ │ │ ├── fail13.json │ │ │ │ ├── fail14.json │ │ │ │ ├── fail15.json │ │ │ │ ├── fail16.json │ │ │ │ ├── fail17.json │ │ │ │ ├── fail18.json │ │ │ │ ├── fail19.json │ │ │ │ ├── fail2.json │ │ │ │ ├── fail20.json │ │ │ │ ├── fail21.json │ │ │ │ ├── fail22.json │ │ │ │ ├── fail23.json │ │ │ │ ├── fail24.json │ │ │ │ ├── fail25.json │ │ │ │ ├── fail26.json │ │ │ │ ├── fail27.json │ │ │ │ ├── fail28.json │ │ │ │ ├── fail29.json │ │ │ │ ├── fail3.json │ │ │ │ ├── fail30.json │ │ │ │ ├── fail31.json │ │ │ │ ├── fail32.json │ │ │ │ ├── fail33.json │ │ │ │ ├── fail4.json │ │ │ │ ├── fail5.json │ │ │ │ ├── fail6.json │ │ │ │ ├── fail7.json │ │ │ │ ├── fail8.json │ │ │ │ ├── fail9.json │ │ │ │ ├── pass1.json │ │ │ │ ├── pass2.json │ │ │ │ ├── pass3.json │ │ │ │ └── readme.txt │ │ │ ├── pyjsontestrunner.py │ │ │ ├── runjsontests.py │ │ │ └── rununittests.py │ │ ├── travis.sh │ │ ├── version │ │ └── version.in │ ├── napi/ │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ └── include/ │ │ ├── code_cache.h │ │ ├── js_native_api.h │ │ ├── js_native_api_adapter.h │ │ ├── js_native_api_types.h │ │ ├── napi.h │ │ ├── napi_env.h │ │ ├── napi_env_harmony.h │ │ ├── napi_env_jsc.h │ │ ├── napi_env_quickjs.h │ │ ├── napi_env_v8.h │ │ ├── napi_module.h │ │ ├── napi_runtime.h │ │ ├── napi_state.h │ │ ├── primjs_napi_defines.h │ │ └── primjs_napi_undefs.h │ ├── quickjs/ │ │ ├── BUILD.gn │ │ ├── LICENSE │ │ └── include/ │ │ ├── allocator.h │ │ ├── base_export.h │ │ ├── cutils.h │ │ ├── global-handles.h │ │ ├── libregexp.h │ │ ├── libunicode.h │ │ ├── list.h │ │ ├── persistent-handle.h │ │ ├── quickjs-libc.h │ │ ├── quickjs-tag.h │ │ ├── quickjs.h │ │ └── trace-gc.h │ ├── rapidjson/ │ │ ├── BUILD.gn │ │ ├── allocators.h │ │ ├── build.gni │ │ ├── cursorstreamwrapper.h │ │ ├── document.h │ │ ├── encodedstream.h │ │ ├── encodings.h │ │ ├── error/ │ │ │ ├── en.h │ │ │ └── error.h │ │ ├── filereadstream.h │ │ ├── filewritestream.h │ │ ├── fwd_c.h │ │ ├── internal/ │ │ │ ├── biginteger.h │ │ │ ├── diyfp.h │ │ │ ├── dtoa.h │ │ │ ├── ieee754.h │ │ │ ├── itoa.h │ │ │ ├── meta.h │ │ │ ├── pow10.cc │ │ │ ├── pow10.h │ │ │ ├── pow10_unittest.cc │ │ │ ├── regex.h │ │ │ ├── stack.h │ │ │ ├── strfunc.h │ │ │ ├── strtod.h │ │ │ └── swap.h │ │ ├── istreamwrapper.h │ │ ├── license.txt │ │ ├── memorybuffer.h │ │ ├── memorystream.h │ │ ├── msinttypes/ │ │ │ ├── inttypes.h │ │ │ └── stdint.h │ │ ├── ostreamwrapper.h │ │ ├── pointer.h │ │ ├── prettywriter.h │ │ ├── rapidjson.gni │ │ ├── rapidjson.h │ │ ├── reader.h │ │ ├── readme.md │ │ ├── readme.zh-cn.md │ │ ├── schema.h │ │ ├── stream.h │ │ ├── stringbuffer.h │ │ └── writer.h │ └── weak-node-api/ │ ├── .gitignore │ ├── BUILD.gn │ ├── package.json │ └── setup_deps.py ├── tools/ │ ├── android_tools/ │ │ ├── BUILD.gn │ │ ├── prepare_android_build.py │ │ └── update_local_properties.py │ ├── api/ │ │ ├── __init__.py │ │ ├── api_doc.py │ │ ├── api_dump.py │ │ ├── api_utils.py │ │ ├── config.yml │ │ ├── docs/ │ │ │ ├── __init__.py │ │ │ └── templates/ │ │ │ ├── add-lynx-view-client.mdx │ │ │ ├── load-template.mdx │ │ │ ├── lynx-native-api-template.mdx │ │ │ └── set-extra-timing.mdx │ │ ├── env_setup.py │ │ ├── main.py │ │ ├── metadata_def.py │ │ ├── misc/ │ │ │ ├── doxygen-awesome-fragment-copy-button.js │ │ │ ├── doxygen-awesome-interactive-toc.js │ │ │ ├── doxygen-awesome-paragraph-link.js │ │ │ ├── doxygen-awesome.css │ │ │ └── header.html │ │ └── parser/ │ │ ├── __init__.py │ │ ├── doxygen/ │ │ │ ├── __init__.py │ │ │ ├── common_parse.py │ │ │ ├── compounddef_parse.py │ │ │ ├── doxygen_config.py │ │ │ ├── doxygen_parser.py │ │ │ └── memberdef_parse.py │ │ └── ts_morph/ │ │ ├── __init__.py │ │ ├── api-parser.ts │ │ ├── cli.ts │ │ ├── harmony_parser.py │ │ ├── metadata-def.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── buildtools_helper.py │ ├── ci/ │ │ └── habitat_cache_helper.py │ ├── cliff.toml │ ├── config/ │ │ ├── __init__.py │ │ ├── check_and_run.py │ │ ├── config_def.py │ │ ├── config_env.py │ │ ├── config_utils.py │ │ ├── gen_config.py │ │ └── templates/ │ │ ├── compiler_options_types.tmpl │ │ ├── config_keys.tmpl │ │ ├── config_types.tmpl │ │ ├── lynx_config_doc.tmpl │ │ ├── test_js.tmpl │ │ └── test_types.tmpl │ ├── css_generator/ │ │ ├── .gitignore │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── css_define_json_schema/ │ │ │ └── css_define_with_doc.schema.json │ │ ├── css_defines/ │ │ │ ├── 1-top.json │ │ │ ├── 10-border-top-color.json │ │ │ ├── 100-background-origin.json │ │ │ ├── 101-background-repeat.json │ │ │ ├── 102-background-size.json │ │ │ ├── 103-border.json │ │ │ ├── 104-visibility.json │ │ │ ├── 105-border-right.json │ │ │ ├── 106-border-left.json │ │ │ ├── 107-border-top.json │ │ │ ├── 108-border-bottom.json │ │ │ ├── 109-transition.json │ │ │ ├── 11-border-bottom-color.json │ │ │ ├── 110-transition-property.json │ │ │ ├── 111-transition-duration.json │ │ │ ├── 112-transition-delay.json │ │ │ ├── 113-transition-timing-function.json │ │ │ ├── 114-content.json │ │ │ ├── 115-border-left-style.json │ │ │ ├── 116-border-right-style.json │ │ │ ├── 117-border-top-style.json │ │ │ ├── 118-border-bottom-style.json │ │ │ ├── 119-implicit-animation.json │ │ │ ├── 12-border-radius.json │ │ │ ├── 120-overflow-x.json │ │ │ ├── 121-overflow-y.json │ │ │ ├── 122-word-break.json │ │ │ ├── 123-background-clip.json │ │ │ ├── 124-outline.json │ │ │ ├── 125-outline-color.json │ │ │ ├── 126-outline-style.json │ │ │ ├── 127-outline-width.json │ │ │ ├── 128-vertical-align.json │ │ │ ├── 129-caret-color.json │ │ │ ├── 13-border-top-left-radius.json │ │ │ ├── 130-direction.json │ │ │ ├── 131-relative-id.json │ │ │ ├── 132-relative-align-top.json │ │ │ ├── 133-relative-align-right.json │ │ │ ├── 134-relative-align-bottom.json │ │ │ ├── 135-relative-align-left.json │ │ │ ├── 136-relative-top-of.json │ │ │ ├── 137-relative-right-of.json │ │ │ ├── 138-relative-bottom-of.json │ │ │ ├── 139-relative-left-of.json │ │ │ ├── 14-border-bottom-left-radius.json │ │ │ ├── 140-relative-layout-once.json │ │ │ ├── 141-relative-center.json │ │ │ ├── 142-enter-transition-name.json │ │ │ ├── 143-exit-transition-name.json │ │ │ ├── 144-pause-transition-name.json │ │ │ ├── 145-resume-transition-name.json │ │ │ ├── 146-flex-flow.json │ │ │ ├── 147-z-index.json │ │ │ ├── 148-text-decoration-color.json │ │ │ ├── 149-linear-cross-gravity.json │ │ │ ├── 15-border-top-right-radius.json │ │ │ ├── 150-margin-inline-start.json │ │ │ ├── 151-margin-inline-end.json │ │ │ ├── 152-padding-inline-start.json │ │ │ ├── 153-padding-inline-end.json │ │ │ ├── 154-border-inline-start-color.json │ │ │ ├── 155-border-inline-end-color.json │ │ │ ├── 156-border-inline-start-width.json │ │ │ ├── 157-border-inline-end-width.json │ │ │ ├── 158-border-inline-start-style.json │ │ │ ├── 159-border-inline-end-style.json │ │ │ ├── 16-border-bottom-right-radius.json │ │ │ ├── 160-border-start-start-radius.json │ │ │ ├── 161-border-end-start-radius.json │ │ │ ├── 162-border-start-end-radius.json │ │ │ ├── 163-border-end-end-radius.json │ │ │ ├── 164-relative-align-inline-start.json │ │ │ ├── 165-relative-align-inline-end.json │ │ │ ├── 166-relative-inline-start-of.json │ │ │ ├── 167-relative-inline-end-of.json │ │ │ ├── 168-inset-inline-start.json │ │ │ ├── 169-inset-inline-end.json │ │ │ ├── 17-border-width.json │ │ │ ├── 170-mask-image.json │ │ │ ├── 171-grid-template-columns.json │ │ │ ├── 172-grid-template-rows.json │ │ │ ├── 173-grid-auto-columns.json │ │ │ ├── 174-grid-auto-rows.json │ │ │ ├── 175-grid-column-span.json │ │ │ ├── 176-grid-row-span.json │ │ │ ├── 177-grid-column-start.json │ │ │ ├── 178-grid-column-end.json │ │ │ ├── 179-grid-row-start.json │ │ │ ├── 18-border-left-width.json │ │ │ ├── 180-grid-row-end.json │ │ │ ├── 181-grid-column-gap.json │ │ │ ├── 182-grid-row-gap.json │ │ │ ├── 183-justify-items.json │ │ │ ├── 184-justify-self.json │ │ │ ├── 185-grid-auto-flow.json │ │ │ ├── 186-filter.json │ │ │ ├── 187-list-main-axis-gap.json │ │ │ ├── 188-list-cross-axis-gap.json │ │ │ ├── 189-linear-direction.json │ │ │ ├── 19-border-right-width.json │ │ │ ├── 190-perspective.json │ │ │ ├── 191-cursor.json │ │ │ ├── 192-text-indent.json │ │ │ ├── 193-clip-path.json │ │ │ ├── 194-text-stroke.json │ │ │ ├── 195-text-stroke-width.json │ │ │ ├── 196-text-stroke-color.json │ │ │ ├── 197--x-auto-font-size.json │ │ │ ├── 198--x-auto-font-size-preset-sizes.json │ │ │ ├── 199-mask.json │ │ │ ├── 2-left.json │ │ │ ├── 20-border-top-width.json │ │ │ ├── 200-mask-repeat.json │ │ │ ├── 201-mask-position.json │ │ │ ├── 202-mask-clip.json │ │ │ ├── 203-mask-origin.json │ │ │ ├── 204-mask-size.json │ │ │ ├── 205-gap.json │ │ │ ├── 206-column-gap.json │ │ │ ├── 207-row-gap.json │ │ │ ├── 208-image-rendering.json │ │ │ ├── 209-hyphens.json │ │ │ ├── 21-border-bottom-width.json │ │ │ ├── 210--x-app-region.json │ │ │ ├── 211--x-animation-color-interpolation.json │ │ │ ├── 212--x-handle-size.json │ │ │ ├── 213--x-handle-color.json │ │ │ ├── 214-offset-distance.json │ │ │ ├── 215-offset-path.json │ │ │ ├── 216-offset-rotate.json │ │ │ ├── 217-font-variation-settings.json │ │ │ ├── 218-font-feature-settings.json │ │ │ ├── 219-font-optical-sizing.json │ │ │ ├── 22-color.json │ │ │ ├── 220--x-placeholder-color.json │ │ │ ├── 221--x-placeholder-font-family.json │ │ │ ├── 222--x-placeholder-font-size.json │ │ │ ├── 223--x-placeholder-font-weight.json │ │ │ ├── 224--x-placeholder-font-style.json │ │ │ ├── 225-pointer-events.json │ │ │ ├── 23-opacity.json │ │ │ ├── 24-display.json │ │ │ ├── 25-overflow.json │ │ │ ├── 26-height.json │ │ │ ├── 27-width.json │ │ │ ├── 28-max-width.json │ │ │ ├── 29-min-width.json │ │ │ ├── 3-right.json │ │ │ ├── 30-max-height.json │ │ │ ├── 31-min-height.json │ │ │ ├── 32-padding.json │ │ │ ├── 33-padding-left.json │ │ │ ├── 34-padding-right.json │ │ │ ├── 35-padding-top.json │ │ │ ├── 36-padding-bottom.json │ │ │ ├── 37-margin.json │ │ │ ├── 38-margin-left.json │ │ │ ├── 39-margin-right.json │ │ │ ├── 4-bottom.json │ │ │ ├── 40-margin-top.json │ │ │ ├── 41-margin-bottom.json │ │ │ ├── 42-white-space.json │ │ │ ├── 43-letter-spacing.json │ │ │ ├── 44-text-align.json │ │ │ ├── 45-line-height.json │ │ │ ├── 46-text-overflow.json │ │ │ ├── 47-font-size.json │ │ │ ├── 48-font-weight.json │ │ │ ├── 49-flex.json │ │ │ ├── 5-position.json │ │ │ ├── 50-flex-grow.json │ │ │ ├── 51-flex-shrink.json │ │ │ ├── 52-flex-basis.json │ │ │ ├── 53-flex-direction.json │ │ │ ├── 54-flex-wrap.json │ │ │ ├── 55-align-items.json │ │ │ ├── 56-align-self.json │ │ │ ├── 57-align-content.json │ │ │ ├── 58-justify-content.json │ │ │ ├── 59-background.json │ │ │ ├── 6-box-sizing.json │ │ │ ├── 60-border-color.json │ │ │ ├── 61-font-family.json │ │ │ ├── 62-font-style.json │ │ │ ├── 63-transform.json │ │ │ ├── 64-animation.json │ │ │ ├── 65-animation-name.json │ │ │ ├── 66-animation-duration.json │ │ │ ├── 67-animation-timing-function.json │ │ │ ├── 68-animation-delay.json │ │ │ ├── 69-animation-iteration-count.json │ │ │ ├── 7-background-color.json │ │ │ ├── 70-animation-direction.json │ │ │ ├── 71-animation-fill-mode.json │ │ │ ├── 72-animation-play-state.json │ │ │ ├── 73-line-spacing.json │ │ │ ├── 74-border-style.json │ │ │ ├── 75-order.json │ │ │ ├── 76-box-shadow.json │ │ │ ├── 77-transform-origin.json │ │ │ ├── 78-linear-orientation.json │ │ │ ├── 79-linear-weight-sum.json │ │ │ ├── 8-border-left-color.json │ │ │ ├── 80-linear-weight.json │ │ │ ├── 81-linear-gravity.json │ │ │ ├── 82-linear-layout-gravity.json │ │ │ ├── 83-layout-animation-create-duration.json │ │ │ ├── 84-layout-animation-create-timing-function.json │ │ │ ├── 85-layout-animation-create-delay.json │ │ │ ├── 86-layout-animation-create-property.json │ │ │ ├── 87-layout-animation-delete-duration.json │ │ │ ├── 88-layout-animation-delete-timing-function.json │ │ │ ├── 89-layout-animation-delete-delay.json │ │ │ ├── 9-border-right-color.json │ │ │ ├── 90-layout-animation-delete-property.json │ │ │ ├── 91-layout-animation-update-duration.json │ │ │ ├── 92-layout-animation-update-timing-function.json │ │ │ ├── 93-layout-animation-update-delay.json │ │ │ ├── 94-adapt-font-size.json │ │ │ ├── 95-aspect-ratio.json │ │ │ ├── 96-text-decoration.json │ │ │ ├── 97-text-shadow.json │ │ │ ├── 98-background-image.json │ │ │ └── 99-background-position.json │ │ ├── css_parser_generator.py │ │ ├── css_parser_gn_generator.py │ │ ├── css_property_generator.py │ │ ├── enum_css_generator.py │ │ ├── generate_layout_property.py │ │ ├── generate_types.py │ │ ├── index.d.ts │ │ ├── index.d.ts.mako │ │ ├── package.json │ │ ├── property_index.json │ │ ├── scripts/ │ │ │ ├── generate-types.ts │ │ │ ├── test-validation.ts │ │ │ └── validate.ts │ │ ├── test/ │ │ │ └── css_defines/ │ │ │ ├── invalid-consumption.json │ │ │ ├── invalid-type.json │ │ │ └── missing-required.json │ │ ├── tsconfig.json │ │ ├── utils.py │ │ └── value_defines/ │ │ └── value_defines.json │ ├── envsetup.ps1 │ ├── envsetup.sh │ ├── error_code/ │ │ ├── README.md │ │ ├── checker/ │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── error_code_def_checker.py │ │ │ ├── metadata_checker.py │ │ │ └── spec_checker.py │ │ ├── common.py │ │ ├── error_code.yaml │ │ ├── gen_error_code.py │ │ └── generator/ │ │ ├── __init__.py │ │ ├── android/ │ │ │ ├── __init__.py │ │ │ ├── android_base.py │ │ │ ├── android_generator.py │ │ │ ├── behavior_file_generator.py │ │ │ └── sub_code_file_generator.py │ │ ├── base_generator.py │ │ ├── code_generator.py │ │ ├── darwin/ │ │ │ ├── __init__.py │ │ │ ├── behavior_header_generator.py │ │ │ ├── behavior_src_generator.py │ │ │ ├── darwin_base.py │ │ │ ├── darwin_generator.py │ │ │ ├── sub_code_header_generator.py │ │ │ └── sub_code_src_generator.py │ │ ├── harmony/ │ │ │ ├── __init__.py │ │ │ ├── behavior_file_generator.py │ │ │ ├── harmony_common.py │ │ │ ├── harmony_generator.py │ │ │ └── sub_code_file_generator.py │ │ ├── native/ │ │ │ ├── __init__.py │ │ │ ├── native_common.py │ │ │ ├── native_generator.py │ │ │ ├── sub_code_header_generator.py │ │ │ └── sub_code_src_generator.py │ │ └── typescript/ │ │ ├── __init__.py │ │ └── ts_generator.py │ ├── feature_count/ │ │ ├── README.md │ │ ├── base.py │ │ ├── code_generator.py │ │ ├── generate_feature_count.py │ │ ├── java_generator.py │ │ ├── native_generator.py │ │ ├── objc_generator.py │ │ ├── specification.yaml │ │ └── typescript_generator.py │ ├── gn_tools/ │ │ └── test/ │ │ ├── BUILD.gn │ │ ├── CMakeLists_impl/ │ │ │ └── gn_cmake_test/ │ │ │ └── CMakeLists.txt │ │ ├── gn_script_test.sh │ │ ├── gn_test.podspec │ │ ├── gn_test_action.py │ │ ├── gn_test_shared.cc │ │ ├── gn_test_shared.h │ │ ├── gn_test_source.cc │ │ ├── gn_test_source.h │ │ └── test.gni │ ├── hab │ ├── hab.ps1 │ ├── ios_tools/ │ │ ├── cocoapods_publish_helper.py │ │ ├── generate_podspec_scripts_by_gn.py │ │ ├── process_podfile.py │ │ └── skip_pod_lint.py │ ├── js_tools/ │ │ ├── build.py │ │ └── pnpm_helper.py │ ├── license/ │ │ └── license.py │ ├── lldb/ │ │ ├── lldbinit │ │ └── lynx_lldb.py │ ├── oliver/ │ │ └── lynx-tasm/ │ │ └── gn_to_cmake_oliver.py │ ├── performance/ │ │ └── performance_observer/ │ │ ├── definition_yaml_files/ │ │ │ ├── HostPlatformTiming.yml │ │ │ ├── InitBackgroundRuntimeEntry.yml │ │ │ ├── InitContainerEntry.yml │ │ │ ├── InitLynxviewEntry.yml │ │ │ ├── JSBlockingEntry.yml │ │ │ ├── LazyBundleEntry.yml │ │ │ ├── LoadBundleEntry.yml │ │ │ ├── MemoryUsageEntry.yml │ │ │ ├── MemoryUsageItem.yml │ │ │ ├── MetricActualFmpEntry.yml │ │ │ ├── MetricFcpEntry.yml │ │ │ ├── MetricFspEntry.yml │ │ │ ├── MetricTtiEntry.yml │ │ │ ├── PerformanceEntry.yml │ │ │ ├── PerformanceMetric.yml │ │ │ ├── PipelineEntry.yml │ │ │ ├── README.md │ │ │ └── ReloadBundleEntry.yml │ │ ├── generate_performance_entry.py │ │ ├── performance_entry_definition_files │ │ ├── sub_generator/ │ │ │ ├── ets_generator.py │ │ │ ├── java_generator.py │ │ │ ├── oc_generator.py │ │ │ └── ts_generator.py │ │ └── utils.py │ ├── rtf/ │ │ ├── README.md │ │ ├── args_parser/ │ │ │ ├── __init__.py │ │ │ └── args_parser.py │ │ ├── cli/ │ │ │ ├── __init__.py │ │ │ └── app.py │ │ ├── core/ │ │ │ ├── __init__.py │ │ │ ├── base/ │ │ │ │ ├── constants.py │ │ │ │ ├── result.py │ │ │ │ └── summary.py │ │ │ ├── builder/ │ │ │ │ ├── __init__.py │ │ │ │ ├── builder.py │ │ │ │ ├── builder_manager.py │ │ │ │ ├── gn_builder.py │ │ │ │ └── gradle_builder.py │ │ │ ├── checker/ │ │ │ │ ├── __init__.py │ │ │ │ ├── android_coverage_checker.py │ │ │ │ ├── check.py │ │ │ │ ├── checker_factory.py │ │ │ │ ├── coverage_checker.py │ │ │ │ ├── ios_coverage_checker.py │ │ │ │ └── native_coverage_checker.py │ │ │ ├── container/ │ │ │ │ ├── __init__.py │ │ │ │ ├── android_ut_container.py │ │ │ │ ├── container.py │ │ │ │ └── native_ut_container.py │ │ │ ├── coverage/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ ├── coverage.py │ │ │ │ ├── coverage_factory.py │ │ │ │ ├── jacoco_coverage.py │ │ │ │ └── llvm_coverage.py │ │ │ ├── env/ │ │ │ │ ├── __init__.py │ │ │ │ ├── context.py │ │ │ │ ├── env.py │ │ │ │ └── trait_template.py │ │ │ ├── options/ │ │ │ │ ├── README.md │ │ │ │ ├── __init__.py │ │ │ │ └── options.py │ │ │ ├── target/ │ │ │ │ ├── __init__.py │ │ │ │ ├── android_target_factory.py │ │ │ │ ├── android_ut_target.py │ │ │ │ ├── fuzzer_test_target.py │ │ │ │ ├── native_ut_target.py │ │ │ │ ├── observer.py │ │ │ │ ├── target.py │ │ │ │ └── target_factory.py │ │ │ ├── template/ │ │ │ │ ├── __init__.py │ │ │ │ ├── android_ut_template.py │ │ │ │ ├── native_ut_template.py │ │ │ │ └── template.py │ │ │ └── utils/ │ │ │ ├── __init__.py │ │ │ ├── emu_env_setup.py │ │ │ ├── git_helper.py │ │ │ ├── lcov_reader.py │ │ │ ├── log.py │ │ │ ├── operation.py │ │ │ └── xml_reader.py │ │ ├── plugin_manager/ │ │ │ ├── __init__.py │ │ │ └── plugin_manager.py │ │ ├── plugins/ │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── android_ut_plugin.py │ │ │ ├── coverage_check_plugin.py │ │ │ ├── fuzzer_test_plugin.py │ │ │ ├── native_ut_plugin.py │ │ │ ├── plugin.py │ │ │ ├── plugin_factory.py │ │ │ └── project_init_plugin.py │ │ └── rtf │ └── vpython_tools/ │ ├── requirements.in │ ├── requirements.txt │ └── vpython_env_setup.py └── tsconfig.json ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ BasedOnStyle: Google ================================================ FILE: .editorconfig ================================================ # EditorConfig is awesome: https://EditorConfig.org # top-most EditorConfig file root = true [*] indent_style = space indent_size = 2 end_of_line = lf charset = utf-8 trim_trailing_whitespace = false insert_final_newline = true ================================================ FILE: .github/ISSUE_TEMPLATE/1-bug-report.en-US.yml ================================================ name: '🐞 Bug Report' description: Report a bug to Lynx title: '[Bug]: ' type: Bug labels: ['pending triage'] body: - type: markdown attributes: value: | Thank you for taking the time to report this issue! Before submitting, please note: - Confirm that your problem cannot be solved by official documentation. - Make sure you've searched in the [Issues](https://github.com/lynx-family/lynx/issues) and haven't found the same issue. - If it's not bug report, please post on the [Discussions](https://github.com/lynx-family/lynx/discussions). - type: textarea id: system-info attributes: label: System Info description: Output of `npx envinfo --system --npmPackages '@lynx-js/*' --binaries` placeholder: | System: Binaries: npmPackages: validations: required: true - type: textarea id: details attributes: label: Details description: Please describe the bug, it would be better to provide some screenshots. validations: required: true - type: input id: reproduce attributes: label: Reproduce link description: 'Please provide a URL of the repository that reproduces the problem. We recommend the [Lynx repro template](https://github.com/lynx-family/lynx-repro) for creating a minimal reproducible example.' placeholder: paste link here - type: textarea id: reproduce-steps attributes: label: Reproduce Steps description: Please provide the simplest steps so that we can quickly reproduce the problem. placeholder: | For example: 1. Run `npm run dev` 2. Find some error messages validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/2-feature-request.en-US.yml ================================================ name: '✨ Feature Request' description: Submit a new feature request to Lynx title: '[Feature]: ' type: Feature labels: ['pending triage'] body: - type: markdown attributes: value: | Thank you for submitting a new feature request! Before submitting, please note: - Confirm that this is a common feature and cannot be implemented using existing APIs. - Make sure you've searched in the [Issues](https://github.com/lynx-family/lynx/issues) and haven't found the same request. - You can discuss the feature in the [Discussions](https://github.com/lynx-family/lynx/discussions) first. - type: textarea id: description attributes: label: What problem does this feature solve? description: Please describe the use case for this feature. validations: required: true - type: textarea id: api attributes: label: What does the proposed API of configuration look like? description: Describe the new API, give some code examples. validations: required: true ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ --- contact_links: - about: 'Please raise issues about framework or toolset on its own repo.' name: Framework or Toolset url: 'https://github.com/lynx-family/lynx-stack/issues' - about: 'Please raise issues about the site on its own repo.' name: Website url: 'https://github.com/lynx-family/lynx-website/issues' ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ## Summary ## Checklist - [ ] Tests updated (or not required). - [ ] Documentation updated (or not required). ================================================ FILE: .github/actions/android-explorer-build/action.yml ================================================ name: build android explorer description: build android explorer apk inputs: abi-list: description: The abi list of the sdk to publish required: false default: 'armeabi-v7a' build-params: description: Set project properties for gradle when building explorer required: false default: '' runs: using: composite steps: - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Build Explorer App shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd explorer/android ./gradlew :LynxExplorer:assembleNoasanRelease -Penable_trace=perfetto -PabiList=${{ inputs.abi-list }} -no-daemon ${{ inputs.build-params }} popd - name: upload artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: android-lynx-explorer path: '${{ github.workspace }}/lynx/explorer/android/lynx_explorer/build/outputs/apk/noasan/release/LynxExplorer-noasan-release.apk' ================================================ FILE: .github/actions/android-sdk-release/action.yml ================================================ name: build android sdk description: build android sdk and publish aar to maven if build-type is 'release' inputs: version: description: The version of the sdk to publish required: true signingKeyId: description: The key id of the sdk to publish required: false default: '' signingPassword: description: The password of the sdk to publish required: false signingSecretKey: description: The secret key of the sdk to publish required: false abiList: description: The abi list of the sdk to publish required: false default: 'armeabi-v7a' runs: using: composite steps: - name: Build artifact shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd platform/android ./gradlew assembleAllModulesRelease -Penable_trace=none -PabiList=${{ inputs.abiList }} -PbuildLynxDebugSo -no-daemon ./gradlew assembleAllModulesDevRelease -Penable_trace=perfetto -PabiList=${{ inputs.abiList }} -no-daemon ./gradlew publishAllModules \ -Pversion=${{ inputs.version || '0.0.1-alpha.1' }} \ -Psigning.keyId=${{ inputs.signingKeyId }} \ -Psigning.password=${{ inputs.signingPassword }} \ -Psigning.secretKey=${{ inputs.signingSecretKey }} ./gradlew publishAllModulesDevRelease \ -Pversion="${{ inputs.version || '0.0.1-alpha.1' }}-dev" \ -Psigning.keyId=${{ inputs.signingKeyId }} \ -Psigning.password=${{ inputs.signingPassword }} \ -Psigning.secretKey=${{ inputs.signingSecretKey }} popd ================================================ FILE: .github/actions/clay-macos-build/action.yml ================================================ name: build clay example description: build clay example runs: using: composite steps: - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: target: 'clay' - name: Build Clay Example shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh buildtools/gn/gn gen out/Default --args='enable_clay_standalone = true disable_visibility_hidden = true use_ndk_static_cxx = false enable_linker_map = false enable_clay = true is_headless = true skia_enable_flutter_defines = true skia_use_dng_sdk = false skia_use_sfntly = false skia_enable_pdf = false skia_enable_svg = true enable_svg = true skia_enable_skottie = true skia_use_x11 = false skia_use_wuffs = true skia_use_expat = true skia_use_fontconfig = false clay_enable_skshaper = true skia_use_icu = true skia_gl_standard = "" allow_deprecated_api_calls = true stripped_symbols = true is_official_build = true is_debug = false use_clang_static_analyzer = false enable_lto = false' --export-compile-commands buildtools/ninja/ninja -C out/Default clay/example/glfw ================================================ FILE: .github/actions/common-deps/action.yml ================================================ name: install common dependencies description: pull common source and binary dependencies via habitat. inputs: concurrency: description: concurrency of requests default: '2' required: false cache-backend: description: cache backend for habitat default: 'lynx-infra' required: false target: description: habitat target default: '' required: false # actions/cache stores files with relative directory, which causes inconsistency between self-hosted runner and # container runner. Therefore, add this temporary option to modify cache key prefix as a workaround. Delete this when # we are able to adjust the container runner's directory structure to the same as self-hosted runner. cache-key-prefix: description: cache key prefix for cache action default: '' required: false runs: using: composite steps: - name: Get habitat cache key id: hab shell: bash run: | if [[ "${{ inputs.target }}" == "" ]]; then python3 lynx/tools/ci/habitat_cache_helper.py else python3 lynx/tools/ci/habitat_cache_helper.py --target ${{ inputs.target }} fi - name: Setup cache action if: ${{ inputs.cache-backend == 'lynx-infra' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.habitat_cache key: hab${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}-${{ steps.hab.outputs.HABITAT_DEPS_FILE_DIGEST }} restore-keys: | hab${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}- - name: Setup cache action if: ${{ inputs.cache-backend == 'github' }} uses: actions/cache@v4 with: path: ~/.habitat_cache key: hab-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}-${{ steps.hab.outputs.HABITAT_DEPS_FILE_DIGEST }} restore-keys: | hab-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}- - name: Get Python Cache Directory id: pip shell: bash if: ${{ inputs.cache-backend == 'lynx-infra' }} run: echo "PIP_CACHE_DIR=$(python3 -m pip cache dir)" >> $GITHUB_OUTPUT - name: Python Requirements Cache if: ${{ inputs.cache-backend == 'lynx-infra' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ${{ steps.pip.outputs.PIP_CACHE_DIR }} key: pip${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ hashFiles('lynx/tools/vpython_tools/requirements.txt', 'lynx/testing/integration_test/test_script/requirements.txt') }} restore-keys: | pip${{ inputs.cache-key-prefix }}-${{ runner.os }}- - name: Cache pnpm Dependencies if: ${{ inputs.cache-backend == 'lynx-infra' && inputs.cache-key-prefix == '' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: # set pnpm store path to a specific value since we can't get it via `pnpm store path` before pnpm is setup. path: ~/.local/share/pnpm/store key: pnpm-${{ runner.os }}-${{ hashFiles('lynx/pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: Install Python dependencies uses: nick-fields/retry@v3 with: max_attempts: 3 retry_wait_seconds: 3 timeout_minutes: 20 command: | set -e if [ "$RUNNER_OS" == "macOS" ]; then python3 -m pip install -r lynx/tools/vpython_tools/requirements.txt --break-system-packages --retries 10 --timeout 60 python3 -m pip install -r lynx/testing/integration_test/test_script/requirements.txt --break-system-packages --retries 10 --timeout 60 else python3 -m pip install -r lynx/tools/vpython_tools/requirements.txt --retries 10 --timeout 60 python3 -m pip install -r lynx/testing/integration_test/test_script/requirements.txt --retries 10 --timeout 60 fi - name: run habitat sync shell: bash working-directory: lynx run: | if [[ "${{ inputs.target }}" == "" ]]; then tools/hab sync . else tools/hab sync . --target ${{ inputs.target }} fi env: HABITAT_CONCURRENCY: ${{ inputs.concurrency }} npm_config_store_dir: ~/.local/share/pnpm/store ================================================ FILE: .github/actions/free-android-disk/action.yml ================================================ name: Free Android Disk Space description: Free up disk space on Android runner. runs: using: composite steps: - name: Free up disk space shell: bash working-directory: /home/runner run: | CLEAN_DIRS=( "/var/lib/docker" "/usr/local/lib/node_modules" ) for dir in "${CLEAN_DIRS[@]}"; do if [ -d "$dir" ]; then echo "Deleting $dir..." sudo rm -rf "$dir" else echo "$dir does not exist, skipping..." fi done sudo apt-get clean > /dev/null 2>&1 ================================================ FILE: .github/actions/generate-changelog/action.yml ================================================ name: generate changelog description: Using git-cliff to generate changelog according to the given reference range inputs: ref-from: description: The starting git reference (tag name or commit hash) (excluded) from which the changelog will be generated required: true ref-to: description: The ending git reference (tag name or commit hash) (included) up to which the changelog will be generated required: true running-path: description: Path to the running of git-cliff command required: false default: 'lynx' config-path: description: Path to the configuration file for git-cliff, relative to lynx/ required: false default: 'tools/cliff.toml' changelog-path: description: Path to the generated changelog file, relative to lynx/ required: false default: 'CHANGELOG.md' runs: using: composite steps: - name: Download git-cliff shell: bash env: GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }} run: |- ARCHIVE_EXT='tar.gz' ARCHIVE_CMD='tar -xf' GIT_CLIFF_BIN='git-cliff' ARCH=$(uname -m | tr '[:upper:]' '[:lower:]') case "$ARCH" in arm64) ARCH=aarch64 ;; arm) ARCH=pc-windows-msvc ;; x86) ARCH=i686 ;; *) ARCH=x86_64 ;; esac OS=$(uname -s | tr '[:upper:]' '[:lower:]') case "$OS" in darwin) OS=apple-darwin ;; *) OS=unknown-linux-gnu ;; esac INSTALL_DIR="$RUNNER_TEMP/git-cliff" mkdir -p "$INSTALL_DIR" cd "$INSTALL_DIR" echo "git-cliff-${ARCH}-${OS}.${ARCHIVE_EXT}" RELEASE_URL='https://api.github.com/repos/orhun/git-cliff/releases/latest' RELEASE_INFO="$(curl --silent --show-error --fail \ --header "authorization: Bearer ${GITHUB_TOKEN}" \ --header 'Cache-Control: no-cache, must-revalidate' \ "${RELEASE_URL}")" TAG_NAME="$(echo "${RELEASE_INFO}" | jq --raw-output ".tag_name")" TARGET="git-cliff-${TAG_NAME:1}-${ARCH}-${OS}.${ARCHIVE_EXT}" LOCATION="$(echo "${RELEASE_INFO}" | jq --raw-output ".assets[].browser_download_url" | grep "${TARGET}$")" echo "Found release: ${LOCATION}" mkdir -p ./bin if [[ ! -e "$TARGET" ]]; then echo "Downloading ${TARGET}..." curl --silent --show-error --fail --location --output "$TARGET" "$LOCATION" echo "Unpacking ${TARGET}..." ${ARCHIVE_CMD} "$TARGET" mv git-cliff-${TAG_NAME:1}/${GIT_CLIFF_BIN} "./bin/$GIT_CLIFF_BIN" else echo "Using cached git-cliff binary." fi chmod +x "./bin/$GIT_CLIFF_BIN" echo "git-cliff is ready to use!" - name: Generate Changelog shell: bash env: GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }} run: |- cd "$GITHUB_WORKSPACE/${{ inputs.running-path }}" DIR_PATH=$(dirname "${{ inputs.changelog-path }}") mkdir -p "$DIR_PATH" "$RUNNER_TEMP/git-cliff/bin/git-cliff" ${{ inputs.ref-from }}..${{ inputs.ref-to }} -c ${{ inputs.config-path }} -o ${{ inputs.changelog-path }} if [[ "$(uname)" == "Darwin" ]]; then sed -i '' '/^\t*$/d' "${{ inputs.changelog-path }}" else sed -i '/^\t*$/d' "${{ inputs.changelog-path }}" fi echo "changelog-path: $GITHUB_WORKSPACE/${{ inputs.running-path }}/${{ inputs.changelog-path }}" ================================================ FILE: .github/actions/get-latest-tag/action.yml ================================================ name: Get Latest Ancestor Tag description: Get the latest ancestor tag of the current commit. inputs: current-tag: description: The current publishing tag required: true outputs: latest-tag: description: 'The latest tag' value: ${{ steps.get-tag.outputs.latest-tag }} runs: using: composite steps: - name: get latest ancestor tag id: get-ancestor-tag working-directory: lynx shell: bash run: | set -e pwd ANCESTOR_TAG=$(git describe --tags --exclude=${{ inputs.current-tag }} --abbrev=0 2>/dev/null) echo "ANCESTOR_TAG=$ANCESTOR_TAG" >> $GITHUB_ENV - name: get latest tag from api id: get-latest-tag-from-api shell: bash run: | REPO="${{ github.repository }}" LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO/releases/latest" | jq -r '.tag_name') if [ "$LATEST_TAG" = "null" ] || [ "$LATEST_TAG" = "${{ inputs.current-tag }}" ]; then LATEST_TAG=$(curl -s "https://api.github.com/repos/$REPO/releases?per_page=20" \ | jq -r --arg CURRENT "${{ inputs.current-tag }}" \ '.[] | select( .draft == false and .tag_name != $CURRENT ) | .tag_name' \ | head -n 1) fi echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - id: get-tag shell: bash run: | if [ -n "${{ env.ANCESTOR_TAG }}" ]; then FINAL_TAG="${{ env.ANCESTOR_TAG }}" else FINAL_TAG="${{ env.LATEST_TAG }}" fi echo "Latest tag found: $FINAL_TAG" echo "latest-tag=$FINAL_TAG" >> $GITHUB_OUTPUT ================================================ FILE: .github/actions/harmony-explorer-build/action.yml ================================================ name: build harmony explorer description: build harmony explorer hap runs: using: composite steps: - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-key-prefix: '-container' - name: Build Explorer App shell: bash working-directory: lynx run: |- source tools/envsetup.sh pushd platform/harmony && ohpm install && popd pushd explorer/harmony && ohpm install && popd python3 explorer/harmony/script/build.py --dev --build_lynx_core --build_bundle --build_hap - name: upload artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: harmony-lynx-explorer path: '${{ github.workspace }}/lynx/explorer/harmony/lynx_explorer/build/default/outputs/default/lynx_explorer-default-unsigned.hap' ================================================ FILE: .github/actions/ios-common-deps/action.yml ================================================ name: setup ruby cache description: setup ruby cache for the Lynx iOS build stage inputs: path: default: 'lynx/ruby' required: false type: string cache-backend: description: cache backend for habitat default: 'lynx-infra' required: false runs: using: composite steps: - name: get ruby version id: get_ruby_version shell: bash run: |- ruby_version=$(ruby -v | awk '{print $2}') ruby_version=$(echo $ruby_version | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') ruby_version=$(echo $ruby_version | awk -F. '{print $1"."$2".0"}') echo "VERSION=$ruby_version" >> $GITHUB_OUTPUT; - name: setup ruby cache action if: ${{ inputs.cache-backend == 'lynx-infra' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ${{ inputs.path }}/${{ steps.get_ruby_version.outputs.VERSION }} key: ${{ runner.os }}-ruby-${{ steps.get_ruby_version.outputs.VERSION }}-${{ hashFiles('lynx/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-ruby-${{ steps.get_ruby_version.outputs.VERSION }} - name: setup cache action if: ${{ inputs.cache-backend == 'github' }} uses: actions/cache@v4 with: path: ${{ inputs.path }}/${{ steps.get_ruby_version.outputs.VERSION }} key: ${{ runner.os }}-ruby-${{ steps.get_ruby_version.outputs.VERSION }}-${{ hashFiles('lynx/Gemfile.lock') }} restore-keys: | ${{ runner.os }}-ruby-${{ steps.get_ruby_version.outputs.VERSION }} ================================================ FILE: .github/actions/ios-explorer-build/action.yml ================================================ name: build ios explorer description: build ios explorer app inputs: build-arch: description: The architecture of explorer we are building. It could be x86_64,arm64 required: true build-params: description: The build params of explorer we are building. required: false default: '' runs: using: composite steps: - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps - name: Install iOS Dependencies uses: nick-fields/retry@v2 with: timeout_minutes: 20 max_attempts: 3 command: |- set -e cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd explorer/darwin/ios/lynx_explorer git config --global url."https://github.com/".insteadOf "git@github.com:" bash bundle_install.sh ${{ inputs.build-params }} popd - name: Build Explorer App shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd explorer/darwin/ios/lynx_explorer xcodebuild -workspace LynxExplorer.xcworkspace -scheme LynxExplorer -configuration Debug -arch ${{ inputs.build-arch }} -archivePath build/LynxExplorer.xcarchive -derivedDataPath iOSCoreBuild/DerivedData -resultBundlePath results_bundle -showBuildTimingSummary -sdk iphonesimulator LD_GENERATE_MAP_FILE=YES LD_MAP_FILE_PATH=Build/linkmap.txt -jobs 24 build popd tar --strip-components 10 -czvf LynxExplorer-${{ inputs.build-arch }}.app.tar.gz explorer/darwin/ios/lynx_explorer/iOSCoreBuild/DerivedData/Build/Products/Debug-iphonesimulator/LynxExplorer.app ================================================ FILE: .github/actions/ios-sdk-publish/action.yml ================================================ name: publish ios sdk description: package ios source code, upload the zip to release and publish the podspec file to cocoapods inputs: version: required: false description: The version of pod. type: string tag: required: false type: string description: The tag for release. component: required: false type: string default: 'all' cocoapods_trunk_token: description: The secret key of the sdk to publish type: string github_token: description: The github token type: string runs: using: composite steps: - name: Prepare cocoapods publish source shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh python3 tools/ios_tools/cocoapods_publish_helper.py --prepare-source --tag ${{ inputs.tag }} --version ${{ inputs.version }} --component ${{ inputs.component }} - name: Push iOS SDK to release uses: ncipollo/release-action@v1 with: tag: ${{ inputs.tag }} token: ${{ inputs.github_token }} artifacts: '${{ github.workspace }}/lynx/*.zip' replacesArtifacts: true allowUpdates: true body: '' - name: Publish to CocoaPods Repo env: COCOAPODS_TRUNK_TOKEN: ${{ inputs.cocoapods_trunk_token }} shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh git config --global user.name "lynx.authors" git config --global user.email "lynx.authors@users.noreply.github.com" python3 tools/ios_tools/skip_pod_lint.py --source public python3 tools/ios_tools/cocoapods_publish_helper.py --publish --component ${{ inputs.component }} ================================================ FILE: .github/actions/macos-explorer-build/action.yml ================================================ name: build macos explorer description: build macos explorer inputs: build-arch: description: The architecture of explorer we are building. It could be x64,arm64 required: true runs: using: composite steps: - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: target: 'clay' - name: Build macOS Explorer shell: bash run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pnpm install buildtools/gn/gn gen out/Default --args='target_cpu = "${{ inputs.build-arch }}" desktop_enable_embedder_layer = true enable_clay_standalone = true disable_visibility_hidden = true use_ndk_static_cxx = false enable_linker_map = false enable_clay = true is_headless = true skia_enable_flutter_defines = true skia_use_dng_sdk = false skia_use_sfntly = false skia_enable_pdf = false skia_enable_svg = true enable_svg = true skia_enable_skottie = true skia_use_x11 = false skia_use_wuffs = true skia_use_expat = true skia_use_fontconfig = false clay_enable_skshaper = true skia_use_icu = true skia_gl_standard = "" skia_use_metal = true shell_enable_metal = true allow_deprecated_api_calls = true stripped_symbols = true is_official_build = true use_clang_static_analyzer = false enable_lto = false enable_lepusng_worklet = true enable_napi_binding = true enable_inspector = true jsengine_type="quickjs" use_flutter_cxx = false is_debug = false' buildtools/ninja/ninja -C out/Default explorer platform/darwin/macos:package_sdk tar --strip-components 2 -czvf LynxExplorer-macos-${{ inputs.build-arch }}.app.tar.gz out/Default/LynxExplorer.app ================================================ FILE: .github/actions/release-changelog/action.yml ================================================ name: release changelog description: Truncating changelog to max 124000 chars and pushing changelog to release note inputs: version: description: Version (tag) of the release required: true changelog-path: description: Path to the changelog file, relative to lynx/ required: false default: 'CHANGELOG.md' token: description: secrets.GITHUB_TOKEN required: true runs: using: composite steps: - name: Truncate Changelog If Necessary shell: bash run: |- cd $GITHUB_WORKSPACE/lynx MAX_CHARS=124000 CHANGELOG="${{ inputs.changelog-path }}" TRUNCATED="$CHANGELOG-truncated.md" if [[ ! -f "$CHANGELOG" ]]; then echo "Error: file '$CHANGELOG' not found.">&2 exit 1 fi content=$(cat "$CHANGELOG") if [[ ${#content} -le $MAX_CHARS ]]; then cp "$CHANGELOG" "$TRUNCATED" exit 0 fi truncated=$(head -c "$MAX_CHARS" <<< "$content") full_body="$truncated\n\n---\n📄 View the full changelog [here]($GITHUB_SERVER_URL/$GITHUB_REPOSITORY/blob/$GITHUB_SHA/$CHANGELOG)" echo -e "$full_body" > "$TRUNCATED" - name: Push to Release uses: ncipollo/release-action@v1 with: tag: ${{ inputs.version }} token: ${{ inputs.token }} artifacts: '${{ github.workspace }}/lynx/${{ inputs.changelog-path }}' bodyFile: '${{ github.workspace }}/lynx/${{ inputs.changelog-path }}-truncated.md' allowUpdates: true ================================================ FILE: .github/actions/setup-android-env/action.yml ================================================ name: setup android enviroment description: Setup Android enviroment, which includes JDK, Android SDK and NDK. runs: using: composite steps: - name: Setup Java SDK uses: actions/setup-java@v3 with: java-version: 11 distribution: 'zulu' cache: 'gradle' - name: Setup Android SDK uses: android-actions/setup-android@v3 with: cmdline-tools-version: 9862592 include-emulator: false include-preview: false - name: Setup Android NDK shell: bash run: |- sdkmanager "ndk;21.1.6352462" export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/21.1.6352462 ================================================ FILE: .github/actions/windows-common-deps/action.yml ================================================ name: install windows common dependencies description: pull common source and binary dependencies via habitat for windows. inputs: concurrency: description: concurrency of requests default: '2' required: false cache-backend: description: cache backend for habitat default: 'lynx-infra' required: false target: description: habitat target default: '' required: false # actions/cache stores files with relative directory, which causes inconsistency between self-hosted runner and # container runner. Therefore, add this temporary option to modify cache key prefix as a workaround. Delete this when # we are able to adjust the container runner's directory structure to the same as self-hosted runner. cache-key-prefix: description: cache key prefix for cache action default: '' required: false runs: using: composite steps: - name: Get habitat cache key id: hab shell: pwsh run: | if ([string]::IsNullOrEmpty("${{ inputs.target }}")) { python lynx/tools/ci/habitat_cache_helper.py } else { python lynx/tools/ci/habitat_cache_helper.py --target ${{ inputs.target }} } - name: Get habitat cache directory id: hab-cache-dir shell: pwsh run: | $habitat_cache_dir = python -c "import os; import tempfile; print(os.path.join(os.environ.get('HOME', tempfile.gettempdir()), '.habitat_cache'))" echo "HABITAT_CACHE_DIR=$habitat_cache_dir" >> ${env:GITHUB_OUTPUT} - name: Get npm cache directory id: npm-cache-dir shell: pwsh run: | $npm_cache_dir = python -c "import os; import pathlib; print(os.path.join(pathlib.Path.home(), '.local', 'share', 'pnpm', 'store'))" echo "NPM_CACHE_DIR=$npm_cache_dir" >> ${env:GITHUB_OUTPUT} - name: Get Python Cache Directory id: pip shell: pwsh if: ${{ inputs.cache-backend == 'lynx-infra' }} run: | $cache = python -m pip cache dir $correctPath = (Get-Item $cache).FullName echo "PIP_CACHE_DIR=$correctPath" >> ${env:GITHUB_OUTPUT} - name: Setup cache action if: ${{ inputs.cache-backend == 'lynx-infra' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ${{ steps.hab-cache-dir.outputs.HABITAT_CACHE_DIR }} key: hab${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}-${{ steps.hab.outputs.HABITAT_DEPS_FILE_DIGEST }} restore-keys: | hab${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}- - name: Setup cache action if: ${{ inputs.cache-backend == 'github' }} uses: actions/cache@v4 with: path: ${{ steps.hab-cache-dir.outputs.HABITAT_CACHE_DIR }} key: hab-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}-${{ steps.hab.outputs.HABITAT_DEPS_FILE_DIGEST }} restore-keys: | hab-${{ runner.os }}-${{ steps.hab.outputs.HABITAT_TARGETS }}- - name: Python Requirements Cache if: ${{ inputs.cache-backend == 'lynx-infra' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ${{ steps.pip.outputs.PIP_CACHE_DIR }} key: pip${{ inputs.cache-key-prefix }}-${{ runner.os }}-${{ hashFiles('lynx/tools/vpython_tools/requirements.txt', 'lynx/testing/integration_test/test_script/requirements.txt') }} restore-keys: | pip${{ inputs.cache-key-prefix }}-${{ runner.os }}- - name: Cache pnpm Dependencies if: ${{ inputs.cache-backend == 'lynx-infra' && inputs.cache-key-prefix == '' }} uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: # set pnpm store path to a specific value since we can't get it via `pnpm store path` before pnpm is setup. path: ${{ steps.npm-cache-dir.outputs.NPM_CACHE_DIR }} key: pnpm-${{ runner.os }}-${{ hashFiles('lynx/pnpm-lock.yaml') }} restore-keys: | pnpm-${{ runner.os }}- - name: Install Python dependencies shell: pwsh run: | python -m pip install -r lynx/tools/vpython_tools/requirements.txt python -m pip install -r lynx/testing/integration_test/test_script/requirements.txt - name: run habitat sync shell: pwsh working-directory: lynx run: | if ([string]::IsNullOrEmpty("${{ inputs.target }}")) { powershell.exe -Command "& .\tools\hab.ps1 sync ." } else { powershell.exe -Command "& .\tools\hab.ps1 sync . --target ${{ inputs.target }}" } env: HABITAT_CONCURRENCY: ${{ inputs.concurrency }} npm_config_store_dir: ${{ steps.npm-cache-dir.outputs.NPM_CACHE_DIR }} ================================================ FILE: .github/actions/windows-explorer-build/action.yml ================================================ name: build windows explorer description: build windows explorer apk. inputs: build-arch: description: The architecture of explorer we are building. It could be x64,x86 required: true runs: using: composite steps: - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Setup Node.js 18.20.0 uses: actions/setup-node@v6 with: node-version: '18.20.0' - name: Get npm customcache directory id: npm-custom-cache-dir shell: pwsh run: | $npm_custom_cache_dir = python -c "import os; import pathlib; print(os.path.join(pathlib.Path.home(), '.pnpm', 'v3'))" echo "NPM_CUSTOM_CACHE_DIR=$npm_custom_cache_dir" >> ${env:GITHUB_OUTPUT} - name: Cache pnpm Dependencies uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ${{ steps.npm-custom-cache-dir.outputs.NPM_CUSTOM_CACHE_DIR }} key: pnpm-custom-${{ runner.os }}-${{ hashFiles('lynx/pnpm-lock.yaml') }} restore-keys: | pnpm-custom-${{ runner.os }}- - name: Install Common Dependencies uses: ./lynx/.github/actions/windows-common-deps with: target: 'clay' - name: Build Explorer App shell: pwsh run: |- cd lynx $env:vs2022_install = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools" $env:DEPOT_TOOLS_WIN_TOOLCHAIN = 0 $env:GYP_MSVS_OVERRIDE_PATH = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2022\BuildTools" $env:WINDOWSSDKDIR = "${env:ProgramFiles(x86)}\Windows Kits\10" .\tools\envsetup.ps1 .\buildtools\node\pnpm install $PSNativeCommandArgumentPassing = 'Legacy' .\buildtools\gn\gn.exe gen out\Default --args='target_cpu=\"${{ inputs.build-arch }}\" desktop_enable_embedder_layer=true enable_clay_standalone=true disable_visibility_hidden=true use_ndk_static_cxx=false enable_linker_map=false enable_clay=true is_headless=true skia_enable_flutter_defines=true skia_use_dng_sdk=false skia_use_sfntly=false skia_enable_pdf=false skia_enable_svg=true enable_svg=true skia_enable_skottie=true skia_use_x11=false skia_use_wuffs=true skia_use_expat=true skia_use_fontconfig=false clay_enable_skshaper=true skia_use_icu=true allow_deprecated_api_calls=true stripped_symbols=true is_official_build=true enable_lto=false is_clang=true enable_lepusng_worklet=true enable_napi_binding=true is_debug=false enable_inspector=true jsengine_type=\"quickjs\"' --ide=vs .\buildtools\ninja\ninja.exe -C out\Default explorer ================================================ FILE: .github/workflows/ci.yml ================================================ name: ci on: pull_request: push: branches: - CQ-* - cq-* defaults: run: working-directory: lynx jobs: static-check: runs-on: lynx-ubuntu-22.04-medium timeout-minutes: 30 steps: - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Download Source uses: actions/checkout@v4.2.2 with: fetch-depth: 2 ref: ${{ github.event.pull_request.head.sha }} path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Run file type check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers file-type - name: Run cpplint check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers cpplint - name: Run java-lint check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers java-lint - name: Run commit-message check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers commit-message - name: Run coding-style check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers coding-style - name: Run android-check-style check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers android-check-style - name: Run api check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers api-check --all - name: Run gn relative path check run: | source tools/envsetup.sh python3 tools_shared/git_lynx.py check --checkers gn-relative-path-check darwin-native-unittests-check: timeout-minutes: 60 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Run Unittests run: | set -e source tools/envsetup.sh tools/rtf/rtf native-ut run --names lynx linux-native-unittests-check: runs-on: lynx-ubuntu-22.04-large timeout-minutes: 60 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Run Unittests run: | set -e source tools/envsetup.sh tools/rtf/rtf native-ut run --names lynx linux-native-devtool-unittests-check: runs-on: lynx-ubuntu-22.04-large timeout-minutes: 60 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Run Unittests run: | set -e source tools/envsetup.sh tools/rtf/rtf native-ut run --names devtool ios-unittests-check: timeout-minutes: 60 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps with: cache-backend: 'lynx-infra' - name: Install iOS Dependencies uses: nick-fields/retry@v2 with: timeout_minutes: 20 max_attempts: 3 command: | set -e cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd explorer/darwin/ios/lynx_explorer git config --global url."https://github.com/".insteadOf "git@github.com:" bash bundle_install.sh --skip-card-build popd - name: Run Unittests run: | set -e source tools/envsetup.sh pushd explorer/darwin/ios/lynx_explorer xcodebuild -showsdks | grep -Eo -m 1 "iphonesimulator([0-9]{1,}\.)+[0-9]{1,}" > sdk.txt sdkVersion=$(awk '{ sub(/iphonesimulator/,""); print $0 }' sdk.txt) echo $sdkVersion > sdk.txt xcodebuild build-for-testing ARCHS=arm64 -workspace LynxExplorer.xcworkspace -scheme LynxExplorerTests -enableCodeCoverage YES -configuration Debug -sdk iphonesimulator$(cat sdk.txt) COMPILER_INDEX_STORE_ENABLE=NO -derivedDataPath iOSCoreBuild/DerivedData -dest"platform=iOS Simulator,OS=$(cat sdk.txt),name=iPhone 11" SYMROOT=`pwd`/Build/Products -testPlan UTTest chmod u+x xctestrunner ./xctestrunner --xctestrun `pwd`/Build/Products/LynxExplorerTests_UTTest_iphonesimulator$(cat sdk.txt)-arm64.xctestrun --work_dir `pwd` --output_dir `pwd`/iOSCoreBuild/DerivedData simulator_test popd tasm-linux-build: runs-on: lynx-ubuntu-22.04-large timeout-minutes: 60 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Build Linux Tasm run: | source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:release:linux popd tasm-darwin-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Build Darwin Tasm run: | source tools/envsetup.sh python3 tools/oliver/lynx-tasm/gn_to_cmake_oliver.py pushd oliver/lynx-tasm npm install ../../buildtools/cmake/bin/cmake . ../../buildtools/cmake/bin/cmake --build . ./lepus_cmd npm run build:release:darwin popd tasm-wasm-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: target: tasm - name: Build Wasm Tasm run: | source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:wasm popd lynx-types-check: runs-on: lynx-ubuntu-22.04-medium timeout-minutes: 60 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Lynx Types Check run: | cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd js_libraries/types npm run test popd android-unittests-check: timeout-minutes: 60 runs-on: lynx-ubuntu-22.04-physical-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Setup gradle cache uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/caches/modules-2 key: gradle-android-unittests-check - name: Build Example App run: | source tools/envsetup.sh tools/rtf/rtf android-ut run --name lynx android-explorer-build: runs-on: lynx-ubuntu-22.04-large timeout-minutes: 60 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Setup gradle cache uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/caches/modules-2 key: gradle-android-explorer-build - name: Build Explorer App uses: ./lynx/.github/actions/android-explorer-build with: abi-list: x86,arm64-v8a build-params: -PIntegrationTest windows-explorer-build: # Disable temporarily due to flakiness if: false runs-on: lynx-windows-2022-large strategy: matrix: arch: [x86, x64] steps: - name: Configure Git shell: PowerShell run: | git config --global core.autocrlf false git config --global core.eol lf git config --global http.sslBackend "schannel" working-directory: ./ - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Build windows Explorer uses: ./lynx/.github/actions/windows-explorer-build with: build-arch: ${{ matrix.arch }} android-sdk-release: timeout-minutes: 60 runs-on: lynx-ubuntu-22.04-large steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: 'lynx-infra' - name: Setup gradle cache uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/caches/modules-2 key: gradle-android-sdk-release - name: Build Android SDK uses: ./lynx/.github/actions/android-sdk-release with: version: 0.0.1-alpha.1 - name: Collect and zip artifacts run: | cd $GITHUB_WORKSPACE/lynx/platform/android ./gradlew zipAllArtifacts - name: upload zip artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: android-sdk-release path: '${{ github.workspace }}/lynx/platform/android/build/artifacts-collection.zip' android-e2e-test: timeout-minutes: 60 needs: [android-explorer-build] env: APPIUM_TEST_SERVER_PORT: 4723 APPIUM_TEST_SERVER_HOST: 127.0.0.1 runs-on: lynx-ubuntu-22.04-physical-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Install Appium run: | pushd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pnpm install appium@2.11.2 -w pnpm install appium-espresso-driver@4.0.0 -w popd - name: Setup Java SDK uses: actions/setup-java@v3 with: java-version: 17 distribution: 'zulu' - name: Gradle Wrapper Cache uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/wrapper/dists key: gradle-8.7-${{ runner.os }} - name: Start Android 28 emulator run: | set -x target_avd=$(emulator -list-avds | head -n 1) if [ -z "$target_avd" ]; then echo "No available emulator was found!" exit 1 fi export QT_QPA_PLATFORM=offscreen nohup $ANDROID_HOME/emulator/emulator -no-window -avd $target_avd -no-snapshot -no-audio -no-boot-anim & max_wait_time=300 start_time=$(date +%s) while true; do current_time=$(date +%s) elapsed_time=$((current_time - start_time)) if [ $elapsed_time -gt $max_wait_time ]; then echo "Emulator startup timed out." exit 1 fi $ANDROID_HOME/platform-tools/adb devices if $ANDROID_HOME/platform-tools/adb devices | grep -q "device$"; then echo "Emulator startup completed." break fi echo "Waiting for emulator to startup..." sleep 10 done $ANDROID_HOME/platform-tools/adb devices - name: Download Explorer APK uses: lynx-infra/download-artifact@79d9914484f933089c2840552cf439bac85debad with: name: android-lynx-explorer path: lynx/explorer/android/lynx_explorer/build_temp - name: Repack and Install Explorer App run: | pushd $GITHUB_WORKSPACE/lynx LATEST_VERSION=$(ls -1 "$ANDROID_HOME/build-tools" | sort -V | tail -n 1) target_dir=$(find ./node_modules/.pnpm -type d -name "appium-adb@*" | head -n 1) ESPRESSO_SIGN_KEYS_DIR="" if [ -n "$target_dir" ]; then ESPRESSO_SIGN_KEYS_DIR="$target_dir/node_modules/appium-adb/keys" else echo "node_modules/.pnpm/appium-adb is not founded!" exit 1 fi APK_PATH=${{ github.workspace }}/lynx/explorer/android/lynx_explorer/build_temp java -jar $ANDROID_HOME/build-tools/$LATEST_VERSION/lib/apksigner.jar sign --key $ESPRESSO_SIGN_KEYS_DIR/testkey.pk8 --cert $ESPRESSO_SIGN_KEYS_DIR/testkey.x509.pem --out $APK_PATH/LynxExplorer-noasan-release-signed.apk $APK_PATH/LynxExplorer-noasan-release.apk adb install $APK_PATH/LynxExplorer-noasan-release-signed.apk - name: Start Appium server run: | pushd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd node_modules/appium/node_modules/.bin ls nohup ./appium server \ --port=$APPIUM_TEST_SERVER_PORT \ --address=$APPIUM_TEST_SERVER_HOST \ --log-no-colors \ --log-timestamp \ 2>&1 > "$GITHUB_WORKSPACE/lynx/appium.log" & adb logcat > "$GITHUB_WORKSPACE/lynx/device.log" 2>&1 & popd popd - name: Check if Appium Server is running run: | max_attempts=10 attempt=0 while [ $attempt -lt $max_attempts ]; do if nc -z $APPIUM_TEST_SERVER_HOST $APPIUM_TEST_SERVER_PORT; then echo "Appium Server is running." break else attempt=$((attempt + 1)) echo "Attempt $attempt: Appium Server is not yet running. Retrying in 2 seconds..." sleep 2 fi done if [ $attempt -eq $max_attempts ]; then echo "Failed to start Appium Server." exit 1 fi - name: Run Android E2E Test uses: nick-fields/retry@v3 with: max_attempts: 2 retry_wait_seconds: 5 timeout_minutes: 20 command: | set -e source $GITHUB_WORKSPACE/lynx/tools/envsetup.sh pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script export server_port=$APPIUM_TEST_SERVER_PORT export platform=android python3 -m pip install -r requirements.txt python3 manage.py runtest android_test.core echo "TASK_STATUS=success" >> $GITHUB_OUTPUT id: run_test - name: Collect Lynx-E2E execution logs if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else echo "Test execution failed, collecting logs..." pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script ls | grep -E "^lynx_e2e_devtools_.*\.log$" | xargs cat popd fi - name: Collect Appium Server logs if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else echo "Test execution failed, collecting logs..." pushd $GITHUB_WORKSPACE/lynx/ if [ -f "appium.log" ]; then cat appium.log else echo "Warning: appium.log file not found" fi popd fi - name: Collect Generated Resource Files if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script if [ -d "screenshots" ]; then zip -r screenshots.zip ./screenshots/ echo "Successfully created screenshots.zip" echo "ZIP_RESOURCES=success" >> $GITHUB_OUTPUT else echo "Warning: screenshot directory not found" fi fi id: collect_resource - name: Upload Generated Resource Files if: always() && steps.collect_resource.outputs.ZIP_RESOURCES == 'success' uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: android-e2e-resources path: '${{ github.workspace }}/lynx/testing/integration_test/test_script/screenshots.zip' android-integeration-test: needs: [android-sdk-release] timeout-minutes: 15 runs-on: lynx-ubuntu-22.04-large steps: - name: Download Integeration Demo Source Code uses: actions/checkout@v4.2.2 with: repository: lynx-family/integrating-lynx-demo-projects ref: b106f7f21d5221acfed645f4afa9d829a1cc0cc2 path: lynx - name: Cherry Pick Commit To Build With Local AAR run: | echo "GITHUB_WORKSPACE: $GITHUB_WORKSPACE" git config user.name "GitHub Actions" git config user.email "actions@github.com" git fetch origin 12858f5a4f51454057f738f0b1d2bb001986dc91 git cherry-pick 12858f5a4f51454057f738f0b1d2bb001986dc91 - name: Download Lynx SDK Artifacts uses: lynx-infra/download-artifact@79d9914484f933089c2840552cf439bac85debad with: name: android-sdk-release path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Setup Java SDK uses: actions/setup-java@v3 with: java-version: 17 distribution: 'zulu' - name: Gradle Wrapper Cache uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/wrapper/dists key: gradle-wrapper-${{ runner.os }} - name: Setup cache action uses: lynx-infra/cache@5c6160a6a4c7fca80a2f3057bb9dfc9513fcb732 with: path: ~/.gradle/caches/modules-2 key: gradle-integration-deps-${{ runner.os }} - name: Build With Local AAR id: build_apk run: | set -e pushd android/JavaEmptyProject/ python3 shell/prepare_package_with_local_aar.py $GITHUB_WORKSPACE/lynx/artifacts-collection.zip 0.0.1-alpha.1 ./gradlew publishAllZips ./gradlew :app:assembleDebug popd harmony-explorer-build: runs-on: lynx-custom-container container: image: ghcr.io/lynx-family/ubuntu24.04-harmony@sha256:bf493c3710de3c44bfa84caf402c0727b9310c42497f6e52580ad441ea640ef1 credentials: username: lynx-family password: ${{ secrets.GITHUB_TOKEN }} defaults: run: shell: bash steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Build Explorer App uses: ./lynx/.github/actions/harmony-explorer-build ios-explorer-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium strategy: matrix: arch: [arm64, x86_64] steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Build Explorer App uses: ./lynx/.github/actions/ios-explorer-build with: build-arch: ${{ matrix.arch }} build-params: '--integration-test' - name: upload artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: ios-explorer-build-${{ matrix.arch }} path: '${{ github.workspace }}/lynx/LynxExplorer-${{ matrix.arch }}.app.tar.gz' ios-integration-test: timeout-minutes: 15 runs-on: lynx-darwin-14-medium env: LOCAL_POD_NAME: 'local_pod' POD_VERSION: '0.0.1-alpha.1' steps: - name: Download Source uses: actions/checkout@v4.2.2 with: fetch-depth: 2 ref: ${{ github.event.pull_request.head.sha }} path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps with: cache-backend: 'lynx-infra' - name: Prepare cocoapods publish source run: |- source tools/envsetup.sh export LANG=en_US.UTF-8 python3 tools/ios_tools/cocoapods_publish_helper.py --prepare-source --tag $POD_VERSION --version $POD_VERSION --component all - name: Publish to Local Pod Source run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh git config --global user.name "lynx.authors" git config --global user.email "lynx.authors@users.noreply.github.com" python3 tools/ios_tools/cocoapods_publish_helper.py --publish_local $LOCAL_POD_NAME --component all - name: Download the Demo Project uses: actions/checkout@v4.2.2 with: path: demo repository: lynx-family/integrating-lynx-demo-projects ref: 0ab9340e1e560f07d3d4c4331f8b62b0702d067a - name: Build the Demo Project run: |- cd $GITHUB_WORKSPACE python3 lynx/tools/ios_tools/process_podfile.py --action replace_pod_version --component Lynx --version $POD_VERSION --podfile demo/ios/HelloLynxObjc/Podfile python3 lynx/tools/ios_tools/process_podfile.py --action replace_pod_version --component LynxService --version $POD_VERSION --podfile demo/ios/HelloLynxObjc/Podfile python3 lynx/tools/ios_tools/process_podfile.py --action replace_pod_version --component XElement --version $POD_VERSION --podfile demo/ios/HelloLynxObjc/Podfile python3 lynx/tools/ios_tools/process_podfile.py --action insert_pod_source --podfile demo/ios/HelloLynxObjc/Podfile --pod_source "file://$GITHUB_WORKSPACE/lynx/$LOCAL_POD_NAME" cd demo/ios/HelloLynxObjc export LANG=en_US.UTF-8 BUNDLE_GEMFILE=$GITHUB_WORKSPACE/lynx/Gemfile bundle --version BUNDLE_GEMFILE=$GITHUB_WORKSPACE/lynx/Gemfile bundle exec pod install xcodebuild -workspace Hello-Lynx-OC.xcworkspace/ -scheme Hello-Lynx-OC CODE_SIGNING_ALLOWED=NO build ios-e2e-test: timeout-minutes: 60 needs: [ios-explorer-build] env: APPIUM_TEST_SERVER_PORT: 4723 APPIUM_TEST_SERVER_HOST: 127.0.0.1 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps with: cache-backend: 'lynx-infra' - name: Get iOS simulator SDK version run: | xcodebuild -showsdks | grep -Eo -m 1 "iphonesimulator([0-9]{1,}\.)+[0-9]{1,}" > sdk.txt sdkVersion=$(awk '{ sub(/iphonesimulator/,""); print $0 }' sdk.txt) echo "SDK_VERSION=$sdkVersion" >> $GITHUB_ENV - name: Build WebDriverAgent uses: nick-fields/retry@v3 with: max_attempts: 2 retry_wait_seconds: 5 timeout_minutes: 5 command: | pushd $GITHUB_WORKSPACE git clone https://github.com/appium/WebDriverAgent.git xcodebuild build-for-testing \ -project ./WebDriverAgent/WebDriverAgent.xcodeproj \ -scheme WebDriverAgentRunner \ -configuration Release \ -sdk iphonesimulator${{ env.SDK_VERSION }} \ -derivedDataPath ./WebDriverAgent/DerivedData \ -destination "platform=iOS Simulator,OS=${{ env.SDK_VERSION }},name=iPhone 15" \ SYMROOT=$GITHUB_WORKSPACE/Build/Products popd - name: Start iOS Simulator run: | xcrun simctl boot "iPhone 15" - name: Install WebDriverAgent to Simulator run: | set -e SIMULATOR_UDID=$(xcrun simctl list devices "iOS ${{ env.SDK_VERSION }}" | grep "iPhone 15 (" | grep -oE '[0-9A-F-]{36}') echo "SIMULATOR_UDID=$SIMULATOR_UDID" >> $GITHUB_ENV xcrun simctl install $SIMULATOR_UDID \ $GITHUB_WORKSPACE/Build/Products/Release-iphonesimulator/WebDriverAgentRunner-Runner.app - name: Install Appium run: | pushd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pnpm install appium@2.11.2 -w pnpm install appium-xcuitest-driver@7.24.18 -w pnpm install appium-ios-simulator@6.2.6 -w popd env: npm_config_store_dir: ~/.local/share/pnpm/store - name: Download Explorer App uses: lynx-infra/download-artifact@79d9914484f933089c2840552cf439bac85debad with: name: ios-explorer-build-arm64 path: lynx/explorer/darwin/ios/lynx_explorer/build_temp - name: Install Explorer App run: | mkdir -p $GITHUB_WORKSPACE/lynx/explorer/darwin/ios/lynx_explorer/build_temp/LynxExplorer.app tar -xzvf $GITHUB_WORKSPACE/lynx/explorer/darwin/ios/lynx_explorer/build_temp/LynxExplorer-arm64.app.tar.gz -C $GITHUB_WORKSPACE/lynx/explorer/darwin/ios/lynx_explorer/build_temp/LynxExplorer.app xcrun simctl install $SIMULATOR_UDID $GITHUB_WORKSPACE/lynx/explorer/darwin/ios/lynx_explorer/build_temp/LynxExplorer.app - name: Start Appium server run: | pushd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd node_modules/appium/node_modules/.bin ls ./appium server \ --port=$APPIUM_TEST_SERVER_PORT \ --address=$APPIUM_TEST_SERVER_HOST \ --log-no-colors \ --log-timestamp \ 2>&1 > "$GITHUB_WORKSPACE/lynx/appium.log" < /dev/null & popd popd - name: Check if Appium Server is running run: | max_attempts=10 attempt=0 while [ $attempt -lt $max_attempts ]; do if nc -z $APPIUM_TEST_SERVER_HOST $APPIUM_TEST_SERVER_PORT; then echo "Appium Server is running." break else attempt=$((attempt + 1)) echo "Attempt $attempt: Appium Server is not yet running. Retrying in 2 seconds..." sleep 2 fi done if [ $attempt -eq $max_attempts ]; then echo "Failed to start Appium Server." exit 1 fi - name: Run iOS E2E Test uses: nick-fields/retry@v3 with: max_attempts: 2 retry_wait_seconds: 5 timeout_minutes: 20 command: | set -e pushd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script export server_port=$APPIUM_TEST_SERVER_PORT export platform=ios export APPIUM_isHeadless=True pip3 install -r requirements.txt python3 manage.py runtest ios_test.core echo "TASK_STATUS=success" >> $GITHUB_OUTPUT popd popd id: run_test - name: Collect Lynx-E2E execution logs if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else echo "Test execution failed, collecting logs..." pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script ls | grep -E "^lynx_e2e_devtools_.*\.log$" | xargs cat popd fi - name: Collect Appium Server logs if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else echo "Test execution failed, collecting logs..." pushd $GITHUB_WORKSPACE/lynx/ if [ -f "appium.log" ]; then cat appium.log else echo "Warning: appium.log file not found" fi popd fi - name: Collect Generated Resource Files if: always() run: | TASK_STATUS="${{ steps.run_test.outputs.TASK_STATUS }}" if [ -n "$TASK_STATUS" ] && [ "$TASK_STATUS" = "success" ]; then echo "Test execution succeeded." else pushd $GITHUB_WORKSPACE/lynx/testing/integration_test/test_script if [ -d "screenshots" ]; then zip -r screenshots.zip ./screenshots/ echo "Successfully created screenshots.zip" echo "ZIP_RESOURCES=success" >> $GITHUB_OUTPUT else echo "Warning: screenshot directory not found" fi fi id: collect_resource - name: Upload Generated Resource Files if: always() && steps.collect_resource.outputs.ZIP_RESOURCES == 'success' uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 continue-on-error: true with: name: ios-e2e-resources path: '${{ github.workspace }}/lynx/testing/integration_test/test_script/screenshots.zip' clay-macos-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Build Clay Example uses: ./lynx/.github/actions/clay-macos-build - name: upload artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 with: name: clay_glfw path: '${{ github.workspace }}/lynx/out/Default/clay_glfw' macos-explorer-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium strategy: matrix: arch: [arm64, x64] steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Build macOS Explorer uses: ./lynx/.github/actions/macos-explorer-build with: build-arch: ${{ matrix.arch }} - name: upload artifact uses: lynx-infra/upload-artifact@332ec52e99f7cbf1fbbdc9bcc09280d49147d092 with: name: macos-explorer-build-${{ matrix.arch }} path: '${{ github.workspace }}/lynx/LynxExplorer-macos-${{ matrix.arch }}.app.tar.gz' ================================================ FILE: .github/workflows/cocoapods_token_keepalive.yml ================================================ name: CocoaPods Token Keepalive on: schedule: - cron: '0 4 * * *' workflow_dispatch: jobs: token-keepalive: runs-on: lynx-darwin-14-medium env: COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }} steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps with: cache-backend: 'lynx-infra' - name: Keep CocoaPods Token alive run: | cd $GITHUB_WORKSPACE/lynx SDKROOT=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk bundle install --path .bundle bundle exec pod trunk me --silent ================================================ FILE: .github/workflows/codeql.yml ================================================ # For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: 'CodeQL Advanced' on: schedule: - cron: '28 19 * * *' jobs: analyze: name: Analyze (${{ matrix.language }}) # Runner size impacts CodeQL analysis time. To learn more, please see: # - https://gh.io/recommended-hardware-resources-for-running-codeql # - https://gh.io/supported-runners-and-hardware-resources # - https://gh.io/using-larger-runners (GitHub.com only) # Consider using larger runners or machines with greater resources for possible analysis time improvements. runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} permissions: # required for all workflows security-events: write # required to fetch internal or private CodeQL packs packages: read # only required for workflows in private repositories actions: read contents: read strategy: fail-fast: false matrix: include: - language: actions build-mode: none - language: c-cpp build-mode: autobuild - language: java-kotlin build-mode: autobuild - language: javascript-typescript build-mode: none - language: python build-mode: none - language: ruby build-mode: none # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' # Use `c-cpp` to analyze code written in C, C++ or both # Use 'java-kotlin' to analyze code written in Java, Kotlin or both # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages steps: - name: Checkout repository uses: actions/checkout@v4 # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` # or others). This is typically only required for manual builds. # - name: Setup runtime (example) # uses: actions/setup-example@v1 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} build-mode: ${{ matrix.build-mode }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # If the analyze step fails for one of the languages you are analyzing with # "We were unable to automatically build your code", modify the matrix above # to set the build mode to "manual" for that language. Then modify this step # to build your code. # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - name: Run manual build steps if: matrix.build-mode == 'manual' shell: bash run: | echo 'If you are using a "manual" build mode for one or more of the' \ 'languages you are analyzing, replace this with the commands to build' \ 'your code, for example:' echo ' make bootstrap' echo ' make release' exit 1 - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v4 with: category: '/language:${{matrix.language}}' ================================================ FILE: .github/workflows/css-defines-publish.yml ================================================ name: css_defines_publish on: workflow_dispatch jobs: css-defines-publish: runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install SSH Key uses: kielabokkie/ssh-key-and-known-hosts-action@v1 with: ssh-private-key: ${{ secrets.PRIVATE_SSH_KEY }} ssh-host: github.com - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Build run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh - name: Publish run: |- cd $GITHUB_WORKSPACE/lynx/tools/css_generator npm publish --access public --provenance ================================================ FILE: .github/workflows/issue-management.yml ================================================ name: issue_management on: issues: types: - opened - assigned permissions: issues: write jobs: add-label-triage: timeout-minutes: 30 runs-on: lynx-ubuntu-22.04-mini if: github.event.action == 'opened' # Only run for 'opened' event steps: - name: Add 'status:need triage' label to new issues uses: actions-ecosystem/action-add-labels@bd52874380e3909a1ac983768df6976535ece7f8 with: github_token: ${{ secrets.GITHUB_TOKEN }} labels: status:need triage update-label-assigned: timeout-minutes: 30 runs-on: lynx-ubuntu-22.04-mini if: github.event.action == 'assigned' # Only run for 'assigned' event steps: # We won't check if the label exists. We are counting on the robustness of the actions. - name: Remove 'status:need triage' label uses: actions-ecosystem/action-remove-labels@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} labels: status:need triage - name: Add 'status:assigned' label uses: actions-ecosystem/action-add-labels@bd52874380e3909a1ac983768df6976535ece7f8 with: github_token: ${{ secrets.GITHUB_TOKEN }} labels: status:assigned ================================================ FILE: .github/workflows/lynx-core-publish.yml ================================================ name: lynx_core_publish on: workflow_dispatch jobs: lynx_types_publish: runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Build run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd js_libraries/lynx-runtime-shared npm run build popd pushd js_libraries/lynx-core npm run build:web popd - name: Publish run: |- cd $GITHUB_WORKSPACE/lynx/js_libraries/lynx-core npm publish --access public --provenance ================================================ FILE: .github/workflows/lynx-types-publish.yml ================================================ name: lynx_types_publish on: workflow_dispatch: inputs: tag: description: 'The npm tag to publish with.' required: false default: 'latest' jobs: lynx_types_publish: runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Build run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh - name: Update version for non-latest tags if: github.event.inputs.tag != 'latest' run: | cd $GITHUB_WORKSPACE/lynx/js_libraries/types npm version prerelease --preid=${{ github.event.inputs.tag }} --no-git-tag-version - name: Publish run: |- cd $GITHUB_WORKSPACE/lynx/js_libraries/types npm publish --access public --provenance --tag ${{ github.event.inputs.tag }} ================================================ FILE: .github/workflows/publish-release.yml ================================================ name: publish-release on: workflow_dispatch: inputs: tag: description: 'release tag' required: false type: string commitId: description: 'specific commit ID to build' required: false type: string release: types: [published] jobs: get-version: runs-on: lynx-ubuntu-22.04-medium timeout-minutes: 60 outputs: version: ${{ steps.get_version.outputs.VERSION }} steps: - name: Get Version id: get_version run: |- if [ ${{ github.event_name }} == 'workflow_dispatch' ]; then version=${{ github.event.inputs.tag }} else version=$(echo ${{ github.ref }} | awk -F "/" '{print $3}') fi if [[ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ || \ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+-rc\.[0-9]+$ || \ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+-alpha\.[0-9]+$ ]]; then echo "Version is valid" echo "VERSION=$version" >> $GITHUB_OUTPUT; else echo "Version is invalid" exit 1 fi android-explorer-build: timeout-minutes: 60 runs-on: lynx-ubuntu-22.04-large needs: get-version steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Build Explorer App uses: ./lynx/.github/actions/android-explorer-build with: abi-list: armeabi-v7a,x86,x86_64,arm64-v8a - name: push to release uses: ncipollo/release-action@v1 with: tag: ${{ needs.get-version.outputs.version }} token: ${{ secrets.GITHUB_TOKEN }} artifacts: '${{ github.workspace }}/lynx/explorer/android/lynx_explorer/build/outputs/apk/noasan/release/LynxExplorer-noasan-release.apk' allowUpdates: true body: '' ios-explorer-build: timeout-minutes: 60 runs-on: lynx-darwin-14-medium needs: get-version strategy: matrix: arch: [arm64, x86_64] steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Build Explorer App uses: ./lynx/.github/actions/ios-explorer-build with: build-arch: ${{ matrix.arch }} - name: push explorer to release uses: ncipollo/release-action@v1 with: tag: ${{ needs.get-version.outputs.version }} token: ${{ secrets.GITHUB_TOKEN }} artifacts: '${{ github.workspace }}/lynx/LynxExplorer-${{ matrix.arch }}.app.tar.gz' allowUpdates: true body: '' harmony-explorer-build: runs-on: lynx-custom-container container: image: ghcr.io/lynx-family/ubuntu24.04-harmony@sha256:bf493c3710de3c44bfa84caf402c0727b9310c42497f6e52580ad441ea640ef1 credentials: username: lynx-family password: ${{ secrets.GITHUB_TOKEN }} needs: get-version defaults: run: working-directory: ${{ github.workspace }} shell: bash steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Build Explorer App uses: ./lynx/.github/actions/harmony-explorer-build - name: push explorer to release uses: ncipollo/release-action@v1 with: tag: ${{ needs.get-version.outputs.version }} token: ${{ secrets.GITHUB_TOKEN }} artifacts: '${{ github.workspace }}/lynx/explorer/harmony/lynx_explorer/build/default/outputs/default/lynx_explorer-default-unsigned.hap' allowUpdates: true body: '' android-sdk-release: runs-on: ubuntu-22.04 needs: get-version timeout-minutes: 240 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Free up disk space uses: ./lynx/.github/actions/free-android-disk - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Setup Android environment uses: ./lynx/.github/actions/setup-android-env - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: 'github' - name: Android SDK Release uses: ./lynx/.github/actions/android-sdk-release with: version: ${{ needs.get-version.outputs.version }} signingKeyId: ${{ secrets.SIGNING_KEY_ID }} signingPassword: ${{ secrets.SIGNING_PASSWORD }} signingSecretKey: ${{ secrets.SIGNING_SECRET_KEY }} abiList: 'armeabi-v7a,x86,x86_64,arm64-v8a' - name: Package maven artifacts run: |- cd $GITHUB_WORKSPACE/lynx pushd platform/android ./gradlew zipArtifacts -Pversion=${{ needs.get-version.outputs.version }} getArtifactList popd pushd platform/android/build artifact_list=$( publish_key ${{ secrets.HARMONY_PUBLISH_KEY }} EOF ohpm config set publish_registry https://ohpm.openharmony.cn/ohpm export PUBLISH_ID=${{ secrets.HARMONY_PUBLISH_ID }} export KEY_PATH=$GITHUB_WORKSPACE/lynx/publish_key python3 explorer/harmony/script/publish.py --modules ${{ matrix.modules }} --version ${{ needs.get-version.outputs.version }}${{ matrix.version_suffix }} ================================================ FILE: .github/workflows/sdk-release-test.yml ================================================ name: sdk-release-test on: workflow_dispatch: inputs: commitId: description: 'specific commit ID to build' required: false type: string push: branches: - sdk_release_test/** defaults: run: working-directory: lynx jobs: android-sdk-release-test: timeout-minutes: 60 runs-on: ubuntu-22.04 steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Free up disk space uses: ./lynx/.github/actions/free-android-disk - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Setup Android environment uses: ./lynx/.github/actions/setup-android-env - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: 'github' - name: Build Android SDK uses: ./lynx/.github/actions/android-sdk-release with: version: 0.0.1-alpha.1 - name: Collect and zip artifacts run: | cd $GITHUB_WORKSPACE/lynx/platform/android ./gradlew zipAllArtifacts ios-sdk-release-test: timeout-minutes: 15 runs-on: macos-14 env: LOCAL_POD_NAME: 'local_pod' POD_VERSION: '0.0.1-alpha.1' steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx ref: ${{ github.event.inputs.commitId || github.ref }} fetch-depth: 0 - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Set up Ruby + specify Bundler version uses: ruby/setup-ruby@v1 with: ruby-version: '2.6.10' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github - name: Setup Ruby Cache uses: ./lynx/.github/actions/ios-common-deps with: cache-backend: 'github' - name: Prepare cocoapods publish source run: |- source tools/envsetup.sh export LANG=en_US.UTF-8 python3 tools/ios_tools/cocoapods_publish_helper.py --prepare-source --tag $POD_VERSION --version $POD_VERSION --component all - name: Publish to Local Pod Source run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh git config --global user.name "lynx.authors" git config --global user.email "lynx.authors@users.noreply.github.com" python3 tools/ios_tools/cocoapods_publish_helper.py --publish_local $LOCAL_POD_NAME --component all ================================================ FILE: .github/workflows/tasm-publish.yml ================================================ name: tasm_publish on: push: branches: - develop paths: - 'oliver/lynx-tasm/package.json' workflow_dispatch: jobs: check-version-change: runs-on: ubuntu-latest outputs: version_changed: ${{ steps.check.outputs.version_changed }} steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx fetch-depth: 2 # latest 2 commits - name: Check version field change or skip on manual trigger id: check run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then echo "Manual trigger detected, skip version check." echo "version_changed=true" >> $GITHUB_OUTPUT else cd $GITHUB_WORKSPACE/lynx version_current=$(jq -r '.version' oliver/lynx-tasm/package.json) if git rev-parse HEAD~1 >/dev/null 2>&1; then version_before=$(git show HEAD~1:oliver/lynx-tasm/package.json | jq -r '.version') else version_before="" fi echo "Current version: $version_current" echo "Previous version: $version_before" if [ "$version_current" != "$version_before" ]; then echo "version_changed=true" >> $GITHUB_OUTPUT else echo "version_changed=false" >> $GITHUB_OUTPUT fi fi tasm-linux-build: if: needs.check-version-change.outputs.version_changed == 'true' runs-on: ubuntu-latest needs: check-version-change steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - uses: actions/setup-node@v4 with: node-version: 18 - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github target: tasm - name: Build Linux Tasm run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:release:linux popd - name: Upload Linux Tasm Artifacts uses: actions/upload-artifact@v4 with: name: tasm_linux path: lynx/oliver/lynx-tasm/build/linux/Release/lepus.node tasm-darwin-build: if: needs.check-version-change.outputs.version_changed == 'true' runs-on: macOS-latest needs: check-version-change steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - uses: actions/setup-node@v4 with: node-version: 18 - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github target: tasm - name: Build Darwin Tasm run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:release:darwin popd - name: Upload Darwin Tasm Artifacts uses: actions/upload-artifact@v4 with: name: tasm_darwin path: lynx/oliver/lynx-tasm/build/darwin/Release/lepus.node tasm-publish: runs-on: macOS-latest permissions: contents: read id-token: write needs: [tasm-linux-build, tasm-darwin-build] environment: npm steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github target: tasm - name: Build Wasm Binary run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:wasm popd - name: Download Linux Tasm Artifacts uses: actions/download-artifact@v4 with: name: tasm_linux path: lynx/oliver/lynx-tasm/build/linux/Release - name: Download Darwin Tasm Artifacts uses: actions/download-artifact@v4 with: name: tasm_darwin path: lynx/oliver/lynx-tasm/build/darwin/Release - name: Build run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh pushd oliver/lynx-tasm npm install npm run build:wasm - name: Publish run: |- cd $GITHUB_WORKSPACE/lynx/oliver/lynx-tasm npm publish --access public --provenance ================================================ FILE: .github/workflows/type-config-publish.yml ================================================ name: type_config_publish on: workflow_dispatch: inputs: tag: description: 'The npm tag to publish with.' required: false default: 'latest' jobs: type_config_publish: runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx - name: Python Setup uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Common Dependencies uses: ./lynx/.github/actions/common-deps with: cache-backend: github - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Build run: |- cd $GITHUB_WORKSPACE/lynx source tools/envsetup.sh - name: Update version for non-latest tags if: github.event.inputs.tag != 'latest' run: | cd $GITHUB_WORKSPACE/lynx/js_libraries/type-config npm version prerelease --preid=${{ github.event.inputs.tag }} --no-git-tag-version - name: Test run: |- cd $GITHUB_WORKSPACE/lynx/js_libraries/type-config npm test - name: Publish run: |- cd $GITHUB_WORKSPACE/lynx/js_libraries/type-config npm publish --access public --provenance --tag ${{ github.event.inputs.tag }} ================================================ FILE: .github/workflows/type-element-api-publish.yml ================================================ name: type_element_api_publish on: push: branches: - develop paths: - 'js_libraries/type-element-api/*' workflow_dispatch: jobs: check-version-change: runs-on: ubuntu-latest outputs: version_changed: ${{ steps.check.outputs.version_changed }} steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx fetch-depth: 1 # latest 1 commit - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Check version field change id: check run: | # achieve content of package.json pushd $GITHUB_WORKSPACE/lynx/js_libraries/type-element-api version_current=$(jq -r '.version' package.json) version_before=$(npm view @lynx-js/type-element-api version) echo "Current version: $version_current" echo "Previous version: $version_before" if [ "$version_current" != "$version_before" ]; then echo "version_changed=true" >> $GITHUB_OUTPUT else echo "version_changed=false" >> $GITHUB_OUTPUT fi type_element_api_publish: if: needs.check-version-change.outputs.version_changed == 'true' needs: check-version-change runs-on: ubuntu-latest environment: npm permissions: contents: read id-token: write steps: - name: Download Source uses: actions/checkout@v4.2.2 with: path: lynx fetch-depth: 1 # latest 1 commit - uses: actions/setup-node@v4 with: node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Setup Package Managers run: | npm install -g npm@latest npm --version - name: Publish run: |- pushd $GITHUB_WORKSPACE/lynx/js_libraries/type-element-api npm publish --access public ================================================ FILE: .gitignore ================================================ # Managed by Habitat /platform/android/gradle/wrapper/gradle-6.7.1-all.zip /build /buildtools /third_party/quickjs/src /third_party/libcxx /third_party/v8 /third_party/libcxxabi /third_party/llvm /third_party/glfw /third_party/gyp /third_party/googletest /third_party/checkstyle /third_party/xhook /third_party/zlib /third_party/RTF/ /third_party/NativeScript/include /third_party/NativeScript/lib /third_party/perfetto /third_party/httplib /third_party/boringssl /third_party/webview2 /third_party/vulkan-deps *.profraw __pycache__ /venv .venv .venv.lock *.log* npm-debug.log* yarn-debug.log* yarn-error.log* /*.podspec .bundle .pnpm-debug.log ruby # Auto generated files /platform/android/lynx_android/src/main/java/com/lynx/tasm/featurecount/LynxFeatureCounter.java /platform/darwin/common/lynx/feature_count/LynxFeature.h /core/services/feature_count/feature.h /js_libraries/lynx-core/common/feature.ts core/build/gen/ /core/build/jni/gen /core/build/jni/BUILD.gn **/build/gen /core/template_bundle/template_codec/binary_decoder/lynx_config_auto_gen.h /core/template_bundle/template_codec/binary_decoder/lynx_config_constant_auto_gen.h /core/template_bundle/template_codec/binary_decoder/lynx_config_auto_gen.cc # Auto generated error code files /platform/darwin/common/lynx/LynxErrorBehavior.m /platform/darwin/common/lynx/LynxSubErrorCode.m /platform/darwin/common/lynx/Public/LynxErrorBehavior.h /platform/darwin/common/lynx/Public/LynxSubErrorCode.h out/ platform/darwin/ios/JSAssets/ platform/android/lynx_js_sdk/src/debug/assets/ platform/android/lynx_js_sdk/src/main/assets/ tools/android_tools/ndk tools/android_tools/sdk platform/android/.gradle/ platform/android/local.properties platform/android/lynx_android/.cxx/ platform/android/lynx_processor/bin/ platform/android/lynx_android/CMakeLists_impl/ platform/android/lynx_android/libs/ platform/android/lynx_devtool/src/main/jniLibs/ explorer/android/lynx_explorer/build/ explorer/android/.gradle/ explorer/android/.idea/ explorer/android/build/ explorer/android/gradle/wrapper/gradle-6.7.1-all.zip explorer/android/local.properties explorer/android/lynx_explorer/src/main/assets/* !explorer/android/lynx_explorer/src/main/assets/testBench/ core/runtime/jsi/v8/CMakeLists_impl/ explorer/darwin/ios/lynx_explorer/Podfile.lock explorer/darwin/ios/lynx_explorer/Pods explorer/darwin/ios/lynx_explorer/LynxExplorer.xcworkspace/* explorer/darwin/ios/lynx_explorer/LynxExplorer.xcodeproj/** !explorer/darwin/ios/lynx_explorer/LynxExplorer.xcodeproj/ !explorer/darwin/ios/lynx_explorer/LynxExplorer.xcodeproj/project.pbxproj !explorer/darwin/ios/lynx_explorer/LynxExplorer.xcodeproj/xcshareddata/ !explorer/darwin/ios/lynx_explorer/LynxExplorer.xcodeproj/xcshareddata/** explorer/darwin/ios/lynx_explorer/LynxExplorer/Resource/* !explorer/darwin/ios/lynx_explorer/LynxExplorer/Resource/testBench explorer/darwin/ios/lynx_explorer/iOSCoreBuild/ explorer/darwin/ios/lynx_explorer/results_bundle explorer/darwin/ios/lynx_explorer/xctestrunner ruby/ # JSLibrary node_modules js_libraries/**/dist/ js_libraries/**/__dist__ js_libraries/**/output/ js_libraries/**/node_modules/ js_libraries/**/lib js_libraries/lynx-core/src/common/feature.ts /core/renderer/css/auto_gen_css_decoder.h /core/renderer/css/auto_gen_css_decoder.cc /core/renderer/css/css_property_id.h /core/renderer/css/css_property_auto_gen_unittest.cc /core/renderer/css/parser/animation_property_handler.h /core/renderer/css/parser/bool_handler.h /core/renderer/css/parser/border_style_handler.h /core/renderer/css/parser/border_width_handler.h /core/renderer/css/parser/color_handler.h /core/renderer/css/parser/length_handler.h /core/renderer/css/parser/number_handler.h /core/renderer/css/parser/string_handler.h /core/renderer/css/parser/time_handler.h /core/renderer/css/parser/timing_function_handler.h /core/renderer/starlight/style/auto_gen_css_type.h /platform/darwin/common/lynx/public/base/LynxAutoGenCSSType.h /platform/android/lynx_processor/src/main/java/com/lynx/tasm/behavior/PropertyIDConstants.java /platform/android/lynx_android/src/main/java/com/lynx/tasm/behavior/AutoGenStyleConstants.java # ignore all python script cache **/__pycache__/ # ignore os specific hidden files **/.DS_Store # Editor specific files .vscode *.sublime-project *.sublime-workspace .idea # ignore Gradle files **/.gradle/ # api metadata /tools/api/android /tools/api/ios /tools/api/docs/gen ================================================ FILE: .gn ================================================ # Copyright 2020 The Lynx Authors. All rights reserved. # Licensed under the Apache License Version 2.0 that can be found in the # LICENSE file in the root directory of this source tree. script_executable = rebase_path("//.venv/bin/python3") buildconfig = "//build/config/BUILDCONFIG.gn" secondary_source = "//build/secondary/" root = ":root" default_args = { lynx_dir = "" # Disable ANGLE vulkan angle_enable_vulkan = false angle_build_vulkan_system_info = false # Do not build ANGLE tests angle_build_all = false } ================================================ FILE: .habitat ================================================ habitat_version = "0.3.146-alpha.2" solutions = [ { 'name': '.', 'deps_file': 'dependencies/DEPS', 'url': '', 'target_deps_files': { 'clay': 'dependencies/DEPS.clay', 'dev': 'dependencies/DEPS.dev', 'extension': 'dependencies/DEPS.extension', 'tasm': 'dependencies/DEPS.tasm', 'tools_shared': 'dependencies/DEPS.tools_shared', 'lynxtron': 'dependencies/DEPS.lynxtron', }, } ] ================================================ FILE: .npmrc ================================================ # We are using flatten config of eslint and not using prettier # Disable the default public-hoist-pattern(*-eslint-*, *-prettier-*) public-hoist-pattern= strict-peer-dependencies=true engine-strict=true registry=https://registry.npmjs.org ================================================ FILE: .prettierignore ================================================ __dist__/ dist/ packages/template-assembler-cli/lepus/**/* packages/lynx-core/__tests__/fixtures/**/* packages/lynx-core/lepus/**/* *.d.ts oliver/**/*.js !oliver/**/*.config.js !oliver/compiler-ng/scripts/*.js !oliver/type-lynx/**/*.d.ts node_modules/ ================================================ FILE: .prettierrc ================================================ { "bracketSpacing": true, "printWidth": 80, "singleQuote": true, "tabWidth": 2, "trailingComma": "es5", "useTabs": false } ================================================ FILE: .rtf/android-ut-lynx.template ================================================ # Copyright 2024 The Lynx Authors. All rights reserved. builder({ "default": { "args": [ "--parallel", "--configure-on-demand", "-x lint", "-PabiList=x86", "-Penable_lynx_android_test=true", "-Penable_coverage=true", ], "workspace": "platform/android", "type": "gradle", } }) coverage({ "output": "out/coverage", "type": "jacoco", "jacoco_cli":"../third_party/jacoco/lib/jacococli.jar" }) targets({ "LynxAndroid": { "owners":["ZhaoSongGOO"], "task": "LynxAndroid:assembleNoasanDebugAndroidTest", "source_files":"platform/android/lynx_android/src/main/java", "class_files":"platform/android/lynx_android/build/intermediates/javac/noasanDebug/classes/*", "apk":"platform/android/lynx_android/build/outputs/apk/androidTest/noasan/debug/LynxAndroid-noasan-debug-androidTest.apk", "package":"com.lynx.test", "coverage":False, }, "LynxDevtool": { "owners":["ZhaoSongGOO"], "task": "LynxDevtool:assembleNoasanDebugAndroidTest", "source_files":"platform/android/lynx_devtool/src/main/java", "class_files":"platform/android/lynx_devtool/build/intermediates/javac/noasanDebug/classes/*", "apk":"platform/android/lynx_devtool/build/outputs/apk/androidTest/noasan/debug/LynxDevtool-noasan-debug-androidTest.apk", "package":"com.example.lynxdevtool.test", "coverage":False, } }) ================================================ FILE: .rtf/config ================================================ plugins = ["NativeUT", "AndroidUT"] ================================================ FILE: .rtf/native-ut-devtool.template ================================================ # Copyright 2024 The Lynx Authors. All rights reserved. # Licensed under the Apache License Version 2.0 that can be found in the # LICENSE file in the root directory of this source tree. builder({ "default" :{ "args": [ f"use_sccache={options.get_str('use_sccache', 'false')}", "enable_lepusng_worklet=true", "enable_unittests=true", "enable_napi_binding=true", "enable_coverage=true", "enable_inspector=true", ], "output": "out/Default", "type": "gn", }, "build_for_element_test":{ "args": [ "enable_lepusng_worklet=true", "enable_unittests=true", "enable_napi_binding=true", "enable_coverage=true", ], "output": "out/Default_element_test", "type": "gn", }, "build_for_agent_test":{ "args": [ "enable_lepusng_worklet=true", "enable_unittests=true", "enable_napi_binding=true", "enable_coverage=true", "enable_testbench_recorder=true", "enable_testbench_replay=true", ], "output": "out/Default_agent_test", "type": "gn", } }) coverage({ "output": "out/coverage", "ignores": [ "third_party/*", ".*_unittest.cc", ".*_unittest.h", "core/*", "core/base/*", "core/runtime/vm/lepus/*", "core/parser/*", "core/runtime/*", "testing/*" ], "type": "llvm", }) targets({ "devtool_element_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'build_for_element_test' }, "devtoolng_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "devtool_base_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "devtool_agent_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'build_for_agent_test', "args":["--gtest_filter=\"-*DISABLE*\""] }, "js_debug_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "shared_data_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "test_bench_utils_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "message_handler_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, }) ================================================ FILE: .rtf/native-ut-lynx.template ================================================ # Copyright 2024 The Lynx Authors. All rights reserved. # Licensed under the Apache License Version 2.0 that can be found in the # LICENSE file in the root directory of this source tree. builder({ "default" :{ "args": [ "enable_lepusng_worklet=true", "enable_unittests=true", "enable_inspector = true", "enable_napi_binding=true", "enable_coverage=true", f"is_asan={options.get_str('enable_asan', 'false')}", ], "output": "out/Default", "type": "gn", }, "builder_for_trace" :{ "args": [ "enable_lepusng_worklet=true", "enable_unittests=true", "enable_napi_binding=true", "enable_coverage=true", "enable_trace=\\\"perfetto\\\"" ], "output": "out/Default_test_enable_trace", "type": "gn", }, }) coverage({ "output": "out/coverage", "ignores": [ ".*_unittest.cc", ".*_unittests.cc", ".*_unittests.mm" "*_tests.cc", "*_test.cc", ".*_test.h", ".*_unittest.h", ".*_test.cc", "core/shell/testing/*", "core/animation/testing/*", "core/renderer/ui_wrapper/testing/*", "core/renderer/dom/air/testing/*", "core/runtime/vm/lepus/compiler/encode_main.cc", "testing/*", ] + options.get_dir_list("third_party", excludes=["base"]), "type": "llvm", }) targets({ "base_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "args":["--gtest_filter=\"-*TimeSensitiveTest*\""] }, "binary_decoder_unittest_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "trace_unittests_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'builder_for_trace' }, "profile_unittests_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'builder_for_trace' }, "v8_profile_unittests_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'builder_for_trace' }, "quickjs_profile_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'builder_for_trace' }, "lepusng_profile_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "builder":'builder_for_trace' }, "dom_unittest_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "args":["--gtest_filter=\"-*DISABLE*\""] }, "value_wrapper_unittest_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True }, "record_unittest_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True }, "renderer_utils_unittests_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "replay_unittest_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True }, "shell_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "args":["--gtest_filter=\"-*DISABLE*\""] }, "css_parser_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "css_encoder_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "style_object_encoder_testset_exec":{ "cwd": ".", "owners":["Zhongyr"], "coverage": True, "enable_parallel":True, }, "runtime_tests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "retry":3, }, "worklet_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "shared_data_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "retry":3, }, "element_selector_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "lazy_bundle_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "animation_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "basic_animation_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "enable":False }, "lynx_basic_animator_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, "enable":True }, "inspector_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "event_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "events_test_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "signal_test_exec": { "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "starlight_unittest_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "runtime_common_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "js_runtime_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "lepus_runtime_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "task_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "page_config_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "mapbuffer_unittests_exec":{ "cwd": ".", "owners":["ZhaoSongGOO"], "coverage": True, "enable_parallel":True, }, "list_container_testset_exec":{ "cwd": ".", "owners":["dingwang.wxx"], "coverage": True, "enable_parallel":True, }, "pipeline_test_exec": { "cwd": ".", "owners":["yangguangzhao.solace", "nihao.royal"], "coverage": True, "enable_parallel":True, }, "lynx_service_api_static_unittests_exec": { "cwd": ".", "owners":["dangyingkai", "nihao.royal"], "coverage": True, "enable_parallel": True, } }) ================================================ FILE: .tools_shared ================================================ checker-config: default-disable-checkers: - 'deps' - 'spell' file-type-checker: binary-files-allow-list: - 'core/renderer/css/testing/*' - 'devtool/lynx_devtool/resources/devtool-switch/src/assets/*' - 'explorer/darwin/ios/Lynx_explorer/LynxExplorer/Assets.xcassets/AppIcon.appiconset/*' - 'explorer/harmony/AppScope/resources/base/media/*' - 'third_party/binding/idl-codegen/third_party/doc/_static/*' - '^explorer/darwin/ios/lynx_explorer/*' - '^explorer/homepage/assets/images/*' - '^explorer/showcase/menu/assets/images/*' - '^platform/android/gradle/wrapper/*' - '^platform/android/lynx_android/src/main/res/*' - '^platform/android/lynx_example/*' - '^platform/android/lynx_test_bench/*' - 'devtool/base_devtool/resources/images/*' - 'devtool/lynx_devtool/resources/images/*' - 'platform/android/lynx_devtool/src/main/res/drawable/*' - 'explorer/android/gradle/*' - 'explorer/android/lynx_explorer/*' - 'explorer/android/lynx_explorer/src/main/res' - 'testing/integration_test/test_script/resources/*' - 'explorer/android/lynx_test_bench/scr/main/res' coding-style-checker: ignore-suffixes: - '_jni.h' - 'pnpm-lock.yaml' - 'Podfile.yml' - '.d.ts' - '.r.ts' ignore-dirs: - '^core/build/gen/*' - '^third_party/*' - '^build/*' - '^base/include/boost/*' - '^third_party/(aes|double-conversion|modp_b64|rapidjson|binding|quickjs|napi)/*' - '^explorer/darwin/ios/Lynx_explorer/LynxExplorer/Resource/' - '^clay/testing/*' - '^clay/third_party/txt/*' cpplint-checker: ignore-suffixes: - '_jni.h' - 'pnpm-lock.yaml' - 'Podfile.yml' - '.d.ts' - '.r.ts' ignore-dirs: - '^core/build/gen/*' - '^third_party/*' - '^build/*' - '^base/include/boost/*' - '^third_party/(aes|double-conversion|modp_b64|rapidjson|binding|quickjs|napi)/*' - '^explorer/darwin/ios/Lynx_explorer/LynxExplorer/Resource/' - '^clay/testing/*' - '^clay/third_party/txt/*' api-checker: api-check-bin: 'tools/api/main.py' java-path: - 'platform/android/lynx_android/src/main' cpp-path: - 'platform/darwin/ios/lynx' - 'platform/darwin/common/lynx' instruction-doc: https://github.com/lynx-family/lynx/blob/develop/CONTRIBUTING.md#static-code-analysis-tasks gn-relative-path-checker: skip-prefixes: - "//PODS_ROOT" - "//PODS_CONFIGURATION_BUILD_DIR" - "//TARGET_BUILD_DIR" - "//PODS_TARGET_SRCROOT" - "//build_overrides" - "//build" - "//$lynx_dir" - "//${lynx_dir}" - "//third_party" - "//config.gni" - "//tools/idl_parser" - "//out/" - "//tools_shared" header-path-checker: processed-file-dirs: - "base" - "clay" - "core" - "devtool" - "explorer" - "oliver" - "platform" header-search-paths: - "base" - "clay" - "core" - "devtool" - "explorer" - "oliver" - "platform" - "third_party" exclude-processed-file-dirs: - "core/include/starlight_standalone" - "/public/" - "clay/third_party/" - "third_party/napi/include/" - "explorer/" header-extend-prefixes: - "public" ignore-header-files: - "skity/" - "napi.h" - "v8.h" - "v8-inspector.h" - "v8-profiler.h" - "quickjs/include/" - "persistent-handle.h" - "trace-gc.h" ================================================ FILE: AGENTS.md ================================================ # AI Context & Guidelines This repository contains a dedicated directory structure for AI agents to better understand the project's specific domain context, architectural decisions, and coding conventions. ## 🤖 For AI Agents When working in this repository, please consult the contents of the **[`agents/`](./agents)** directory. This folder serves as a knowledge base containing: - **Domain Knowledge**: Specific business logic and terminology used in this project. - **Architecture Overview**: High-level design patterns and structural decisions. - **Coding Standards**: Project-specific conventions that supplement general best practices. **Action**: Before proposing significant changes or architectural updates, read the relevant documents in `agents/` to align with the project's established patterns. ================================================ FILE: BUILD.gn ================================================ # Copyright 2024 The Lynx Authors. All rights reserved. # Licensed under the Apache License Version 2.0 that can be found in the # LICENSE file in the root directory of this source tree. import("clay/common/config.gni") import("config.gni") group("root") { testonly = true deps = [ ":default", ":third_party_base_group", ":third_party_trace_group", ] } group("default") { testonly = true deps = [ "core:lynx_native" ] if (is_android) { deps += [ "platform/android:Android" ] } else if (is_harmony) { deps += [ "platform/harmony" ] } else if (is_ios) { deps += [ "platform/darwin/ios/lynx_service:LynxService" ] deps += [ "platform/darwin/ios/lynx_service_api:LynxServiceAPI_podspec" ] deps += [ "platform/darwin/ios/lynx_devtool:devtool_podspec" ] deps += [ "platform/darwin/ios/lynx_xelement:XElement" ] deps += [ "platform/darwin/ios:iOS" ] deps += [ "devtool/base_devtool/darwin/ios:BaseDevtool_podspec" ] } else if ((is_win || is_mac) && desktop_enable_embedder_layer) { deps += [ "explorer:explorer" ] } if (enable_unittests) { deps += [ "tools/gn_tools/test:gn_tools_test" ] } if (enable_clay) { deps += [ "clay:standalone_lib" ] } } group("all") { # lynx core modules deps = [ "core:lynx_core_native" ] # testing if (enable_unittests) { testonly = true deps += [ "testing" ] } } group("oliver_group") { deps = [ "oliver" ] } group("third_party_base_group") { deps = [] testonly = true if (enable_unittests) { deps += [ "base/src:base_unittests_exec" ] } } group("third_party_trace_group") { deps = [] testonly = true if (enable_unittests) { deps += [ "base/trace/native:trace_tests" ] } } ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: - Using welcoming and inclusive language - Being respectful of differing viewpoints and experiences - Gracefully accepting constructive criticism - Focusing on what is best for the community - Showing empathy towards other community members Examples of unacceptable behavior by participants include: - The use of sexualized language or imagery and unwelcome sexual attention or advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment - Publishing others’ private information, such as a physical or electronic address, without explicit permission - Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at opensource-conduct@tiktok.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership. ## Attribution This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to Lynx First off, thank you for considering contributing to Lynx! We welcome you to join Lynx Authors and become a member. It's people like you who make this project great. ## How Can I Contribute? ### Reporting Bugs If you find a bug, please open an issue with the following details: - A clear and descriptive title for the issue. - A description of the steps to reproduce the issue. - Any additional information or screenshots that might help us understand the issue better. ### Suggesting Enhancements We’re always open to new ideas! If you have a suggestion, please: - Use the “Feature Request” issue template or create a new issue. - Describe the enhancement you’d like and explain why it would be useful. ### Your First Code Contribution Unsure where to start? You can find beginner-friendly issues using the “good first issue” label. Working on these issues helps you get familiar with the codebase before tackling more complex problems. ### Pull Requests When you’re ready to make a code change, please create a Pull Request: 1. Fork the repository and clone it to your local machine. 2. Create a new branch: `git checkout -b name-of-your-branch`. 3. Make your changes. 4. Once you have finished the necessary tests and verifications locally, commit the changes with a commit message in the following format (some parts are optional): ``` [Label] Title of the commit message (one line) Summary of change: Longer description of change addressing as appropriate: why the change is made, context if it is part of many changes, description of previous behavior and newly introduced differences, etc. Long lines should be wrapped to 72 columns for easier log message viewing in terminals. issue: #xxx doc: https://xxxxxxxx TEST: Test cases ``` Some parts in the message template are required, while others are optional. We use the labels `[Required]` and `[Optional]` to differentiate them in the detailed explanation below: - **[Required]** The first line of the commit message should be the title, summarizing the changes (the title must be on a separate line). - **[Required]** The title must start with at least one label, and the first label must be one of the following: `Feature`, `BugFix`, `Refactor`, `Optimize`, `Infra`, `Testing`, `Doc`. The format should be: `[Label]`, e.g., `[BugFix]`, `[Feature]`, `[BugFix][Tools]` (there must be at least one space between the label(s) and the title content, and the title must not be empty). > > Which label should I use? Here are the explanations for them: > - **`[Feature]`**: New features, new functions, or changes to existing features and functions. For example: > - `[Feature] Add new API for data binding` Add a new API for data binding > - `[Feature] Add service for light sensors` Add a service for light sensors > - `[Feature][Log] Support async event report` Support asynchronous event reporting > - **`[BugFix]`**: Fixes for functional defects, performance anomalies, and problems in developer tools, etc. For example: > - `[BugFix] Fix exception when playing audio` Fix the exception when playing audio > - `[BugFix] Fix leaks in xxx` Fix the memory leak problem in xxx > - `[BugFix][DevTool] Fix data error in DevTool` Fix the data error in the debug tool > - **`[Refactor]`**: The overall refactoring of a module or function (mainly refers to large-scale code rewriting or architecture optimization; small-scale refactoring can be classified as Optimize). For example: > - `[Refactor][Memory] Memory management in xxxx` Refactor the memory management of the xxx module > - `[Refactor][TestBench] XX module in TestBench` Refactor the xxx module in the TestBench > - **`[Optimize]`**: Small-scale optimization of a certain feature or indicator, such as performance optimization, memory optimization, etc. For example: > - `[Optimize][Performance] Jank when scrolling in xxxx` Optimization of the smoothness when scrolling in xxxx > - **`[Infra]`**: Changes related to the compilation framework, CQ configuration, basic tools, etc. For example: > - `[Infra][Compile] Use -Oz compile params in xxx` Use -Oz compilation parameters > - **`[Testing]`**: Modifications related to test cases and test frameworks. For example: > - `[Testing][Android] Fix xxx test case for Android` Fix a test case for Android > - `[Testing] Optimize test process` Optimize the process of a certain test framework > > > Modifications only involving test cases, even if it is a `BugFix`, should be classified as `Testing`. If both `Feature` code and related test cases are submitted in the same patch, it should be classified as `Feature`. - **[Required]** The section following the title should be the summary, providing a detailed description of the changes (there must be a blank line between the title and the summary). - **[Optional]** The commit can be linked to an issue, and the issue ID needs to appear in the format `issue: #xxx`. - **[Optional]** The commit can be linked to a document. If you labeled your changes as `Feature` or `Refactor`, this is required. The format of a doc link should be like this: `doc: https://xxxxxxx` - **[Optional]** The commit can be linked to tests (unit tests, UI tests). You can write the case names in the format: `TEST: test_case_1, test_case_2`
We have set up a CI workflow to ensure that the commit message meets our formatting requirements. So please make sure your message is well formatted before starting the Pull Request process. 5. Push the changes to your remote branch and start a Pull Request. > We encourage the submission of small patches and only accept PRs that contain a single commit. Therefore, please split your PR into separate ones if it contains multiple commits, or squash them into a single commit if there are not too many changes. > The CI workflow will reject any PR that contains more than one commit. 6. Make sure that your Pull Request adheres to the style guide and is properly documented. ## Verifying and Reviewing Pull Requests A Pull Request needs to be verified by the CI workflows and reviewed by the Lynx authors before being merged. Once you submit a Pull Request, you can invite the contributors of the repository to review your changes. If you have no idea whom to invite to review your changes, the GitHub branch protection rules and `git blame` are the right places to start. While any contributor can review your changes, at least one of the authors from [default reviewers](./DEFAULT_REVIEWERS) should be on the reviewer list. Default reviewers can help trigger the CI workflow run to verify the changes (if this is your first PR for Lynx, you'll see a pending approval on the PR discussion area after you submit the PR) and then start the landing process. > The workflow run needs to be triggered by default reviewers so they can ensure the new changes will not introduce any risks. Typically, a Pull Request will be reviewed **within one week**. The landing process will be triggered manually if the changes pass all CI checks and are ready to be merged. ### Static Code Analysis Tasks CI tasks include static code analysis, unit testing, building, etc. You can run static code analysis tasks: ``` source tools/envsetup.sh tools/hab sync . -f git lynx check ``` The table below shows the specific tasks performed by `git lynx check`: | Task Name | Description | | --------------------- | ----------------------------------------------------------------------------------------------------- | | `coding-style` | Check the coding style of files | | `commit-message` | Check the format of commit message | | `cpplint` | Check your C++ code for style violations and potential errors | | `java-lint` | Check your Java code for style violations and potential errors | | `android-check-style` | Check the import style of Android code | | `file-type` | Check whether there are any binary files (We do not recommend storing binary files in the repository) | | `api-check` | Check changes to public APIs and update the corresponding API files as needed | These tasks can also be executed individually via commands, for example, the `api-check` task can be run with `git lynx check --checkers=api-check`. The specific programming languages and tools supported by `coding-style` task: | Language | Supported | Formatting Tool | | ---------------------- | --------- | --------------- | | C,C++,Objective-C,Java | ✅ | clang-format | | TypeScript | ✅ | prettier | | GN | ✅ | gn | ## Landing Pull Requests To make sure that new changes won't break the additional tests, all Pull Requests need to be landed by a self-hosted CI system. When a Pull Request is ready to be merged, default reviewers will comment the command `/land` on the PR. Then the CI system will start the landing process running full tests. Please be patient, as that could take a while. If a failure occurs during the landing process, we have two approaches to handle different situations: - If a change that breaks the tests is reasonable, the default reviewers will fix them in the self-hosted codebase and restart the failed process. In this situation, the PR author needs to do nothing except wait for it to be merged. - If the changes are found to have bugs during testing, the person who started the landing process is responsible for providing feedback on the issue and relevant information to the author of the PR. Once the bugs are fixed, the author can restart from verifying and reviewing the PR and then wait for someone to reland it. When your changes pass all checks in the self-hosted CI system, the PR will be merged automatically. ## Code Style Our project adheres to the coding style guidelines provided by Google. You can find the detailed guidelines here: [Google's Style Guides](https://google.github.io/styleguide/). Following these style guides helps ensure that our code is consistent, clear, and of high quality. Please make sure to familiarize yourself with these guidelines of C++, Java, Objective-C, and Python before contributing to the project. We provide a convenient tool called `git lynx` that can automatically format your code when coding style checks fail. Note that it will only check changes that have been committed. ``` git lynx format ``` Special thanks to Google for making these comprehensive style guides available for developers! ## Testing Make sure your changes are covered by tests, if applicable. Run the existing tests to ensure everything works as expected: - [Unit Tests](testing/README_UT.md) ## Code of Conduct Please note that all participants in this project are expected to uphold our [Code of Conduct](CODE_OF_CONDUCT.md). By participating, you agree to abide by its terms. We're excited to see your contributions! Thank you! ================================================ FILE: CPPLINT.cfg ================================================ set noparent filter=-,+lynx_custom/new_java_ref,+build/namespaces,+build/c++14,+build/class,+build/c++tr1,+build/deprecated,+build/endif_comment,+build/explicit_make_pair,+build/forward_decl,+build/header_guard,+build/include_what_you_use,+runtime/casting,+runtime/init,+runtime/invalid_increment,+runtime/member_string_references,+runtime/memset,+runtime/indentation_namespace,+runtime/operator,+runtime/vlog exclude_files=.*\.java exclude_files=.*\.mm exclude_files=.*\.m exclude_files=.*unittest\.cc exclude_files=.*mock_element\.cc ================================================ FILE: DEFAULT_REVIEWERS ================================================ nhsprite AdrianLCA Awuiil BiggerDragonDragon ChrisChan0668 cjnhust codeoxpower colinaaa coolkiid Dango-2021 deanjingshui zsy-jason zhongyr ZhaoSongGOO yuweizheng YellowFishWyfCPP Yellow5A5 wqyfavor viekai usczz upupming talisk SuperYaoYU ShouruiSong Shouqun scanf3 RuiwenTang RovicnowYoyi RobinWuu rAY-ooo popoaichuiniu PineconeSquirrel pilipala195 pandazyp Neilcc MedicalProject lybvinci loongliu linxs0211 lidadating Kingatnuaa0528 icecreamx333 huzhanbo1996 DwwWxx hfuttyh GhostFlying FrendyChen ChrisChan0668 toretto-wt fzx2666 cddcoding partholon KingAlen kaychn126 Huxpro aijm ulivz zoolsher HuJean xuanyi-fu Randycn hxxft luhc228 jimmychanii lanjunq yulitaotao givemefive9 minalwws keweibing gaoachao rel-q Sherry-hue swfork Aimee1608 chenjiahan f0rdream kanan-su Tamerlx jtsky GuoXi shengweilin roland-reed iaohangninja1989 RickAi omnipo WATER1350 kazec cherrycreek28 wozaijinjiea billllllllller XianghuDong cocochick Sleen Yradex minalwws Aimee1608 mitchilling ================================================ FILE: Gemfile ================================================ source 'https://rubygems.org' gem "cocoapods", '1.11.3' gem "ffi", "1.16.3" ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] 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. ================================================ FILE: NOTICE ================================================ Lynx Project Copyright (c) 2018-2024 ByteDance Inc. Copyright (c) 2024 TikTok Inc. All rights reserved. ================================================ FILE: README.md ================================================

Lynx

[![Apache licesed](https://img.shields.io/badge/License-Apache--2.0-cyan?logo=apache)](https://github.com/lynx-family/lynx/blob/develop/LICENSE) [![Latest release version](https://img.shields.io/github/v/release/lynx-family/lynx.svg)](https://github.com/lynx-family/lynx/releases) [![CI status](https://img.shields.io/github/actions/workflow/status/lynx-family/lynx/ci.yml)](https://github.com/lynx-family/lynx/actions) [![X (formerly Twitter) URL](https://img.shields.io/twitter/url?url=https%3A%2F%2Fx.com%2Flynxjs_org&style=social&label=Lynx)](https://x.com/lynxjs_org) [![Discord](https://img.shields.io/discord/1345754526174543964?logo=discord&style=social&label=Lynx)](https://discord.gg/mXk7jqdDXk) Empower the web community and invite more to build across platforms
## Content - [About Lynx](#About-Lynx) - [Documentation](#Documentation) - [How to Use Lynx](#How-to-Use-Lynx) - [Lynx Explorer](#Lynx-Explorer) - [How to Contribute](#How-to-Contribute) - [Discussions](#Discussions) - [Credits](#Credits) - [License](#License) ## About Lynx Lynx is a _family_ of open-source technologies empowering developers to use their existing web skills to create truly native UIs for both mobile and web from a single codebase, featuring performance at scale and velocity. - **💫 Write Once, Render Anywhere.** Enjoy native rendering on Android, iOS, and Web, or pixel-perfect consistency across mobile and desktop via our custom renderer. - **🌐 Web-Inspired Design.** Leverage your existing knowledge of CSS and React. We designed Lynx with the web knowledge and libraries in mind. - **⚡ Performance at Scale.** Achieve instant launch and silky UI responsiveness via our multithreaded engine, whether standalone or embedded. This repository contains the **core engine** of Lynx. For other repositories in the Lynx family, visit our [org homepage](https://github.com/lynx-family). ## Documentation You shall find documentation for Lynx on [lynxjs.org](http://lynxjs.org). ## How to Use Lynx ### Requirements Lynx apps may target iOS 10 and Android 5.0 (API 21) or newer. We recommend using macOS as the development operating system. Windows and Linux are not yet verified or guaranteed, so you may encounter problems. If you need assistance, please file an issue, and we will be more than happy to help you address it. ### Getting Started guide - Trying out Lynx with [hello world](https://lynxjs.org/guide/start/quick-start.html) - [Integrating Lynx with an Existing Application](https://lynxjs.org/guide/start/integrate-with-existing-apps.html) ## Lynx Explorer Lynx Explorer is the official app for testing and exploring Lynx. It provides native runtime environments (Android/iOS/Harmony/Windows/macOS) and bundles ReactLynx-based screens. - Build and run Lynx Explorer: see [lynx/explorer/README.md](explorer/README.md) ## How to Contribute ### [Code of Conduct][coc] We are devoted to ensuring a positive, inclusive, and safe environment for all contributors. Please find our [Code of Conduct][coc] for detailed information. [coc]: CODE_OF_CONDUCT.md ### [Contributing Guide][contributing] We welcome you to join and become a member of Lynx Authors. It's people like you that make this project great. Please refer to our [contributing guide][contributing] for details. [contributing]: CONTRIBUTING.md ## Discussions Bugs and feature requests are filed in [Github Issues](https://github.com/lynx-family/lynx/issues) Large discussions and proposals are discussed in [Github Discussions](https://github.com/lynx-family/lynx/discussions) You are always very welcome to join the [Discord Channel](https://discord.gg/mXk7jqdDXk) and meet others who are enthusiastic about making Lynx great. ## Credits Lynx makes use of several third-party libraries and draws inspiration from various projects. We would like to express our sincere gratitude to these sources. ### Third Party Libraries Lynx incorporates the following third-party libraries, which have significantly contributed to its functionality. We appreciate the efforts of the developers and the open-source community behind these projects: - [aes](https://github.com/SergeyBel/AES) - [benchmark](https://github.com/google/benchmark) - [binding](https://chromium.googlesource.com/chromium/blink/+/refs/heads/main/Source/bindings) - [boringssl](https://boringssl.googlesource.com/boringssl.git) - [boringssl_gen](https://github.com/dart-lang/boringssl_gen.git) - [buildroot](https://github.com/flutter/buildroot) - [checkstyle](https://github.com/checkstyle/checkstyle) - [cpp-httplib](https://github.com/yhirose/cpp-httplib) - [double-conversion](https://github.com/google/double-conversion) - [googletest](https://github.com/google/googletest) - [jsoncpp](https://github.com/open-source-parsers/jsoncpp) - [modp_b64](https://github.com/Piasy/modp_b64) - [node-addon-api](https://github.com/nodejs/node-addon-api) - [NativeScript](https://github.com/NativeScript/NativeScript) - [perfetto](https://android.googlesource.com/platform//external/perfetto/) - [rapidjson](https://github.com/Tencent/rapidjson) - [v8](https://chromium.googlesource.com/v8/v8.git) - [xctestrunner](https://github.com/google/xctestrunner) - [xhook](https://github.com/iqiyi/xHook.git) - [zlib](https://chromium.googlesource.com/chromium/src/third_party/zlib) ### Referenced API Design and Implementations The design of some APIs and some implementations in Lynx have been inspired by and referenced from the following outstanding projects. Their innovative designs and solutions have been invaluable in shaping Lynx: - [chromium](https://chromium.googlesource.com/chromium/) - [react-native](https://github.com/facebook/react-native) - [flutter engine](https://github.com/flutter/engine) We respect the intellectual property rights of all these projects and adhere to relevant open-source licenses and usage guidelines. ## [License][license] Lynx is Apache licensed, as found in the [LICENSE][license] file. [license]: LICENSE ================================================ FILE: SECURITY.md ================================================ # Reporting a Vulnerability If you happen to discover a potential security issue in this project, please do **not** create a public GitHub issue. We kindly ask you to notify TikTok Security via email at [security@tiktok.com]. Valid vulnerability reports can be eligible for monetary rewards under our Bug Bounty program. For eligible reports, we will provide additional instructions on how to claim the reward over email. We greatly appreciate community contributions to the security of this project. ================================================ FILE: agents/code_review/commit_message_format.md ================================================ ## Conventions - All commit messages MUST be written in **English**. - Preferred format: Header: `[Type][Scope] Short imperative summary` Body (details): `- What changed` `- Why it was needed` `- How it was verified / impacts` Footer (optional): `issue: #12345` ### Type - `Feature`, `BugFix`, `Optimize`, `Refactor`, `Infra`, `Docs`, `Test`, etc., using capitalized English. ### Scope - Module or subsystem name (e.g., `Clay`, `Layout`, `Headers`, `Painting`, `Harmony`, `Android`, `iOS`, etc.), optional but recommended. ================================================ FILE: base/CPPLINT.cfg ================================================ set noparent filter=-,+lynx_custom/new_java_ref,+build/namespaces,+build/c++14,+build/class,+build/c++tr1,+build/deprecated,+build/endif_comment,+build/explicit_make_pair,+build/forward_decl,+build/header_guard,+build/include_what_you_use,+runtime/casting,+runtime/init,+runtime/invalid_increment,+untime/member_string_references,+runtime/memset,+runtime/indentation_namespace,+runtime/operator,+runtime/vlog exclude_files=.*\.java exclude_files=.*\.mm exclude_files=.*\.m exclude_files=.*unittest.*|.*unittests.* exclude_files=.*mock_element\.cc ================================================ FILE: base/README.md ================================================ # About //lynx/base This is a basic library for the lynx project, which contains some basic components and utility functions. The aim is to make the development of the lynx project more convenient, reduce repetitive work, and facilitate code maintenance. # How to use? The base library uses GN to organize the code. We can directly add the dependency of the base library to the project to use the basic functions provided by the base library. ```GN # Add the base dependency. source_set("lynx_project") { deps = [ "//lynx/base/src:base", // "//lynx/base/src:base" hasn't include trace and log functions ] deps += [ "//lynx/base/src:base_log", // log functions ] } ``` # What capabilities include? > Only some capabilities are listed. For more, please refer to the source code. - Log utils The base library provides log utils. By using the [LOGV~LOGE](include/log/logging.h) log macro APIs, we can easily log messages. It supports log output, log filtering, log formatting, and customizable log output channels. Additionally, it provides a lightweight log stream class, which makes the log system more efficient. - thread utils Thread utils include message loop, shared mutex, semaphore, and so on. The message loop is an event-driven thread programming model. It is used to process events and tasks for a particular thread. Its basic functionality is to accept posted tasks and run them on the associated thread. - String utils The base provides string utils, such as converting characters to numbers, converting characters to arrays, extracting substrings, and converting between unicode32, unicode16, and unicode8. - Trace utils The base provides an independent and shareable instrumentation tool named lynx-trace. Please refer to [trace/README.md](trace/README.md) for details. ================================================ FILE: base/include/algorithm.h ================================================ /* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ // Copyright 2023 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. #ifndef BASE_INCLUDE_ALGORITHM_H_ #define BASE_INCLUDE_ALGORITHM_H_ #include namespace lynx { namespace base { /** Insertion Sort algorithm. Use this algorithm when the region to be sorted is * a small constant size (e.g., count <= 32) * * @param left points to the beginning of the region to be sorted * @param count number of items to be sorted * @param less_than a functor with bool operator()(T a, T b) which returns true * if a comes before b. * * */ template inline void InsertionSort(T* left, size_t count, const C& less_than) { if (count <= 1) { return; } T* right = left + count - 1; for (T* next = left + 1; next <= right; ++next) { if (!less_than(*next, *(next - 1))) { continue; } T insert = std::move(*next); T* hole = next; do { *hole = std::move(*(hole - 1)); --hole; } while (left < hole && less_than(insert, *(hole - 1))); *hole = std::move(insert); } } } // namespace base } // namespace lynx #endif // BASE_INCLUDE_ALGORITHM_H_ ================================================ FILE: base/include/auto_create_optional.h ================================================ // Copyright 2025 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. #ifndef BASE_INCLUDE_AUTO_CREATE_OPTIONAL_H_ #define BASE_INCLUDE_AUTO_CREATE_OPTIONAL_H_ #include namespace lynx { namespace base { template class auto_create_optional { public: auto_create_optional() = default; auto_create_optional(const auto_create_optional& other) { if (other.data_) { data_ = std::make_unique(*other.data_); } } auto_create_optional& operator=(const auto_create_optional& other) { if (this == &other) { return *this; } if (other.data_) { data_ = std::make_unique(*other.data_); } else { data_ = nullptr; } return *this; } auto_create_optional(auto_create_optional&& other) = default; auto_create_optional& operator=(auto_create_optional&& other) = default; T& operator*() const { return *create_if_null(); } T* operator->() const { return create_if_null(); } T* get() const { return data_.get(); } void reset() { data_.reset(); } bool has_value() const noexcept { return data_ != nullptr; } explicit operator bool() const noexcept { return has_value(); } private: mutable std::unique_ptr data_; T* create_if_null() const { if (!data_) { data_ = std::make_unique(); } return data_.get(); } }; } // namespace base } // namespace lynx #endif // BASE_INCLUDE_AUTO_CREATE_OPTIONAL_H_ ================================================ FILE: base/include/auto_reset.h ================================================ // Copyright 2022 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. #ifndef BASE_INCLUDE_AUTO_RESET_H_ #define BASE_INCLUDE_AUTO_RESET_H_ #include // base::AutoReset<> is useful for setting a variable to a new value only within // a particular scope. An base::AutoReset<> object resets a variable to its // original value upon destruction, making it an alternative to writing // "var = false;" or "var = old_val;" at all of a block's exit points. // // This should be obvious, but note that an base::AutoReset<> instance should // have a shorter lifetime than its scoped_variable, to prevent invalid memory // writes when the base::AutoReset<> object is destroyed. namespace lynx { namespace base { template class AutoReset { public: template AutoReset(T* scoped_variable, U&& new_value) : scoped_variable_(scoped_variable), original_value_( std::exchange(*scoped_variable_, std::forward(new_value))) {} AutoReset(AutoReset&& other) : scoped_variable_(std::exchange(other.scoped_variable_, nullptr)), original_value_(std::move(other.original_value_)) {} AutoReset& operator=(AutoReset&& rhs) { scoped_variable_ = std::exchange(rhs.scoped_variable_, nullptr); original_value_ = std::move(rhs.original_value_); return *this; } ~AutoReset() { if (scoped_variable_) *scoped_variable_ = std::move(original_value_); } private: // `scoped_variable_` is not a raw_ptr for performance reasons: Large // number of non-PartitionAlloc pointees + AutoReset is typically short-lived // (e.g. allocated on the stack). T* scoped_variable_; T original_value_; }; } // namespace base } // namespace lynx #endif // BASE_INCLUDE_AUTO_RESET_H_ ================================================ FILE: base/include/base_defines.h ================================================ // Copyright 2025 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. #ifndef BASE_INCLUDE_BASE_DEFINES_H_ #define BASE_INCLUDE_BASE_DEFINES_H_ #define unlikely(x) __builtin_expect(!!(x), 0) #define likely(x) __builtin_expect(!!(x), 1) #if _MSC_VER #define BASE_INLINE inline __forceinline #define BASE_NEVER_INLINE __declspec(noinline) #else #define BASE_INLINE inline __attribute__((always_inline)) #define BASE_NEVER_INLINE __attribute__((noinline)) #endif #ifdef __cplusplus #define BASE_EXTERN_C extern "C" #define BASE_EXTERN_C_BEGIN BASE_EXTERN_C { #define BASE_EXTERN_C_END } #else #define BASE_EXTERN_C #define BASE_EXTERN_C_BEGIN #define BASE_EXTERN_C_END #endif #endif // BASE_INCLUDE_BASE_DEFINES_H_ ================================================ FILE: base/include/base_export.h ================================================ // Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_INCLUDE_BASE_EXPORT_H_ #define BASE_INCLUDE_BASE_EXPORT_H_ // Symbols in the lynx base are not exported by default due to // -fvisibility=hidden. We provide a macro to help you export some symbols: // 1.BASE_EXPORT. If certain symbols need to be accessed externally, they // should be marked with the BASE_EXPORT. // // If you need stricter symbol export rules from the Lynx base for purposes // such as better package management, you can provide BASE_NO_EXPORT to gn // script or customize the export rules using --version-script. Importantly, if // a symbol is not marked with BASE_EXPORT, it can not be exported, even if you // use a // --version-script to customize the export rules. #ifdef BASE_NO_EXPORT #define BASE_EXPORT #else // BASE_NO_EXPORT #ifdef _WIN32 #ifndef lynx_EXPORTS #define BASE_EXPORT __declspec(dllimport) #else // lynx_EXPORTS #define BASE_EXPORT __declspec(dllexport) #endif // lynx_EXPORTS #else // _WIN32 #define BASE_EXPORT __attribute__((visibility("default"))) #endif // _WIN32 #endif // BASE_NO_EXPORT #define BASE_HIDE __attribute__((visibility("hidden"))) #endif // BASE_INCLUDE_BASE_EXPORT_H_ ================================================ FILE: base/include/base_public_headers.gni ================================================ # Copyright 2025 The Lynx Authors. All rights reserved. # Licensed under the Apache License Version 2.0 that can be found in the # LICENSE file in the root directory of this source tree. import("../src/base.gni") # base_log_public_headers begin base_log_public_headers_list = [ "debug/lynx_assert.h", "debug/lynx_error.h", "log/alog_wrapper.h", "log/log_stream.h", "log/logging.h", ] if (!is_win) { base_log_public_headers_list += [ "debug/backtrace.h" ] } if (is_apple) { base_log_public_headers_list += [ "log/logging_darwin.h" ] } else if (is_win) { base_log_public_headers_list += [ "log/logging_base.h" ] } else if (is_linux) { base_log_public_headers_list += [ "log/logging_base.h" ] } base_log_public_headers = rebase_path(base_log_public_headers_list) # base_log_public_headers end # time_utils_public_headers begin time_utils_public_headers_list = [ "timer/time_utils.h" ] time_utils_public_headers = rebase_path(time_utils_public_headers_list) # time_utils_public_headers end # base_trace_public_headers begin base_trace_public_headers_list = [ "base_trace/trace_event_utils.h" ] base_trace_public_headers = rebase_path(base_trace_public_headers_list) # base_trace_public_headers end # base_core_public_headers begin base_core_public_headers_list = [ "algorithm.h", "auto_create_optional.h", "auto_reset.h", "base_defines.h", "base_export.h", "boost/unordered.h", "bundled_optional.h", "cast_util.h", "closure.h", "compiler_specific.h", "concurrent_queue.h", "expected.h", "expected_internal.h", "file_utils.h", "flex_optional.h", "float_comparison.h", "fml/concurrent_message_loop.h", "fml/cpu_affinity.h", "fml/delayed_task.h", "fml/eintr_wrapper.h", "fml/fml_trace_event_def.h", "fml/macros.h", "fml/make_copyable.h", "fml/memory/ref_counted.h", "fml/memory/ref_counted_internal.h", "fml/memory/ref_ptr.h", "fml/memory/ref_ptr_internal.h", "fml/memory/task_runner_checker.h", "fml/memory/weak_ptr.h", "fml/memory/weak_ptr_internal.h", "fml/message_loop.h", "fml/message_loop_impl.h", "fml/message_loop_task_queues.h", "fml/platform/thread_config_setter.h", "fml/synchronization/atomic_object.h", "fml/synchronization/count_down_latch.h", "fml/synchronization/semaphore.h", "fml/synchronization/shared_mutex.h", "fml/synchronization/sync_switch.h", "fml/synchronization/waitable_event.h", "fml/task_queue_id.h", "fml/task_runner.h", "fml/task_runner_delegate.h", "fml/task_source.h", "fml/task_source_grade.h", "fml/thread.h", "fml/time/time_delta.h", "fml/time/time_point.h", "fml/time/timer.h", "fml/time/timestamp_provider.h", "fml/unique_fd.h", "fml/unique_object.h", "fml/wakeable.h", "geometry/point.h", "geometry/rect.h", "geometry/size.h", "hybrid_map.h", "linked_hash_map.h", "lru_cache.h", "lynx_actor.h", "md5.h", "memory/memory_pressure_level.h", "no_destructor.h", "path_utils.h", "position.h", "shared_vector.h", "sorted_for_each.h", "thread/base_semaphore.h", "thread/pthread_rw_lock_guard.h", "thread/timed_task.h", "to_underlying.h", "type_traits_addon.h", "vector.h", "vector2d.h", "vector_helper.h", "version_util.h", "//build/build_config.h", "fml/hash_combine.h", "fml/raster_thread_merger.h", "fml/shared_thread_merger.h", ] if (is_android || is_linux) { base_core_public_headers_list += [ "fml/platform/linux/timerfd.h" ] } if (is_android) { base_core_public_headers_list += [ "fml/platform/android/cpu_affinity.h", "fml/platform/android/message_loop_android.h", "fml/synchronization/shared_mutex_std.h", "platform/android/java_type.h", "platform/android/jni_convert_helper.h", "platform/android/jni_utils.h", "platform/android/scoped_java_ref.h", ] } else if (is_harmony) { base_core_public_headers_list += [ "fml/platform/harmony/message_loop_harmony.h", "fml/platform/linux/timerfd.h", "fml/synchronization/shared_mutex_std.h", "platform/harmony/harmony_vsync_manager.h", "platform/harmony/napi_util.h", ] } else if (is_linux) { base_core_public_headers_list += [ "fml/synchronization/shared_mutex_std.h" ] if (!use_custom_message_loop) { base_core_public_headers_list += [ "fml/platform/linux/message_loop_linux.h" ] } } else if (is_apple) { base_core_public_headers_list += [ "fml/platform/darwin/cf_utils.h", "fml/synchronization/shared_mutex_posix.h", "platform/darwin/type_utils.h", ] if (!use_custom_message_loop) { base_core_public_headers_list += [ "fml/platform/darwin/message_loop_darwin.h" ] } } else if (is_win) { base_core_public_headers_list += [ "fml/platform/win/message_loop_win.h", "fml/platform/win/task_runner_win32.h", "fml/platform/win/task_runner_win32_window.h", "fml/synchronization/shared_mutex_std.h", "string/string_conversion_win.h", ] } base_core_public_headers = rebase_path(base_core_public_headers_list) # base_core_public_headers end # string_utils_public_headers begin string_utils_public_headers_list = [ "string/quickjs_dtoa.h", "string/string_number_convert.h", "string/string_utils.h", ] string_utils_public_headers = rebase_path(string_utils_public_headers_list) # string_utils_public_headers end # base_values_public_headers begin base_values_public_headers_list = [ "value/array.h", "value/base_value.h", "value/byte_array.h", "value/lynx_value_api.h", "value/lynx_value_extended.h", "value/path_parser.h", "value/ref_counted_class.h", "value/ref_type.h", "value/table.h", ] base_values_public_headers = rebase_path(base_values_public_headers_list) # base_values_public_headers end # values_public_headers begin values_public_headers_list = [ "value/base_string.h", "value/lynx_api_types.h", "value/lynx_value_types.h", ] values_public_headers = rebase_path(values_public_headers_list) # values_public_headers end # datauri_utils_public_headers begin datauri_utils_public_headers_list = [ "datauri_utils.h" ] datauri_utils_public_headers = rebase_path(datauri_utils_public_headers_list) # datauri_utils_public_headers end base_public_headers = base_log_public_headers + time_utils_public_headers + base_core_public_headers + string_utils_public_headers + base_values_public_headers + values_public_headers + datauri_utils_public_headers ================================================ FILE: base/include/base_trace/trace_event_utils.h ================================================ // Copyright 2025 The Lynx Authors. All rights reserved. // Licensed under the Apache License Version 2.0 that can be found in the // LICENSE file in the root directory of this source tree. #ifndef BASE_INCLUDE_BASE_TRACE_TRACE_EVENT_UTILS_H_ #define BASE_INCLUDE_BASE_TRACE_TRACE_EVENT_UTILS_H_ #include #include #include "base/include/base_export.h" namespace lynx { namespace base { namespace trace { enum class BaseTraceEventType : int32_t { TYPE_UNSPECIFIED = 0, TYPE_SLICE_BEGIN = 1, TYPE_SLICE_END = 2, TYPE_INSTANT = 3, TYPE_COUNTER = 4, }; using trace_backend_ptr = void (*)(const char* category, const char* name, BaseTraceEventType phase); BASE_EXPORT void SetTraceBackend(trace_backend_ptr backend); void TraceEventBegin(const char* category, const char* name); void TraceEventEnd(const char* category, const char* name); } // namespace trace } // namespace base } // namespace lynx #endif // BASE_INCLUDE_BASE_TRACE_TRACE_EVENT_UTILS_H_ ================================================ FILE: base/include/boost/unordered.h ================================================ // Copyright 2001, 2002 Peter Dimov and Multi Media Ltd // Copyright 2002, 2018-2022 Peter Dimov // Copyright 2002-2018 Peter Dimov // Copyright 2004 Pavel Vozenilek // Copyright 2005-2009 Daniel James // Copyright 2005-2014 Daniel James // Copyright 2006-2009 Emil Dotchevski and Reverge Studios, Inc // Copyright 2007, 2014 Peter Dimov // Copyright 2008-2009 Emil Dotchevski and Reverge Studios, Inc // Copyright 2008-2016 Daniel James // Copyright 2015 Ion Gaztanaga // Copyright 2017 Peter Dimov // Copyright 2017, 2018 Peter Dimov // Copyright 2017, 2022 Peter Dimov // Copyright 2018 Glen Joseph Fernandes // Copyright 2019, 2021 Peter Dimov // Copyright 2021 Peter Dimov // Copyright 2021, 2022 Peter Dimov // Copyright 2022 Christian Mazakas // Copyright 2022 Joaquin M Lopez Munoz // Copyright 2022 Peter Dimov // Copyright 2022, 2023 Peter Dimov // Copyright 2022-2023 Christian Mazakas // Copyright 2022-2023 Joaquin M Lopez Munoz // Copyright 2023 Christian Mazakas // Copyright Beman Dawes 2011 // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // Amalgamated single header imported to Lynx with minor adaptations // from https://github.com/MikePopoloski/boost_unordered #ifndef BASE_INCLUDE_BOOST_UNORDERED_H_ #define BASE_INCLUDE_BOOST_UNORDERED_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Lynx Add Begin #include "base/include/type_traits_addon.h" // This template type is used to simplify the use of boost map for // lynx::base::HybridMap. namespace boost { template