3.4.0

lynx-family/lynx3.4.0Aug 25, 2025by Kingatnuaa0528

AI Summary

Major feature release introducing WGPU prototype, SimpleStyling renderer functions, ViewInfo for LynxEngine reuse, LynxEnginePool, comprehensive memory monitoring, and initial HarmonyOS platform support. Includes text layout optimizations and enhanced performance reporting.

Key Highlights

  • Completed WGPU prototype with hardware-accelerated rendering
  • Added SimpleStyling renderer functions
  • Introduced ViewInfo and IProcessViewInfoHook for LynxEngine reuse
  • LynxEnginePool for engine caching and reuse
  • Comprehensive memory monitoring infrastructure
  • Initial HarmonyOS platform support

New Features

  • WGPU prototype with shared buffers and hardware acceleration
  • SimpleStyling renderer functions (CreateStyleObject, SetStyleObject, UpdateStyleObject)
  • ViewInfo and IProcessViewInfoHook for engine reuse
  • LynxEnginePool for managing reusable engines
  • Memory usage tracking for scripting engine, elements, LynxUI, and LynxBaseUI
  • Host platform timing support (Android, iOS, Harmony)
  • LynxViewGroup for runtime environment reuse
  • Text layout interface and platform adapters
  • LazyBundleEntry and ReloadBundleEntry support
  • CSS clip-path support for inset and superellipse
  • Sticky list container support
  • Font variation settings (font-variation-settings, font-feature-settings, font-optical-sizing)
  • DevTool debugging for shared data and MTS Chunk

Full Release Notes

# Changelog

### ✨ Features


