3.3.0

lynx-family/lynx3.3.0Jul 2, 2025by Kingatnuaa0528

AI Summary

Feature-rich release introducing Frame element, cross-text element selection, background-clip text, SimpleStyling, comprehensive memory monitoring infrastructure, and EmbeddedMode. Includes major improvements to text layout, DevTool, and platform-specific implementations.

Key Highlights

  • Added new Frame element with __createFrame API
  • Implemented cross-text element selection
  • Added background-clip text support
  • Introduced SimpleStyling with StyleObjects
  • Comprehensive memory monitoring infrastructure
  • Added EmbeddedMode switch for performance optimization

New Features

  • Frame element with ElementManagerDelegate and bundle loading
  • Cross-text element selection with handle control
  • Background-clip text support
  • StyleObject implementation for simple styling APIs
  • MemoryRecord, MemoryMonitor, and PerformanceController classes
  • EmbeddedMode switch in LynxViewBuilder
  • interceptGesture API for native gesture handling
  • DevTool module support
  • LazyBundleLoader for frame bundle loading
  • LynxFrameView and LynxFrameRender implementations
  • Long task monitor configuration per LynxView
  • NAPI modules support in BTS runtime

Full Release Notes

# Changelog

### 🚀 Features


- [Feature] [Frame] add new Element API: __createFrame ([8201f97](https://github.com/lynx-family/lynx/commit/8201f97594cef84f333b929ff3aab84718197177)) @Awuiil
    
    add new Element API to create FrameElement
    TODO: createFrameUI


- [Feature] Add CSS properties for linear layouts. ([3372f6f](https://github.com/lynx-family/lynx/commit/3372f6f881cf7e918074a4384dedc0a0cef4f1f7)) @BenjaminCatalfo
    
    Summary of changes:
Consider the following code 
    ```typescript
    <view
      style={{
        display: "linear",
        linearDirection: "row",
        linearWeight: 1,
        }}
    >
    </view>
    ```
    Before my change Typescript would complain that linearDirection and linearWeight aren't CSSProperties. Now not only Typescript does not complain but we get full [IntelliSense](https://code.visualstudio.com/docs/editing/intellisense) support providing a superior developer experience!


- [Feature] [iOS] [Frame] add LynxUIFrame and LynxFrameView ([c9ba416](https://github.com/lynx-family/lynx/commit/c9ba416cd90ef6d04565385a399dc245e616cced)) @Awuiil

  To render frame


- [Feature][Refactor][Android] Refactor LynxModuleAndroid implementation ([4e69ea2](https://github.com/lynx-family/lynx/commit/4e69ea2baa9397386bd7ac804a1faad4957b575a)) @OverWatch-Winder

  - Make LynxModuleAndroid inherit LynxNativeModule and use PubValue as the transfer type.
  - Reimplement MethodInvoker, which only acts as a C++ proxy for interacting with Android Module Method.Remove Callback & Promise processing logic in Method Invoker.
  - Reimplement LynxModuleAndroid, which will only hold MethodInvoker and interact with Android Module as a C++ proxy. At the same time, replace MethodInvoker as the Callback and Promise processing class.


- [Feature][DevTool] add invokeCdp method to LynxDevToolSetModule ([d278c8f](https://github.com/lynx-family/lynx/commit/d278c8fa1bc5d24dfe25e6a23c2cdf8a31669ef0)) @yuweizheng

    add invokeCdp method to LynxDevToolSetModule.


- [Feature][Refactor][Android] Refactor LynxModuleAndroid implementation ([6050913](https://github.com/lynx-family/lynx/commit/60509138d95159ed0b8a8875b981631212d21e2e)) @OverWatch-Winder

  - Make LynxModuleAndroid inherit LynxNativeModule and use PubValue as the transfer type.
  - Reimplement MethodInvoker, which only acts as a C++ proxy for interacting with Android Module Method.Remove Callback & Promise processing logic in Method Invoker.
  - Reimplement LynxModuleAndroid, which will only hold MethodInvoker and interact with Android Module as a C++ proxy. At the same time, replace MethodInvoker as the Callback and Promise processing class.


- [Feature][Text] Support cross-text element selection. ([ea8ca61](https://github.com/lynx-family/lynx/commit/ea8ca61812554f8e7f4e751683bd6573b57a3858)) @Randycn

    Currently, only copying text within the text element is supported. In more complex scenarios such as long article pages, each text element is a paragraph. In this case, cross-text element text copying capability is required for the copying experience to approach the web.
    During text copying, the handles at both ends are drawn inside the text element. In the parameters of the `setTextSelection` function, adding two bool type parameters, `showStartHandle` and `showEndHandle`, can control whether to draw handles.


- [Feature] Support background-clip text ([891a7da](https://github.com/lynx-family/lynx/commit/891a7dac4e933735c95d1b33f043ee8bc3eeb762)) @JinsongVan

    Support background-clip text, draw out text into a mask that can then be used to clip background drawing.


- [Feature] [Frame] add ElementManagerDelegate and handle the 'src' prop of frame ([4526e21](https://github.com/lynx-family/lynx/commit/4526e2189f0c09681094157cdbd4b6bee727e50b)) @Awuiil

    Summary of this commit:
    Frame bundle must be loaded for rendering frame, to implement this ability:
    - Add a class of `ElementManagerDelegate` to handle frame elements and bundles.
    - A bundle request will be sent by frame element when the 'src' prop is set.
    - Bundle will be posted to UI node after being loaded, which leaves a TODO for next commit.
    TODO: set BundleLoader to FrameManager.


- [Feature] support base::flex_optional ([f89ce77](https://github.com/lynx-family/lynx/commit/f89ce773f865292a7ee0d9b0ec6b53e8af8cdafe)) @huzhanbo1996

    When value type size > 32, use heap allocated storage, otherwise, use `std::optional`.


- [Feature][DevTool] Support MTS debugging for lazy components. ([484daf6](https://github.com/lynx-family/lynx/commit/484daf6f8d8395c17e6f163c9031e49bafdeea9c)) @Dango-2021
  
  - Support MTS debugging for lazy components.
  - Change MTS url from lepus.js to main-thread.js.


- [Feature][Styling] Add style objects for simple styling apis ([52115a4](https://github.com/lynx-family/lynx/commit/52115a42409f07b201b2f9f63a208e99ef3a4f73)) @zhongyr
  - StyleObject is an C++ object that contains parsed style properties and value. And has the ability binding to elements and
updates elements binding to it when updating styles in the StyleObject.
  - In this commit, we add a base StyleObject class. More functionalities will in next few commits.


- [Feature][NativeModule] Support Using NAPI Modules in BTS within Restricted NAPI Environment ([27b91ae](https://github.com/lynx-family/lynx/commit/27b91aed156a645092d62664ee107bcd3df1bb66)) @RobinWuu
 
    In this MR, we use NAPI as the cross-platform module API for Lynx. Users can load and use their custom NAPI modules in the background-thread script. It's important to note that users cannot use `napi_run_script` and `napi_get_global` in NAPI modules, as   we provide a restricted NAPI environment to ensure the stability of the script runtime. For detailed usage, please refer to the documentation.
    The main changes in this MR are as follows:
    - Abstract an interface class `NapiRuntimeProxyInterface` from `NapiRuntimeProxy`.
    - Add a `RestrictedNapiRuntimeProxyDecorator` to wrap the `NapiRuntimeProxy` object. This decorator will provide a restricted NAPI environment with some hooked APIs externally, and it will inject a restricted NAPI loader into JS at specific times.
    - Add `PrepareRestrictedNapiEnvironment` in `lynx_runtime.cc` and call this function during runtime initialization to create a restricted NAPI environment.
    - Add a `getModuleLoader` interface in `lynx.ts` for users to obtain the restricted NAPI loader.


- [Feature] Support lazy load lynx_core.js ([b8c78cc](https://github.com/lynx-family/lynx/commit/b8c78cc5499384465537960deea25c1bd83d8a31)) @lybvinci
  - Add mPendingCoreJsLoad for LynxBackgroundRuntimeOptions, let
`lynx_runtime` don't load l`ynx_core.js` when init;
  - Add TransitionToFullRuntime to make runtime ready(load
`lynx_core.js` and so on);


- [Feature][iOS] Support lazy load lynx_core.js ([5fa3dd7](https://github.com/lynx-family/lynx/commit/5fa3dd7925606274b60e30efed482fcf0cfb22c5)) @lybvinci
  - Add mPendingCoreJsLoad for LynxBackgroundRuntimeOptions, let
`lynx_runtime` don't load `lynx_core.js` when init;
  - Add TransitionToFullRuntime to make runtime ready(load
    `lynx_core.js` and so on);


- [Feature] Introduce per-instance sampling APIs for long task metric. ([ff30ce8](https://github.com/lynx-family/lynx/commit/ff30ce8b97aa9ec990ed5ae60b57793e6480f765)) @kazec
  - This MR Introduced a new common struct InstanceOptions to encapsulate common
params used by components within a lynx template assembler instance.
  - Additionally this MR introduced per LynxView APIs for long task metric configuration,
and refactored long task monitoring to use information from InstanceOptions to determine
whether the monitoring should be enabled for a long task.
  - Major changes includes:
    - Add LynxView.setLongTaskMonitorEnabled APIs in the iOS/Android code.
    - Introduce new InstanceOptions in C++ code to encapsulate common params used by components within a lynx template assembler instance.
    - Passing longTaskMonitorEnabled flag down to various C++ components using InstanceOptions: shell, engine, runtime, jsi, radon, etc.
    - Update call-sites of LongTaskMonitor to accept InstanceOptions.
    - Update the interface and implementation of LongTaskMonitor to accept InstanceOptions.


- [Feature] (android): Add Long Task Monitor Configuration ([ee4aa1f](https://github.com/lynx-family/lynx/commit/ee4aa1f96991205f1e5a3f0aa736ef2c94c92237)) @kazec

    This patch is a follow-up for !49107 to introduce new api for the android platform.

    Highlights:
  - Introduced a new parameter `longTaskMonitorDisabled` to manage
   long task monitoring in `lynx_template_render_android`.
  - Updated `LynxTemplateRender` to handle the enabling/disabling of
   long task monitors through `LynxBooleanOption`.
  - Enhanced `ILynxUIRenderer` interface to include long task monitor
   configuration, allowing better task monitoring control.
  - Modified `LynxLongTaskMonitor` methods to return a boolean, indicating
   if the task processing should proceed based on the monitoring setting.
  - Tests in `LynxLongTaskMonitorTest` adjusted to incorporate
   `LynxBooleanOption` for task monitoring checks.


- [Feature][C++] Add memory monitoring infrastructure with comprehensive tests. ([f9637f3](https://github.com/lynx-family/lynx/commit/f9637f31c4676a46845c68a6c3586da8e93917f0)) @Tamerlx

- [Feature][C++] Add memory monitoring infrastructure with comprehensive tests.

    This commit introduces three core classes for memory monitoring:
  - 1. `MemoryRecord` - Tracks memory usage by category with size and optional details
    - Supports memory operations through += and -= operators
    - Implements proper move semantics and copy prevention

  - `MemoryMonitor` - Manages memory records and reports changes
    - Provides allocation/deallocation/update interfaces
    - Handles threshold checking and reporting
    - Supports enable/disable functionality

  - `PerformanceController` - Base class integrating monitoring with performance reporting
    - Manages instance IDs and value factory
    - Provides actor integration points
    - Serves as delegate for MemoryMonitor

    Testing includes:
      - Unit tests for all MemoryRecord operations and edge cases
      - Comprehensive MemoryMonitor tests covering:
      * Memory operations
      * Threshold handling
      * Reporting behavior
      * Move semantics
      - Interface verification for Performance base class
      - Mock-based testing of delegate interactions

      issue:m-6564941865


- [Feature] Support DevTool module ([c938119](https://github.com/lynx-family/lynx/commit/c9381196fdbf46e215b30a3980e124367b72643c)) @Yuchi-hz

Export the symbol in base devtool to support DevTool module.


- [Feature] [Frame] make LazyBundleLoader enable to load frame bundle ([2dd7a42](https://github.com/lynx-family/lynx/commit/2dd7a42863b5520e17febdb18fec35565b81a2b2)) @Awuiil

Summary of this commit:

1. This frame bundle request will be handled by LazyBundleLoader with a new API `LoadFrameBundle`.

2. APIs of class of LynxEngine/TemplateAssembler about loading LazyBundle and frame bundle are merged by `DidLoadBundle`, and BundleType is used to differentiate loading logic.

TODO:
1. Rename LazyBundleLoader with EngineBundleLoader

2. APIs of class of LynxEngine/TemplateAssembler about loading LazyBundle and frame bundle should be merged by `DidLoadBundle`.

3. Add error code for Frame


- [Feature] [Frame] make LazyBundleLoader on platform layer enable to load frame bundle ([b8bd314](https://github.com/lynx-family/lynx/commit/b8bd314134d5eebae1ea2b99bbfb1f1bcd456aac)) @Awuiil

Summary of this commit:

LazyBundleLoader on platform layer will use generic template loader to handle frame bundle request.

On Android, LynxResourceType has been split into a separate class to facilitate future modifications.

TODO: auto generate LynxResourceType by IDL


- [Feature] Support DevTool module ([769fdc1](https://github.com/lynx-family/lynx/commit/769fdc15baf7ec3d28da842866f82d694df6df31)) @Yuchi-hz

Export the symbol in base devtool to support DevTool module.


- [Feature][iOS] Add interceptGesture api in native gesture ([cb3cbbf](https://github.com/lynx-family/lynx/commit/cb3cbbfe6bfdecb433dcc153341926d203c4e75c)) @AdrianLCA

1. Add an interceptGesture API for dynamically intercepting native gestures
2. This API is implemented based on the NativeGesture type from Gesture Handler
3. When interceptGesture is set to true, it will intercept all native gestures to resolve gesture conflicts in touch & native scenarios; when false, it won't intercept gestures


- [Feature][Android] Add interceptGesture api in native gesture ([fa16dac](https://github.com/lynx-family/lynx/commit/fa16dac388533ec45415938352dccee46c5afa07)) @AdrianLCA

1. Add an interceptGesture API for dynamically intercepting native gestures
2. This API is implemented based on the NativeGesture type from Gesture Handler
3. When interceptGesture is set to true, it will intercept all native gestures to resolve gesture conflicts in touch & native scenarios; when false, it won't intercept gestures


- [Feature] Add interceptGesture api in native gesture ([a7bad61](https://github.com/lynx-family/lynx/commit/a7bad61f44e577efe85e6717e387d15a3c5740b0)) @AdrianLCA

1. Add an interceptGesture API for dynamically intercepting native gestures
2. This API is implemented based on the NativeGesture type from Gesture Handler
3. When interceptGesture is set to true, it will intercept all native gestures to resolve gesture conflicts in touch & native scenarios; when false, it won't intercept gestures


- [Feature] Add a new method to GPU and enum-to-string conversion support ([eeff0fc](https://github.com/lynx-family/lynx/commit/eeff0fc0c76c10a2d675f6af06d459924c2fac82)) @shivamidow

This change adds a method to the GPU class that returns the platform’s
preferred color format. Since Lynx internally handles enum types as
strings, the new method is expected to return a string.
However, the enum-to-string conversion was missing in the binding layer.
This update includes the necessary conversion support.


- [Feature] [Frame] [iOS] add LynxFrameRender ([c05296c](https://github.com/lynx-family/lynx/commit/c05296ce47f70a4d4ee2c60085f436212a9eb1e9)) @Awuiil

Summary of this commit:

1. add `LynxFrameRender` which is a member a `LynxFrameView`, implementing `TemplateRenderCallbackProtocol`

2. make `LynxFrameView` inheriting `LUIBodyView`


- [Feature][EmbeddedMode] Introduce EmbeddedMode switch in LynxViewBuilder. ([0d1599d](https://github.com/lynx-family/lynx/commit/0d1599dedf6a982332c650973289b9ed65e21465)) @DragonDragonDDD

In this MR, we introduced the EmbeddedMode switch, which is passed through LynxViewBuilder and then to the C++ LynxShell layer.

When the switch is enabled, there will be targeted performance optimizations and restrictions on business flexibility.

Specific optimizations will be integrated in future MRs.

It is important to note that this switch is still experimental, so it is not recommended for users to enable it on their own.


- [Feature][iOS] Add interceptGesture api in native gesture ([32a686b](https://github.com/lynx-family/lynx/commit/32a686bb1a1e9ec1173c3727ed50d150fa20668a)) @AdrianLCA

1. Add an interceptGesture API for dynamically intercepting native gestures
2. This API is implemented based on the NativeGesture type from Gesture Handler
3. When interceptGesture is set to true, it will intercept all native gestures to resolve gesture conflicts in touch & native scenarios; when false, it won't intercept gestures


- [Feature][C++] Update  primjs to support memory monitoring. ([4263e9c](https://github.com/lynx-family/lynx/commit/4263e9c7323d3ce3958f7f275a46a8ea51a82682)) @ci_lynx

Update primjs to support memory monitoring.

The main changes:
- Set gc_info_threadhold to control UpdateGCInfo.
- Add LepusContext parameter to RegisterGCInfoCallback.

issue:m-6564941865


- [Feature][Styling] Implement the encoding of style objects ([078fea6](https://github.com/lynx-family/lynx/commit/078fea6a0c173ce56652bae85334f69ba94e9cc1)) @zhongyr

Encoding StyleObjcts in a list with order, and ref it with the index
at runtime.


- [Feature][Styling] Add simple styling decoder ([d41342b](https://github.com/lynx-family/lynx/commit/d41342b376f6a02e24f866c1ee2f5929bb92d857)) @zhongyr

Decoder the style object to template bundle during decoding. Decode
the properties and values of StyleObject asynchronously.


### 🐛 Bug Fixes


- [BugFix] Fix the issue that lynx sourceMap cannot be obtained ([d79e6e4](https://github.com/lynx-family/lynx/commit/d79e6e4f1e6f55670861e76909e48c7554923d8b)) @WindRunner

LynxCore does not return after calling the engine layer to get sourceMap.


- [BugFix] Update lynx types & core publish workflow ([fa1a2bf](https://github.com/lynx-family/lynx/commit/fa1a2bf2a71fe56b4c9488ba929b47670f40006a)) @OverWatch-Winder

Update lynx types & core publish workflow


- [BugFix] `LoadResourcePath` should accquires string types directly. ([d9ac1cb](https://github.com/lynx-family/lynx/commit/d9ac1cb150b77a785667efd59d7e51c024a52c71)) @nhsprite

`LoadResourcePath` should accquires string types directly. Converting std::string to vector may cause unexpected behaviour.


- [BugFix][Timing] Move the mtsRender scope forward to before vmExecute ([5a07264](https://github.com/lynx-family/lynx/commit/5a0726474342fe59f51bf7dde6065501d6101400)) @partholon

VmExecute, DataProcessor, and SetInitData, which are specific to the LoadBundle phase, should also be part of MTSRender.


- [BugFix] fix thread-issue for whiteBoardListener. ([51a88b4](https://github.com/lynx-family/lynx/commit/51a88b427d23e1bcf206c912da518a5705dc57e1)) @nihao.royal

`listener_map` in `WhiteBoard` now is not thread-safe, we need to pre-construct the map
to avoid multi-thread calling `operator[]` causing crash.


- [BugFix][Timing] delay sending performance entry ([218a8e9](https://github.com/lynx-family/lynx/commit/218a8e9d9fcd34a436385f2b555116e93264cc3a)) @partholon

When lynx background runtime is enabled, TimingHandler should send performance entries after the background runtime is ready. Because when LoadTemplate is called repeatedly, TimingHandler will send performance entries to the incorrect runtime.

When lynx background runtime is disabled, send performance entries directly. Because all operations will be executed in the main thread through the queue. When LoadTemplate is called repeatedly, sendGlobalEvent will still be executed after LoadTemplate is completed


- [BugFix] Fix intermittent test failures in TimedTaskTest. ([95a045c](https://github.com/lynx-family/lynx/commit/95a045c55b7dc91a09c61ece4523d27920fd755b)) @Yellow5A5

Unit test cases in TimedTaskTest using the usleep interface may be inaccurate and should be replaced with AutoResetWaitableEvent.


- [BugFix][Trace] Rename NativeModule's first argument from 'first_arg' to 'arg0' ([b8edaa3](https://github.com/lynx-family/lynx/commit/b8edaa32af491145990059d7e70bc77c15056783)) @KingAlen

To maintain consistency across our codebase, we renamed the first argument of the NativeModule call trace from 'first_arg' to 'arg0'. This change aligns with our naming convention for subsequent arguments, which are labeled as 'arg1', 'arg2', etc.


- [BugFix] Try fix group_ double free ([f0ef809](https://github.com/lynx-family/lynx/commit/f0ef809e46cccb2d412b1c0df5a82bfd56b7d89c)) @lybvinci

set group_ to nullptr to protect group_ free twice


- [BugFix] stop setting TextEncoder/TextDecoder on GlobalThis ([f357740](https://github.com/lynx-family/lynx/commit/f3577404d2e2549b2d7ba5f109b098cf8f5153e9)) @huzhanbo1996

Some polyfill check TextEncoder/TextDecoder defination whithout
checking the supported encoding types. Define them on GlobalThis
causes polyfill thinking TextEncoder/TextDecoder are supported
with all encoding cabability, thus stop working.


- [BugFix] Fix generateAllGnCmakeTargets execute failed problem. ([bc7911e](https://github.com/lynx-family/lynx/commit/bc7911eb7f0db56f6206bafc3a20bb73c0ea9c5d)) @zsy-jason

When executing generateAllGnCmakeTargets, CMakeList.txt won't be generated because non buildTypes returned.
This change fix the problem.


- [BugFix] Support __RunUpdates to align JS Signal logic, avoiding multiple executions of computation when writing multiple signals. ([1e0a793](https://github.com/lynx-family/lynx/commit/1e0a7939e4e84e6d74c14e644e398e5079664eb8)) @ShouruiSong

```
    let scope = null;
    let count = 0;
    let value = "world";
    let signal_0 = __CreateSignal("thoughts");
    let signal_1 = __CreateSignal("thoughts");
    const fn = (pre) => {
        count = count + 1;
        let str_0 = __ReadSignal(signal_0);
        let str_1 = __ReadSignal(signal_1);
        value = `impure ${str_0} ${str_1}`
        return value;
    };
    __CreateScope((s)=>{
        scope = s;
        __CreateComputation(fn, "init", false);
    });
    __WriteSignal(signal_0, "lynx0");
    __WriteSignal(signal_1, "lynx1");
```

Taking the above code as an example, when __RunUpdates is not used, the computation will execute twice, leading to a waste of performance. Therefore, we will expose __RunUpdates through PAPI to address the performance issue in such scenarios.

```
    let scope = null;
    let count = 0;
    let value = "world";
    let signal_0 = __CreateSignal("thoughts");
    let signal_1 = __CreateSignal("thoughts");
    const fn = (pre) => {
        count = count + 1;
        let str_0 = __ReadSignal(signal_0);
        let str_1 = __ReadSignal(signal_1);
        value = `impure ${str_0} ${str_1}`
        return value;
    };
    __CreateScope((s)=>{
      scope = s;
      __CreateComputation(fn, "init", false);
    })
    __RunUpdates(()=>{
        __WriteSignal(signal_0, "lynx0");
        __WriteSignal(signal_1, "lynx1");
    });
```


- [BugFix][Android][Compile] Fix incremental build issue for linux android build ([862d069](https://github.com/lynx-family/lynx/commit/862d069fb229a4378267bca46422e1b8586fd75c)) @yulitaotao

`stat -f "%m"` works for macos, but `-f` option is not the same meaning in linux.

When linux build, all timestamp generated by this command may be undefined.

So use `date -r $file +%s` instead.


- [BugFix] Fix measure error in card case ([adad52a](https://github.com/lynx-family/lynx/commit/adad52a512dca3c936a55623235fd17388760f2d)) @Neilcc

use starlight layout result to update rootview's measure result


- [BugFix] nativeApp.setCard called twice on web platform ([93ec8d4](https://github.com/lynx-family/lynx/commit/93ec8d4780767621c05bd872af09797859f22180)) @pupiltong

Before this commit L73 and L57 invokes twice setCard


- [BugFix][List] Optimize the logic of reporting list render children duration. ([c1a2957](https://github.com/lynx-family/lynx/commit/c1a29576caf70efca9ba62401d97f23a9de853de)) @DwwWxx

If c++ list has valid children count and all list visible area has been filled with children, we will mark timing::kListFullFillRenderChildrenEnd flag and report list_full_fill_render_children duration in lynxsdk_setup_timing and lynxsdk_update_timing.


- [BugFix] Catch JS and Native errors when loading JSON and call back through the callback param ([cacb96a](https://github.com/lynx-family/lynx/commit/cacb96a8f906f8e29917cae2ed3799f4c6cab324)) @OverWatch-Winder

When using requireModuleAsync to load Json, there is no callback when the URL is wrong。This modification catch errors that occur when loading Json and calls back through the callback param


- [BugFix] Fix devtool unmatched TraceEvent begin and end caused by nullptr in CHECK_NULL_AND_LOG_RETURN ([d837509](https://github.com/lynx-family/lynx/commit/d837509d6dd0f439a2db4c436d38b911315e61a4)) @xiaosu906

This commit includes the following changes:
1. Fixed the issue where the first parameter being nullptr in CHECK_NULL_AND_LOG_RETURN causes TraceEvent begin and end to be unmatched.
2. Switched TRACE_EVENT_BEGIN interface to TRACE_EVENT interface, which creates a RAII C++ object to automatically insert TRACE_EVENT_END upon return from CHECK_NULL_AND_LOG_RETURN.

These changes ensure that TraceEvent begin and end are correctly matched by using a RAII C++ object to handle the end event automatically.


- [BugFix][DevTool] Fix the startup tracing failure. ([7aeee35](https://github.com/lynx-family/lynx/commit/7aeee35ec85627545e8a7bef0605b57f4713892f)) @Dango-2021

Correct the error in the function call.


- [BugFix] report client error to js for external js. ([05f1fb0](https://github.com/lynx-family/lynx/commit/05f1fb00e5bf1d4e95183a62ef82550815b092f5)) @nihao.royal

it's needed to report client error to js for external js, so that we can locate the error directly.


- [BugFix] Fix missing updateViewport call when content appears unchanged ([bcd1c3d](https://github.com/lynx-family/lynx/commit/bcd1c3dd2bca3080212e581f88240364cb3ae6a8)) @klaxxi

Even when the content does not change, the viewport may still need to be updated.

This commit ensures updateViewport is called in such cases to prevent rendering inconsistencies.


- [BugFix][List] Fix the issue of missing types on <list> ([39aa101](https://github.com/lynx-family/lynx/commit/39aa1012a9cb34fc3b5b78d2920f4df12b11964c)) @MoonfaceX

`attachedCells` was not defined in the typings of <list>, fix this problem


- [BugFix] add some logs for removeUIComponent() ([f273a47](https://github.com/lynx-family/lynx/commit/f273a4783534fc2a1095991fbfb079f1eff8d26b)) @keweibing

add the logs for removeUIComponent(),which will cause NPE problem.when invoking dispatchDetachedFromWindow


- [BugFix][TestBench] Fix the issue of not being able to record the page in the backgroundruntime scenario ([12ce684](https://github.com/lynx-family/lynx/commit/12ce6840b82e56c9136b29586c201952f261e3b4)) @ZhaoSongGOO

Backgroundruntime will pre-attach debugrouter, but at this point, there is no recordid. Subsequently,
when there is a recordid, it will not attach again. This causes TestBench to be unable to record the corresponding page.


- [BugFix][Android] Fix unexpected text content omission. ([5f7cb8b](https://github.com/lynx-family/lynx/commit/5f7cb8bb26608ab5b16fd8910a65a638d0377bb5)) @Randycn

Flex layout may cause sub-nodes to measure multiple times. The first measurement obtains the width of the text, and then the returned width will be used as a limit for the second measurement. When the width is not an integer, there may be a second measurement width that is smaller than the text width obtained from the first measurement, resulting in omission in text that should display completely.

Return the ceiling value of width.


- [BugFix] Avoid LynxTemplateRender npe problem. ([5fda17c](https://github.com/lynx-family/lynx/commit/5fda17c65673872aa60c567d940cb4fddffbe137)) @zsy-jason

When LynxTemplateRender destroyed, calling setExtraTiming may cause npe problem.


- [BugFix][ios] upgrade release/3.2 solves compilation issues at business side ([37e3f46](https://github.com/lynx-family/lynx/commit/37e3f46457336c8a99bb3379c9246aba74d9449f)) @ShijieZhou0523

fix headers conflict


- [BugFix][List] Fix c++ list hit test error ([f3c6a5a](https://github.com/lynx-family/lynx/commit/f3c6a5a651c5dc1e4b39c5dfb32b485a012f4fd0)) @DwwWxx

Currently, there are two issues with the c++ list:

(1) The overflow section of list item cannot respond to tap event.

(2) The hit test logic dose not consider the translateZ property of list item.

Consider LynxBaseUI::hitTest() has considered two cases above, the c++ list only need to override getScrollX() and getScrollY().


- [BugFix]Upgrade debug-router version to fix crash ([1a7870e](https://github.com/lynx-family/lynx/commit/1a7870e5f1ce7a40b1385f1e6d8d175861ad049e)) @RovicnowYoyi

Due to multi-threaded operation, an object has been released but the parallel thread is still accessing its variables, causing the crash. Also fix this heap-use-after-free crash found by ASAN E2E.


- [BugFix][Explorer] Fix a11y error in Android explorer ([f8ce48c](https://github.com/lynx-family/lynx/commit/f8ce48c448d367dbd377659d941819742b7d274a)) @DwwWxx

Fix a11y error in Android explorer:

(1) Some view which bound with tap event cannot be chosen by single click.

(2) tap event cannot be fired by double click.

(3) Remove unnecessary focus nodes from the pages in explorer.


- [BugFix] Update Image's Types ([fb691cb](https://github.com/lynx-family/lynx/commit/fb691cbe3a71cbc2858a2faee8e558be59a5d83f)) @cjnhust

Add some missing types of built-in element `image`


- [BugFix] Fix the issue of BaseDevTool crashing when distributing messages. ([b6276f6](https://github.com/lynx-family/lynx/commit/b6276f65c6079efb9d239c6c3d75e93e98b87709)) @popoaichuiniu

Registering agents, registering MessageHandlers, and distributing messages will occur in different threads, resulting in data races.


- [BugFix] Avoid LynxTemplateRender npe problem. ([ea0fca0](https://github.com/lynx-family/lynx/commit/ea0fca096e00d8b81b1726692d242d096eccbf26)) @zsy-jason

When LynxTemplateRender destroyed, calling setExtraTiming may cause npe problem.


- [BugFix] fix mLynxContext npe within renderTemplate ([afccdd6](https://github.com/lynx-family/lynx/commit/afccdd6464084ab8bab4a24440ba25d5b132bf56)) @nihao.royal

fix mLynxContext npe within renderTemplate


- [BugFix][List] Fix c++ list hit test error ([d7a5957](https://github.com/lynx-family/lynx/commit/d7a5957653768d07fc2cd95a5ce0a94346f1cdb7)) @DwwWxx

Currently, there are two issues with the c++ list:

(1) The overflow section of list item cannot respond to tap event.

(2) The hit test logic dose not consider the translateZ property of list item.

Consider LynxBaseUI::hitTest() has considered two cases above, the c++ list only need to override getScrollX() and getScrollY().


- [BugFix] Avoid JSIObjectDesrciptorInfo NPE ([f5d6b2c](https://github.com/lynx-family/lynx/commit/f5d6b2c9a19ea0278d4a879fc8e58cbdd439eb41)) @Awuiil

Class of JSIObjectDesrciptorInfo may be unabled to be found, should add NPE protection in Native.

NoLanding:release/3.1,release/3.2,develop


- [BugFix][Android] Fix text layout error in specific scenarios. ([81adc66](https://github.com/lynx-family/lynx/commit/81adc6681b9a6c716688620098f5877e675c71e2)) @Randycn

In some special scenarios, the width returned by text layout will be greater than the text width limit, which will cause unexpected ellipses after the second layout.

Determine the ellipsis count of the last line to avoid secondary layout.


- [BugFix][iOS][Event] Use the Container to handle focus. ([1c6865a](https://github.com/lynx-family/lynx/commit/1c6865a461bcb89874d2f8f80d4f95efc4579b7f)) @rAY-ooo

description: Since EndEditing is used to specify a view and its subviews to give up the first responder, when the last clicked object is not a descendant of the object clicked this time, this click cannot make the last clicked object give up the first responder and thus the keyboard cannot be retracted. Therefore, we need to use a container to ensure that the keyboard is retracted.


- [BugFix][List] Fix list hit test error when using FiberElement for RadonDiff ([cab36b5](https://github.com/lynx-family/lynx/commit/cab36b5ecb557ec7807f223f08ddc193090611b2)) @DwwWxx

If using FiberElement for RadonDiff and list child RadonComponent A reusing RadonComponent B, we should set ComponentElement's componet_id_ to the RadonComponent A.


- [BugFix] Fix the issue with the Signal API where Computation may be executed multiple times, while also supporting parameters such as equals and skipCompare. ([43ac70d](https://github.com/lynx-family/lynx/commit/43ac70d3585e0de78e3fbaedbe0a61e238241c5e)) @ShouruiSong

1. When creating Signal and Memo, support passing options.equals to allow the framework to define a custom comparison function. This capability is essential in scenarios involving branch switching.

2. When executing __WriteSignal, support passing options.skipCompare to force the execution of Computation and Memo.

3. Fixed the issue with incorrect flag determination when using MarkDownStream.


- [BugFix][Infra] Fixed LynxLite compilation issues caused by refactoring and feature enrichment ([8198dcb](https://github.com/lynx-family/lynx/commit/8198dcbaaf8f0a3334eb730664fa15e6f138b8d9)) @partholon

LynxDevtool depends on ENABLE_JUST_LEPUSNG after refactoring. In order to compile Lynx Lite normally, we add this macro to LynxDevtool.

When enable_lite=true, adjust the parameters in the Lynx.gni file that are associated with the enable_lite setting. Ensure these parameters are correctly configured to align with the enable_lite activation


- [BugFix] Use setAccessibilityPaneTitle to replace announceForAccessibility in LynxAccessibilityModule ([147f9e5](https://github.com/lynx-family/lynx/commit/147f9e5c4b46e4c2ad0aafd929da2c2ce1edf9a4)) @DwwWxx

announceForAccessibility API was deprecated in API level 36, so we use setAccessibilityPaneTitle to notify significant UI change.


- [BugFix] NPE protect for lazy bundle lifecycle ([68b1016](https://github.com/lynx-family/lynx/commit/68b1016ca3f7d3001e4a448f5cd95f65bbc31806)) @Awuiil

As describe


- [BugFix] Fix occasional bitmap recycling exception ([9bc68fd](https://github.com/lynx-family/lynx/commit/9bc68fd5a78789f3f340f24228c749fd4d183a4e)) @cjnhust

After turning on vsync alignment, try to hold an extra bitmap reference in the inline-image to try to solve the bitmap crash problem


- [BugFix][Android] Fix memory leak when setting background on inline text. ([bda8778](https://github.com/lynx-family/lynx/commit/bda8778d034e86ad093235e695da86bcd5c83233)) @Randycn

LynxBackground strongly holds LynxContext, causing the activity referenced by LynxContext to not be released when the textRenderer is added to the cache.

Not add to cache when  setting background on inline text.


- [BugFix] The GlobalProps is not truly cloned when handled in asynchronous threads. ([2e01d3e](https://github.com/lynx-family/lynx/commit/2e01d3ef9cb7c301131747ab920e2e25f77d39e7)) @Yellow5A5

The GlobalProps is not truly cloned when handled in asynchronous threads.


- [BugFix] [Android] SPI maybe fail, use manual registration until this problem is solved ([1d55dcb](https://github.com/lynx-family/lynx/commit/1d55dcb9b7e2e75ce3e6ba239ca473215a5728d6)) @Awuiil

As describe


- [BugFix][Android][List] Speed up snap to make `<list>` scroll like Cupertino ([39dc7c2](https://github.com/lynx-family/lynx/commit/39dc7c2833d4f60136b7b4cdc7f0af72381902fc)) @MoonfaceX

Speed up the snap scroll on Android by adjusting the hardcoded factor of `snapAlignmentMillisecondsPerPx`.

In the future, the easing-curve should be able to be customized.


- [BugFix][Event] Add enableMultiTouchParamsCompatible page switch. ([6defeb8](https://github.com/lynx-family/lynx/commit/6defeb804bd41c8537d1b690539c2a3b448745f8)) @rAY-ooo

description:
1. Add the enableMultiTouchParamsCompatible page switch to control whether the parameters of multi-finger events are compatible with Lynx touch events.
2. Add the feature count of enableMultiTouchParamsCompatible.


- [BugFix][DevTool] resolve occasional crash in LynxDevToolNG destructor ([e614951](https://github.com/lynx-family/lynx/commit/e614951236dbf8619ac381ae90b4bad7c270e5c6)) @yuweizheng

The crash occurs when trying to acquire a mutex during LynxDevToolNG destruction. This is caused by thread synchronization issues between Java/ets and C++ layers.

Key changes:
1. Remove mutex lock in InspectorJavaScriptDebuggerImpl destructor.
2. Add AtomicBoolean to track destroy state and use lock for synchronization in LynxDevToolNGDelegate.


- [BugFix][Testing] fix lepus telemetry break ([be98862](https://github.com/lynx-family/lynx/commit/be988621c7326092399da2f80f338119548a6097)) @swfork

fix following build error:

../lynx/testing/telemetry/lepus/lepus_benchmark.cc:518:11: error: taking the address of a temporary object of type 'ValueWrapper' [-Waddress-of-temporary]
  518 |           &(obj->GetValue("ele" + std::to_string(i))));
      |           ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../lynx/testing/telemetry/lepus/lepus_benchmark.cc:517:22: error: const_cast from 'ValueWrapper *' to 'lepus::Value *' is not allowed
  517 |       value_arr[i] = const_cast<lepus::Value*>(
      |                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
  518 |           &(obj->GetValue("ele" + std::to_string(i))));
      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.


- [BugFix] Fix npe in ListContainerView ([ad9b82c](https://github.com/lynx-family/lynx/commit/ad9b82c1c9e5f7a1787ef2c1a18bf41987da9a54)) @DwwWxx

In platform RecyclerView, one LynxView which has finished loading template is resued to load another template, after loading and in platform measure pass, npe occured in ListContainerView$CustomLinearLayout onMeasure().

This commit adds npe protection and some log to ensure the root case of this crash.
NoLanding: develop

(cherry picked from commit 6432dc10ab742faa75c2b766275c21c980a45126)


- [BugFix][List] Fix missing insert platform node in batch render ([68f61ea](https://github.com/lynx-family/lynx/commit/68f61ea59425307930a0ef81d93a9d033afbf9b6)) @DwwWxx

In RL3 framework and enable list batch render, if remove and re-insert the same list-item which is on screen, the list will miss to insert list-item's platform node to list container view.
NoLanding: develop

(cherry picked from commit 7f7968daeb4fc8bc06a07edb29b26ecfb5456a09)


- [BugFix] report error with url info if client set. ([3da71b8](https://github.com/lynx-family/lynx/commit/3da71b8b238f3532e4b88ebf04972776d2a2f15f)) @nihao.royal

if `TemplateBundle.fromTemplate` is called with `TemplateBundleOption`, and the url is set, we need to report the input url to securityService for info.


- [BugFix] fix infinite loop in UIGroup.afterDispatchDraw ([415f283](https://github.com/lynx-family/lynx/commit/415f2832eff42c8323229a23b66e4676445aac36)) @huzhanbo1996

set child.mNextDrawUI to null to prevent infinite loop in UIGroup.afterDispatchDraw


- [BugFix][Android] When prop is null or empty, do not execute update related methods of LynxUI ([aa18b84](https://github.com/lynx-family/lynx/commit/aa18b845b73842b41caf07be0dcd795d093b5542)) @ShouruiSong

Described as title. When prop is null or empty, do not execute update related methods of LynxUI.

And to fix this issue, add `isEmpty` method to StylesDiffMap. Corresponding unit test is also added.


- [BugFix] update android LynxBaseUI api metadata ([83ca867](https://github.com/lynx-family/lynx/commit/83ca8671af00b48d9d28ea0aa22219b5fe85fb27)) @pilipala195

update android LynxBaseUI api metadata for commit:8b959bc65d8065a9d1dbb29d3ff680143839aa0b


- [BugFix] fix typos in TraceEvent names ([ca00027](https://github.com/lynx-family/lynx/commit/ca00027855a88688faa5761e9ec0d55996ea9b55)) @xiaosu906

This commit includes the following changes:
1. Corrected typos in several TraceEvent names to ensure consistency and accuracy.


- [BugFix][Android]  fix the exposure problem  of list-item ([8c8d752](https://github.com/lynx-family/lynx/commit/8c8d752c71dc260f578aeda6750405635a4f2ad3)) @keweibing

When using the exposure solution,should be adapted to the isScrollContainer(),otherwise,there may be an exposure error in list-item.


- [BugFix][Android] Fix global_bind event npe crash ([479f879](https://github.com/lynx-family/lynx/commit/479f87917c8d2673c8bc7bb7a295487746ce1501)) @AdrianLCA

Fix global_bind event npe crash


(cherry picked from commit aba512040c93bc49e76f3ae4c70f0378b9fa90df)


- [BugFix] Fix foldview and viewpager bugs ([4175200](https://github.com/lynx-family/lynx/commit/4175200cf74481bc4ae8e79a0a8919831e0c6d1f)) @Neilcc

add onTasmFinish life circle
rm  pageChangeAnimation attr in viewpager idl
fix foldview intersection observer npe
update header-over-slot state when attribute set


- [BugFix][iOS] Use self.view in takeScreenshot method ([2080428](https://github.com/lynx-family/lynx/commit/20804284ac531da168303a16ed01fdc468fd003c)) @rel-q

LynxRootUI does not use the `_view` directly


- [BugFix] Remove "lynx" prefix for some headers including ([bd7def6](https://github.com/lynx-family/lynx/commit/bd7def6542d40fdeb43cc5f348a62a8d1804ca5c)) @ci_lynx

Remove "lynx" prefix for some headers including


- [BugFix][Timing] release useless timing data ([4462629](https://github.com/lynx-family/lynx/commit/446262964c15880d92c644f38244538d7cc4a82f)) @partholon

Because the same TimingFlag can only trigger updateTiming/PerformanceEntry once, the timing data generated by the pipeline associated with the TimingFlag that has dispatched updateTiming/PerformanceEntry should be cleared.


- [BugFix] GetPageData should return with non-jsValue. ([03f1f84](https://github.com/lynx-family/lynx/commit/03f1f84d0fd3930c713f9bc26ee6fe17b87b4f54)) @nihao.royal

GetPageData may be called on child thread, which leads jsvalue passed to child thread causing crash. fix this issue by casting to lepusValue instantly.


- [BugFix][Android][Event] Remove logs and repeat listeners for exposure. ([9950353](https://github.com/lynx-family/lynx/commit/9950353afbc2b5d345e50f22532132f096c2ee0c)) @rAY-ooo

description:
1. ViewTreeObserver's addOnGlobalLayoutListener does not distinguish whether the listener is the same, so it is necessary to avoid adding the same listener repeatedly.
2. When Handler is empty, LLog.e will be triggered frequently, affecting performance.
3. Add touch action log to LynxView's dispatchTouchEvent.


- [BugFix][List] Fix wild pointer in list adapter helper. ([297381c](https://github.com/lynx-family/lynx/commit/297381c7d58e4ddf6f0f9f40e2b2e97996a9bdef)) @DwwWxx

If list enable batch render, we will move construct BatchListAdatper from DefaultListAdapter. In this case, we should reset the pointer of BatchListAdatper to AdapteHelper object.


- [BugFix][Gesture] Fix the crash caused by multi-threaded access to config lepusValue in parallel resolve ([aec07bb](https://github.com/lynx-family/lynx/commit/aec07bb2cef10ddfd33ab35beaedd7914e06c10d)) @AdrianLCA

Fix the crash caused by multi-threaded access to config lepusValue in parallel resolve

(cherry picked from commit 562033fbf5720d5417c5df01044ffceaba396f7d)


- [BugFix][List] Fix list error info with diff result. ([fdd7ebe](https://github.com/lynx-family/lynx/commit/fdd7ebef0afb8ced8cad544307d309d8f99c4b02)) @DwwWxx

If we use std::ostringstream and invoke the constructor with parameter std::string, we should invoke seekp() function to set the next char position in output sequence, otherwise the char sequence will be replaced by the next invoking operator<<(). So in this case, we invoke default constructor directly.


- [BugFix] CALayer.delegate is assign on iOS 12. ([803ada2](https://github.com/lynx-family/lynx/commit/803ada26b18c74728433a64ea44388259b41ab51)) @zhongyr

Do not use CALayerDelegate, its an assign type value on CALayer on iOS 12 and have
issues on lifetime management.

Override actionForKey: on CALayer directly.


- [BugFix][DevTool] Fix the incorrect timestamp value in Runtime.consoleAPICalled messages from V8. ([cdf6c13](https://github.com/lynx-family/lynx/commit/cdf6c13b7ab1f67004dad34891c3b438bf5a9de0)) @Dango-2021

Call CurrentSystemTimeMilliseconds to get the real timestamp.


- [BugFix][Styling] Use InheritValue only for properties not SimpleInheritable. ([0257436](https://github.com/lynx-family/lynx/commit/0257436dbc936c89aa4c9972fe05da72a0b9d700)) @zhongyr

ComplexInheritable is not meant to not SimpleInheritable. Only properties which
is not SimpleInheritable support extract 'InheritValue' from ComputedCSSStyle.


- [BugFix][list] fix the anchor‘s flickering problem on the list ([e02060b](https://github.com/lynx-family/lynx/commit/e02060b42bee75d08f5f39d6dd74052baa133dfb)) @keweibing

When inserting nodes in front of the queue and updating all screen nodes,we will encounter the problem of locating index 0, which leads to flickering


- [BugFix][iOS] Fix memory leak when binding selectionchange event. ([ddf73a8](https://github.com/lynx-family/lynx/commit/ddf73a82f941ebb5496b18246869f956c5637a8f)) @Randycn

The use of strong self references in the block caused memory leak.

Use weakSelf instead of self.


- [BugFix][Timing] reloadBundle can't send PerformanceEntry ([81716f3](https://github.com/lynx-family/lynx/commit/81716f39eb395ba5c58ce8c5ae51aa402a5689f3)) @partholon

resetTimingBeforeReload is called too late, which clears the loadBundlePipelineId in timingHandlerNG, causing the reload event to fail to be sent normally.

isseu: m-6563866637

Autoland: release/3.2, release/3.1


- [BugFix][List] Fix missing bind item holder in waterfall layout with sticky child. ([63ea518](https://github.com/lynx-family/lynx/commit/63ea51853d3c9defd8020256ad7f0a3009f737f6)) @DwwWxx

In UpdateStartAndEndLinesStatus() function, we should exclude the item holder which is removed or in sticky but not intersected with visible area, otherwise the layout status is error and may leading to missing binding item holder.
NoLanding: release/3.2,develop

(cherry picked from commit 5d15620c90e7bc720b8dde8ef4eb5cc359d41df4)


- [BugFix] Update rspeedy and rsbuild's version to fix windows build problem. ([fa18b1b](https://github.com/lynx-family/lynx/commit/fa18b1b658faaf83a029ec4651454924011af2ca)) @zsy-jason

Update @lynx-js/rspeedy to 0.9.3 and @lynx-js/react-rsbuild-plugin to 0.9.8 to fix build problem on windows.


- [BugFix] try fix TemplateData NPE ([da90db3](https://github.com/lynx-family/lynx/commit/da90db32a554f013d26881e45cb3858b04feed9e)) @huzhanbo1996

use synchronized to lock all mJsNativeData to prevent NPE


(cherry picked from commit ac78aaad30ae73a909d2f3293608866a88b46cbb)


- [BugFix] ensure resource callback just be invoked once. ([550d09c](https://github.com/lynx-family/lynx/commit/550d09c830d93219ed9a69286460b9b5f0b1cdce)) @nihao.royal

LynxResourceLoader callback cannot be invoked twice, it may cause crash in lynx. Added a `GuardedResourceCallback` base class to make sure each callback only be invoked once.


- [BugFix][Layout] fix absolutely positioned bug about negative ([0252713](https://github.com/lynx-family/lynx/commit/02527139b126c531e4532270659659dd4bd99ae4)) @givemefive9

For absolutely positioned: if the position value remains negative after
adjusting for negative integers, it should default to 'auto'.


- [BugFix][iOS][LynxEnv] Fix the compatibility issue of safe-area-indet-top on iOS11 ([e58be64](https://github.com/lynx-family/lynx/commit/e58be64023a91fd482ba6ec86ed358dde2d95951)) @moonface

On iOS 11 and above, keywindow.inset.top should be used instead of statusbar.height as the value of safe-area-inset-top.

fix #887


- [BugFix] Let extension set listener in native ([2075288](https://github.com/lynx-family/lynx/commit/207528807c6aee6c73fb0b749c47df56d2fbd6ea)) @lybvinci

Inject runtime listener at native


- [BugFix][Gesture] Fix the crash caused by multi-threaded access to config lepusValue in parallel resolve ([e84705c](https://github.com/lynx-family/lynx/commit/e84705c378dff5843bd4d207b78270aa89c03614)) @AdrianLCA

Fix the crash caused by multi-threaded access to config lepusValue in parallel resolve

(cherry picked from commit 6822950c39dcb9c2bf0eb87f99fd453e82288397)


- [BugFix] Fix LLDB script for LinkedHashMap ([d0eb0f7](https://github.com/lynx-family/lynx/commit/d0eb0f7dd592048ff6a608dda5871e2754adaa62)) @wqyfavor

Previously a field of LinkedHashMap is renamed, and here we fix the LLDB script.


- [BugFix] Add NDEBUG defines to avoid memory problem. ([51de14f](https://github.com/lynx-family/lynx/commit/51de14fd31f1b39f0231c7161135700f63fc9928)) @zsy-jason

In some cpp headers, we use NDEBUG define for debuging variables or DCHECK logic, so we should make sure that all pods should use the same NDEBUG define.
For example, if Lynx has NDEBUG define while BaseDevtool not, adoption_required_ in ref_counted_internal.h is not defined in Lynx pod, but it is defined in BaseDevtool.
Therefore the memory size of RefCountedThreadSafeBase will be different, and it may cause memory occupation problem.
It may also cause that DCHECK is available in release version.


- [BugFix][Android] Fixed the NPE issue caused by multiple calls to Callback in multi-threaded situations ([25bf57c](https://github.com/lynx-family/lynx/commit/25bf57c9b29cb200fb092308c6d700304ba2f9f0)) @OverWatch-Winder

In a multithreaded situation, if Callback is called multiple times, the jni_object held by arguments in CallbackAndroid will be called after being released.


- [BugFix] lynx.performance.OnPipelineStart add param pipeline_options ([24da533](https://github.com/lynx-family/lynx/commit/24da5330a580e889feef22454ff9ff467f958d8f)) @partholon

Add parameters to allow the front-end framework to deliver pipeline_origin, dsl and stage. Otherwise, front-end developers cannot effectively obtain information from PipelineEntry.


- [BugFix][List] Fix missing bind item holder in waterfall layout with sticky child. ([09280a0](https://github.com/lynx-family/lynx/commit/09280a010ba9557e211dc9a0dc0c3fe447f2d796)) @DwwWxx

In UpdateStartAndEndLinesStatus() function, we should exclude the item holder which is removed or in sticky but not intersected with visible area, otherwise the layout status is error and may leading to missing binding item holder.


- [BugFix] ensure LynxLazyInitializer doInit on async thread ([99e8412](https://github.com/lynx-family/lynx/commit/99e84123a4d7fcdeb56853ec64f3233de0225f7e)) @Awuiil

LynxLazyInitializer.init may be called on an important thread which cannot be blocked, the init task should be post to another thread.

(cherry picked from commit d27deda3b57c796f4a36f294ab2d2fcce39fea9a)


- [BugFix][List] Fix list item cannot be sticky with waterfall layout ([0694121](https://github.com/lynx-family/lynx/commit/0694121fafbe34d2b71624f1f63ba93347fd51f3)) @DwwWxx

In waterfall layout, the list will use esitimated size to calculate all visible list items and bind them. If bind two sticky top items A and B in one layout pass and recycle B, the platform will not remove B from stickyTopItems map, which may lead to A cannot be sticky top


- [BugFix][iOS] Compatible with deprecated APIs. ([cda4d51](https://github.com/lynx-family/lynx/commit/cda4d519d52937124fe0d801b704f341d585fd71)) @Randycn

'CC_MD5' is deprecated: first deprecated in iOS 13.0 - This function is cryptographically broken and should not be used in security contexts. Clients should migrate to SHA256 (or stronger).

'setTargetRect:inView:' is deprecated: first deprecated in iOS 13.0 - Use showMenuFromView:rect: instead.


- [BugFix]Upgrade debug-router version to fix crash ([7fa3a81](https://github.com/lynx-family/lynx/commit/7fa3a8120108ab4525a2d403768e5633f4fbfe26)) @RovicnowYoyi

1. Fix crash that occurs when transferring a huge message via USB.
2. Use WorkThreadExecutor to manage threads uniformly.
3. Add ENABLE_16KB_ALIGN config.


- [BugFix][List] Fix layout error after updating sticky list items ([be34a1c](https://github.com/lynx-family/lynx/commit/be34a1c6a185f669d9451bc888c8074b109238b1)) @DwwWxx

After updating sticky list items, we should re-invoke LayoutInvalidItemHolder() to re-layout all list items, and we will pass minimum_layout_updated_index as parameter of LayoutInvalidItemHolder(). In this case, we only need to layout from the list item with index of minimum_layout_updated_index, so in LayoutInvalidItemHolder(), we should use minimum_layout_updated_index to update end_indexs and end_lines of LayoutState.


- [BugFix] Use a higher-priority thread to execute the initialization task of LynxLazyInitializer. ([70b45a0](https://github.com/lynx-family/lynx/commit/70b45a00cfb426fd3f6d45d774f0cb55baabf669)) @Awuiil

To reduce the ANR


- [BugFix] disable vm pool when enable runtime leak check. ([a844149](https://github.com/lynx-family/lynx/commit/a844149dd95e55b0469d454c6b6de140a6c7fc99)) @nihao.royal

runtime leak checker will check the tid of jsvalue create & use, so we need to disable vm pool when runtime leak check enabled.


- [BugFix][iOS][Event] Avoid creating useless CADisplayLink. ([a90b0a4](https://github.com/lynx-family/lynx/commit/a90b0a417bd03958fe3a8928ed677c169ba09c59)) @rAY-ooo

description: Some third-party components on the front end may call lynx.resumeExposure, but the pages using these components may not register exposure listening, which will result in the creation of a useless CADisplayLink. Therefore, we need to check if _exposedLynxUIMap is empty.


- [BugFix] NPE protect for lazy bundle lifecycle ([8160236](https://github.com/lynx-family/lynx/commit/81602363bfcdf6c040c9bc1887467ee702b4609d)) @Awuiil

url_to_lifecycle_option_map_ maybe change in `OnLazyBundleLifecycleEnd`, so cannot erase the iterator directly.

(cherry picked from commit e67d05ff32562af58f21ddd805fc92365354b9cc)


- [BugFix]Add more events like `LayoutChangeEvent` into `MainThread` namespace ([52121f5](https://github.com/lynx-family/lynx/commit/52121f5a0fdab3504873166030e241a686a2e350)) @f0rdream

In this commit, we add `AnimationEvent`, `TranstionEvent`, `LayoutChangeEvent`, `UIAppearanceEvent` into `MainThread` namespace. Now you can use like this:

```
function handleLayoutChange(e: MainThread.LayoutChangeEvent) {
  // ...
}

<view
  main-thread:bindlayoutchange={handleLayoutChange}
/>
```


- [BugFix][Android] Fix LynxModuleCallback can not parse PiperData data type ([4e647e0](https://github.com/lynx-family/lynx/commit/4e647e0f798c0a2018dd4058f30adc46f5838d70)) @OverWatch-Winder

If the parameter of LynxModuleCallback is of PiperData type, NULL will be received in the JS environment. The reason is that JavaOnlyArray.JavaOnlyArrayGetJavaValueAtIndex() does not handle PiperData type


- [BugFix][Background][iOS] OpacityView should not hittested ([8256fc2](https://github.com/lynx-family/lynx/commit/8256fc24358e9ff7115281423215360b704439a8)) @zhongyr

OpacityView is dummy view to apply group opacity, should not respond to the hittest.


- [BugFix] Fix potential deadlock issue in TraceController ([9084fad](https://github.com/lynx-family/lynx/commit/9084fade72f161bbc6247bcb38962b87baaed69f)) @xiaosu906

This commit includes the following changes:
1. Deferred the initialization of hook_systrace_ in TraceController to prevent a potential deadlock.
2. hook_systrace_ is now initialized on the first call to StartTracing, ensuring TraceController is fully initialized.

These changes prevent a deadlock that occurs when hook_systrace_ creates a new thread during TraceController initialization and the new thread calls TraceController::instance.


- [BugFix][List] Fix key error when reporting list full render children duration in setup timing ([326fd39](https://github.com/lynx-family/lynx/commit/326fd39babb159df4b93b60b5ad094b9a00fc3d5)) @DwwWxx

Fix key error when reporting list full render children duration in setup timing.


- [BugFix][Timing] Move the mtsRender scope forward to before vmExecute ([d7505d2](https://github.com/lynx-family/lynx/commit/d7505d221560f64da9c130ede72514656965f5ae)) @partholon

VmExecute, DataProcessor, and SetInitData, which are specific to the LoadBundle phase, should also be part of MTSRender.


- [BugFix][List] Fix list overflow behavior error. ([f630345](https://github.com/lynx-family/lynx/commit/f6303452ed620b3e54c331586b2ca4608071f74b)) @DwwWxx

If list is overflow visible, mView's parent will be set clip children to false in super.layout() which lets mView not be clipped to its bound. Consider list item view's parent is the LinearLayout, so we should also invoke mView.setClipChildren(false) to make LinearLayout not be clipped to its bound.


- [BugFix] fix react-nodiff NotifyUpdatePageData filter ([7601d26](https://github.com/lynx-family/lynx/commit/7601d26206f46d3d40b890615440cbf5f55cd258)) @lybvinci

REACT_NODIFF should also needn't call updateCardData


- [BugFix] [Android] fix LynxServiceCenter ANR ([21ade08](https://github.com/lynx-family/lynx/commit/21ade0811fbf3f1f0be1eb3f7eada2274b16c49f)) @Awuiil

`LynxServiceCenter.getService()` may wait for `ensureInitialized()` for 5 seconds, which cause some ANR. To fix it:

1. Reduce waiting time to 3 seconds.

2. LynxServiceCenter will not wait for `ensureInitialized()` if user has registered service manually.


- [BugFix][List] fix the problem of triggering the click event during nested scrolling. ([2188ddd](https://github.com/lynx-family/lynx/commit/2188ddd0cec464d5a8fa48b2c912fe15dba9fe4b)) @keweibing

In a nested scenario, if the parent view consumes this gesture, the child view should not trigger the click event


- [BugFix] Fix double serialization/deserialization ([f364614](https://github.com/lynx-family/lynx/commit/f3646149cd3ba1136e84989df463ff353663dbf1)) @omnipo

double was wrongly serialized as uint32. This is manifested in video.volume setter in remote.


- [BugFix][Event] Fix the ANR problem caused by repeatedly entering addToObserverTree when adding exposure data sources. ([ce6c45e](https://github.com/lynx-family/lynx/commit/ce6c45e6a6303aeeab710d430e23b601f7c60d59)) @rAY-ooo

description: When there is only one node in the entire page that has exposure monitoring set, and the infinite animation of new animator is turned on this node, onPropsUpdated will continue to trigger addToObserverTree, causing messages to be sent to the main thread to execute the corresponding exposure detection logic, which in turn makes the main thread busy and generates ANR.


- [BugFix] add null check for jsc call ([c6459e0](https://github.com/lynx-family/lynx/commit/c6459e0e9135cec0fafba1bdb647e186f532f16c)) @lybvinci

1. add null check for JSObjectCallAsFunction and JSObjectCallAsConstructor
2. stop all tasks when js_app is destroying.
3. InvokeApiCallBack check rt_.lock().


- [BugFix][Radon] Fix the multithreading crash issue caused by enabling parallel flush for Radon because of JSValue. ([0912634](https://github.com/lynx-family/lynx/commit/091263485899fa682900bb11fe92064fd65bd0da)) @DragonDragonDDD

Using JSValue across multiple threads is not allowed. Therefore, JSValue needs to be converted to LepusValue before the parallel flush to prevent conversion through LepusContext during the parallel flush phase.


- [BugFix][DevTool] Fix false error logs when getBitmapOfScreen ([4f4d89b](https://github.com/lynx-family/lynx/commit/4f4d89b9ec9ca55dd8649c03795ee3a11c83c7dc)) @yuweizheng

Fix false error logs when getBitmapOfScreen


- [BugFix] Resolve the crash that occurs during data updates when enable_pre_update_data is turned on. ([685853a](https://github.com/lynx-family/lynx/commit/685853a7a0071b24f50e01a0de8caff5852be298)) @lidadating

Resolve the crash that occurs during data updates when enable_pre_update_data is turned on.


- [BugFix] fix extension add native module before LynxRuntime ([0fd78e6](https://github.com/lynx-family/lynx/commit/0fd78e6a7f82dcb2f2d783cccf832498c8b4f235)) @lybvinci

init.

Check if initialization has occurred when adding a module; if not,
cache it and set it after initialization to avoid null pointer issues
when the extension initializes earlier than LynxRuntime's init call.


- [BugFix] JSVM create host function bugfix ([b478f1d](https://github.com/lynx-family/lynx/commit/b478f1d6f90061fe0acbc0b99a7f58a1470c4643)) @pilipala195

1. Set instance's prototype to Function.prototype when JSVM create function from host function.
2. Support compile-time default enabling of JSVM via the macro JS_ENGINE_TYPE = 3.
3. Add EnableInspector and CloseInspector for JSVM inspector debug.
4. UAF bugfix: ClearHostContainers when jsvm runtime destruct.


- [BugFix] [Android] [Reland] fix LynxServiceCenter ANR ([39f6849](https://github.com/lynx-family/lynx/commit/39f6849dd0fab1bc59980a363641b37c8f0ed277)) @Awuiil

`LynxServiceCenter.getService()` may wait for `ensureInitialized()` for 5 seconds, which cause some ANR. To fix it:

1. Reduce waiting time to 3 seconds.

2. LynxServiceCenter will not wait for `ensureInitialized()` if user has registered service manually.

reland: register devtoolService manually


- [BugFix] Fix the issue where ModuleCallback's field args_ is unexpectedly destroyed by non-JS threads ([23ac455](https://github.com/lynx-family/lynx/commit/23ac4558bdeae804dad2616252848d90500fb3a3)) @lybvinci

Directly destroy args_ to avoid issues caused by the unstable destruction
order of shared_ptr, which can lead to args_ being destroyed by other threads.

ConfigVersion:3


- [BugFix]Fix delayed tasks on main thread for Windows ([bb7329c](https://github.com/lynx-family/lynx/commit/bb7329c272bcdad130c80d1edf2f6804f12810da)) @ci_lynx

The TaskRunner for the main thread on the Windows platform is a custom implementation.
The handling of delayed tasks was omitted, causing the RAF (Request Animation Frame) and timer functions to fail.
This commit adds the handling of delayed tasks.


- [BugFix] Lynx Lite export lynx::base::android ([40a8c73](https://github.com/lynx-family/lynx/commit/40a8c73df18253873cdb81b8a6b92df0691a1869)) @partholon

Another module requires the use of lynx::base::CheckExpection to implement JNI methods.

Add description for BASE_EXPORT macro.


- [BugFix] fix LynxTemplateDataUnitTest issues. ([d5467ac](https://github.com/lynx-family/lynx/commit/d5467aceda01460147f0892c8974723c85cde3ea)) @nihao.royal

there are some issues for LynxTemplateDataUnitTest:
1. each test method should starts with `test` prefix, or UnitTest will ignore this method;
2. add test for `NsNull` cases, it should be considered as Nil for lepus::Value


- [BugFix] invoke callback directly if not provider or fetcher set ([06c068e](https://github.com/lynx-family/lynx/commit/06c068ed39d6d3ef3884ef129d5777af6e6a1396)) @nihao.royal

`lynx.requireModule` is a sync api for javascript to load external script, it will block for 5ms if provider or fetcher is not set.
Fix this issue by invoking callback directly if finding out that provider or fetcher is not set.


- [BugFix] Align mouse enter/leave event with W3C spec ([f1673cf](https://github.com/lynx-family/lynx/commit/f1673cf3d498875c3009512c8d78bd3319b1b87e)) @ci_lynx

According to the W3C specification, the `mouseenter` and `mouseleave` events do not bubble. Therefore, bubbling needs to be disabled.
The mouse event also should not affected by the `z-index` attribute, so API `GetAncestorElements` is added to get the original list of elements that is not affected by z-index.


- [BugFix] try fix jsc_helper call crash ([bd8a81b](https://github.com/lynx-family/lynx/commit/bd8a81b9582428a1db53112cf91c43b785777fc0)) @lybvinci

1. destroy context_proxy_in_js to remove jsi::Object before ctx destroy.
2. check ctx when jsc_helper::call.


- [BugFix] fix onRuntimeCreate exec too late ([84d85b4](https://github.com/lynx-family/lynx/commit/84d85b4dcd04d6bac99a2fbf9bd6b0074c4b5a08)) @lybvinci

onRuntimeCreate event should trigger anytime.


- [BugFix][RadonFiber] Temporarily closed EnableFiberElementForRadonDiff when SSR Radon hydrating. ([18fbcf2](https://github.com/lynx-family/lynx/commit/18fbcf27c4fb8f8d3788fde8679ee319a7ac434d)) @DragonDragonDDD

We should not open EnableFiberElementForRadonDiff switch when SSR hydrate RadonElement.


- [BugFix][Types] Fix CI types checker failure ([bb38a66](https://github.com/lynx-family/lynx/commit/bb38a66f532fa7f5f62599f0ff28061a7919c24b)) @OverWatch-Winder

Use typecheck.include instead of include,Fix CI types checker failure


- [BugFix] Set painting_data to null to release the Java GlobalRef immediately after the once-task execution completes. ([328d24d](https://github.com/lynx-family/lynx/commit/328d24d8ac4a7d204d38e4f788b004800b73baea)) @ShouruiSong

As the title specifies, the OnceTask retains a lambda function that maintains a PropBundleAndroid instance, which consequently holds a ScopedGlobalJavaOnlyRef<JavaOnlyMap>. Under the current retention strategy, the OnceTask doesn't trigger immediate deallocation. To reduce ScopedGlobalJavaOnlyRef occupancy, explicitly set painting_data = nullptr post-OnceTask execution to force immediate release.


- [BugFix][Android][Event] The hitTest of list adds a check on whether the child node is on the view tree. ([5721568](https://github.com/lynx-family/lynx/commit/5721568e548bdf88403d2adffa8148c5a4752054)) @rAY-ooo

description: Since the list is reused, when the list performs hitTest, it is necessary to determine whether the child node is on the view tree to avoid the UI in the reuse pool hitting hitTest and causing the click to fail.


- [BugFix][Element] Fix parsing CSS Fragment crash in List batch render with CSSSelectorNG enabled ([1ecc0e0](https://github.com/lynx-family/lynx/commit/1ecc0e069d0b1b189afb22bb746336c42b7ebe1c)) @usczz

In the current implementation, when List Framework batch-rendering is enabled with `kAsyncResolveProperty` or `kAsyncResolvePropertyAndElementTree`, CSS fragment parsing occurs on the TASM Worker thread after MTS rendering for each list item and while preparing the list-item subtree for threaded element resolution. However, if CSS Selector NG is enabled, changes to an element's ID or class selector also trigger CSS fragment parsing, which can cause crashes since CSS fragments are not thread-safe data structures.

This merge request introduce css_fragment_parsing_tasm_worker_thread_ in element_manager, indicating whether need to parse CSSFragment on TASMWorker thread, to ensure that CSS fragment parsing is performed exclusively on the TASM worker thread, preventing simultaneous multi-threaded parsing and enhancing thread safety.


- [BugFix] Fix performance degradation issue when the ObserverList is too long ([ae98116](https://github.com/lynx-family/lynx/commit/ae98116a14ee41c19e74f07022edaa79aa4e69dc)) @lybvinci

When std::list size too long, remove will cost more time, so use
std::unordered_map instead.


- [BugFix] passing null for url when TemplateBundle.fromNative ([70d67e9](https://github.com/lynx-family/lynx/commit/70d67e912a45edc13ba52cbc98613866b7d263bd)) @nihao.royal

passing null for url when TemplateBundle.fromNative


- [BugFix] Fix lynx_core.js load failed problem. ([146783f](https://github.com/lynx-family/lynx/commit/146783f4596f8b9d351426e788361f4752622dfd)) @zsy-jason

When integrate Lynx with dynamic framework, lynx_core.js won't be loaded because the bundle path of it is wrong.
This change fixs the problem.


- [BugFix][SSR] Fix PageConfig not set in ElementManager when loading SSR data. ([7fb54f1](https://github.com/lynx-family/lynx/commit/7fb54f1fa96beed21b10b6fb8f1d7c49d0a706bb)) @DragonDragonDDD

During SSR data loading, the logic to set PageConfig switch in ElementManager within DidDecodeTemplate wasn't executed, causing potential inconsistencies between PageConfig flags in ElementManager during loadSSRData and SSR Hydrate processes.

To fix this issue, we should:

1. Consolidate all PageConfig setting logic from DidDecodeTemplate into OnPageConfigDecoded

2. Move the OnPageConfigDecoded call inside DidDecodeTemplate


- [BugFix] PipelineOptions should copy value in LayoutMediator::OnLayoutAfter ([0a54ecf](https://github.com/lynx-family/lynx/commit/0a54ecf0ab3c960454d52d4dab49fd6e31f0f86f)) @pilipala195

Before storing `PipelineOptions` with `std::shared_ptr`, the layout thread passed options to the engine thread by copying values. After storing `PipelineOptions` with `std::shared_ptr`, the lambda captures the value of the `std::shared_ptr`, and the referenced options remain the same instance.
This commit resolves the issue by creating a new `std::shared_ptr<PipelineOptions>`.


- [BugFix] Limit the number of Engine releases in asynchronous threads to resolve memory issues. ([864b94f](https://github.com/lynx-family/lynx/commit/864b94f8cab096992d9c8be7cdb523d2a7e54d56)) @Yellow5A5

In multi-card scenarios, the TASM thread becomes heavily occupied.   Releasing Engines in asynchronous threads may cause delayed memory deallocation, leading to application OOM.
This commit attempts to limit the number of Engines released in async threads, thereby resolving bad cases in high-frequency card recycling scenarios.


- [BugFix][List] Fix list-item's children not invoke layoutDidFinish. ([3ba24e4](https://github.com/lynx-family/lynx/commit/3ba24e4a3e74de61cf7f991057bbdb10d1386e0b)) @DwwWxx

In one render pipeline, if the c++ list invokes OnLayoutChildren, which means it's children ui may has layout update, so we should reset ListContainerImpl::should_flush_finish_layout_ to options->has_layout to make sure invoke FinishLayoutOperation() to trigger layoutDidfinished lifecycle of all list's children.

In this commit, we add e2e case to check by using scroll-view's contentsizechanged event, which is sent in scroll-view's layoutDidFinish.


- [BugFix][Binding] Rename variable to avoid conflictions ([a315b5b](https://github.com/lynx-family/lynx/commit/a315b5bf557ba0919a85c795c6b8db9d6d8d0571)) @omnipo

`end` is too common for the name of the current index. Rename it.


- [BugFix][Event] Fix the crash when set callback for uiexposure. ([8e7b0fa](https://github.com/lynx-family/lynx/commit/8e7b0fad6154372d007d7296ab11e592511022ee)) @rAY-ooo

- [BugFix] Reduce delay in `Tracing.start` and `Tracing.end` operations ([976a12e](https://github.com/lynx-family/lynx/commit/976a12e65516f3af6f9468d350087ef6565c405f)) @KingAlen

Previously, using `xhook_refresh(0)` (synchronous) caused significant delays when the host app contained many `.so` files. Switched to `xhook_refresh(1)` to perform asynchronous install and uninstall of system trace hooks. This change significantly speeds up `Tracing.start` and `Tracing.end` operations, but may result in missing some system traces before `xhook_refresh` is fully applied.


Autoland: Release/3.2, Release/3.1


- [BugFix] set kTemplateAssembler for vm context pool ([87a6000](https://github.com/lynx-family/lynx/commit/87a6000d23eaeb1426ea99d46c7d50f4ab50985a)) @Awuiil

For lepus context, built-in function index needs to maintain an unchanged sequence number remains; otherwise, the context cannot run correctly.

So kTemplateAssemble needs to be set on context pool to be a placeholder and be reset as the pointer of tasm on runtime.


- [BugFix] fix TemplateData crash with un-initialized Map ([a493725](https://github.com/lynx-family/lynx/commit/a493725713f610acc1526b8b4970e0eb24e134d4)) @nihao.royal

as `mData` in TemplateData is a normal field, and it's construction may occurs with `Instruction Rescheduling`,
such that `mData` may be assigned with a un-initialized state in one thread, and be used in another thread which
causes JVM crash.

add `volatile` flag to disable `Instruction Rescheduling` here.


- [BugFix] Fix image not working after card mode optimization ([7de2190](https://github.com/lynx-family/lynx/commit/7de2190d57b04e80818806668cbd358a4b7f24c9)) @cjnhust

Restore image loading by adding missing cacheChoice check.
This regression was introduced during the previous image card mode optimization.


- [BugFix][Oliver] Add compile dependencies for simple styling objects ([b338e99](https://github.com/lynx-family/lynx/commit/b338e99e8792eca0de002fc8c263fe85900f8b2c)) @zhongyr

Add style objects files to oliver build target.


- [BugFix] Fixed pointer truncation int64 on 32-bit machines ([7aea1dd](https://github.com/lynx-family/lynx/commit/7aea1ddeaba89f65e04d7e83558cb93c1280bc80)) @FrendyChen

When PrimJS Value is converted to and from lepus::Value, a truncation occurs on 32-bit machines if the value of double is stored as a pointer directly. Instead, use int64 to store the value.


- [BugFix] Use HandleBeforeFlushActionsTask handle `element_container()->StyleChanged()` rather than HandleDelayTask ([a3f3ae0](https://github.com/lynx-family/lynx/commit/a3f3ae0438178d334e2e3bcc6eb2cc2a6f23d4c2)) @ShouruiSong

The task handled by HandleDelayTask will be executed during parallel resolving, which means that if the task may get other elements' computed style or element container, it is not thread safe. While the task handled by HandleBeforeFlushActionsTask can ensure thread safety.

Since the function `element_container()->StyleChanged()` may need child elements' element container, this function must be handled by HandleBeforeFlushActionsTask rather than HandleDelayTask.

We need cherry-pick this fix to release/3.2, so a temporary config is being added with the bugfix to avoid breaks. This temporary config will be removed after verifying the bugfix online.


- [BugFix] fix v8 crash ([cc29fad](https://github.com/lynx-family/lynx/commit/cc29fad1ebc7ef004220efe4d626ca19224de5c9)) @nihao.royal

fix HandleScope error of V8 runtime


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

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


- [BugFix] Fix the order of NAPI and app destroy logic ([3b4d8e3](https://github.com/lynx-family/lynx/commit/3b4d8e3e474235fbe9fe76d97e5a3d1fab453e5a)) @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. ([4e9a462](https://github.com/lynx-family/lynx/commit/4e9a4625a0c17842e850e4b4ad866d9d92168ab1)) @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 ([e8452b8](https://github.com/lynx-family/lynx/commit/e8452b8304d0a13c9a32f3415e42bde1e9a2eb5c)) @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] Check if js_task_adapter_ is null before calling ([c6e2319](https://github.com/lynx-family/lynx/commit/c6e2319e618e1b336458e421a8837ca762fd7d88)) @lybvinci

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


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

oc_generator should use 'entryType' instead of 'entry_type'


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

Fix native_promise redefined and OS_ANDROID support.


- [BugFix] ensure access darwin ui on main thread. ([fdad72e](https://github.com/lynx-family/lynx/commit/fdad72ede55430757d9e1407ebda93829ae824fa)) @nihao.royal

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] Fix vsync doFrame being called after js_app destroy ([b3bb38c](https://github.com/lynx-family/lynx/commit/b3bb38c73aaaf09cf36325623c865d9471366273)) @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]: Modify GenerateResponseChain such that stop bubbling at fixed elements when using FiberElement+RadonDiff. ([babbe36](https://github.com/lynx-family/lynx/commit/babbe36074df1475b377e14059d5f70bebd37189)) @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][iOS][Text] Fix the issue that the text still displays after being cleared. ([7a25f14](https://github.com/lynx-family/lynx/commit/7a25f14ab75eb32c0a49c6327b4eb155f2e4fd78)) @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.


(cherry picked from commit 43e46a346d89ae1fe3e40977825fd74f0ddcec18)


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

As describe


Autoland: release/3.3

(cherry picked from commit 8b9364e01046d2e5b2e656eab5035561555b3071)


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

As describe


Autoland:release/3.2


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

Call onLynxEnvSetup after env has been initialized.


(cherry picked from commit e89b815c8f33fd0eaf167a9c6afdb6dc5924f6dd)


- [BugFix][Binding][Remote] fix implicit buffer size related API ([1c9ae61](https://github.com/lynx-family/lynx/commit/1c9ae61d18ee17b2baccfe77996d445f37e38058)) @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`.


(cherry picked from commit 97a36bad7f4284428d5bbec6a63a847099c043a6)


- [BugFix][iOS] Fix text drawing error after setting transform. ([47f8776](https://github.com/lynx-family/lynx/commit/47f8776bc0157cc2c81fc4e49733aa5d76c12d4a)) @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.


(cherry picked from commit 06a47b3cf1902f736d82a55f45ac92e7fb2e41e9)


- [BugFix][RadonFiber] Fix resolve timing for Radon-Fiber arch. ([8ff6ddd](https://github.com/lynx-family/lynx/commit/8ff6ddda6f176304b2fa60293405e653da7eee68)) @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.

(cherry picked from commit 60fa510f8934817a2590afda47868694df105363)


- [BugFix] add null check for JSObjectCallAsFunction and ([8a09f82](https://github.com/lynx-family/lynx/commit/8a09f821399c6d353337051a642ebb70166b4e1b)) @lybvinci

JSObjectCallAsConstructor call

Check Function param if is null before call.


(cherry picked from commit 8e4c0e5c1d9416be72e00fc8647ba7aa189354b7)


- [BugFix] Fix use-after-free issue when converting lepusng value to string ([9d11c8b](https://github.com/lynx-family/lynx/commit/9d11c8b2ab70a83114ee1549d8872a4745d4a84f)) @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][Event] Fix the exposure failure issue caused by setting transform in Window ([66981c4](https://github.com/lynx-family/lynx/commit/66981c45e668bda3314c7f3fc1e5cd8d5d4c352a)) @rAY-ooo

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][Element] Fix incorrect direction aware style calculation in threaded element resolution ([a897913](https://github.com/lynx-family/lynx/commit/a897913f2fdcf6c58eacb860d31efff74dddd98a)) @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][Performance] reactLynx3's identifier should be reactLynxHydrate ([ce67b53](https://github.com/lynx-family/lynx/commit/ce67b5389bfd8416b89f58e5059c66157a25ffda)) @partholon

change `reactHydrate` to `reactLynxHydrate`



### 🚜 Refactor


- [Refactor] Use lynx_value struct to replace inner field in lepus::Value ([1bd269d](https://github.com/lynx-family/lynx/commit/1bd269dfd8780a6beddfb19dd23643e154ae3e61)) @FrendyChen

Use lynx_value struct to replace inner field in lepus::Value. Remove both the union and type member variables from lepus::Value and use lynx_value as a member variable.
Add a lldb script to expand the var_ptr concrete type in lynx_value during debugging.


- [Refactor] Merge jsc runtime wrapper ([c2b35f5](https://github.com/lynx-family/lynx/commit/c2b35f55f6d690761c627f8f2ccaefc76244d12a)) @lybvinci

Merge jsc_context_xx_wraper and jsc_context_wrapper_xx_wraper_impl into one.


- [Refactor] Remove jsc ctxinvalid flag ([a0feeee](https://github.com/lynx-family/lynx/commit/a0feeeecd3e0ca29193431b512601e7e15a3797f)) @lybvinci

Use observer refactor atomic<bool> ctx invalid flag.


- [Refactor] Use interceptor wrap network monitor ([06bcb5e](https://github.com/lynx-family/lynx/commit/06bcb5e9448e0043ccf533ea853030c7ccec3ace)) @lybvinci

Use interceptor to listen to method calls to implement network monitor


- [Refactor] Use lynx_value api to replace a part of primjs api usage in lepus::Value ([aae5a30](https://github.com/lynx-family/lynx/commit/aae5a30378b9123200af3b4b1fca27e14a2b9f67)) @FrendyChen

Use lynx_value api to access LEPUSValue instead of using the interface provided by primjs directly.
If you use virtual functions to access primjs values, there will be performance degradation during the create vdom phase. So lynx_api_env methods are removed.


- [Refactor] Delete ModuleCallbackAndroid Invoke method ([a554ec4](https://github.com/lynx-family/lynx/commit/a554ec435acffd55778a74242c5781efd0ea505c)) @lybvinci

Rewrite SetArguments to convert args. Reuse ModuleCallback's Invoke
function to avoid duplicated logic.


- [Refactor] Use lynx_value api to replace Convert/Clone/Copy methods in lepus::Value ([3940aee](https://github.com/lynx-family/lynx/commit/3940aee968def6c89d845a35cc5dad59f0b14e6e)) @FrendyChen

Use lynx_value api to replace the rest of lepus::Value that uses primjs directly. This makes lepus::Value no longer directly dependent on primjs's interface, allowing lepus::Value to be decoupled from Context later.


- [Refactor] Refactor RuntimeLifecycleListener ([c43eb68](https://github.com/lynx-family/lynx/commit/c43eb68bb3f9882e56b49c03986bfcae833d4ea1)) @lybvinci

1. use RuntimeLifecycleListener for listener runtime lifecycle event.


- [Refactor] Refactor RuntimeLifecycleListener ([b384a8b](https://github.com/lynx-family/lynx/commit/b384a8bd4889053f9f563e0eda52e292a86202be)) @lybvinci

1. use RuntimeLifecycleListener for listener runtime lifecycle event.
[internal]
2. Let canvas use RuntimeLifecycleListener.

[end-internal]


- [Refactor] Let Interceptor reuse trace ([4256f9c](https://github.com/lynx-family/lynx/commit/4256f9c4188b3594a047838f6406e93897343fc1)) @lybvinci

let request_interceptor use trace in lynx_module_impl. Delete
ModuleCallbackRequest to avoid duplication logic.


- [Refactor] Remove LEPUSContext from lepus::Value ([6459cf6](https://github.com/lynx-family/lynx/commit/6459cf610f4536da5ad4063052a2372fc7d311a0)) @FrendyChen

Use LepusValueFactory to Create lepus::Value of PrimJs type and remove the constructor in lepus::Value
Use lynx_api_env to replace ContextCell in lepus::Value.
Move CreateObject/CreateArray from lepus::Value to LepusValueHelper.


- [Refactor] Merge js proxy native impl ([6fa85fd](https://github.com/lynx-family/lynx/commit/6fa85fdd8ec32f972cf2ab719a5e6687fc8dc65c)) @lybvinci

Let JSProxyAndroid inherit LynxRuntimeProxyImpl to avoid duplicate code,
that can also avoid bugs caused by inconsistencies between the two
platforms.


- [Refactor] Merge js proxy native impl ([d6bcceb](https://github.com/lynx-family/lynx/commit/d6bcceb08f152bdc796e42133f9245bcf030bed8)) @lybvinci

Let JSProxyAndroid inherit LynxRuntimeProxyImpl to avoid duplicate code,
that can also avoid bugs caused by inconsistencies between the two
platforms.


- [Refactor] Remove useless code from lepus::Value. ([683fbd5](https://github.com/lynx-family/lynx/commit/683fbd52b767a435ba4015e1f315f650e5043d5c)) @FrendyChen

1、Remove CreateObject/CreateArray from lepus::Value. Use the constructor to create lepus::Value of type map/array to reduce conditionals.
2、Remove useless ClassID from lepus::RefCounted.
3、Remove unnecessary headers from lepus::Value.


- [Refactor] Merge js proxy native impl ([170d1aa](https://github.com/lynx-family/lynx/commit/170d1aa0e53ff93c5fa04e441160f9a187d050f1)) @lybvinci

Let JSProxyAndroid inherit LynxRuntimeProxyImpl to avoid duplicate code,
that can also avoid bugs caused by inconsistencies between the two
platforms.


- [Refactor] Remove jsArrayFromJavaOnlyArray and ([a714696](https://github.com/lynx-family/lynx/commit/a714696a321ff9ca965bbf0340271c0ec0f25df8)) @lybvinci

jsObjectFromJavaOnlyMap

use pub::ValueUtils instead.


- [Refactor] Let extension init after piper init ([eed2acc](https://github.com/lynx-family/lynx/commit/eed2acce59bb85fe1951fbfb3b3506d70035dcf2)) @lybvinci

As the initialization of the extension requires capabilities related to
Piper, it is advisable to place the extension's initialization after
Piper's initialization. This simplifies the initialization process.


- [Refactor] Use flag instead of bool variable ([69eed39](https://github.com/lynx-family/lynx/commit/69eed395e7bc1374f635f498c9df09af5e440f58)) @lybvinci

Use uint32_t flag instead of LynxRuntime's bool variable.


- [Refactor] Let extension init after piper init ([f1a8518](https://github.com/lynx-family/lynx/commit/f1a8518087f1e2c21820a229132508928e79d0bf)) @lybvinci

As the initialization of the extension requires capabilities related to
Piper, it is advisable to place the extension's initialization after
Piper's initialization. This simplifies the initialization process.


- [Refactor] Use flag instead of bool variable ([cca26bc](https://github.com/lynx-family/lynx/commit/cca26bc2a968ac6667e283cfbcb23e694b62dbea)) @lybvinci

Use uint32_t flag instead of LynxRuntime's bool variable.


- [Refactor] Remove console's Runtime field ([0775f86](https://github.com/lynx-family/lynx/commit/0775f865d3cc3f4655ec8f642c64c6e720a3befb)) @lybvinci

Remove the holding of `Runtime`, and use the createFromHostFunction's args:rt.

cussions/281


- [Refactor] Remove LynxRuntimeProxy ParamsGetter Runtime arg ([e141f39](https://github.com/lynx-family/lynx/commit/e141f3969b44c93331b55c263eaad2327d1fdb85)) @lybvinci

Remove the redundant `runtime` parameter from `ParamsGetter`.

cussions/281


- [Refactor] Remove js_event_listener Runtime field ([b998b58](https://github.com/lynx-family/lynx/commit/b998b58465d8e4f814ecdee12501018a7393cabc)) @lybvinci

Remove the holding of `Runtime`, and use the `native_app` object to obtain `Runtime` to avoid unnecessary holding relationships.

cussions/281


- [Refactor] Remove JavaScriptElement useless field rt_ ([703d025](https://github.com/lynx-family/lynx/commit/703d025fc3372f77ad18fccbb5fe5c3c2f59776a)) @lybvinci

Remove the holding of `Runtime`, and use the `native_app` object to obtain `Runtime` to avoid unnecessary holding relationships.

cussions/281


- [Refactor] [iOS] Decouple LynxTemplateRender from LynxUIOwner ([1f446f6](https://github.com/lynx-family/lynx/commit/1f446f68d01a162ce58f9a0abffbaef2b9c40bd9)) @Awuiil

LynxFrame also needs to use LynxUIOwner, so it needs to be decoupled to facilitate method reuse.
Remove TemplateRender from LynxUIOwner and use LUIBodyView and UIContext.


- [Refactor] Remove LynxProxy Runtime field ([2e1fbd1](https://github.com/lynx-family/lynx/commit/2e1fbd16d4e43c1bf064d43d8bcce1f58a721fc3)) @lybvinci

Remove the holding of Runtime.

cussions/281


### 🧪 Testing


- [Testing][TestBench] Support reload to update the source template resources ([4b1a426](https://github.com/lynx-family/lynx/commit/4b1a42605a72d88f7819301ec7cb7ee5ef766600)) @ZhaoSongGOO

When developing business cards using TestBench, to facilitate debugging and avoid triggering
the entire playback process after local code updates, the ability to automatically refresh
with reload has been added.


- [Testing][TestBench] support query createWhenReload ([06522cd](https://github.com/lynx-family/lynx/commit/06522cdcad03eda67331464361c5db4ea6219a02)) @ZhaoSongGOO

Sometimes, we need to fully recreate the entire Lynx instance when refreshing the page.
A createWhenReload query parameter has been added to support this capability. The default
behavior is false, meaning a refresh will only reload the template file while reusing the
existing Lynx instance. You can enable this feature by appending ?createWhenReload=true
to the output URL.


- [Testing][TestBench] Support for customizing container background color. ([65f67a3](https://github.com/lynx-family/lynx/commit/65f67a3819c587266b8a50ebdec9f98bc8dfa0f3)) @ZhaoSongGOO

Customize the container background color by appending a query after the artifact link, &backgroundColor=r_g_b_a, for example, &backgroundColor=255_0_0_100.


- [Testing][TestBench] Move TestBenchUtilsEmbedder to core/services/recorder/ ([2e34680](https://github.com/lynx-family/lynx/commit/2e346804db05eb2ad40ab88c16dc1599142a7569)) @ZhaoSongGOO

The TestBenchUtilsEmbedder belongs to the TestBench general utilities and places all code in the same directory.


- [Testing][RTF] Refactor the RTF code to meet future extension requirements ([5b3260e](https://github.com/lynx-family/lynx/commit/5b3260ea864c4324a1a25c9d78b61aa3ca9b402c)) @ZhaoSongGOO

In the existing test framework logic, we currently trigger an abort to interrupt the
entire test flow when encountering critical errors. With the increasing complexity
of abort logic, the framework flow has become relatively loose, potentially leading to
aborts at any point where expectations are not met. This prevents us from performing
some necessary test cleanup tasks.

1. Add a Result system, requiring all interfaces with potential for failure to
return a Result type. Return `Ok(result)` on success and `Err(code, msg)` on failure.

2. Removed most of the Log.fatal calls and replaced them with Result
for error interception. Converged on the timing of test framework exits.


- [Testing][TestBench] Move TestBenchUtilsEmbedder from recorder to replay ([3430ea4](https://github.com/lynx-family/lynx/commit/3430ea4999f2c78b4d54f6bbd5343b77cb7c9c55)) @ZhaoSongGOO

TestBenchUtilsEmbedder belongs to the playback module, not the recording module.


- [Testing][TestBench] Fix the issue of abnormal width and height dimensions during iOS page playback ([bbe8cc4](https://github.com/lynx-family/lynx/commit/bbe8cc47f2b7f8a0f158d69128bd19fee39071de)) @ZhaoSongGOO

- Replace hardcoded width and height dimensions during playback on the client side.

- Consider the impact of the status bar and navigation bar on the page height under height constraints.


- [Testing][TestBench] Split the TestBench touch event playback implementation. ([b38dcda](https://github.com/lynx-family/lynx/commit/b38dcda3e888f0db8eda18aad508b53622ec43fc)) @ZhaoSongGOO

Split the TestBench touch event playback implementation. TestBench should not be concerned with the specific
implementation of event playback, only providing the corresponding interface, with the specific implementation
left to the integrator.


- [Testing][TestBench] Support TestBench for LynxExplorer ([beed92f](https://github.com/lynx-family/lynx/commit/beed92f7705f3cf934433e54421eba1dcb415b46)) @ZhaoSongGOO

Support TestBench in LynxExplorer.

This MR includes preparatory work:

- Added TestBenchReplay dependency for LynxExplorer.
- Extended header search paths in TestBenchReplay to prevent compilation failures.
- Fixed a typo in the LynxGroup API.


- [Testing][TestBench] Fix the issue of abnormal width and height dimensions during iOS page playback ([0dd0e91](https://github.com/lynx-family/lynx/commit/0dd0e9187f0cae77654096a10469f7c4f015d4a2)) @ZhaoSongGOO

- Replace hardcoded width and height dimensions during playback on the client side.

- Consider the impact of the status bar and navigation bar on the page height under height constraints.


- [Testing][TestBench] LynxExplorer integrates TestBench replay functionality ([2ac05c5](https://github.com/lynx-family/lynx/commit/2ac05c5011ec9b366764f3acdfb5bec5b378d5ff)) @zhaosonggo

LynxExplorer can replay TestBench pages by simply providing the corresponding page artifact link, `file://testbench?url=xxx.json`


- [Testing][TestBench] Fix the issue of TestBench failing to set background ([a0d4a4d](https://github.com/lynx-family/lynx/commit/a0d4a4dc7ba28d992985a1f17331f182996e1773)) @ZhaoSongGOO

In iOS, UIColor's RGBA values must be normalized. Assigning values greater than 1 will default to 1.


- [Testing][TestBench] Fix the issue of abnormal width and height dimensions during iOS page playback ([ff5114e](https://github.com/lynx-family/lynx/commit/ff5114eb937e3e20a285d259c3ed0477a1e07ff2)) @ZhaoSongGOO

- Replace hardcoded width and height dimensions during playback on the client side.

- Consider the impact of the status bar and navigation bar on the page height under height constraints.


- [Testing] Report test case result ([30535d7](https://github.com/lynx-family/lynx/commit/30535d73b7c90b93b3a6490914a192b4f4ddfdf3)) @ZhaoSongGOO

report trace events for native unittests


- [Testing] Support debugMode for LynxExplorer ([cd1573e](https://github.com/lynx-family/lynx/commit/cd1573e56624cc1001491cdeed29fbc3b408a39f)) @ZhaoSongGOO

1. Add TestBench switch to lynx-devtool-switch-card

2. Add support for LynxExplorer DebugMode builds, If you add -PbuildLynxDebugSo during the build phase,
it will generate both lynx.so and lynx_debug.so as output binaries. The lynx_debug.so includes debugging tool logic.


- [Testing][TestBench] Fixed the issue of ignoring the status bar size in full-screen mode ([cf50574](https://github.com/lynx-family/lynx/commit/cf505741794b0b909c8b81012c58a15a395c4217)) @ZhaoSongGOO

In iOS, during fullscreen playback, the navbar is hidden, but we still need to consider the size of the status bar.

`no-fullScreen mode`
```
|------------|
| statusbar  |
|------------|
| navbar     |
|------------|<--- origin(0, 0), safeArea(navbar.size + statusbar.size)
| lynxview   |
|------------|
```

`fullScreen mode`
```
|------------|
| statusbar  |
|------------|<--- origin(0, statusbar.height), safeArea(statusbar.size)
| lynxview   |
|------------|
```


- [Testing] Add timeout and retry mechanism when adb install fails ([f5e775f](https://github.com/lynx-family/lynx/commit/f5e775fda2a4ed35e1a1764655047eb119e847f4)) @ZhaoSongGOO

If adb install exceeds 120 seconds, it will retry once, and the emulator will be restarted during this process.


- [Testing] Enhance stack trace analysis for failed Android unit tests ([0677f46](https://github.com/lynx-family/lynx/commit/0677f466f29a266c629c8ab8fee4977fbd09f51e)) @ZhaoSongGOO

Enhance stack trace analysis for failed Android unit tests


- [Testing][TestBench] Add `forbidTimeFreeze` query for TestBenchReplay ([54a239c](https://github.com/lynx-family/lynx/commit/54a239c62e76fa1307c2aebaa8a3f5b4703da867)) @ZhaoSongGOO

The TestBench by default mocks the JS engine, ensuring that some global objects remain
in a recording state, such as the Date object. The main goal is to recreate the state of
the recording phase as much as possible. However, we need to provide a manual shutdown
capability to correctly verify the behavior of the JS engine during the testing phase.


- [Testing] Introduce the enableNativeScheduleCreateViewAsync configuration such that can ues this in E2E testing environments. ([ca77864](https://github.com/lynx-family/lynx/commit/ca77864c1fe84bc7f50236e1c99bf783cbaf8ef6)) @ShouruiSong

As the title states, we have introduced the enableNativeScheduleCreateViewAsync configuration. When this flag is set to true in either PageConfig or NativeConfig, the scheduling logic for CreateViewAsync will execute in C++. Prior to this change, whether CreateViewAsync logic ran in Java or C++ was solely controlled via a global setting. This setting is currently used in production to manage experimental rollouts.

Building on these new configurations, a corresponding task label has been added for E2E testing. When this label is configured, NativeConfig.enableNativeScheduleCreateViewAsync will automatically be set to true during E2E test execution. This allows E2E tests to replicate the behavior of production experimental groups, ensuring our changes do not inadvertently disrupt live experiments.


- [Testing][TestBench] Support TestBenchDefaultActionCallback for LynxExplorer ([2ebaaea](https://github.com/lynx-family/lynx/commit/2ebaaea21e92af04b3c649238e1ae3830952be5a)) @ZhaoSongGOO

The TestBench needs to extract the initialization logic related to LynxGroup due to differences in LynxGroup and dynamically register it.


- [Testing][TestBench] Move the replayTimeEnvJScript logic out of ReplayDataModule ([fcfa8e8](https://github.com/lynx-family/lynx/commit/fcfa8e8cd7b72d0803353574b6c75f5576467980)) @ZhaoSongGOO

ReplayDataModule is a nativeModule that should focus more on communication with the frontend, so let's split out this pure client-side logic.


- [Testing] Fix the README_UT.md path error ([0fa680d](https://github.com/lynx-family/lynx/commit/0fa680d923b875b3a9e3832130258e6c7c273f18)) @ZhaoSongGOO

should be lynx_exaplorer, not LynxExplorer


- [Testing][TestBench] Fix the potential ReplayData data race issue in multi-page replay ([6964a2e](https://github.com/lynx-family/lynx/commit/6964a2e3426a5960b7c598288ee2f76dba251eef)) @ZhaoSongGOO

Previously, ReplayData was stored as a static data type in ReplayDataModule, causing subsequent pages' ReplayData
to overwrite the previous data in multi-page replay scenarios.

So here, ReplayData should not be global static data, but rather page-specific. Therefore, the ReplayDataProvider
interface is added here, and all data is held by page objects through ActionManager. ReplayDataModule obtains the
corresponding data through the constructor.


- [Testing] Avoid the disturbance caused by printing the full log ([4fb68e7](https://github.com/lynx-family/lynx/commit/4fb68e7c9b09b13ea6149cdd038f963e29835b4f)) @ZhaoSongGOO

The test may generate a large volume of logs during certain stages, but only the
last few lines may be relevant to the actual execution. Printing all logs when a
test fails can introduce disturbances in troubleshooting, and may also lead to
log anomalies or truncation due to performance issues with the logging system.


- [Testing][TestBench][iOS] Fix the potential ReplayData data race issue in multi-page replay ([d70aeae](https://github.com/lynx-family/lynx/commit/d70aeae4e6a4d1c017a6785341d7e3a43f9adfbd)) @ZhaoSongGOO

Previously, ReplayData was stored as a static data type in ReplayDataModule, causing subsequent pages' ReplayData to overwrite the previous data in multi-page replay scenarios.

So here, ReplayData should not be global static data, but rather page-specific. Therefore, the ReplayDataProvider interface is added here, and all data is held by page objects through ActionManager. ReplayDataModule obtains the corresponding data through the constructor.


- [Testing][TestBench] Fix memory leaks caused by circular references ([9343ff1](https://github.com/lynx-family/lynx/commit/9343ff1d17397c9eb28326f8258388626354bc60)) @ZhaoSongGOO

TestBenchActionManager referenced LynxView, which in turn strongly referenced all nativeModule input parameters.
Previously, we passed TestBenchActionManager as this parameter, causing a circular reference. Now, we use the
member dataProvider of TestBenchActionManager as the parameter to avoid this.


### 🛠️ Infra


- [Infra][Types] Release Lynx Types version to 3.2.1 ([c7109f8](https://github.com/lynx-family/lynx/commit/c7109f8a0464ef4ee1268c4e7c71fd7334303765)) @OverWatch-Winder

1. Release Lynx Types version to 3.2.1
2. Temporarily disable types version checker


- [Infra][Feature] gn to cmake toolchain supports gn copy target ([94cb50e](https://github.com/lynx-family/lynx/commit/94cb50e2662dcc9d53a89423fa3373c6891c8cb7)) @yongjieTang

1. Previously, the gn to cmake toolchain lacked support for gn's built-in copy target, resulting in conversion failures when copy targets were present in the dependency chain. This update introduces the necessary support for copy target conversion.
2. Added Corresponding test code, and resolved the issues with the testing tools.


- [Infra][Bugfix] Fix the issue of gradle clean failure ([5c80386](https://github.com/lynx-family/lynx/commit/5c803861c610448d55db6613d52f004be1fe5c68)) @yongjieTang

1. When executing `./gradlew clean`, it reports an error of not finding the CMakeLists.txt file, causing the clean task to fail. Now, make the clean task depend on the generateAllGnCmakeTargets task to ensure the cmake script exists during clean, thus avoiding the failure.
2. Previously, the clean task could not clean up the intermediate products of gn to cmake. Now, improve the clean logic to ensure complete cleanup of intermediate products for Android compilation.


- [Infra] Align the compile SDK version with Android 33 for consistency. ([daadc0c](https://github.com/lynx-family/lynx/commit/daadc0c1d22d3d3432fa675d9f4e1157e4b188dd)) @yongjieTang

The inconsistent compile SDK versions across Lynx's Android sub-projects require downloading multiple SDK versions during compilation in Android Studio. As Lynx exclusively defaults to SDK version 33, other versions remain unused, potentially causing missing SDK version issues when opening the Lynx explorer project in Android Studio.


- [Infra] Update android sdk publish script ([d750198](https://github.com/lynx-family/lynx/commit/d750198c35ecebea4d2c4f9efca3b1e52562672b)) @gaohanqing

1. Add LynxProcessor module when publishing android modules to maven.

2. Add sources jar into the component artifact.


- [Infra] fix css_generator script get script path error ([39132a4](https://github.com/lynx-family/lynx/commit/39132a4c1a9b3e18bd2a1e13c6ac2156152c8f4f)) @lybvinci

when use git worktree, os.chdir may make path error.


- [Infra][Feature] gn to cmake toolchain supports gn action_foreach target ([dc8468e](https://github.com/lynx-family/lynx/commit/dc8468ea37c34f68179635aa5ad9cc52f8d91e58)) @yongjieTang

1. Previously, the gn to cmake toolchain lacked support for gn's built-in action_foreach target, resulting in conversion failures when action_foreach targets were present in the dependency chain. This update introduces the necessary support for action_foreach target conversion.
2. Added Corresponding test code.


- [Infra] optimize vpython to avoid conflict with other venv like mechanism & handle error correctly ([15aa945](https://github.com/lynx-family/lynx/commit/15aa94509a29e7f421ce6e209b275c683bf6571e)) @GhostFlying

This patch unset the `PYTHONPATH` env variable to avoid conflict with venv itself. In additional, it handles the unlock behavior correctly when the script meets error.


- [Infra][GN] Add a regular expression matching method to specify ignoring cmake_target or podspec_target ([bbc8844](https://github.com/lynx-family/lynx/commit/bbc8844e4188d88d1951feb494ca2bb7c13c2e2c)) @yongjieTang

summary:
  Previously, the build_lynx_dylib variable was used in the project to control whether specific cmake_target or podspec_target should be generated. This approach is prone to ambiguity in syntax and lacks universality. Now, regular expression matching has been added to gn to cmake&podspec to exclude specified targets, allowing flexible configuration to exclude unwanted cmake or podspec targets.


- [Infra] update lynx version. ([019506e](https://github.com/lynx-family/lynx/commit/019506e73462c7bd1bb30cbccc4a43a25d1f8e74)) @givemefive9

update lynx version


- [Infra][Optimize] Rewrite prepare_android_build.sh with Python ([69c5546](https://github.com/lynx-family/lynx/commit/69c5546f2ec468eb004e82ba2c6649fcec6fc3a4)) @yongjieTang

summary:
To make the prepare_android_build.sh script work across multiple development platforms beyond macOS/Linux, we reimplement it  with Python.


- [Infra] fix css_generator script get script path error ([e03a0f5](https://github.com/lynx-family/lynx/commit/e03a0f57c9ac91f65dd3a4fa8a3efd3d19154c79)) @YellowFishWyfCPP

when use git worktree, os.chdir may make path error.


- [Infra][Types] Add type testing for objects & methods mounted in global in @lynx-js/types ([9bb6cff](https://github.com/lynx-family/lynx/commit/9bb6cff3779363f9a4feae72f5a59fb9f4c9f26a)) @OverWatch-Winder

Add type testing for objects & methods mounted in global:
lynx
getElementById
NativeModules
requestAnimationFrame
cancelAnimationFrame
SystemInfo


- [Infra] Auto label new issues with 'status:need triage' ([30a0f50](https://github.com/lynx-family/lynx/commit/30a0f50054418e040b571a8408bd3cebf2b6cffc)) @mitchilling

Add a yml file describing the job.


- [Infra] Perflab Android coverage support c++ files ([493a459](https://github.com/lynx-family/lynx/commit/493a459772a3200afd6fae6edf740874f16de7a9)) @kaychn126

Perflab Android coverage support c++ files.
1. C++ file add coverage compiler and linker flags -fprofile-instr-generate and -fcoverage-mapping.
2. Add CppCoverageUtils.dumpCoverageData() method, to save coverage data to a file at runtime


- [Infra] Add habitat windows wrapper script ([6bec5ab](https://github.com/lynx-family/lynx/commit/6bec5abbd714f9e1d21e86d895b93fe71b61d4a5)) @coolkiid

Call "tools/hab.ps1" to sync dependencies on Windows.


- [Infra] Add api-check task in github ci static-check ([130ff50](https://github.com/lynx-family/lynx/commit/130ff50ab166bf986f919b80bf38700ab3618f6e)) @pilipala195

Add api-check task in github ci static-check


- [Infra][Types] Add type testing to lynx react.JSX.IntrinsicElements using tsc ([fa1fa50](https://github.com/lynx-family/lynx/commit/fa1fa503f22c081e72c4a37fb311f65e1875c090)) @OverWatch-Winder

Add type testing to react.JSX.IntrinsicElements using tsc


- [Infra] Add enable_cpp_coverage switch ([e6345cb](https://github.com/lynx-family/lynx/commit/e6345cb1476e255aec2e1e31dadc3a415259ed7a)) @kaychn126

Add enable_cpp_coverage switch


- [Infra] Upgrade habitat version to 0.3.138 ([3b7e170](https://github.com/lynx-family/lynx/commit/3b7e170be281a357fec6479ced2c796599f5c1a1)) @coolkiid

Add habitat windows release.


- [Infra] add envsetup script and adapt DEPS file for Windows develop ([1a6d54c](https://github.com/lynx-family/lynx/commit/1a6d54c1249d7d31d99f09386cd862f0bce8ba46)) @yongjieTang

summary:
For Windows development, add the necessary environment configuration scripts and dependent resources required for Lynx compilation.

Key modifications:
1. Add envsetup.ps1 to configure the basic environment required for Lynx development.
2. Add dependencies such as CMake, GN, and Gradle required for Windows development.
3. Adapt the update_local_properties.py script.


- [Infra] Upgrade habitat version to 0.3.140 ([7e1771a](https://github.com/lynx-family/lynx/commit/7e1771a356fc5a76e9c6ec9317b5441716cacf48)) @coolkiid

Fix some known issues on Windows.


- [Infra] Update iOS Lynx Explorer README on ruby version requirement ([338f129](https://github.com/lynx-family/lynx/commit/338f129ed92d74f6d78e107bf84f327858aabc2c)) @coolkiid

Specify the ruby version to (>=2.7, <3.4).

Closes: gh-#216


- [Infra] Use cache in mac runner to optimize ci stability ([6b1957d](https://github.com/lynx-family/lynx/commit/6b1957d2998502771e85d0cf73b43281d9243f84)) @coolkiid

Other changes:
1. refactor the common-deps action input to support cache backend
selection.
2. rename workflow input from dry_run to dry-run.
3. use official cache action when using GitHub hosted runner.


- [Infra][Bugfix]Bring forward the copying of python3.exe. ([36cb478](https://github.com/lynx-family/lynx/commit/36cb47806ae5f696e0e133644c1ec2d2f5d99879)) @yongjieTang

In a development environment lacking the pip module, executing pip install will fail. This failure will cause the step of copying python3.exe to fail, preventing GN from executing normally. Therefore, the pip install operation is moved to the end to avoid affecting other tasks.


- [Infra] Add push trigger event on `CQ-*` branches ([ac406ba](https://github.com/lynx-family/lynx/commit/ac406ba84df0dbc3deaf78fffbb828880bda4e0a)) @ZhaoSongGOO

Add push event trigger to GitHub Actions workflow


- [Infra] update cmake verison for darwin ([9890de1](https://github.com/lynx-family/lynx/commit/9890de11cdcfa235796deae6ff231bf3615e1177)) @yongjieTang

udate cmake version for darwin


- [Infra][Types] Release Lynx Types version to 3.3.0 ([ef8ad9e](https://github.com/lynx-family/lynx/commit/ef8ad9e6ab20f2134de5ca97ed7de5c1676d2db9)) @OverWatch-Winder

Release Lynx Types version to 3.3.0


- [Infra] Adapt Android builds for Windows development ([6e8a566](https://github.com/lynx-family/lynx/commit/6e8a566ec8b6ec0f2d05c9dad030d91c0ade48b9)) @yongjieTang

1. Update the README for the Windows build process guide.
2. Adapt the JNI generator script.
3. To enable Gradle to find tools like ninja and python3, elevate the environment variable settings to the User level in envsetup.sh.


- [Infra] Update some ci config ([e2f09ec](https://github.com/lynx-family/lynx/commit/e2f09ec24112fb0ddb497382312ccdde006c38fd)) @coolkiid

1. update habitat to 0.3.141.
2. add a hab- prefix to cache key.


- [Infra][Testing] Add always-executed for test reporter ([a350f1c](https://github.com/lynx-family/lynx/commit/a350f1cb770353a207487e8bf653188dc6f30bcb)) @ZhaoSongGOO

Trace data should be uploaded in both successful and failed test tasks" is the English translation of the sentence


- [Infra][Types] Codegen csstype.d.ts from css_defines ([4c36d0d](https://github.com/lynx-family/lynx/commit/4c36d0dad92099f7d6a20824adec2553d376eddb)) @huxpro

- validate all css_defines against the json schema
  - drop the without doc version
- generate csstype.d.ts from css defines source
  - while ensuring compatibility
- rewrite the README

Read README on how to test this changes.


- [Infra] update explorer/android/README.md ([3cfa75c](https://github.com/lynx-family/lynx/commit/3cfa75ced7601824bd87c0a8286b8c7d818adbf1)) @yongjieTang

The original steps would overwrite the user's PATH environment variable. Now it is modified to the correct statement.


- [Infra] add String type summary script and register in lynx_lldb.py ([c16cd81](https://github.com/lynx-family/lynx/commit/c16cd8183bf9f19616e5f47b0ea8d23002382308)) @ZujunGu

- [Infra] Update revision of tools-shared ([a6f451b](https://github.com/lynx-family/lynx/commit/a6f451bbbf97066d4085d8909ea93f1bed96be93)) @JianliangWang

Signed-off-by: Jianliang Wang <125073156+jianliang00@users.noreply.github.com>


- [Infra] Use GitHub cache only in release workflow ([b03a8e1](https://github.com/lynx-family/lynx/commit/b03a8e16d0c9567b1a64c75fa3d539cf8608f917)) @coolkiid

Use lynx-infra/cache in CI instead.


- [Infra] Disable unstable test android-e2e-test ([3c4a2ea](https://github.com/lynx-family/lynx/commit/3c4a2ea44400ce023fdf9ef89606dfe53d8fed79)) @ZhaoSongGOO

above


- [Infra] change linux runners name ([9ae6257](https://github.com/lynx-family/lynx/commit/9ae625750bef7ee103f03d298c83abf2b33cdd50)) @fenghao

delete avd suffix of linux runners name


- [Infra] Update target branch in CI workflow ([b3cf679](https://github.com/lynx-family/lynx/commit/b3cf6793aaa8c8b7412394175b888b4e8ca88197)) @jianliang00

- [Infra] Support deploy lynx-processor in public maven ([a5838d4](https://github.com/lynx-family/lynx/commit/a5838d489b4201ceffc84894a6522b1ebf4295ef)) @Kingatnuaa0528

Add sourceJar and javadocJar in aar.