- [Feature] Complete WGPU prototype ([01899b5](https://github.com/lynx-family/lynx/commit/01899b5ddcd8d156fdca07191ec2fe316a347b8e))  @shivamidow

	
	This change is an aggregate changeset to complete the WGPU prototype,
	which contains the following:
	- Additional interfaces and data types (e.g., GPUBindGroup, GPUSampler, etc.)
	- Updates on the licese boilerplates of the related IDL files
	- Implementation of shared buffers to reduce GPU memory footprints and
	  computations
	- Hardware-assisted accelerated rendering on Android platforms
	- Support for the union types of array and interface


- [Feature] Support generate bytecode callback ([508b285](https://github.com/lynx-family/lynx/commit/508b285154a922bb3b1717d27c64249cf885851a))  @lybvinci

	
	postJsCacheGenerateionTask add a callback params, user can use
	this to get bytecode source.


- [Feature][DevTool] Support debugging for MTS Chunk. ([743ee2a](https://github.com/lynx-family/lynx/commit/743ee2ad52ea838e218f8f3a1b7b5eae80a090bc))  @Dango-2021

	
	Support debugging for MTS Chunk.


- [Feature][Styling] SimpleStyling renderer functions ([3614ceb](https://github.com/lynx-family/lynx/commit/3614ceb559d649c347e017017f7c3cf565b3e02f))  @zhongyr

	
	Add render functions for SimpleStyling
	- `CreateStyleObject` - accept a JSObject for style map whose key is a number string for CSSId and value is a unparsed string value.
	- `SetStyleObject` - Bind a set of StyleObjects to SimpleStyleNode. Accept two args, 1 for node ref and a array of style object ref.
	- `UpdateStyleObject` - Change the contents of a style object created by the `CreateStyleObject`. And the updated styles will be applied to
	bound SimpleStyleNodes.
	


- [Feature][Styling][Element] Implement simple style nodes to handle styles set by SimpleStyling APIs ([fa4df53](https://github.com/lynx-family/lynx/commit/fa4df53dc255122b38b1487c936fc9e94b7446dd))  @zhongyr

	
	Implement the SimpleStyleNode in FiberElement. Support set styles via SimpleStyling APIs to FiberElement.
	


- [Feature] add IProcessViewInfoHook and ViewInfo to support reusing LynxEngine. ([4b53d58](https://github.com/lynx-family/lynx/commit/4b53d580c54e48864e98d499a7ad39af569045ce))  @ShouruiSong

	
	The primary goal of this merge request is to add `IProcessViewInfoHook` and `ViewInfo` to enable reuse of `LynxEngine`. These changes aim to improve system performance and resource utilization, allowing `LynxEngine` to process view information and rendering operations more efficiently.
	
	ViewInfo is a critical class for enabling the reuse of the Lynx Engine. It stores essential rendering metadata (e.g., layout coordinates, clipping boundaries, z-index). After decoupling the Platform View (e.g., Android/iOS native views) from LynxUI (the cross-platform UI abstraction layer), ViewInfo acts as a platform-agnostic data layer to coordinate drawing operations.
	
	IProcessViewInfoHook is a crucial class for enabling the reuse of the Lynx Engine. In the future, LynxUI will inherit IProcessViewInfoHook, and ViewInfo will hold an instance of IProcessViewInfoHook. At critical stages, ViewInfo will invoke the interface methods of IProcessViewInfoHook to record rendering information.


- [Feature][iOS] Support generate bytecode callback ([3b9a587](https://github.com/lynx-family/lynx/commit/3b9a5876913a6d87346e8506d07916954b36f6d2))  @lybvinci

	
	postJsCacheGenerateionTask add a callback params, user can use
	this to get bytecode source.


- [Feature] LynxUI inherits and implements IProcessViewInfoHook to enable the reuse of the Lynx Engine's core logic. ([fb97551](https://github.com/lynx-family/lynx/commit/fb975516eca80043b6cef90d22602335d75b1e5d))  @ShouruiSong

	
	The primary goal of this merge request is to enable LynxUI to inherit and implement the IProcessViewInfoHook interface, thereby achieving reuse of the Lynx Engine's core logic.
	
	* The LynxUI class now implements the IProcessViewInfoHook interface, with new methods such as processViewInfo, dispatchProcessViewInfo, etc.
	
	* Related classes (e.g., LynxFlattenUI, UIBody, UIGroup) have added methods to handle rendering node updates, view detachment, and other operations.
	
	* Added the detachWithView method in LynxBaseUI and its subclasses to manage view detachment, including recursive detachment of child views.
	
	* The ViewGroupDrawingOrderHelper class now includes methods to retrieve drawing order indices and prepare drawing sequences, improving control over child view rendering.
	


- [Feature] Provides an API for the platform layer to communicate with the Layout thread. ([3cf0f79](https://github.com/lynx-family/lynx/commit/3cf0f79204361e648d75ca5fe87f90313d4169ed))  @ChrisChan0668

	
	The implementation details are as follows:
	
	- A new API, runOnLayoutThread , is added to LynxContext, which accepts a task as a parameter.
	- This task is passed to the C++ layer, and then, leveraging the Actor's capabilities, the task is posted to the Layout thread.
	- The execution of this task is triggered on the Layout thread.
	  Based on this API, the platform layer can initiate operations on ShadowNode from any thread, ensuring that all ShadowNode-related operations are executed on the Layout thread.


- [Feature] [Frame] [Android] add UIFrame, LynxFrameView and LynxFrameRender ([cf7db9b](https://github.com/lynx-family/lynx/commit/cf7db9bfdd11bfea86827b2f25875b82218b85c0))  @Awuiil

	
	Summary of this commit:
	
	1. add UIFrame, LynxFrameView and LynxFrameRender
	
	2. add built-in behavior for frame element
	


- [Feature] adding loadByteCode from external interface for jsruntime ([0677def](https://github.com/lynx-family/lynx/commit/0677defc5c197d14616c10fade44f12c7d972611))  @nhsprite

	
	adding loadByteCode from external interface for jsruntime to optimize codecache usage.
	


- [Feature] add OnceTask.java such that we can ensure async task only run once. ([21cd817](https://github.com/lynx-family/lynx/commit/21cd817b2acd525317fd7cad26423c12b15146f7))  @ShouruiSong

	
	The primary objective of this pull request is to introduce the OnceTask class, ensuring asynchronous tasks execute only once. This enhancement optimizes code logic, prevents redundant executions, and improves program performance and stability.
	


- [Feature][iOS] Add interfaces to enable detach and reatach View and UI ([d0c081b](https://github.com/lynx-family/lynx/commit/d0c081be3118a892fcc27951721a569fe9903afb))  @zhongyr

	
	Add
	- `detachAllUIViews` to enable detach UIViews from UIs
	- `rebuildAllUIViewsAndHierarchy` to create views for UIs without an
	existing UIView, create the View hierachy based on UI tree and then
	create background and border layers according the properties.


- [Feature] Add `attachToView`, `createViewAsync`, `ensureCreateView`, `rebuildViewTree` to support reuse Lynx Engine. ([688fccb](https://github.com/lynx-family/lynx/commit/688fccb250baa32d19a6d9e0663cc80a014b6737))  @ShouruiSong

	
	**Precise Technical Translation**
	
	This merge request aims to enhance the view management and rendering capabilities of the Lynx framework on Android. It centers around the addition of `rebuildViewTree` and `createViewAsync` methods to optimize view reconstruction and asynchronous creation workflows, improving both performance and user experience.
	
	1. **C++ Code**:
	   - Added `EnqueueHighPriorityUIOperation` in `BeforeFlush` (within `painting_context_android.cc`) to rebuild the view tree before rendering.
	
	2. **Java Interface Definitions** (`lynx_android.api`):
	   - New methods in classes:
	     - `FlattenUIImage`, `FlattenUIText`
	     - `LynxImageManager`
	     - `LynxUIOwner.rebuildViewTree()`
	     - `PaintingContext.rebuildViewTree()`
	
	3. **Java Implementations**:
	   - **`LynxUIOwner` & `PaintingContext`**: Added `rebuildViewTree()` to trigger view tree reconstruction.
	   - **`LynxBaseUI` and subclasses**:
	     - Renamed `detachWithView` → `detachWithViewInfo`
	     - Added `attachToView`, `createViewAsync`, and `ensureCreateView` for asynchronous view creation.
	   - **`UIBody`**:
	     - Added `appendUIWithCreateViewAsync` and `rebuildViewTree` for managing asynchronously created views.
	   - **`ViewInfo`**:
	     - New methods: `setPaintFilter`, `setPaintFont`, `setPaintStyle`, `setPaintStrokeWidth`.
	


- [Feature] [Android] add `parserLynxViewBuilder` API for LynxTrailService ([0e47822](https://github.com/lynx-family/lynx/commit/0e4782230946fb6f774d0dc620dc062d7af1b562))  @Awuiil

	
	To parse LynxViewConfig
	
	


- [Feature] Add `attachToView`, `createViewAsync`, `ensureCreateView`, `rebuildViewTree` to support reuse Lynx Engine. ([57b8249](https://github.com/lynx-family/lynx/commit/57b82495bf551fe845ea9641b2b4e08286b0ef06))  @ShouruiSong

	
	**Precise Technical Translation**
	
	This merge request aims to enhance the view management and rendering capabilities of the Lynx framework on Android. It centers around the addition of `rebuildViewTree` and `createViewAsync` methods to optimize view reconstruction and asynchronous creation workflows, improving both performance and user experience.
	
	1. **C++ Code**:
	   - Added `EnqueueHighPriorityUIOperation` in `BeforeFlush` (within `painting_context_android.cc`) to rebuild the view tree before rendering.
	
	2. **Java Interface Definitions** (`lynx_android.api`):
	   - New methods in classes:
	     - `FlattenUIImage`, `FlattenUIText`
	     - `LynxImageManager`
	     - `LynxUIOwner.rebuildViewTree()`
	     - `PaintingContext.rebuildViewTree()`
	
	3. **Java Implementations**:
	   - **`LynxUIOwner` & `PaintingContext`**: Added `rebuildViewTree()` to trigger view tree reconstruction.
	   - **`LynxBaseUI` and subclasses**:
	     - Renamed `detachWithView` → `detachWithViewInfo`
	     - Added `attachToView`, `createViewAsync`, and `ensureCreateView` for asynchronous view creation.
	   - **`UIBody`**:
	     - Added `appendUIWithCreateViewAsync` and `rebuildViewTree` for managing asynchronously created views.
	   - **`ViewInfo`**:
	     - New methods: `setPaintFilter`, `setPaintFont`, `setPaintStyle`, `setPaintStrokeWidth`.
	


- [Feature] introduce PropArray ([29ffee5](https://github.com/lynx-family/lynx/commit/29ffee56bcea4d597f021330f13a47ed46c4de43))  @linxs0211

	
	introduce PropArray for a higher performance data transfer to Platform
	side
	


- [Feature] add ReloadBundleEntry ([16983e7](https://github.com/lynx-family/lynx/commit/16983e79b3476f4f1ed28864b103c909a78d9d9f))  @partholon

	
	- Introduced `ReloadBundleEntry`.
	
	- Added description file `ReloadBundleEntry.yml`.
	
	- Add `ClearExtraTimingInfo` to clear container's timing. And rename `ClearAllTiming` to `ClearPipelineTimingInfo` to clarify the function's reponsibility.
	
	- Metrics adaptation:
	
	  - Added logic to `GetMetricFcpEntry` and `GetMetricActualFmpEntry` within `TimingInfoNg` to confirm whether `loadBundleStart` or `reloadBundleStart` should be used for calculating lynxFcp and lynxActualFmp.
	
	- Test changes:
	
	  - Introduced e2e test `timing_api_reactlynx_reloadTemplate` to test performance callbacks during reactLynx3.
	
	  - Added Unit Tests `CheckReloadBundleFromNativeWithOldContainerTiming` and `CheckReloadBundleFromNativeWithOldConatinerTiming` to verify the performance events received when the client reconfigures `ContainerTiming`.
	
	  - Added card_tempalte `performanceAPI_reloadFromJS` to test performance callbacks during lynx.reload().
	


- [Feature] Introduce devtool interfaces and refactor UIDelegate ([b32fe5e](https://github.com/lynx-family/lynx/commit/b32fe5e13faa97f29f9b21e03245b361b7d43abc))  @rel-q

	
	1.Introduces `LynxDevToolProxy` and `LynxInspectorOwner` as public interfaces in the `devtool` namespace.
	2.Add virtual functions for UIDelegate.


- [Feature][Part2][Memory]: add memory usage tracking classes and definitions. ([a31c34e](https://github.com/lynx-family/lynx/commit/a31c34e3d839015ba04d8bab840fd99ebac12689))  @Tamerlx

	
	Add MemoryUsageEntry and MemoryUsageItem classes for tracking memory usage in performance observer. Includes YAML definitions for both classes and updates to generator to support map types with specific key/value types. Implemented for both Android and iOS platforms.
	
	issue:m-6564941865
	


- [Feature] [Frame] add a new UIOP to post AppBundle from native to platform for frame ([0076c96](https://github.com/lynx-family/lynx/commit/0076c96d43222f60c6497cc3902ab7f366699383))  @Awuiil

	
	Add a new UIOP `SetFrameAppBundle` to post AppBundle for frame_element
	


- [Feature] Support respeedy multi js file bytecode ([5bd6851](https://github.com/lynx-family/lynx/commit/5bd68512125a6a8d958a0e2f3ac0f56598931f6a))  @lybvinci

	
	rspeedy has multi js files, such as background.js, app-service.js, we
	should support all js files for bytecode generate.


- [Feature][Text][Android][Part1] remove textShadowNode for text ([a98a852](https://github.com/lynx-family/lynx/commit/a98a8526257f249f8c1c41a0d0120afc89f275d4))  @linxs0211

	
	Just use a TextMeasurer to do text measure task, do not
	build text shadowNode tree.
	


- [Feature] [iOS] add `parserLynxViewBuilder` API for LynxTrailService ([e795287](https://github.com/lynx-family/lynx/commit/e795287f127b7ccd5719fb4d17186d5f80c63751))  @Awuiil

	
	To parse LynxViewConfig
	


- [Feature] Support respeedy multi js file bytecode ([11b090c](https://github.com/lynx-family/lynx/commit/11b090c9c3197cf311a73ffddbe083e5f61f5c52))  @lybvinci

	
	rspeedy has multi js files, such as background.js, app-service.js, we
	should support all js files for bytecode generate.


- [Feature][Part5][Memory]: Add memory usage tracking for elements. ([309b9e8](https://github.com/lynx-family/lynx/commit/309b9e8b668716c88d2a62b282b4367546e22373))  @Tamerlx

	
	This commit introduces memory usage tracking for elements.
	
	Main changes:
	- Implemented memory reporting interfaces in `TasmMediator`.
	- Added logic in `ElementManager` to calculate and report the memory consumption of individual elements.
	
	issue:m-6564941865
	


- [Feature][Text][Android][Part2] remove textShadowNode for text ([e385acf](https://github.com/lynx-family/lynx/commit/e385acff4dd7f4da4cdd6713055f1aad905b1261))  @linxs0211

	
	Just use a TextMeasurer to do text measure task, do not
	build text shadowNode tree.
	


- [Feature] Add the tools for reporting build system time consumption. ([b65b036](https://github.com/lynx-family/lynx/commit/b65b03632c6d308a2b0ba965dd1a3b2a5776ecd6))  @yongjieTang

	
	Summary:
	
	By analyzing the performance reports automatically generated by the build tools on each platform, we obtain data such as the top 20 time-consuming subtasks, the total time consumption, the total number of C++ files involved in the build, and the top 8 C++ files with the highest number of repeated compilations. The obtained build information is then output to a JSON file in the trace event format. Finally, it is reported to the company's database through the trace report of CQ CDS. Subsequently, the analysis data set can be viewed on the data visualization platform. In addition, the performance reports related to the builds on each platform are packaged and uploaded to the object storage platform for subsequent download and detailed data review.
	
	Key modifications:
	
	1. Add a parsing tool for Android build time consumption files. It is used to parse the profile.html performance report automatically generated by Gradle and generate the information and resources required for reporting.
	2. Add a parsing tool for iOS build time consumption files. It is used to parse the xcactivitylog performance report automatically generated by xcodebuild and generate the information and resources required for reporting.
	3. Add a parsing tool for GN build time consumption files. It is used to parse build log files such as ninja_log and generate the information and resources required for reporting.
	4. Optimize the path for generating the lynx-project-info file in package.gradle.
	5. Add logic to output stage time consumption in bundle_install.sh and gn.py.
	6. Add tool test scripts.


- [Feature] Support the reuse of LynxEngine in Embedded mode. ([2bc5e3c](https://github.com/lynx-family/lynx/commit/2bc5e3cc0ac271a4e297e7168e1c796495b00539))  @Yellow5A5

	
	This MR mainly includes the following changes:
	1. A new `LynxEngineWrapper` object is added to extend the management of `LynxEngine` (TemplateAssembler) and `LayoutContext` objects. In the reuse scenario, LynxEngine and LayoutContext are allowed not to be actively released by the Shell.
	
	    1.1 The wrapper at the native layer mainly manages the reuse of LynxEngine and LayoutContext.
	
	    1.2 The wrapper at the platform layer mainly manages the reuse of `UIRender` and `PageConfig` - related information.
	
	2. A `LynxEnginePool` is introduced, which maps internally through TemplateBundle and the Wrapper queue. The pool is used to uniformly manage the states of LynxEngineWrapper objects, ensuring that LynxView can safely obtain a reusable LynxEngine.
	3. A `TransferToNewActor` interface is added to `LynxActor` to transfer its internal Impl object for the transfer and use of reusable objects.
	4. A processing branch for the reuse process is added to the LoadTemplate interface of `LynxTemplateRender`.


- [Feature] Add platform code for harmony ([7957345](https://github.com/lynx-family/lynx/commit/7957345dedcb4f42948f53fc69f8d499ef9f2471))  @rel-q

	
	Add harmony platform-specific files and updates corresponding build configurations.
	


- [Feature][Performance][iOS] report PerformanceEntry to cloud ([8025c03](https://github.com/lynx-family/lynx/commit/8025c037f096726ce4c9a2c4f144c781479d651a))  @partholon

	
	- The `LynxServiceEventReporterProtocol` inherits from the `LynxPerformanceObserverProtocol` allowing the `LynxEventReportService` to receive PerformanceEntry from the `PerformanceController`.
	
	- The `PerformanceController` will add `GenricInfo` to the received PerformanceEntry and send it to the `LynxEventReportService`, which will further process the entry and report it to the cloud.
	
	- The LynxEventReportService is responsible for managing all LynxPerformanceReportProcessors and utilizes them to process data and complete the reporting task.
	
	- implement `LynxDefaultPerformanceReportProcessor` and `LynxTimingPerformanceReportProcessor`


- [Feature] [Android] UIFrame support `loadBundle` ([55f2aa3](https://github.com/lynx-family/lynx/commit/55f2aa37aff849cf452b71ac86aed9aaf2d4e3eb))  @Awuiil

	
	UIFrame will accept bundle from native
	
	1. add `loadBundle` api for UIFrame, FrameView and FrameRender
	
	2. add constructor for UIFrame, FrameView and FrameRender
	
	TODO: create ShellPtr for frame render
	


- [Feature] Support ElementBuiltInAttributeEnum::IS_TEMPLATE_PART for binary writer. ([b783e62](https://github.com/lynx-family/lynx/commit/b783e62612b7eb60a43d9d90c75a1d8896b8aee5))  @lidadating

	
	Support ElementBuiltInAttributeEnum::IS_TEMPLATE_PART for binary writer.


- [Feature][Reland] Support respeedy multi js file bytecode ([d2c4684](https://github.com/lynx-family/lynx/commit/d2c46844cade09ee740a53896f002c74bfb01d95))  @lybvinci

	
	rspeedy has multi js files, such as background.js, app-service.js, we
	should support all js files for bytecode generate.


- [Feature][Performance][Android] report PerformanceEntry to cloud ([4ea93f8](https://github.com/lynx-family/lynx/commit/4ea93f800934dce97609a93c13af6bfb77150f0f))  @partholon

	
	- The `LynxEventReporterService` inherits from the `IPerformanceObserver` allowing the `LynxEventReportService` to receive PerformanceEntry from the `PerformanceController`.
	
	- The `PerformanceController` will add `GenricInfo` to the received PerformanceEntry and send it to the `LynxEventReportService`, which will further process the entry and report it to the cloud.
	
	- The LynxEventReportService is responsible for managing all LynxPerformanceReportProcessors and utilizes them to process data and complete the reporting task.
	
	- implement `LynxDefaultPerformanceReportProcessor` and `LynxTimingPerformanceReportProcessor`


- [Feature] Support get bytecode from resource ([5419d4c](https://github.com/lynx-family/lynx/commit/5419d4c4cd7795fd30d486e3a515d918055bcbb0))  @lybvinci

	
	Support js_cache_manager get bytecode from resource loader.


- [Feature][Part1][Memory]: add memory monitoring for scripting engine. ([0dda93e](https://github.com/lynx-family/lynx/commit/0dda93e5345c8d63ac6fe154a0bd93ac04bb7bb1))  @Tamerlx

	
	This MR is to add memory usage tracking for scripting engine and elements. Implement observer pattern to report memory metrics through performance monitoring system.
	
	- Add memory usage callback in MTS & BTS engine runtime.
	- Update performance observer to include memory metrics
	
	issue:m-6564941865
	


- [Feature][Layout] add starlight standalone benchmark case ([0081590](https://github.com/lynx-family/lynx/commit/008159012885478d92b89ffe2d5b1d73dab8ed09))  @givemefive9

	
	add starlight standalone benchmark case, and optimize some codes of
	starlight.


- [Feature][Harmony] Add initial support for HarmonyOS platform ([b25a31d](https://github.com/lynx-family/lynx/commit/b25a31dbf6562299f9062ac143f67e896208b743))  @rel-q

	
	Introduces the initial infrastructure for building lynx and lynxdevtool on the HarmonyOS platform.


- [Feature] Support error parser for logbox on Harmony ([bf08ca9](https://github.com/lynx-family/lynx/commit/bf08ca993555701fb038e34e3f3866cc3e97c99a))  @YYChi

	
	1. Add getResource related JSB bindings.
	2. Store the js source into logbox.


- [Feature][Part1][Memory]: add memory monitoring for scripting engine. ([ec7f371](https://github.com/lynx-family/lynx/commit/ec7f371a2f5add47850dd35cc42d10074caec7d4))  @Tamerlx

	
	This MR is to add memory usage tracking for scripting engine and elements. Implement observer pattern to report memory metrics through performance monitoring system.
	
	- Add memory usage callback in MTS & BTS engine runtime.
	- Update performance observer to include memory metrics
	
	issue:m-6564941865
	


- [Feature] Support hydrate by pageElement for ttml nodiff ([597e87d](https://github.com/lynx-family/lynx/commit/597e87d8273984a9c5a63c44b2af6091b9b59205))  @lidadating

	
	Support hydrate by pageElement for ttml nodiff


- [Feature] Support Native API doc generated by code comments for Android and iOS ([1e4e170](https://github.com/lynx-family/lynx/commit/1e4e170ab6eb0929536288b5fc5c4fe7ff3b71e8))  @pilipala195

	
	In this commit, we introduce the capability for automated generation of Native API documentation, while adding code comments for Android & iOS Native APIs, enabling API documentation to be automatically generated from code comments.
	1. Add `api_doc.py` to generate API docs from code comments.
	2. Improve code comments for Android & iOS Native APIs.
	3. Add `lynx/tools/api/docs/templates` directory which containing APIs templates.


- [Feature] Decouple List and lynx shell ([de04e55](https://github.com/lynx-family/lynx/commit/de04e55dec4a3f524c14b203b93fb71f7af6bb1b))  @keweibing

	
	Decouple UIListContainer from lynx shell


- [Feature] GetCustomSection support multiple bundles ([a8dab1b](https://github.com/lynx-family/lynx/commit/a8dab1b78d2a5d81766f9032cbea39ed1b5f4c6d))  @lybvinci

	
	MTS: lynx.getCustomSection support second parameter: bundleName.
	BTS: lynx.getCustomSectionSync support second parameter: bundleName.
	bundleName means The name of the bundle to be searched for.


- [Feature][Harmony] Support `skip-redirection` and `MediaResourceFetcher` for Harmony image element ([5fce833](https://github.com/lynx-family/lynx/commit/5fce8333b688806656406807ff72dfb373e09881))  @liubb0516

	
	support `skip-redirection` and `MediaResourceFetcher` for Harmony image element


- [Feature] support encode decode js bytecode custom section ([33e021a](https://github.com/lynx-family/lynx/commit/33e021af82b57181e36d24b7c18e5865288a486f))  @lybvinci

	
	support custom section encode deode js bytecode


- [Feature] Decouple List and lynx shell ([667d19d](https://github.com/lynx-family/lynx/commit/667d19d7f7e7e7097111ac942bedb7121a78cee2))  @keweibing

	
	Decouple UIListContainer from lynx shell


- [Feature][Part1][Memory]: add memory monitoring for scripting engine. ([3796e2f](https://github.com/lynx-family/lynx/commit/3796e2f260dd6d7788bcb38f9bbb651111c297ea))  @Tamerlx

	
	This MR is to add memory usage tracking for scripting engine and elements. Implement observer pattern to report memory metrics through performance monitoring system.
	
	- Add memory usage callback in MTS & BTS engine runtime.
	- Update performance observer to include memory metrics
	
	issue:m-6564941865
	


- [Feature][Layout] Adjust Layout entry in standardlized pipeline. ([7c80895](https://github.com/lynx-family/lynx/commit/7c8089566fb6fe6a415fddfab98fb53c6fabdd54))  @ChrisChan0668

	
	In standardlized pipeline, Layout should be triggered by TemplateAssembler rather than ElementManager.
	This commit add a interface, named LayoutScheduler, for TemplateAssembler to request Layout.
	LayoutScheduler is implemented by tasm_mediator, which uses LayoutActor to make sure requestLayout in Layout thread.
	After RequestLayout, TemplateAssembler will receive the request result by PipelineLayoutData in onLayoutAfter, layout_triggered shows wheather Layout is actually conducted.


- [Feature][Android] Supports binding a LynxView in the Detached Engine state to a newly created Engine. ([be11891](https://github.com/lynx-family/lynx/commit/be118912abdff7202001ed725609c71a0faba3cd))  @Yellow5A5

	
	This MR mainly includes the following changes:
	1. Implement the internal fallbackNewEngine interface.
	2. Fix the issue where the LayoutActor fails on LayoutNotInElement Mode.
	3. Fix the handling of UIRenderer/Context in edge cases of Engine reuse.


- [Feature] [Frame] [iOS] use LynxTemplateRender to render FrameView ([8a6e3df](https://github.com/lynx-family/lynx/commit/8a6e3df445dc66d327dc561c6b9c604bab90c7b7))  @Awuiil

	
	Summary of this commit:
	
	1. remove LynxFrameRender
	
	2. make LynxTemplateRender hold LUIBodyView rather than LynxView
	
	3. use LynxTemplateRender to render template for FrameView
	


- [Feature] Add Harmony API parser ([7a2756d](https://github.com/lynx-family/lynx/commit/7a2756d16e59d72a352fdf6e1c283277c26d72d3))  @pilipala195

	
	In this commit, we use `ts-morph` to parse Harmony Native API, and get the APIs metadata ready for API check and docs generated in later commit.


- [Feature][Part6][Memory]: Report memory information to Trace. ([b1b87ec](https://github.com/lynx-family/lynx/commit/b1b87ec4a4602ae0fdaecca61aaf307c86d325a4))  @Tamerlx

	
	This MR is to report memory information to Trace.
	
	- add trace events for memory usage reporting
	- implement performance event tracing with JSON serialization
	- skip redundant memory updates when size hasn't changed.
	
	issue:m-6564941865
	


- [Feature] Support lynx.loadScript ([52a7c54](https://github.com/lynx-family/lynx/commit/52a7c549b858182fbc66e09bd653f87f37114bd4))  @lybvinci

	
	Support MTS lynx.loadScript.


- [Feature][Part7][Memory]:  improve memory monitor configuration and enablement. ([2f173b2](https://github.com/lynx-family/lynx/commit/2f173b2d9910643b42a34fb69c344b01aba933d7))  @Tamerlx

	
	This MR is to improve memory monitor configuration and enablement.
	
	- Change default memory threshold from 5MB to 0MB for more sensitive monitoring
	- Add priority-based enablement logic with force override capability
	- Expose memory monitor status through Java API
	- Enable memory monitor by default in example app settings
	
	issue:m-6564941865
	


- [Feature] [Frame] [Android] use LynxTemplateRender to render FrameView ([f13f778](https://github.com/lynx-family/lynx/commit/f13f778b7dd2d96a7dab960b72e02d974ec25408))  @Awuiil

	
	Summary of this commit:
	
	1. remove LynxFrameRender
	
	2. make LynxTemplateRender hold LUIBodyView rather than LynxView
	
	3. use LynxTemplateRender to render template for FrameView
	


- [Feature] Add PrimJS NAPI backend for pub::Value ([123c7ca](https://github.com/lynx-family/lynx/commit/123c7ca32f137c8dfa55b9f1f844ec979e0cee17))  @RobinWuu

	
	NativeModules will support the use of Napi Modules, therefore it is necessary to add a PrimJS NAPI backend for `pub::Value`.


- [Feature] Add loadDynamicComponent and nativeGlobal export ([df55cf4](https://github.com/lynx-family/lynx/commit/df55cf4bfac03866790bfcfdb5238630cf9f114e))  @ci_lynx

	
	web bundle adds loadDynamicComponent, nativeGlobal export, L4W needs this to load dynamic component


- [Feature] [Frame] [iOS] integrate interaction between LynxView and FrameView ([c292288](https://github.com/lynx-family/lynx/commit/c292288647db3a1774105ac43a0be6d1bada5ab8))  @Awuiil

	
	Summary of this commit:
	
	1. FrameView can obtain Builder Params from LynxView to construct itself
	
	2. FrameView supports data and src properties
	
	3. FrameView integrates gesture interaction
	


- [Feature] support sticky in list container. ([ac31763](https://github.com/lynx-family/lynx/commit/ac317637da79c40ca59321a1c3a2b87767ad07a1))  @ci_lynx

	
	1. support sticky in list container.
	2. add interface of `RemoveListItemPaintingNode `.
	3. add lifeCycle of `OnNodeReady`.
	4. event of `stickyTop`


- [Feature] Support BTS lynx.loadScript. ([4d38c87](https://github.com/lynx-family/lynx/commit/4d38c874db872be9b70b1549f76d425c28d4f435))  @lybvinci

	
	align with MTS's lynx.loadScript, but not support bytecode script
	type.


- [Feature][Part8][Memory][iOS]: Add memory usage tracking for LynxUI. ([afafe72](https://github.com/lynx-family/lynx/commit/afafe726dc72908505da980927444752e7afabb4))  @Tamerlx

	
	This commit introduces memory usage tracking for `LynxUI`.
	
	Main changes:
	- Add instance count tracking to memory records for better memory usage analysis
	- Implement batch memory update API to improve performance
	- Fix memory calculation accuracy by using malloc_size instead of class size
	- Correct memory detail reporting logic in UIImage component
	- Update memory record handling in performance controller
	
	issue:m-6564941865
	


- [Feature] add LazyBundleEntry ([7d36a25](https://github.com/lynx-family/lynx/commit/7d36a257ea39b2161c50c65574ad6273cb827144))  @partholon

	
	- Introduced `LazyBundleEntry`
	
	- Added description file `LazyBundleEntry.yml`
	
	- Remove `lynxsdk_lazy_bundle_timing`


- [Feature][Part9][Memory][Android]: Add memory usage tracking for LynxBaseUI. ([2ada952](https://github.com/lynx-family/lynx/commit/2ada95270eb14b0f09159d1a2b86228a2e2133f1))  @Tamerlx

	
	This commit introduces memory usage tracking for `LynxBaseUI`.
	
	Main changes:
	- Add instance count tracking to memory records for better memory usage analysis
	- Implement batch memory update API to improve performance
	- Fix memory calculation accuracy by using malloc_size instead of class size
	- Correct memory detail reporting logic in UIImage component
	- Update memory record handling in performance controller
	
	issue:m-6564941865
	


- [Feature][CSS] clip-path support "inset" and "surperellipse" ([be261f0](https://github.com/lynx-family/lynx/commit/be261f0c9363fe1cdff8b0a5a294bae467f84305))  @ci_lynx

	
	clip-path support "inset" and "surperellipse"


- [Feature][Text]Optimize text layout in embedded mode. ([539fe76](https://github.com/lynx-family/lynx/commit/539fe76b673a082039c6e439f42d6047061a1968))  @Randycn

	
	Add text layout interface and platform adapters.
	
	- Introduce TextLayoutImpl abstraction
	  - Define core/public/text_layout_impl.h with a pure‐virtual interface for `DispatchLayoutBefore`, `Measure`, and `Align`
	  - Decouple text layout responsibilities from PaintingCtxPlatformImpl
	
	- Remove generic PropArray
	  - Eliminate the cross‐platform PropArray class for passing text props
	  - On Android, only keep PropArrayAndroid to marshal data into a CompactArrayBuffer
	
	- Platform‐specific implementations
	  - Android:
	    - Implement `TextLayoutAndroid` under JNI, forwarding layout calls to TextLayout.java
	    - Serialize text attributes via CompactArrayBuffer and let Java measure via Android’s text APIs
	


- [Feature] support sticky in list container. ([fef1afd](https://github.com/lynx-family/lynx/commit/fef1afd8a1a52e5bdb9e9e5ad918525aa2e0448c))  @ci_lynx

	
	1. support sticky in list container.
	2. add interface of `RemoveListItemPaintingNode `.
	3. add lifeCycle of `OnNodeReady`.
	4. event of `stickyTop`


- [Feature] Using LynxViewGroup to reuse lynx runtime environment ([e4d95ed](https://github.com/lynx-family/lynx/commit/e4d95ed3676b8710fdbde43fe08a38b5119e58fd))  @nhsprite

	
	In this commit, we introduce a new Concept: `LynxViewGroup` to manager the reusement of lynx runtime environment. Each lynxView may build with a same LynxViewGroup instance such that LynxViewGroup is shared between multiple lynxViews.
	
	currently, LynxViewGroup supports with below properties:
	- `behaviorRegistry`
	- `lynxRuntimeOptions`
	- `contextData`
	- `threadStrategy`
	- `enableAutoExpose`
	- `enableLayoutSafepoint`
	- `density`
	
	and custom properties as:
	- `url`
	- `templateBundle`
	- `globalProps`
	
	In LynxTemplateRender, we use `ILynxViewConfigProvider` to decouple with LynxViewBuilder.
	
	later, we will support using `LynxViewGroup` as `RuntimeCacheManager` that's why a new interface `ILynxViewRuntimeCacheManager` is introduced


- [Feature][Layout] refactor test for starlight standalone api ([3d25d05](https://github.com/lynx-family/lynx/commit/3d25d05425473c0f61e9e8a126f9cb9be23aa660))  @givemefive9

	
	Due to the previous refactoring of the starlight standalone API,
	the corresponding tests are also refactored accordingly.
	Additionally, in this MR, certain logics have been optimized, including:
	
	1. The naming of some public APIs
	2. The logic related to Android baseline
	3. The handling of RTL logic in SLNodeCalculateLayout


- [Feature] [Frame] [Android] integrate interaction between LynxView and FrameView ([015edf1](https://github.com/lynx-family/lynx/commit/015edf184ba83b3ba7cc882a9700d73ecf6d4dad))  @Awuiil

	
	Summary of this commit:
	
	1. FrameView can obtain Builder Params from LynxView to construct itself
	
	2. FrameView supports data and src properties
	
	3. FrameView integrates gesture interaction
	


- [Feature] Add lynxOptPlugin to package so ([a5f8480](https://github.com/lynx-family/lynx/commit/a5f848021f9f317bbc9a8115e3792425ef353512))  @huzhanbo1996

	
	Add lynxOptPlugin to package so


- [Feature][Text][iOS] Implement text layout in embedded mode. ([cae82d0](https://github.com/lynx-family/lynx/commit/cae82d08f5aa9fa1fa5bc0a74813c5b2400dec11))  @Randycn

	
	Add `LynxTextRenderManager` class for text layout at the iOS platform layer.
	
	Main changes:
	- Introduces `LynxTextRenderManager` to handle `NSAttributedString` creation, layout, and caching on the platform side.
	- Rewrites `TextLayoutDarwin` (C++) to act as a bridge, traversing the element tree and marshalling data to the Objective-C layer.
	- Implements recursive measurement and alignment for nested inline elements.
	


- [Feature][iOS] Support the reuse of LynxEngine in Embedded mode. ([ab561c0](https://github.com/lynx-family/lynx/commit/ab561c0e87518ca0352b79e8bbeb470d322a9705))  @Yellow5A5

	
	1. Add the LynxEngine class to hold reusable objects, consistent with the Android implementation.
	2. Add the LynxEnginePool class to manage Engine cache.
	3. Add adaptation for the reuse process in LynxTemplateRender/Helper/LynxUIOwner.


- [Feature] support `lynx.fetchBundle` api in BTS environment ([fbe7b0c](https://github.com/lynx-family/lynx/commit/fbe7b0c7fceefc03481b3fb552b50e2f83795f2e))  @nhsprite

	
	`lynx.fetchBundle` is meant to query an AppBundle and returns a ResponseHandler backed by a `std::future`. In this commit,
	we have supported `lynx.fetchBundle` api in BTS environment, it will calls to engine thread and passing a `std::promise` instance
	to retrieve result as `BundleResultInfo`.
	


- [Feature][Part1] add host platform timing support and improve code generation. ([3b3a487](https://github.com/lynx-family/lynx/commit/3b3a487e1c87ba5e1f3e6e94233e673795177ef6))  @Tamerlx

	
	This MR is to add host platform timing support and improve code generation.
	
	- Add HostPlatformTiming definitions for Android, iOS and Harmony
	- Replace `x-ts-only` with `x-lang` for better language-specific control.
	- Update TS, Java and Obj-C generators to handle language-specific generation
	- Support discriminated unions in TS generator and add ts-literal-type support for string literals.
	
	issue:m-6646549952
	https://github.com/lynx-family/lynx/discussions/2009
	


- [Feature][DevTool] Support debugging for shared data. ([ae33840](https://github.com/lynx-family/lynx/commit/ae33840b23b6a428d79993130e2b1d358d0c427a))  @Dango-2021

	
	1. Support CDP for the WhiteBoard domain.
	2. Add WhiteBoardInspector to communicate with WhiteBoard.
	3. Add WhiteBoardInspectorDelegate to process WhiteBoard CDP messages.


- [Feature][Part2][C++] add host platform timing support. ([32e4b0b](https://github.com/lynx-family/lynx/commit/32e4b0bb0d7e8c436c8964992f71604a3cb17564))  @Tamerlx

	
	This MR is to add host platform timing support.
	
	- add new methods to handle host platform timings and extra info.
	- store host platform timing data separately from framework timings.
	- merge host platform timing data when dispatching pipeline entries.
	
	issue:m-6646549952
	https://github.com/lynx-family/lynx/discussions/2009
	


- [Feature] support `ResponseHandler` in Scripting Runtime ([f9da033](https://github.com/lynx-family/lynx/commit/f9da033cc40d648123a6d0782a0dd9862b29b3b6))  @nhsprite

	
	support `ResponseHandler` in Scripting Runtime, it actually wraps a `std::future` inside, and provide `wait` & `then`
	to implement blocking & non-blocking resource fetching.
	


- [Feature][Part1] add host platform timing support and improve code generation. ([3ea998c](https://github.com/lynx-family/lynx/commit/3ea998c2ce0b66ff49e1e01ecce386ddd31886d1))  @Tamerlx

	
	This MR is to add host platform timing support and improve code generation.
	
	- Add HostPlatformTiming definitions for Android, iOS and Harmony
	- Replace `x-ts-only` with `x-lang` for better language-specific control.
	- Update TS, Java and Obj-C generators to handle language-specific generation
	- Support discriminated unions in TS generator and add ts-literal-type support for string literals.
	
	issue:m-6646549952
	https://github.com/lynx-family/lynx/discussions/2009
	


- [Feature][Part3][Android]: add host platform timing tracking for UI operations. ([19854aa](https://github.com/lynx-family/lynx/commit/19854aa5192bd209534d114387fffb470007c3f3))  @Tamerlx

	
	This MR is to add host platform timing tracking for UI operations
	
	Add timing constants and methods to track measure, layout, and draw operations in host platform. Implement performance controller to collect and report these timings along with paint end timing. Trace events are added for better debugging and analysis.
	
	The changes enable detailed performance monitoring of UI operations by marking start and end times for measure, layout, and draw phases. This helps identify performance bottlenecks in the host platform rendering pipeline.
	
	issue:m-6646549952
	https://github.com/lynx-family/lynx/discussions/2009
	


- [Feature] add ref_counted_obj_visitor callback ([5a14029](https://github.com/lynx-family/lynx/commit/5a14029c8543d658735aa0e196e73364c6a3eb4f))  @zys777

	
	used for evacuating refcounted circle


- [Feature][LynxRecorder]Add LynxDebugInfoRecorder to persist debug-info.json ([63fbf88](https://github.com/lynx-family/lynx/commit/63fbf882a6f27b8ec5bcb842e30acf4b9e617562))  @RovicnowYoyi

	
	During the recording phase, debug-info.json is persistently stored and the result is returned through LynxDebugInfoRecorder during playback, thus solving the problem that the debug-info.json URL becomes invalid due to the shutdown of the local server and the test case cannot debug MTS.


- [Feature] support `FetchBundle` with `ResponsePromise` object In MTS Scripting Runtime ([fef5a31](https://github.com/lynx-family/lynx/commit/fef5a31ebe39b211496239047648f8eaa626612a))  @nhsprite

	
	in previous patch: !54224, `FetchBundle` in supported in BTS Scripting Runtime. MTS Runtime supported is added in this patch.
	`FetchBundle` is add as a member function of `lynx` host object. And use `ResponseHandlerInLepus` to manage the binding object
	and `ResponsePromise`.
	
	the result of `FetchBundle` is a `lepus::Value` with two functions in table: `wait` & `then`.
	`WaitingForResponse` renderer function will be invoked when `handler.wait(timeout)` called.
	`AddListenerForResponse` renderer function will be invoked when `handler.then(callback)` called
	
	usage:
	```
	auto handler = lynx.fetchBundle('testing_url');
	// blocking the js thread and getting the bundle info result
	auto bundleInfo = handler.wait(timeout);
	
	// add a listener for bundleInfo result, listener will be invoked whenever the fetchBundle operation is finished.
	handler.then((bundleInfo) => {
		// handles the bundleInfo.
	})
	
	```
	
	[internal]
	[end-internal]


- [Feature][Emebedded] Separated PaintingContext implementation for embedded mode renderer. ([0757cc0](https://github.com/lynx-family/lynx/commit/0757cc06752b2c67e1e523eecee395f493b2f8d2))  @zhongyr

	
	When enable renderer with native UI named as `Fragment`, we need a new painting context
	to operate with HostPlatformRenderer.


- [Feature][Harmony] Provide animated image playback and control capabilities for HarmonyOS ([abb4b89](https://github.com/lynx-family/lynx/commit/abb4b891b9f9ee7e1734a050ebab9cbf35b3bb78))  @cjnhust

	
	Provide animated image playback and control capabilities for HarmonyOS


- [Feature][Part11][iOS]: add timer-based memory usage reporting for LynxSDK. ([e5eef03](https://github.com/lynx-family/lynx/commit/e5eef0354386eccaba640d00586d75764836f49a))  @Tamerlx

	
	This MR is to add timer-based memory usage reporting for LynxSDK.
	
	- Add periodic memory usage reporting via NSTimer for specific performance events
	- Include stage tracking and cleanup timers when instances are released
	
	issue:m-6564941865
	


- [Feature][Font][Part1] Add font-variation-settings,font-feature-settings and font-optical-sizing CSS properties. ([07f7bea](https://github.com/lynx-family/lynx/commit/07f7beaadfd18e385f86a9754ab8357f7604caad))  @Randycn

	
	This commit introduces support for three advanced CSS font properties:
	- `font-variation-settings`: Controls variable font axes.
	- `font-feature-settings`: Enables or disables OpenType font features.
	- `font-optical-sizing`: Controls automatic optical sizing for fonts that support it.
	
	These properties provide developers with fine-grained control over typography, enabling richer and more dynamic text rendering.
	
	The implementation spans the entire CSS processing pipeline:
	- **Parsing**: New handlers and logic were added to `CSSStringParser` to correctly parse the string values of these properties.
	- **Style Computation**: `ComputedCSSStyle` and `TextAttributes` were updated to store and manage the new style values.


- [Feature][Harmony] Add harmony platform code and explorer ([0635fb7](https://github.com/lynx-family/lynx/commit/0635fb733dacf29ca0446c36f110cd51b8a943a9))  @rel-q



- [Feature][Part12][Android]: add timer-based memory usage reporting for LynxSDK. ([58da07c](https://github.com/lynx-family/lynx/commit/58da07c7ec86610c40736aaa767a693878ec7667))  @Tamerlx

	
	This MR is to add timer-based memory usage reporting for LynxSDK.
	
	Add periodic memory usage reporting via NSTimer for specific performance events
	Include stage tracking and cleanup timers when instances are released
	issue:m-6564941865
	


- [Feature] Harmony Native API comments and api check ([7a58bfc](https://github.com/lynx-family/lynx/commit/7a58bfcf502aa1d9d7e8d4784832f84d4950cf02))  @pilipala195

	
	In this commit, we enable Harmony API check, the APIs metadata stored in `lynx_harmony.api`. Also we add Harmony Native API comments for generating docs.


- [Feature][Font][Part2] Supports variable fonts and font features on the platform layer. ([d478455](https://github.com/lynx-family/lynx/commit/d478455fbc098db69efa4a81cb137137ffa1a327))  @Randycn

	
	This commit introduces support for advanced OpenType font features, specifically `font-variation-settings`, `font-feature-settings`, and `font-optical-sizing`, across both Android and iOS platforms. This enhancement allows for finer control over typography and enables the use of variable fonts.
	
	Key changes:
	
	- **Android:**
	  - Implemented `setFontVariationSettings` and `setFontFeatureSettings` in `BaseTextShadowNode` to parse CSS properties from the frontend.
	  - Extended `TextHelper` to apply these settings to `TextPaint` using `setFontVariationSettings` (API 26+) and `setFontFeatureSettings` (API 21+).
	  - Introduced `FontSettingsKey` and a dedicated LRU cache in `FontFaceManager` to store and reuse `Typeface` objects generated with specific settings, optimizing performance.
	  - Added support for `font-optical-sizing`, which automatically applies the font size to the 'opsz' variation axis.
	
	- **iOS:**
	  - Added `fontVariationSettings`, `fontFeatureSettings`, and `fontOpticalSizing` properties to `LynxTextStyle`.
	  - Created a new helper method `generateFontWithBaseFont` in `LynxFontFaceManager` that uses CoreText APIs (`CTFontDescriptor`, `kCTFontVariationAttribute`, `kCTFontFeatureSettingsAttribute`) to construct a new `UIFont` with the specified variation and feature settings.
	  - Mapped common `font-feature-settings` tags (e.g., 'smcp', 'hlig') to their corresponding CoreText constants.


- [Feature] support `FetchBundle` by LazyBundleLoader ([41bb7a3](https://github.com/lynx-family/lynx/commit/41bb7a3842b01ab81c2dc5bca8acd3653893cac8))  @Awuiil

	
	1. add new class `LazyBundleRequest` to hold request info for fetching bundle
	
	2. add `FetchBundle` for LazyBundleLoader to load LazyBundle and FrameBundle.
	


- [Feature][LynxRecorder] SharedData recorder and replay ([6d1f648](https://github.com/lynx-family/lynx/commit/6d1f648f1925144640977cdbaffe8bab3f39c124))  @ZhaoSongGOO

	
	For the front-end data sharedData, during the recording phase, each call to getSharedData triggers
	a record operation to capture the data. During the playback phase, if data retrieval from nativeGlobal fails,
	the recorded data from the recording phase is fetched through LynxRecorderReplayDataModule.


- [Feature][list] Support nested list in ReactLynx3 ([2b375dd](https://github.com/lynx-family/lynx/commit/2b375dd305dd0e7e0f1b0dc974064992526e33f6))  @DwwWxx

	
	In the case of list nested list, it exists that list A may be reused by list B, and RL3 framework will flush the diff result between list A and list B. In diff result.
	
	To make sure that we can reuse list-item elements of list A to render list B, RL3 framework will set the "flush" parameter to true of reused list-item in update actions, and list will recycle those list-item before the next layout.


- [Feature] support HttpService on Harmony ([5ac4dab](https://github.com/lynx-family/lynx/commit/5ac4dabd246620b608547db582f838cbb6903659))  @huzhanbo1996

	
	support HttpService on Harmony
	
	
	
	
	(cherry picked from commit bc7173a448601aa1d642ac20ff9820c375f4330f)


- [Feature][Network] fetch API support chunck streaming ([005fbb3](https://github.com/lynx-family/lynx/commit/005fbb3de95cf89d70f0d300855ede2a6f5e2fcf))  @huzhanbo1996

	
	fetch API support chunck streaming
	
	
	
	(cherry picked from commit 0cdd9d54fc7faddd305204a894681e3be0c19a31)
### 🐛 Bug Fixes


- [BugFix] Fix field id conflict between JSProfilePackage and StatsdAtom ([18ec8f2](https://github.com/lynx-family/lynx/commit/18ec8f23b45f5065a937f3a0e0db80c809c621c5))  @xiaosu906

	
	Resolved the field id conflict between JSProfilePackage and StatsdAtom by
	setting the JSProfilePackage field id to 899.


- [BugFix][EmbeddedMode] Add some NPE protect when backgroundRuntime not enabled. ([1c6bc01](https://github.com/lynx-family/lynx/commit/1c6bc01a92515b002bfad9f6644ffc6c45d6efa2))  @DragonDragonDDD

	
	In !52153, we disabled backgroundRuntime in EmbeddedMode.
	
	This MR add some NPE protect in this case.


- [BugFix] Fix the order of NAPI and app destroy logic ([fc71ec4](https://github.com/lynx-family/lynx/commit/fc71ec451250160f4d9b7db96939b98321432a71))  @lybvinci

	
	App destroy might invoke front-page's destroy, which could call a NAPI API, so it's important to call destroy first, and then call NAPI destroy.


- [BugFix][Android][Event] Fixed the issue with incorrect WindowRect obtained in folding screen mode. ([d4beaf0](https://github.com/lynx-family/lynx/commit/d4beaf035d9ffb933c8364758071f2cc7f3667f7))  @rAY-ooo

	
	description:
	In order to avoid frequent IPC, the exposure was previously obtained from LynxContext ScreenMetrics to calculate WindowRect, but when no external interface is called to update ScreenMetrics (such as when the folding screen is unfolded), WindowRect may be wrong, resulting in abnormal exposure.
	Therefore, we obtain ScreenMetrics through DisplayMetricsHolder, but only call it at the appropriate time.
	


- [BugFix] When executing HandleInsertChildAction, if the ref_node's render_parent is null, continue traversing next_sibling to find ref_node ([bb39d87](https://github.com/lynx-family/lynx/commit/bb39d878699e9ad7020c3cdaa9bcc7f3a71e1c77))  @ShouruiSong

	
	This merge request addresses responsive layout issues, specifically enhancing the HandleInsertChildAction logic to continue traversing next_sibling when the ref_node's render_parent is null, thereby preventing crashes or layout errors.
	
	Key Changes:
	
	* Configuration: Introduced a temporary flag fix_insert_before_fixed_bug_ in ElementManager to toggle the fix for inserting nodes before fixed elements. Accessible via LynxEnv.
	* Code Logic: Updated the while loop condition in FiberElement::HandleInsertChildAction to handle empty render_parent when the fix is enabled.
	* Tests: Added FiberElementInsertBeforeFixedCase test cases in fiber_element_unittest.cc to validate the fix.
	* Environment: Added FixInsertBeforeFixedBug to LynxEnv and updated related enums/mappings in lynx_env.h.


- [BugFix] remove featureCount from template_codec module ([b0bc995](https://github.com/lynx-family/lynx/commit/b0bc9958d6da03f2ea020422960c0c4f4efbe835))  @nhsprite

	
	featureCount should not appear in template_codec module, as `tasm-decoder` does not support featureCount at all.


- [BugFix][Text] Fix vertical offset issue in multi-line text rendering. ([c2a38d2](https://github.com/lynx-family/lynx/commit/c2a38d2c7bcead25ca7cc4a5e3822ec5eccd7de3))  @Randycn

	
	After setting the line-height, we will center the inline text, but currently the maximum ascent and minimum descent used are for all text fonts, resulting in abnormal offsets in some scenarios, such as nested views.
	
	Calculate the maximum ascent and minimum descent using the font of the line text.


- [BugFix] Check if js_task_adapter_ is null before calling ([c294319](https://github.com/lynx-family/lynx/commit/c294319d43e25d67a06785b8918018d8eb2927d8))  @lybvinci

	
	js_task_adapter_ may be null after CallDestroyLifetimeFun. So we should
	check if js_task_adapter_ is null before calling.


- [BugFix] Fix vsync doFrame being called after js_app destroy ([873b2a1](https://github.com/lynx-family/lynx/commit/873b2a186bc83e90900ed9ea13dfae82ecfb5eca))  @lybvinci

	
	1. When js_app is destroyed, animation_frame_handler_ should be reset instead of just calling Destroy().
	2. VsyncObserver should own a weak js_app instance instead of a shared_ptr. Additionally, DoFrame should check the state of js_app.


- [BugFix] Avoid waiting for LynxRuntime to destroy in order to prevent multiple crashes ([ea02967](https://github.com/lynx-family/lynx/commit/ea02967aec27998b5e7c03870a1cc3d7bcead59b))  @lybvinci

	
	When opt_avoid_destroy_runtime_wait is true, destroy LynxRuntime
	directly.


- [BugFix] Rename visibleCells* to visibleItem* and update level enum type ([65db33e](https://github.com/lynx-family/lynx/commit/65db33e03a74b809e2928a28d495c647b12922ec))  @fzx2666-fz

	
	- Rename `visibleCellsAfterUpdate` to `visibleItemAfterUpdate`
	- Rename `visibleCellsBeforeUpdate` to `visibleItemBeforeUpdate`
	- Change `level` enum in `x-overlay-ng` from string to integer


- [BugFix] ensure access darwin ui on main thread. ([5c3b392](https://github.com/lynx-family/lynx/commit/5c3b3926b9eda82564376710bcb0cf5382f09912))  @nhsprite

	
	loadTemplate may be called from non-main thread, if error occurs will the loading process, `templateRenderOnResetViewAndLayer` will be invoked from non-main thread.
	we need to ensure it's called on main thread, using `runOnMainThread` to ensure it.


- [BugFix][iOS] LynxPerformanceEntryConverter should pick entryType ([ddb80a3](https://github.com/lynx-family/lynx/commit/ddb80a3e4c22e096590e6b8b97e8879ce97cbb9e))  @partholon

	
	oc_generator should use 'entryType' instead of 'entry_type'
	


- [BugFix] fix native_promise set error ([de02717](https://github.com/lynx-family/lynx/commit/de027171d4e675fbb51dd75416be04b61e7fcd92))  @lybvinci

	
	Fix native_promise redefined and OS_ANDROID support.


- [BugFix][Android] Fix the issue that inline text offset doesn't take effect when encountering BoringLayout optimization. ([16a6e42](https://github.com/lynx-family/lynx/commit/16a6e42b92f5479890a75c76485ae49db5dcb43a))  @Randycn

	
	When using `BoringLayout`, `MetricAffectingSpan` will not take effect, causing the vertical-align set in inline text to not take effect.
	
	Avoid using `BoringLayout` when vertical-align is set for inline text.


- [BugFix] Add nullable for parameters of LynxScrollListener ([ee48b33](https://github.com/lynx-family/lynx/commit/ee48b33dda7831df3aa81f26f1d39125e20cfd63))  @DwwWxx

	
	Add nullable for parameters of LynxScrollListener to avoid use implicitly unwrapped optionals in swift.
	


- [BugFix]: Modify GenerateResponseChain such that stop bubbling at fixed elements when using FiberElement+RadonDiff. ([c4d3ff1](https://github.com/lynx-family/lynx/commit/c4d3ff133f8ab589895c0406e5fcae654a9d8923))  @ShouruiSong

	
	- Introduce enable_fiber_element_for_radon_diff flag to TouchEventHandler
	- Modify GenerateResponseChain to conditionally handle fixed elements:
	  * Stop bubbling at fixed elements when using FiberElement+RadonDiff
	  * Add root element to chain if fixed element isn't root
	- Update event chain generation in multiple handlers to pass PageProxy
	- Propagate enable_fiber_element_for_radon_diff flag through TemplateAssembler
	- Adapt test initialization with new flag parameter
	
	This change ensures proper event bubbling behavior when using RadonDiff with
	FiberElement implementation, preventing incorrect event propagation paths
	between fixed elements and root components.


- [BugFix] Destroy js_app early to avoid unexpected function calls. ([4ec0029](https://github.com/lynx-family/lynx/commit/4ec0029b42581b2691c7c274d70abef74e5bb171))  @lybvinci

	
	Use opt_destroy_js_app_early to control this feature, the default value is true.
	When enabled, js_app and NAPI will be destroyed during tryToDestroy().The JsApp instance will be destroyed, and the AppProxy will ignore JS function calls, which helps prevent many state-related crashes.
	Otherwise, they will be destroyed during destroy().


- [BugFix] Fix the issue of failed incremental generation of JNI-related header files. ([1e66775](https://github.com/lynx-family/lynx/commit/1e667756763a79ac573fde3fc4794502d85bca52))  @yongjieTang

	
	When the content is the same, the file is still opened and written, which causes the timestamp of the JNI header files to change, resulting in the failure of ninja incremental compilation.


- [BugFix] Fix V8RuntimeProfiler not found issue on Windows platform ([44c20c9](https://github.com/lynx-family/lynx/commit/44c20c9a03d25fbcb0152f6e1ac554da78063a08))  @xiaosu906

	
	Summary of change:
	Resolved the issue on Windows platform where the profile/v8:v8_profile was
	missing, causing the V8RuntimeProfiler to be unavailable.


- [BugFix][Gesture] Fix gesture relationship not work due to EventDispatcher lazy load ([60c5713](https://github.com/lynx-family/lynx/commit/60c5713602c0655d859f887dfb2c9a9400229b8b))  @AdrianLCA

	
	1. Since EventDispatcher is created only when touching, but lynxUI needs to join the gesture arena when createView, so the gesture arena logic is moved to pageConfigDecoded
	2. Optimize existing logic and move duplicate code to lynxBaseUI
	3. Add getScrollInfo in listContainer and align the platform list
	
	


- [BugFix] fix missing 'template_bundle_decode' in setup timing ([6426bbe](https://github.com/lynx-family/lynx/commit/6426bbea0a8c52fb898f91943a74f631c78bf255))  @Awuiil

	
	As describe
	
	
	Autoland:release/3.3,release/3.2


- [BugFix] remove the implicit runtime initialization of global variables in frame_element ([20170a1](https://github.com/lynx-family/lynx/commit/20170a1f05a4cdaa44ddcca1a2d502ac3cedd90f))  @Awuiil

	
	As describe
	
	
	Autoland: release/3.3


- [BugFix] Handle nullptr in debug->set_string_value correctly ([efa862b](https://github.com/lynx-family/lynx/commit/efa862b1cc56604a21a905d8baeee89e2cda3591))  @xiaosu906

	
	Summary of change:
	Modified the debug->set_string_value function to correctly handle cases
	where the value is nullptr. If the value is nullptr, it sets the string to
	"nullptr"; otherwise, it sets the string using the provided value and its
	length.


- [BugFix] fix nullpointerexception with shouldRedirectUrl ([c70db7e](https://github.com/lynx-family/lynx/commit/c70db7ed97376a8daec7d3fa8eec8f17b4da98fd))  @nhsprite

	
	the default implementation of `shouldRedirectImageUrl` for LynxViewClient returns null, if the implementation implements with kotlin and call `super.shouldRedirectImageUrl` it may occurs with nullpointerexception.
	catch this exception to avoid CreateUI errors.


- [BugFix][Android][Text] Fix the issue that the background image of the truncated inline text does not display. ([71997cb](https://github.com/lynx-family/lynx/commit/71997cb7410c9ba959269de4ddd9e7a18e6a0bb8))  @Randycn

	
	When the inline text sets the background image and is truncated, there is no need to update the start and end index of the `LynxTextBackgroundSpan`.


- [BugFix] update host branch and base version to 3.4 ([0b72d9f](https://github.com/lynx-family/lynx/commit/0b72d9f128994c0e609163ac080710b7cdb0e10a))  @jianliang00

	
	as description


- [BugFix] API check iOS enum bugfix ([1cdd931](https://github.com/lynx-family/lynx/commit/1cdd9310d65904def8ef0ec6fe891b718e725747))  @pilipala195

	
	In the API check, some iOS enumeration type definitions were not correctly parsed, missing specific enumeration types. This commit fixes the issue.


- [BugFix][iOS][Text] Fix the issue that the text still displays after being cleared. ([0523957](https://github.com/lynx-family/lynx/commit/05239573dde0041781e4af23b92e6096c57cb25e))  @Randycn

	
	In commit 0c064b02c2193e8303b940d124362be55b0af215, we unified the trigger of text drawing in `onNodeReady`, but this triggered a hidden bug. In the scenario where the text is cleared, when the `onReceiveUIOperation` function is executed , the frame of the UI is non-zero, and a drawing will be triggered at this time, and the previous content will be cleared. After the modification, the drawing will only be triggered in `onNodeReady`. At this time, the frame of the UI is already 0, so it returns directly in advance without clearing the content.
	
	Clear the layer whenever drawing is triggered.


- [BugFix] Call onLynxEnvSetup after env has been initialized. ([6aa9d31](https://github.com/lynx-family/lynx/commit/6aa9d315ac535d67258a34c97747db047d99fb9d))  @FrendyChen

	
	Call onLynxEnvSetup after env has been initialized.


- [BugFix] split `OnLayoutEnd` from `RunPixelPipeline` ([9ed6828](https://github.com/lynx-family/lynx/commit/9ed6828c5cfb48a0373ca9f8af849eec87dc2028))  @nhsprite

	
	Considering async layout, `OnLayoutEnd` should be called from layout_context after layout ends, After layout Ends, `PixelPipeline` ends now, we should reset current pipeline context here.


- [BugFix][iOS] Set subview and sublayers to nil ([148bc56](https://github.com/lynx-family/lynx/commit/148bc560834ac115477241a8cdefee700d7183bf))  @zhongyr

	
	Don't use performSelect to remove view and layers with the original array.
	Simply set subviews and sublayers to nil to release them.


- [BugFix][Android] Fix text horizontal position calculation error. ([9ac089d](https://github.com/lynx-family/lynx/commit/9ac089de60887fcc7cd4b35923e5988f9b548585))  @Randycn

	
	When the height is not enough and the text is omitted, it will be relayout. However, the horizontal drawing offset of the text has been calculated before this layout, resulting in incorrect drawing position.
	
	Calculate the text offset after all the text layout is completed.


- [BugFix][DevTool] Fix crash of MTS debugging. ([73b4540](https://github.com/lynx-family/lynx/commit/73b4540521d8c22d3d1773f7a4c93823ab9aae38))  @Dango-2021

	
	The RapidJSON method `GenericValue::Empty()` is designed specifically for array type values.
	Calling on non-array values will trigger an assertion.
	Since the `NDEBUG` macro is defined on iOS, the assertion does not take effect.
	However, this leads to a crash on Android.


- [BugFix] Fix mixed scan not work as expected ([be559b6](https://github.com/lynx-family/lynx/commit/be559b6b51ecf5f1b3964d3c6e8f4d16627631ce))  @coolkiid

	
	If setDecoderFactory() is called before initializeFromIntent(), the
	configured decoder will be overridden.


- [BugFix][Binding][Remote] fix implicit buffer size related API ([418ad20](https://github.com/lynx-family/lynx/commit/418ad2050a3a5bb1b4492fbeca471528b68d8b80))  @ci_lynx

	
	An 'ImplicitBufferSize' interface means that we need to calculate the actual required buffer size based on the parameters.
	For Example: `texImage2D(target, level, internalformat, width, height, border, format, type, srcData, srcOffset)` API do not take a `bufferLenght` like parameter but we can calculate the required buffer size by texture parameters. And for WebGL2, it is likely for engine to optimize texture submission by using this API with a big buffer(such as a WebAssembly Heap) with offset.
	
	This patch addresses the most commonly used interfaces, such as `texImage2/3D`, `texSubImage2/3D`.


- [BugFix] fix GetCacheDir thread safe issue ([b773026](https://github.com/lynx-family/lynx/commit/b773026b0ed9d2b899c5cbc10a0364dcb8641de9))  @lybvinci

	
	use static call GetCacheDir to resolve thread safe issue.


- [BugFix][iOS] Fix text drawing error after setting transform. ([06d6ae4](https://github.com/lynx-family/lynx/commit/06d6ae4f93a2513b3ef3738515ec2c889707468f))  @Randycn

	
	The text drawing timing is changed from `frameDidChange` to `onNodeReady`. In the scenario where transform is set on text, the text will be drawn in the frame after transform.
	
	Trigger text drawing in `updateFrame` and `frameDidChange` instead of `onNodeReady` to ensure that the timing of the trigger is the same as before.


- [BugFix][RadonFiber] Fix resolve timing for Radon-Fiber arch. ([e6ea023](https://github.com/lynx-family/lynx/commit/e6ea0238728fca9aeafbf2adf7e2c05d03484a8d))  @DragonDragonDDD

	
	1. In RadonDiff-Fiber arch, we should mark resolve end after OnPatchFinish.
	2. In RadonDiff-Fiber arch, we have marked resolve start at RadonPage dispatch stage. So we dont need to mark resolve start at OnPatchFinish.
	
	


- [BugFix][List] Fix list sticky info not responds to diff change. ([8f45cb4](https://github.com/lynx-family/lynx/commit/8f45cb4f5ac6be0d3326e6ec14c28f953b2c80e8))  @DwwWxx

	
	Currently, we use map<Index,ListItem> to save all sticky top or bottom item info, but if list receives diff info to change the index's of sticky item, we missing update the map which may lead to item not sticky.
	
	In this commit, we introduce map<ItemKey,ListItem> to save sticky item info and update the map in related platform ui operations, which can make sure that the sticky item info is corrent before we invoke transform animation.
	
	Here we use experimental-update-sticky-for-diff property as the swtich with default value is true.


- [BugFix] add null check for JSObjectCallAsFunction and ([1b9234c](https://github.com/lynx-family/lynx/commit/1b9234cc5495d9ec6f45f39aa7c0823ad605b4d7))  @lybvinci

	JSObjectCallAsConstructor call
	
	Check Function param if is null before call.


- [BugFix] call InitStyleRootWithElement when exectue GetMatchedStylesForNode to avoid style_root_ is nullptr. ([e6ebd15](https://github.com/lynx-family/lynx/commit/e6ebd15127cbd4c107bc33957e459588f0461c6b))  @ShouruiSong

	
	When element is fiber element, the style_root_ maybe nullptr when execture GetMatchedStylesForNode(). To fix this issue, call InitStyleRootWithElement to init style_root_.


- [BugFix][List] Fix the problem that "scroll-event-throttle" does not take effect ([51bbc0f](https://github.com/lynx-family/lynx/commit/51bbc0fa43dd93db3f68a6673560b396f92ba2d6))  @keweibing

	
	Fix the incorrect unit of scroll_event_throttle
	


- [BugFix] fix set duplicated timing key. ([df43f00](https://github.com/lynx-family/lynx/commit/df43f00ea8a6007474af73df564d9b9744ee36a5))  @DragonDragonDDD

	
	When set duplicated timing key, we should just ignore it.
	


- [BugFix] Fix use-after-free issue when converting lepusng value to string ([cb4809a](https://github.com/lynx-family/lynx/commit/cb4809a87b8d777416bf321abdf94eb005c55932))  @FrendyChen

	
	Adjust the order between freeing chr and using chr to construct string. Before using chr to construct string, chr might have already been freed.


- [BugFix][iOS][Background] Clear gif image frame cache synchronously. ([5045541](https://github.com/lynx-family/lynx/commit/50455416355c4a041a4d3df83d956b4d584f2327))  @zhongyr

	
	Clear the animated image frame array synchronously to prevent
	concurrent writing on the same array from the gifRender thread
	and main ui thread.


- [BugFix][Android][Text] Fix break-all not take effect. ([78397cd](https://github.com/lynx-family/lynx/commit/78397cd73a9c9fdb7bd7c69676f1631013e00e71))  @Randycn

	
	Previously, to avoid inserting zero-width characters affecting the synthesized emoji, zero-width characters were only inserted between Latin and symbol characters. However, this caused break-all to not work in some scenarios. For example, if there is a hyphen between two Chinese characters, these three characters will be wrapped as a whole.
	
	Insert zero-width characters on both sides of Latin and symbol characters.Remove some special symbol blocks to avoid inserting in the middle of emoji.


- [BugFix] add null check in FlattenUIText `getDrawPositionLeft` and `getDrawPositionTop` ([7f1f649](https://github.com/lynx-family/lynx/commit/7f1f64979db168d11faff8801a1bb81f6c57eeb3))  @ShouruiSong

	
	Described as title.
	


- [BugFix][iOS][DevTool] Fix filename case sensitivity spelling error ([8e0387a](https://github.com/lynx-family/lynx/commit/8e0387a506e514e734a4acda9f3287d760bc2b7e))  @PineconeSquirrel

	
	Fix filename case spelling error for DevtoolWebSocketModule.h


- [BugFix] Fixing precision issue when converting lepus::Value to LEPUSValue on 32-bit machines ([1520995](https://github.com/lynx-family/lynx/commit/15209953ae2ee25cecd7103637e17ef71e76bcf9))  @FrendyChen

	
	On 32-bit machines, LEPUSValue has a different data structure and needs to be processed separately by means of macros.


- [BugFix][iOS] Try fix jsc context group crash ([5d9ec3b](https://github.com/lynx-family/lynx/commit/5d9ec3b9f76758e853aefef016d84e97bbf87c79))  @lybvinci

	
	Init ctx_ and group_ when class construct to avoid random init value.


- [BugFix] Fix devtool crash caused by globalProps reused between lynxViews. ([cd4be1f](https://github.com/lynx-family/lynx/commit/cd4be1f096b36c0ba2faff63459dbace9218eb65))  @nhsprite

	
	Fix devtool crash caused by globalProps reused between lynxViews. As LynxView+Bridge is used to set globalProps here, we need to extend `LynxServiceModuleProtocol` to clone globalProps.
	Make sure that `LynxServiceModuleProtocol` will eventualy be deleted later.


- [BugFix][DevTool] screencast and computedStyle use logical pixels to match iOS ([96c016c](https://github.com/lynx-family/lynx/commit/96c016c38f75d327c07155f46f8e154a27f749e3))  @yuweizheng

	
	1.The deviceWidth and deviceHeight in the Android page.screencastFrame event were in physical pixels, and pageScaleFactor was the Android device pixel ratio. Changed to using logical pixels for deviceWidth and deviceHeight, and pageScaleFactor to 1 to align with iOS.
	2.The response of DOM.getBoxModel method in Android was in logical pixels, while the box model in CSS.getComputedStyleForNode is in physical pixels. This discrepancy causes the width and height values in the Style and Computed panels' box model to be inconsistent with the preview window and the box model protocol values. To solve this problem, Convert the box model in CSS.getComputedStyle to logical pixels.


- [BugFix][Animation] Fix detached element cause OnNodeReady don't trigger from NewAnimator ([8440b00](https://github.com/lynx-family/lynx/commit/8440b0030e24b8c1f8864c15d9a2c747d5e53f88))  @YellowFishWyfCPP

	
	When a node in the page has an animation related to Layout, `UpdateNodeReadyPatching` is executed in `OnPatchFinish`, but if the node is in state detach, `OnNodeReady` also does not do `UpdateNodeReadyPatching`, so the `OnNodeReady` of the Render animation cannot be consumed, and some animation properties that depend on `OnNodeReady` will be invalid.


- [BugFix][Text][iOS] Fix the error in the count of text lines returned by bindlayout. ([bcd0aea](https://github.com/lynx-family/lynx/commit/bcd0aeafcd1821e6b066cd481f11a8c433de107d))  @Randycn

	
	1.When the last character is a newline character, the number of lines obtained by using the `enumerateLineFragmentsForGlyphRange` method is one less than the actual number. This situation needs to be handled separately.
	2.Fixed the issue that white space was not being removed properly.


- [BugFix] Fix the issue that image may not display when reuse Lynx Engine. ([132618d](https://github.com/lynx-family/lynx/commit/132618d50487b80bbaf2c98bed78cd31f250f8e4))  @ShouruiSong

	
	This merge request addresses image-related issues by optimizing image management and rendering logic to improve display stability and processing performance.
	
	1. **Parameter Type Adjustments**:
	   - In the `LynxImageManager` class, the parameter type for `updatePropertiesInterval` was changed from `StylesDiffMap` to `ReadableMap` to improve method versatility.
	
	2. **New Methods Added**:
	   - `beforeProcessViewInfo` added to the `UIImage` class.
	   - `setImageManagerUsedInBeforeDraw` added to the `ViewInfo` class to handle image manager logic before rendering.
	
	3. **Access Modifier Updates**:
	   - The access modifier for the `mProps` variable in `LynxBaseUI` was changed from `private` to `protected`, enabling subclass access.
	4. **Code Logic Optimization**:
	   - Added `ensureLynxImageManager` in `FlattenUIImage` and `UIImage` classes to enforce initialization of `LynxImageManager` instances, preventing null pointer exceptions.
	   - Integrated `ensureLynxImageManager` across multiple methods to guarantee initialization before usage.


- [BugFix] Update ProGuard rules to keep methods annotated with @CalledByNative ([76513dc](https://github.com/lynx-family/lynx/commit/76513dce2abe44d0aab106bad2b260136e1af8ee))  @KananSu

	
	Summary of change:
	Added a ProGuard rule to keep all classes with methods annotated by
	@com.lynx.trace.CalledByNative to prevent them from being stripped or renamed
	during code shrinking and obfuscation.
	
	This ensures that native calls to these methods remain intact, avoiding
	runtime issues related to missing or renamed methods.


- [BugFix][iOS][Event] Fix the problem of triggering tap event when the foldview is scrolling by inertia. ([56fcaf1](https://github.com/lynx-family/lynx/commit/56fcaf104581bbef35af5c6904ffdca4831983a9))  @rAY-ooo

	
	description: When you click on the foldview to stop the inertial scrolling, the tap event should not be triggered. Therefore, we can determine whether the view is scrolling or dragging in LynxEventHandler to avoid click gesture response.
	


- [BugFix][harmony][Log] Fix the issue of the missing Harmony log initialization process. ([c22d515](https://github.com/lynx-family/lynx/commit/c22d5158d928c0d23545f6810357cce4c8b7fd76))  @yongjieTang

	
	Background:
	
	  When `tasm::LynxEnv::GetInstance().IsDevToolEnabled() = false`, calling `LLog.useSysLog(true)` from the platform layer cannot properly enable the HiLog channel for C++ layer logs, resulting in the inability to output logs normally.
	
	Modifications:
	
	1. Adjust the judgment priority of `kIsPrintAllLogToAllChannels` and `isLogOutputByPlatform` in logging.cc. First, check whether to output all logs to all backends, and then check whether to output logs through the platform customized log backend.
	2. Adjust the logic of `NativeInitLynxLog()` and `NativeUseSysLog()` in logging_harmony.cc to ensure that the logs can be initialized correctly.


- [BugFix] Fix ImageElement::SetAttributeInternal such that Lynx can display image. ([bd0db73](https://github.com/lynx-family/lynx/commit/bd0db73415810d9d1001e3310c69706576e25c40))  @ShouruiSong

	
	Described as title.


- [BugFix][iOS][Event] Fix the exposure failure issue caused by setting transform in Window. ([66d82ed](https://github.com/lynx-family/lynx/commit/66d82ed3b5c2b9b54a71add8a1de856c1cdadd9d))  @rAY-ooo

	
	description: When exposure obtains the window position, bounds is used, and bounds does not consider transform. Therefore, when the window is set with transform, the window position obtained by exposure is incorrect, resulting in abnormal exposure of the node.
	


- [BugFix] Fix windows python venv create failed problem. ([d7894c2](https://github.com/lynx-family/lynx/commit/d7894c221314336735bacea8c3f401809ccd1895))  @zsy-jason

	
	We should use python.exe to create python venv, or it may cause an error: The system cannot find the file specified.


- [BugFix] Fix the issue that text layout is not triggered when reuse Lynx Engine. ([ff3d1a5](https://github.com/lynx-family/lynx/commit/ff3d1a5ec243e04fc83365c13d15653a8aabb4df))  @ShouruiSong

	
	1. **C++ Code Updates**
	   - **`element_manager.cc`**:
	     - Simplified the conditional check in `RequestLayout`:
	       - Removed `static_cast<PageElement *>(root())->slnode()->IsDirty()` check.
	       - Retained only `has_viewport_ready_ && root()->is_page()`.
	   - **`page_element.cc`**:
	     - Deleted the `sl_node_->IsDirty()` check in the `Layout` function.
	   - **`raw_text_element.cc` & `raw_text_element.h`**:
	     - Added `SetAttributeInternal` to handle attribute updates:
	       - When `EnableLayoutInElementMode()` is `true` and the key is `kTextAttr`, updates `content_`.
	
	2. **Java Code Updates**
	   - **`UIBody.java`**:
	     - Overrode `detachWithViewInfo` to set `mBodyView` to `null` and invoke the parent class’s `detachWithViewInfo`.
	   - **`UIGroup.java`**:
	     - Commented out special handling logic for `FlattenUIText` types.


- [BugFix] 2native lynxui support flatten on android ([3b2b682](https://github.com/lynx-family/lynx/commit/3b2b6821d45b4a6dad28116e596b82df9e885baf))  @ShijieZhou0523

	
	done.


- [BugFix][Performance] reactLynx3's identifier should be reactLynxHydrate ([c29c792](https://github.com/lynx-family/lynx/commit/c29c7925f4028cf14c0572d126429a026b97e3f3))  @partholon

	
	change `reactHydrate` to `reactLynxHydrate`
	


- [BugFix][Element] Fix incorrect direction aware style calculation in threaded element resolution ([03b6aac](https://github.com/lynx-family/lynx/commit/03b6aacc17cd886bfb6845d872b3fe67dde666d4))  @usczz

	
	In the current implementation, the direction-aware style property is first reset and then correctly set based on the current direction value. However, this occurs before the font-size related logic, where all styles in the parsed_style_map affected by font-size are reset to ensure dynamic units like em/rem are correctly applied. This causes the direction-aware style changes to be overridden, resulting in incorrect behavior in RTL mode.
	
	In this merge request, before applying style updates due to font-size changes, the pending_updated_direction_related_styles_ map is checked. If the style property is present in this map, direction mapping is applied to guarantee the UI behaves correctly.
	
	


- [BugFix][Network] fix missing `removeEventListener` in `AbortSignal` ([35f6405](https://github.com/lynx-family/lynx/commit/35f640542f04b66956ca6e6d6d11c17803ab3100))  @huzhanbo1996

	
	fix missing `removeEventListener` in `AbortSignal`


- [BugFix][Element] chagne the fix_fiber_remove_twice_bug config to false ([81c93c0](https://github.com/lynx-family/lynx/commit/81c93c0c5c4391ee14bc0a856e20596e4094808d))  @linxs0211

	
	Just change fix_fiber_remove_twice_bug to false
	


- [BugFix] optimize FiberElement's RequestLayout & TextElement's SetAttributeInternal to display <text> when reuse LynxEngine. ([540e6dc](https://github.com/lynx-family/lynx/commit/540e6dc7bda21ee7ea26c634443a8ece4a7512ca))  @ShouruiSong

	
	1. **`ComputedCSSStyle` Class**:
	   - **`ResetValue` Method**:
	     - Return type changed from `void` to `bool`.
	     - Returns `(this->*func)(value, true)`; returns `false` if no style function is found.
	     - Header declaration updated accordingly.
	
	2. **`Element` Class**:
	   - **`SetStyleInternal`**:
	     - Merged nested `if` statements; replaced `MarkLayoutDirty` with `RequestLayout`.
	   - **`ResetCSSValue`**:
	     - Added `is_layout_only` condition check; triggers `RequestLayout` only if `ResetValue` returns `true`.
	
	3. **`FiberElement` Class**:
	   - **`EnsureSLNode` & `RequestLayout`**:
	     - Added `EnableLayoutInElementMode` condition checks.
	     - In `RequestLayout`, executes `HandleBeforeFlushActionsTask` when conditions are met.
	
	4. **`TextElement` Class**:
	   - **`ConvertContent`**:
	     - New static method converts `lepus::Value` to `base::String`, handling multiple input types (e.g., `int`, `double`, `string`).
	   - **`SetAttributeInternal`**:
	     - Uses `ConvertContent` to process `text` attribute values.
	
	- **Style Resets**: `ResetValue` now signals success/failure via `bool`, enabling callers to conditionally trigger layout updates.
	- **Text Flexibility**: `ConvertContent` supports diverse input types for text attributes.
	- **Layout Logic**: `EnableLayoutInElementMode` checks refine layout request conditions.


- [BugFix][iOS][Event] Fixed the issue that lynx.resumeExposure on iOS is invalid due to premature calling. ([5bc6420](https://github.com/lynx-family/lynx/commit/5bc6420a7e231cdac0026e1d17e3aa833bded871))  @rAY-ooo

	
	description: This problem reappears in some scenarios on the iOS side where stopexposure is called first and then resumeexposure is called. At this time, when resumeexposure is called, the exposure data source has no data yet, and the stopexposure flag is also true, resulting in the inability to start exposure detection when subsequent exposure data sources are added.
	


- [BugFix][Harmony] remove unused onPerformanceEvent function of lynx_template_render ([a8d1f41](https://github.com/lynx-family/lynx/commit/a8d1f41c93c585cb78e02e81186a68df6a18c61d))  @partholon

	
	LynxTemplateRender no longer has an onPerformanceEvent method. Currently `PerformanceController` is responsible for sending PerformanceEntry to the platform layer. So remove the unused method.


- [BugFix] call tasm api for databinding test. ([f5af09c](https://github.com/lynx-family/lynx/commit/f5af09cfaebbb370993f8bebb2111431112543a7))  @nhsprite

	
	`updateComponentData` test case now in databinding tests calls `page_proxy().updateComponentData` now, which skips the pipelineManager associated logic,
	we should call updateComponentData from lynxEngine api at any case.


- [BugFix][Harmony][Font] Fix the crash when executing the callback after loading the font. ([5f8e60c](https://github.com/lynx-family/lynx/commit/5f8e60c312e1cb941b7719e1ddfafdb3ba551545))  @Randycn

	
	`MarkDirty` must be executed in the layout thread, otherwise a crash may occur due to thread conflicts.


- [BugFix][Harmony] Fix the issue that `tint-color` is set to `undefine`, the image fails to display ([7d7336c](https://github.com/lynx-family/lynx/commit/7d7336c4eb6a1cad19aec65be50d0cef8055ae19))  @liubb0516

	
	Fix the issue that `tint-color` is set to `undefine`, the image fails to display


- [BugFix][List] Fix list scrolltolower event not sent. ([4895fb1](https://github.com/lynx-family/lynx/commit/4895fb1cca537816577d98fa40f0aa440d139672))  @DwwWxx

	
	Currently, we use base::FloatsLargerOrEqual with float epsilon 0.01 to check whether list is scrolled to lower, but in iOS, content offset is round by platform, but content size in c++ is not round, which may lead to precision issue and FloatsLargerOrEqual() check fail.
	
	So in this commit, we use physical_pixels_per_layout_unit to round content_size.


- [BugFix][Android] Allow init UIShadowPropxy without parent. ([5ca48ba](https://github.com/lynx-family/lynx/commit/5ca48ba829114cde9d85f85430ae4385f706e3ad))  @zhongyr

	
	The initialization of UIShadowProxy doesn't depend on existing parent.


- [BugFix] Fix the issue where GN does not exit upon encountering errors during Android builds. ([ffa71d4](https://github.com/lynx-family/lynx/commit/ffa71d41c759b7ac2e38b7db1273a3bb38b8b2cc))  @yongjieTang

	
	When performing an Android build, even if there are errors in GN, Gradle can still execute subsequent tasks, preventing developers from correctly identifying the actual errors.


- [BugFix] make reloadTemplate with safety globalProps ([2370be8](https://github.com/lynx-family/lynx/commit/2370be8bba2cc428a1a570e92f3d0d86d7c187c3))  @nhsprite

	
	reloadTemplate with globalProps now passing raw globalProps, it's unsafe to pass globalProps to tasm thread, we need to make a deepClone to lepusValue to make thread safe.


- [BugFix] Add AVFoundation to fix LynxExplorer's build problem. ([fe927fb](https://github.com/lynx-family/lynx/commit/fe927fb83e5505d2896571d3fbe68e04691090ec))  @zsy-jason

	
	When building LynxExplorer, the compilation fails due to missing symbols of AVFoundation. This change fixes the problem.


- [BugFix][DevTool] add safeguard checks in RunDevToolFunction to prevent false error logs ([88b357a](https://github.com/lynx-family/lynx/commit/88b357a791de94cf89baf681424c79bc825d445f))  @yuweizheng

	
	add safeguard checks in RunDevToolFunction to prevent false error logs


- [BugFix] support reseting TextElement's style when reuse LynxEngine. ([6fe2b48](https://github.com/lynx-family/lynx/commit/6fe2b4864a32cd1fb4108b9e3d6539d0a0ecd316))  @ShouruiSong

	
	- **`text_element.cc`**:
	  - Added `ResetCSSValue`:
	    - Calls `ResetTextStyles` if element-mode layout is enabled; otherwise, invokes the parent class’s `ResetCSSValue`.
	  - Added `ResetTextStyles`:
	    - Uses a `switch` statement to reset specific properties in `text_props_` based on `CSSPropertyID`.
	
	- **`text_element.h`**:
	  - Declared the new `ResetCSSValue` and `ResetTextStyles` methods.


- [BugFix][List] Fix list content offset clamped when initializing anchor info. ([1434d50](https://github.com/lynx-family/lynx/commit/1434d50165e4c184f12997d6b58367438238f5e6))  @DwwWxx

	
	If we clamp content offset to the scroll range when initializing anchor info, we will calculate a wrong range which may lead to some visible area of list is not filled by list-item.
	
	In this commit, we add with_clamp parameter in function SetContentOffset() and not clamp content offset when initializing anchor info, and add e2e / unit tests.


- [BugFix][List] Fix the list still triggers the scroll to edge event in the bounce area ([a0dcde9](https://github.com/lynx-family/lynx/commit/a0dcde9c711d8fb582d9df9920816808b9a1f177))  @DwwWxx

	
	On the iOS platform, the content_offset will be clamped to [0, scroll_range], but if enable bounce, we should use origin_offset to judge whether the list is scroll to edge.


- [BugFix][Fiber] Fix the issue that CSSVariable changes on parent nodes did not affect child nodes in RadonToFiber ([83b136c](https://github.com/lynx-family/lynx/commit/83b136c181435a7a5ea02028261ba55fec6621a2))  @YellowFishWyfCPP

	
	When RadonDiff, RadonNode only copies the `css_variable_` part of the CSSVariableBundle and does not copy the `css_variable_related_` part, So when css-var parent node changed, related css in child node won't be affected.


- [BugFix][Android][Event] Fixed the issue that the keyboard cannot be retracted when touching other areas when input becomes the first focusedUI through uimethod. ([79837ef](https://github.com/lynx-family/lynx/commit/79837ef08a825c98fe5cf983028aa2b87a0dc00e))  @rAY-ooo

	
	description: In the lazy loading scenario of TouchEventDispatcher, the input will setFocusedUI when the focus changes, but the TouchEventDispatcher may not have been created at this time, which makes the setting invalid, and then the input focus cannot be transferred and the keyboard cannot be retracted.
	


- [BugFix] Add NPE protection for DisplayMetricsHolder ([0b4d9e5](https://github.com/lynx-family/lynx/commit/0b4d9e5f8f91d96a8c6471f75968b99bb461253d))  @ChrisChan0668

	
	In some special ROMs, WindowManager.getDefaultDisplay() may return a null object, so we need to check before use.


- [BugFix][List] Fix list-item rtl layout error on Android platform. ([05056d3](https://github.com/lynx-family/lynx/commit/05056d34935c489c93df9f8d4083f550ff803923))  @DwwWxx

	
	Because on the Android platform, we has one LinearLayout between ListContainerView and ListItemView and the layout position of ListItemView is relative to ListContainerView but ListItemView is added to LinearLayout, so in this commit, we ensure that the height of the LinearLayout is at least the size of the ListContainerView itself.
	


- [BugFix][Harmony] JSVM  compile bugfix ([caedc08](https://github.com/lynx-family/lynx/commit/caedc08f6ace60c2cf829389fd2ba062b3633963))  @pilipala195

	
	1. Import `//lynx/config.gni` in `lynx/core/runtime/jsi/jsvm/BUILD.gn`.


- [BugFix] fix nested query component. ([ac8e71d](https://github.com/lynx-family/lynx/commit/ac8e71dd056ea1c3ba1872dc5be1c9fb98f629dd))  @nhsprite

	
	Nested calling query component may cause crash now, it's caused by modifing `url_to_lifecycle_option_map_` while looping `url_to_lifecycle_option_map_`, eg: calling `queryComponent` in callback of `queryComponent`.
	It's reasonable to use `extract` to accquire lifecycleOption list from `url_to_lifecycle_option_map_` first, and then call `OnLazyBundleLifecycleEnd` for each option. `QueryComponent` called in `OnLazyBundleLifecycleEnd` will just return because templateEntry is cached now.
	
	TODO: adding test cases for nested query component cases.


- [BugFix][SimpleSytle] fix the updateStyle for Conditional Update ([b018316](https://github.com/lynx-family/lynx/commit/b0183167bbdfbb20d77996354eaef23d7be75a75))  @linxs0211

	
	when call setStyleObject to update conditional styleObjects, we need to
	remove the old style objects firstly.
	
	for example, __SetStyleObject($n17, $flag? [19, 20, 21, 22, 23, 24, 16] : [25, 20, 26, 15, 16]);
	


- [BugFix] Fix StopAllTasks ut problem. ([de588a6](https://github.com/lynx-family/lynx/commit/de588a647ab8c278c16029df48bc1e4189f3457a))  @zsy-jason

	
	Increase delay interval to decrease StopAllTasks ut failed problem.


- [BugFix][SimpleStyling] Force use css parser when enable simple styling ([66cc667](https://github.com/lynx-family/lynx/commit/66cc66797d5a76c3cf127e27053a94656265c9a3))  @zhongyr

	
	Simple styling force the statice encoded StyleObject are all parsed
	css valuse.


- [BugFix] Fix OOM caused by too many CallbackImpl instances ([ec76434](https://github.com/lynx-family/lynx/commit/ec764348bec442aa7e0fbff7f601ab357875b67e))  @OverWatch-Winder

	
	When calling JSB with callback frequently, if the callback is not called back, the Java CallbackImpl instance cached in the Native layer will not be destroyed, resulting in OOM
	


- [BugFix][Embedded Mode] fix the embedded_mode query for iOS ([7f8ca7a](https://github.com/lynx-family/lynx/commit/7f8ca7aa55486406266c48012ec47db2e042bec2))  @linxs0211

	
	support to set specific embedded_mode
	
	
	
	(cherry picked from commit 78bc71973fa0e3f0af9441e8835972e1b2ef3aa8)


- [BugFix] enable FIX_FIBER_REMOVE_TWICE_BUG only in RadonArch. ([36ec941](https://github.com/lynx-family/lynx/commit/36ec941e563b0358178bcaaa98f68a3f03d85eb0))  @DragonDragonDDD

	
	As title described.
	
	


- [BugFix][Element] Fix page element not record when AttachToElementManager causing white screen ([e3175e7](https://github.com/lynx-family/lynx/commit/e3175e793601f834252a11211c599fe8067544f5))  @usczz

	
	In the current implementation, the reused element bundle is deeply cloned and attached to the target ElementManager by TreeResolver. TreeResolver first sets the root element as its current page, which removes the old page from the internal NodeManager. Then, FiberElement's AttachToElementManager is called recursively for each element in the tree. PageElement overrides this behavior by first calling the base class's AttachToElementManager, which records its element ID in the NodeManager. After that, it calls SetFiberPageElement to set itself as the root and removes its element ID from the internal NodeManager, causing the PageElement entry to be deleted. This removal can lead to incorrect layout results when using UNSPECIFIED or AT_MOST measure specs, as these require looking up the corresponding element in the NodeManager during layout propagation.
	
	In this merge request, SetFiberPageElement will be called only in PageElement’s overridden AttachToElementManager method and will be invoked before the base class’s AttachToElementManager to ensure that the page element's entry remains in the NodeManager. Additionally, a DCHECK is added in layout_mediator's OnLayoutUpdate to verify that no element entries are missing from the NodeManager during layout result propagation.
	
	


- [BugFix][DevTool] Eliminate unnecessary inspector initialization in Non-LepusNG context. ([8de1c9e](https://github.com/lynx-family/lynx/commit/8de1c9ecb83a187b5fe917f7a054cbb468b64bd2))  @Dango-2021



- [BugFix] CreateSelectorQuery adds optional component parameters ([88a226f](https://github.com/lynx-family/lynx/commit/88a226ff06eacfa4e5f4f564ce70afff61cc61c5))  @OverWatch-Winder

	
	CreateSelectorQuery adds optional component parameters


- [BugFix] fix lepus_cmd compile issues ([8733fca](https://github.com/lynx-family/lynx/commit/8733fca9e5225cb989abd55a423966c5d34bc4a2))  @nhsprite

	
	`lepus_cmd` compilation is break now, fix it to make `lepus_cmd` work well. Adding a workflow job to check `lepus_cmd` compilation etc.


- [BugFix] Fix the JS error when Callback is undefine in JSB ([2d938e0](https://github.com/lynx-family/lynx/commit/2d938e027858adc1ed5c2d3fa0ce18bf6bb17dfb))  @OverWatch-Winder

	
	Callback in JSB can be undefined, and JS errors should not be reported
	


- [BugFix][Element] Fix shorthand CSS Property with CSS Variable value is reset in threaded element resolution ([0d1a9ac](https://github.com/lynx-family/lynx/commit/0d1a9aceb08c333877560cf85bb87a4b851948ba))  @usczz

	
	In the current implementation, during threaded element resolution, CSS Variable resolution is postponed as an engine thread task. However, when handling shorthand CSS properties, the actual values are not resolved, leaving only their keys in the parsed_style_map. Later, in the engine thread task that refreshes the CSS styles, the shorthand properties are expanded into longhand properties. During the diffing process between the previous and current style maps, shorthand properties are mistakenly included in the list of properties that require resetting.
	
	In this merge request, shorthand properties are excluded from the construction of reset_style_ids when comparing the previous parsed style with the new parsed style, preventing them from being reset unintentionally.
	


- [BugFix][Trace] Fix crashes that occurred during element tree dumping in multithreaded environments. ([8805f3c](https://github.com/lynx-family/lynx/commit/8805f3c094f769dcddc9d4aec7b380341cc14290))  @KingAlen

	
	1.Deep clone `lepus::Value` objects when transferring data between threads to prevent JavaScript garbage collection issues.
	2. Pass `instance_id` instead of `this` to avoid crashes when the catalyzer instance is destroyed.


- [BugFix][ZIndex] fix the negative zIndex insertion issue ([2b0f99e](https://github.com/lynx-family/lynx/commit/2b0f99e9b43e5b3ae13d60512b696ef12ebcf674))  @linxs0211

	
	The element container has a should_skip_index_calculation logic that skips index calculation if there are no zIndex children and insertion is at the end (ref=null). However, it doesn't account for negative_z_children_, causing incorrect index calculation. It's updated so that if any zIndex exists, index calculation is forced.
	
	


- [BugFix] fix js bytecode length type error ([36f268b](https://github.com/lynx-family/lynx/commit/36f268bbaad61c3537c8a56d6336d5d6686a0bde))  @lybvinci

	
	When encode js bytecode, we use WriteCompactU32, so when we decode js
	bytecode, we should also use DECODE_COMPACT_U32 instead of
	DECODE_COMPACT_U64, that will cause type error and data error.


- [BugFix][DevTool][iOS] Fix the issue where DevToolViewControllerLifeListener was added to the incorrect VC when destroying LynxView. ([74ae002](https://github.com/lynx-family/lynx/commit/74ae002541a8535ec71c9e25690f3a87d8ba8ddf))  @Dango-2021

	
	Add DevToolViewControllerLifeListener to the top VC while skipping UITabBarController and UINavigationController.


- [BugFix] Fix ffi install problem with Xcode 16.3. ([41b8dd1](https://github.com/lynx-family/lynx/commit/41b8dd1a3dc184755efd72c1fd3ff2b38b1136c3))  @zhengsenyao

	
	Update ffi to fix its install problem with Xcode 16.3, and update ruby's requirement in LynxExplorer's README.md.


- [BugFix][iOS] Fix Image's reportTime error ([dc949ad](https://github.com/lynx-family/lynx/commit/dc949ad7046b668612da3fa7a5a1255056105394))  @linxs0211

	
	finishRequestTime is not assgined..
	
	
	
	
	(cherry picked from commit 82c03abb8065ac3e14df80b6b34dc8bb5dcf85b1)


- [BugFix][Harmony] Fix ineffective overflow-x and overflow-y handling. ([8ea4085](https://github.com/lynx-family/lynx/commit/8ea4085b5680cb8475a0113e21846787170fbb74))  @cjnhust

	
	Previously, overflow-x and overflow-y had no effect due to missing clip shape updates.
	This commit ensures proper clipping is applied when overflow changes.


- [BugFix] Fix white screen problem on devices with OS version lower than iOS 17 ([6cbba64](https://github.com/lynx-family/lynx/commit/6cbba646f25879aa952eaa14e7a3a51deb428f74))  @zsy-jason

	
	When OS version is lower than iOS 17, +[NSURL URLWithString:] method will return nil. We should add percent escape first to the url.
	Or it will cause white-screen problem when sliding to a page with empty character title, like Keyframe Animation.


- [BugFix][Android][Event] Fix the NPE in getLeftAndTopOfBoundsInScreen. ([354965d](https://github.com/lynx-family/lynx/commit/354965dfb53ef808b31a1936807241b4597d714c))  @rAY-ooo

	
	description: In some scenarios, the UIBody's View may be empty, causing getLeftAndTopOfBoundsInScreen to produce an NPE problem.


- [BugFix] Fix Crash When PiperData object in JavaOnlyMap ([eeaa2fe](https://github.com/lynx-family/lynx/commit/eeaa2fe73789496cc91ad8d0d63676cb1b4b5fa2))  @OverWatch-Winder

	
	Fix Crash When PiperData object in JavaOnlyMap


- [BugFix][Harmony] Add null check in UIOwner::RequestLayout ([fcbff79](https://github.com/lynx-family/lynx/commit/fcbff79ff311d56b3dcc169cb60c3a9e828ad697))  @rel-q

	
	Add a null check for the root node in `UIOwner::RequestLayout` to prevent a potential null pointer dereference.


- [BugFix] API check doxygen path bugfix ([2ec3414](https://github.com/lynx-family/lynx/commit/2ec34147eb0145c06eecb1ca2ca2e690fddc8324))  @pilipala195

	
	API check doxygen path bugfix


- [BugFix] fix text measurer issue ([7aed2be](https://github.com/lynx-family/lynx/commit/7aed2be14203d90e5cd6b95689f89f165cd4dc21))  @linxs0211

	
	take care: c++ std::string is stored as utf-8, while Java&OC string is
	utf-16 encoded!
	


- [BugFix] Remove default value for pre-painting flag ([3d333c1](https://github.com/lynx-family/lynx/commit/3d333c1d92ff1a5d607408a9e7a6abc88eb04900))  @rel-q

	
	Removes the default value for the `enable_pre_painting` parameter in `LynxShell::LoadTemplate` and `LynxShell::LoadTemplateBundle`.


- [BugFix] Fix the issue that inline-image can not display when reuse Lynx Engine. ([3691fcb](https://github.com/lynx-family/lynx/commit/3691fcb1caeda686ea55719776768adfc8f4508e))  @ShouruiSong

	
	1. **LynxUI.java**:
	   - Added the `getViewInfo()` method to retrieve `mViewInfo`, which may facilitate subsequent view information acquisition and usage.
	
	2. **UIGroup.java**:
	   - Modified comments and adjusted code logic to clarify the need for `TextLayout` to support font families and inline images.
	   - Removed previously unimplemented TODO annotations.
	
	3. **InlineImageSpan.java**:
	   - Removed the `mAttached` flag and related state management logic, simplifying the code structure.
	   - Added `mLynxImageManager.updateNodeProps()` invocation in the `setCallback` method to ensure node properties are updated at appropriate times.
	
	4. **FlattenUIText.java**:
	   - Introduced new imports and modified the `DrawableCallback` class to a static class.
	   - Used `WeakReference` to avoid memory leaks.
	   - Optimized refresh logic in the `invalidateDrawable` method by performing different refresh operations based on `ViewInfo`.


- [BugFix] fix wrongly fetch lazyBundle sync ([82c351a](https://github.com/lynx-family/lynx/commit/82c351a90b89a1569c9f782243af5a0d2a93a1de))  @nihao.royal

	
	fix wrongly fetch lazyBundle sync.


- [BugFix] Remove JSVM deps for openssl symbol error ([c79f016](https://github.com/lynx-family/lynx/commit/c79f0167872f1058b1ce3929dba74fcab4a609d2))  @pilipala195

	
	Remove JSVM deps for openssl symbol error.


- [BugFix] Fix the issue that inline-image can not display when reuse Lynx Engine. ([9da897e](https://github.com/lynx-family/lynx/commit/9da897eaf5283db77f214bc50acc0c8675b03072))  @ShouruiSong

	
	1. **LynxUI.java**:
	   - Added the `getViewInfo()` method to retrieve `mViewInfo`, which may facilitate subsequent view information acquisition and usage.
	
	2. **UIGroup.java**:
	   - Modified comments and adjusted code logic to clarify the need for `TextLayout` to support font families and inline images.
	   - Removed previously unimplemented TODO annotations.
	
	3. **InlineImageSpan.java**:
	   - Removed the `mAttached` flag and related state management logic, simplifying the code structure.
	   - Added `mLynxImageManager.updateNodeProps()` invocation in the `setCallback` method to ensure node properties are updated at appropriate times.
	
	4. **FlattenUIText.java**:
	   - Introduced new imports and modified the `DrawableCallback` class to a static class.
	   - Used `WeakReference` to avoid memory leaks.
	   - Optimized refresh logic in the `invalidateDrawable` method by performing different refresh operations based on `ViewInfo`.


- [BugFix] Check if js_executor_ is nullptr before using Runtime ([de663ee](https://github.com/lynx-family/lynx/commit/de663ee356d805bd58e9d281c32ce8126a282201))  @lybvinci

	
	When the user uses pending_js_task flag, js_executor_ may be nullptr, so we should verify and adjust js_executor_ before using it.


- [BugFix][iOS] ColorLayer not being removed. ([ff30b67](https://github.com/lynx-family/lynx/commit/ff30b67684dfa904296a8cb1b5f9e41398d03099))  @zhongyr

	
	Should reset fillColor when backgroundColor is reset to nil and backgroundImage
	not changed.
	
	Before this patch, the layers are reset when backgroundImages array changed or colorChanged.
	If the backgroundImage is not changed and color changed to nil, the reset process is skiped.
	
	Fixed it by reseting the fill color before applying gradient layers.


- [BugFix][Element] Fix component root pseudo selector crash in threaded element resolution ([1fb918a](https://github.com/lynx-family/lynx/commit/1fb918a7835dc592301a053698fec1ea19583efe))  @usczz

	
	In the current implementation, before dispatching the style resolving task to the thread pool, each fiber_element calls GetRelatedCSSFragment to ensure the necessary style_sheet has already been resolved. For component elements, their styling depends on their parent component element, so calling GetRelatedCSSFragment does not trigger CSSFragment parsing for the component element itself. However, a child component element may call GetRelatedCSSFragment, which in turn triggers the parent component element’s GetCSSFragment. If a root pseudo selector is defined there, it may cause an update to the parent component element’s CSS variables. When resolving the parent component element’s style, it might also trigger CSS variable updates, resulting in the CSS variables map being accessed by two threads simultaneously, which could lead to a crash.
	
	In this merge request, before dispatching the style resolving task to the thread pool, GetCSSFragment is also called for component elements to prevent simultaneous access to css_variables from multiple threads.
	


- [BugFix][Harmony] Fix variable scope in GetValueInternal ([8463a46](https://github.com/lynx-family/lynx/commit/8463a46fbb60ce32e021ee2ad3ba338a1b087883))  @rel-q

	
	Moving the `item_type` variable declaration inside the for-loop.


- [BugFix][Element] Fix reset incorrect property in fiber element with RTL direction ([2a94f02](https://github.com/lynx-family/lynx/commit/2a94f026218ff5fb5b8dd1ca93bb4587c997b9de))  @usczz

	
	In the current implementation, when resetting a CSS property due to a style change, the direction is not taken into account, leading to incorrect CSS property resets in RTL mode.
	
	In this merge request, before resetting a CSS property, the property ID is adjusted based on the current direction value to ensure the correct CSS property is reset.
	


- [BugFix][Element] Fix render with reused element bundle not trigger animation as expected ([a4aaa7d](https://github.com/lynx-family/lynx/commit/a4aaa7d0e47c9a04ecdb1d3ce9dde0f9930ccbdd))  @usczz

	
	In the current implementation, when an element tree is cloned, the parsed_style_map is also copied to the new element. During style resolution for the cloned element tree, no style changes are detected, so keyframe and transition animations are not triggered because there is no difference between the previous and current states. This results in abnormal animation behavior.
	
	In this merge request, a new dirty flag called kDirtyCloned is added to cloned elements. When resolving styles for these cloned elements, the presence of the kDirtyCloned flag is checked to force the reapplication of animation-related CSS properties, ensuring animations are triggered correctly.
	
	


- [BugFix] workaround to avoid the unsafe_buffer_usage compiler error ([f51d724](https://github.com/lynx-family/lynx/commit/f51d7242dd15c244649f40c3e8cc11dadb9dcd1c))  @linxs0211

	
	we need a better solution for hwasan checking
	


- [BugFix] fix `FontFaceManager` compile issues ([4b67eeb](https://github.com/lynx-family/lynx/commit/4b67eeb76485f2306fe59ebbf92f22f2dd536f1c))  @nhsprite

	
	make `request_in_current_thread` a member of LynxResourceRequest, in long term, it should be removed. fix `FontFaceManager` compile issues.


- [BugFix] Fix the crash in JSB when the return value type is String but the actual return value is Null ([07948f2](https://github.com/lynx-family/lynx/commit/07948f2751cb40379b19f6333f5d01f02420ab54))  @OverWatch-Winder

	
	Add null protection for the String() method in JavaValue of String type


- [BugFix][LayoutInElement] resetAttribute if needed ([ddcd68f](https://github.com/lynx-family/lynx/commit/ddcd68fcdfd4493a3dc6533fce7857cc78e13958))  @linxs0211

	
	resetAttribute if needed
	


- [BugFix][Android] Fix index error when calculating inline element length in embedded mode. ([c887d30](https://github.com/lynx-family/lynx/commit/c887d30a7c610f55ef5219910abef9cdafc80915))  @Randycn

	
	A reference parameter needs to be passed when calculating the length of an inline element.
	


- [BugFix][RadonFiber] Should mark children's style dirty when parent's class has changed. ([e7a0831](https://github.com/lynx-family/lynx/commit/e7a08317002ce4ec7af451fdfe808d89046f669b))  @DragonDragonDDD

	
	As title described, we should mark children's style dirty when parent's class has changed for Radon Arch.
	
	


- [BugFix][Starlight] The allocated size of the layout result is incorrect ([3792208](https://github.com/lynx-family/lynx/commit/3792208323eb08d2efea08429cba25a35b34c9de))  @givemefive9

	
	The allocated size of the layout result is incorrect.


- [BugFix][Types] Add missing properties, methods, and events in text.d.ts and lynx.d.ts. ([ff3cc58](https://github.com/lynx-family/lynx/commit/ff3cc584ed408e638e4f20d8a216d048450f4597))  @Randycn

	
	- Add the following properties: `custom-context-menu`, `custom-text-selection`, `text-selection`.
	- Add the following methods: `setTextSelection`, `getTextBoundingRect`, `getSelectedText`.
	- Add `bindselectionchange` event.
	- Add `addFont` method.


- [BugFix] Fix bug that iterator of base set is mutable ([a08239f](https://github.com/lynx-family/lynx/commit/a08239f549a69dc43caebd8b757eb5aa09934ffd))  @wqyfavor

	
	For Set, its iterator should always be constant to prohibit modifying internal key value storage.


- [BugFix][DevTool][Trace] Fixed an issue where Trace would not automatically load on Windows. ([cc70ff2](https://github.com/lynx-family/lynx/commit/cc70ff2f87c5817d2675d3b2b7fc2e9dc0752047))  @ci_lynx

	
	This issue occurs because Windows defaults to reading files in text mode, while other platforms default to binary mode.


- [BugFix] disable SPI in lite scenarios ([d17584f](https://github.com/lynx-family/lynx/commit/d17584fd2eae2d72943f75fa555f1a9fd8ce29b6))  @Awuiil

	
	As describe.
	
	AutoSumbit: true


- [BugFix] fix density issues with LynxViewGroup ([87a1d60](https://github.com/lynx-family/lynx/commit/87a1d60e56dabcebf5727fd65efdc95f0144acc3))  @nhsprite

	
	defaultDensity set by LynxViewBuilder#setDefaultDensity is not considered in LynxViewGroup Mode. Fix it in this commit.


- [BugFix][RadonFiber] Align style validation blocking behavior between Radon and Radon-Fiber worklets ([520d55e](https://github.com/lynx-family/lynx/commit/520d55e111353dee94a96bada92c077769a0a010))  @DragonDragonDDD

	
	In the Radon architecture's worklet, when invalid styles are passed to setStyle, it should block and prevent updates. This behavior needs to be aligned in the Radon-Fiber architecture.
	
	


- [BugFix][EmbeddedMode] Add missing EMBEDDED_MODE_ALL to EmbeddedMode IntDef. ([e567522](https://github.com/lynx-family/lynx/commit/e567522c9b5db7a12c95286f486dc57b9843e9d5))  @DragonDragonDDD

	
	As title described.
	


- [BugFix][Android][Gesture] Fix NPE in dispatchGetDisplayList when using flingGesture api ([5b3fd94](https://github.com/lynx-family/lynx/commit/5b3fd9484d92d0cb3bd920049c223f6e418d68b2))  @AdrianLCA

	
	Fix NPE in dispatchGetDisplayList when using flingGesture api. The current processing flow is to call `onUpdate` during drawing. If the current operation node is deleted, it may cause NPE exception, so it is moved to the next frame.
	
	
	
	
	(cherry picked from commit 128096ee979d178fdaf40f15049a61381d435e94)


- [BugFix][LynxRecorder] Fix the integration failure issue of Replay with the dev version. ([35a8fdc](https://github.com/lynx-family/lynx/commit/35a8fdc4ab97fb95b0a153c1c0adeda84fda7554))  @ZhaoSongGOO

	
	LynxRecorder's replay capability relies on the underlying Replay logic of Lynx. Previously, Replay, as a standalone spec,
	required manual integration by the adopter. Now, since we provide a dev version, it is automatically integrated into the dev version, reducing the integration cost.


- [BugFix][Harmony] Fix platform module calls fail after engine exit ([f8c1e15](https://github.com/lynx-family/lynx/commit/f8c1e1511dacc35ac1c7722820f66c852294e503))  @rel-q

	
	Ensuring thread safety by posting napi_delete_reference calls to the UI thread, and using base::UIThread::GetRunner()->PostTask for dispatching tasks to the main thread.


- [BugFix] Change executable directory path to module directory path ([74f602a](https://github.com/lynx-family/lynx/commit/74f602a81b16cf5fc612a4b13b9b48be9bed0212))  @ci_lynx

	
	Possible executable file and lynx library are not in same directory


- [BugFix] Fix crash caused by direct access to `ShadowNode` on the UI thread during layout. ([08293a5](https://github.com/lynx-family/lynx/commit/08293a54f7fbec6c3ff81e55cefcc5f291344551))  @liubb0516

	
	Previously, image directly accessed `ShadowNode` on the UI thread caused crashes. These operations have now been migrated to the Layout thread to resolve this issue.
	
	m-6564908134


- [BugFix][List] Fix list-item's related layers error. ([0d1ada5](https://github.com/lynx-family/lynx/commit/0d1ada590373e7b1e8533f84648cdd1fcd8d3a3e))  @DwwWxx

	
	Because using WrapperView to wrap the list-item's view, we need to move it's BorderLayer and BackgroundLayer to the WrapperView.


- [BugFix][Harmony] Manage N-API handle scopes at call functions ([ad978be](https://github.com/lynx-family/lynx/commit/ad978be9be158c49b71a633a946a7504f91df9bb))  @rel-q

	
	Previously, NapiUtil helper functions like InvokeJsMethod internally created a NapiHandleScope . This could lead to issues if handles needed to outlive the helper function's scope.
	
	The new approach moves the responsibility of creating NapiHandleScope to the call sites. This ensures that scopes are explicitly managed where N-API interactions occur, providing better control over handle lifetimes.


- [BugFix][EmbeddedMode] Start a layout when viewport changed during measure. ([6389faf](https://github.com/lynx-family/lynx/commit/6389fafb1f3787f7a8174856c8558d23dd81856a))  @zhongyr

	
	If the measure spec is not preset before initialize template render, we should
	update the viewport according to the measure spec during `LynxView#onMeasure`.
	
	If the measure spec is different from the initial one, we should start a layout
	pass.


- [BugFix] init enable_layout_in_element_mode_ when using Element Template. ([2c18d9a](https://github.com/lynx-family/lynx/commit/2c18d9aa4815ee9d406913cd93ff5c6fa7d2241a))  @ShouruiSong

	
	Described as title.


- [BugFix][SimpleStyle] handle fontSize for simpleStyle ([3950f72](https://github.com/lynx-family/lynx/commit/3950f72c67110340b2057ed4c152c442140fc599))  @linxs0211

	
	1.currenty, we just re-use the SetFontSize for SimpleStyle
	2.maybe, later we can optimize the SetFontSize process for SimpleStyle?
	


- [BugFix] Crash Fix For SwithEngineThread called before loadTemplate. ([4b57342](https://github.com/lynx-family/lynx/commit/4b57342911ede014ff6751cfdfcf4a70bf551903))  @nhsprite

	
	in case that switchEngineThread is triggered before LoadTemplate, VMContext in TemplateEntry will be nullptr, make a protection for such cases.


- [BugFix] make @lynxjs/tasm auto publish each time `package.json` is modified ([bd6d21d](https://github.com/lynx-family/lynx/commit/bd6d21d9a699102c9bab201472d25f69c2a040ba))  @nhsprite

	
	As Described: make @lynxjs/tasm auto publish each time `package.json` is modified


- [BugFix]Fix that debug-info.json maybe null ([058d6a3](https://github.com/lynx-family/lynx/commit/058d6a39c1c590900d2ae04ae14675bd3e177b3c))  @RovicnowYoyi

	
	Compatible with the situation where debuginfo is not recorded to prevent crashes caused by nil return values.


- [BugFix][List] Fix not reset sticky item after diff. ([e287896](https://github.com/lynx-family/lynx/commit/e2878964f85839814aa459f67e9942ff83853c12))  @DwwWxx

	
	After updating sticky item indexes, we should remove the list item from sticky item map and reset translate and zindex of the list item.


- [BugFix] Fix the lack of support for RunPixelPile in Layout In Element Mode ([c322bdb](https://github.com/lynx-family/lynx/commit/c322bdbbdf2898aafa0d65bdf7230240f414a1db))  @ShouruiSong

	
	This merge request aims to fix the missing support for `RunPixelPipeline` in `Layout In Element Mode`. Code modifications across multiple files enhance layout request handling and processing logic.
	
	1. **`element_manager` Updates**
	   - Modified the `RequestLayout` function:
	     - Return type changed from `void` to `PipelineLayoutData`.
	     - Returns corresponding layout data based on conditions (e.g., `layout_in_element_mode`).
	   - Added `#include "pipeline_layout_data.h"` to `element_manager.h` and updated function declarations.
	
	2. **`fiber_element.cc`**
	   - Added `child->attached_to_layout_parent_ = true` in `InsertLayoutNode` to update child elements' parent association state.
	
	3. **`page_element.cc`**
	   - Added conditional logic in the `Layout` function:
	     ```cpp
	     if (!options->enable_unified_pixel_pipeline) {
	         painting_context()->Flush();
	     }
	     ```
	
	4. **`template_assembler` Updates**
	   - Added `RequestLayout` function:
	     ```cpp
	     if (IsLayoutInElementModeOn()) {
	         return element_manager_->RequestLayout();
	     } else {
	         return RequestLayoutInternal();
	     }
	     ```
	   - Invoked the new `RequestLayout` in `RunPixelPipeline`.


- [BugFix] Fix header file of basedevtool not found ([618e68a](https://github.com/lynx-family/lynx/commit/618e68a7e11503d64a972e2773421794be4151ea))  @ZhaoSongGOO

	
	This PR[1] changed the packaging method, which caused the directory structure of the baseDevtool source package to change.
	However, the header search paths were not updated accordingly, resulting in header files from BaseDevtool not being found by other modules that depend on it.
	Here, additional search paths are added to adapt to this.
	
	[1]: https://github.com/lynx-family/lynx/commit/e3e2745e4d9fcdafe0e59916776eb3762fae0f8e


- [BugFix] Optimize the filtering rules of virtual nodes lynxui 2native ([252cfb0](https://github.com/lynx-family/lynx/commit/252cfb0d1704713314793bb7d8a8b970faef7336))  @ShijieZhou0523

	
	Filtering logic depends on the rendering backend


- [BugFix] fix enum conversion compile error ([5d0b4df](https://github.com/lynx-family/lynx/commit/5d0b4df4be23aa521635a7fca0a792dbf764d469))  @huzhanbo1996

	
	fix [-Werror,-Wenum-enum-conversion],
	bitwise operation between different enumeration


- [BugFix][DevTool] Fix LogBox crash while loading bundle on non-ui thread ([33243a0](https://github.com/lynx-family/lynx/commit/33243a0f77dd656ed6c6699715eefb59f82eed5b))  @PineconeSquirrel

	
	Fix LogBox UI crash while loading bundle on non-ui thread, since the dialog of LogBox UI must be initialized on UI thread, otherwise may cause RuntimeException like 'Cant create handler inside thread that has not called Looper.prepare'


- [BugFix] Optimize and refine the UI operation queue flush logic during rendering engine reconstruction ([e362d6d](https://github.com/lynx-family/lynx/commit/e362d6dde755c0287c5c33649b2c6fc1ca743d9c))  @ShouruiSong

	
	1. **Interface Additions**
	   - Added the virtual function `MarkUIOperationQueueFlushForRecreateEngine` to `PaintingCtxPlatformRef` and `PaintingCtxPlatformImpl` to mark UI operation queue flush states.
	
	2. **Logic Adjustments**
	   - In classes like `ElementManager` and `TemplateAssembler`, modified methods to invoke `MarkUIOperationQueueFlushForRecreateEngine` **based on the `render_for_recreate_engine` flag**, ensuring controlled UI queue flushes.
	   - Optimized existing timestamp-tracking logic.
	
	3. **Implementation Updates**
	   - Implemented `MarkUIOperationQueueFlushForRecreateEngine` in `PaintingContext`:
	     ```cpp
	     void MarkUIOperationQueueFlushForRecreateEngine(bool high_priority) {
	         // Adds operations to high-priority or standard queue based on input.
	     }
	     ```
	   - Extended implementations to `PaintingContextAndroidRef` and `PaintingContextAndroid`.
	
	4. **Java Layer Adaptation**
	   - Added `markUIOperationQueueFlushForRecreateEngine` to `PaintingContext.java` for Java-side logic handling.


- [BugFix][LayoutInElement] fix the viewport not updated issue ([1b69dcc](https://github.com/lynx-family/lynx/commit/1b69dcc07a5b02915b8eb37790f72c93949a96f0))  @linxs0211

	
	When the page element is created, need to set viewport to itself
	


- [BugFix] Harden JsCacheManager with robust thread-safety patterns ([a43e7cd](https://github.com/lynx-family/lynx/commit/a43e7cd151ef3e6fdb0c12efdc71cc70574e7511))  @lybvinci

	
	Use LockedMetaData instead of GetMetaData to avoid forget lock meta info.


- [BugFix][Harmony] Implement Lepus bridge for MTS communication ([2bb9b4b](https://github.com/lynx-family/lynx/commit/2bb9b4be3d82d69e3333556c2560926481d58369))  @rel-q

	
	1.Implemented `TriggerLepusMethod` and `TriggerLepusMethodAsync` in `TasmPlatformInvokerHarmony` to allow native code to call platform functions synchronously and asynchronously.
	2.Added `InvokeLepusCallback` as an N-API method in `LynxTemplateRenderer`.
	3.Introduced the `LynxLepusModule.ets` module to manage the ETS side of the bridge.


- [BugFix][Harmony] Fix the issue that tap does not trigger when in the snap scroll scene for list. ([5c7e7a8](https://github.com/lynx-family/lynx/commit/5c7e7a8e7a500873f2c88026a19bcbfe9351369f))  @rAY-ooo

	
	description:
	In Harmony, setting a tiny scroll offset will also trigger a scroll event, which will prevent the click event from being triggered, even though this tiny offset will not cause actual scrolling.
	In the list's snap scroll scenario, the scroll offset calculated by the list will have an error with the scroll offset returned by the system because it is not rounded. This error will produce a tiny scroll offset, which will prevent the click event from being triggered. Therefore, we rounded the calculated scroll offset to ensure that there is no error.
	


- [BugFix][List] Add error check when using the same item-key with different component ([5f7ff22](https://github.com/lynx-family/lynx/commit/5f7ff22e31a64b47f1b336d52e7629fd432691d6))  @DwwWxx

	
	If render component <CompB> by using component <CompA> with the same item-key, we will report error. To avoid frequent reporting of errors, we will generate error key with "CompB-CompA" and only report them the first time they occur.


- [BugFix][Element] fix text issue and add some UT ([b967189](https://github.com/lynx-family/lynx/commit/b967189b1897b1d1cbb9dde521b8d9fb428a43d7))  @linxs0211

	
	1.fix the content_utf16_length_ not calculated issue
	2.add related ut
	
	


- [BugFix][Android][Overlay][DevTool][Test] Fix the hierarchy problem of overlay-ng screenshots ([452affa](https://github.com/lynx-family/lynx/commit/452affad5cb0b9ecb660c5707f7360ef682dedc0))  @AdrianLCA

	
	Fix the hierarchy problem of overlay-ng screenshots, consider level property
	
	
	Autoland: release/3.3
	
	
	(cherry picked from commit f8d8becb1233c035ff56d87433a337c1edbac9b9)


- [BugFix][macOS] Fix compilation error when trace feature is disabled ([9a052af](https://github.com/lynx-family/lynx/commit/9a052afd197ef0624f3d9ac4560a018b305a9645))  @ci_lynx

	
	1.Fix compilation error when trace feature is disabled
	


- [BugFix] Prevent calling invalidate from async/non-main threads to ensure thread-safe. ([76db512](https://github.com/lynx-family/lynx/commit/76db51223dca46cf4553d6a0530a82f8265a3881))  @ShouruiSong

	
	Added **thread-check logic** to the `invalidate` method in the `LynxImageManager` class.
	- **Issue**: When `ViewInfo` is generated asynchronously, `invalidate` might be called **off the main thread**, risking UI instability.
	- **Fix**: Skip `invalidate` execution if the current thread is **not the main thread**, ensuring UI operations remain thread-safe.


- [BugFix]fix: Fix timestamp conversion error. ([4a812c4](https://github.com/lynx-family/lynx/commit/4a812c47d31162c0e034432540963e0f1d2ca478))  @Tamerlx

	
	This MR is to Fix timestamp conversion error.
	
	ConvertToBigUInt64 cannot accurately convert timestamps, use ConvertToInt64 instead.


- [BugFix] Fix the main-thread error caused by calling TriggerEventBus in non-strict mode. ([2e5a695](https://github.com/lynx-family/lynx/commit/2e5a695f28e3ee8573ce6673d0a57b5df2d50c62))  @Tamerlx

	
	This MR is to fix the main-thread error caused by calling TriggerEventBus in non-strict mode.
	
	Major changes:
	- add enable_main_thread_engine_callback flag to control engine actor callbacks
	- refactor timing info checks to improve readability
	- set engine actor for timing mediator in shell builder


- [BugFix] fix `LynxViewBuilder#setCustomBehaviorRegistry` method not found issue. ([b256fb4](https://github.com/lynx-family/lynx/commit/b256fb45dee4e7599fb1220dddd45d5c6c975c33))  @nhsprite

	
	Add `LynxViewBuilder#setCustomBehaviorRegistry` api to `LynxViewBuilder` and calling super to avoid NoSuchMethodError


- [BugFix][Embedder] Fix the issue that the timing of `OnPerformanceEvent` is no effect ([34124b2](https://github.com/lynx-family/lynx/commit/34124b21cd594f1e8531ed0a1dc7a5dea5fdbc0f))  @ci_lynx

	
	Performance information can be reported externally via the `LynxViewClient`;
	however, this functionality is not yet supported on the `DesktopEmbedder`.


- [BugFix] Fix the problem of fcp and fmp missing. ([3d706e4](https://github.com/lynx-family/lynx/commit/3d706e4d2cff575f926367a70922cd1765476483))  @Tamerlx

	
	This MR is to fix the problem of fcp and fmp missing.
	
	The reason for this is the kLoadBundleStart timestamp may arrive later than paintend, causing the indicator to be lost.


- [BugFix] Fix `string_list_` missing issue for async decode. ([dfae401](https://github.com/lynx-family/lynx/commit/dfae401a2032d5c307698aaa14e56475a855c0f3))  @nhsprite

	
	`string_list_` has not sync to async thread decoder, it will leads to decode exception in async cases.