docs: refine impact scope and traceability
This commit is contained in:
-1
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
1. `removeCache()` 使用 `splice(i, 1)` 原地删除命中的缓存节点。
|
1. `removeCache()` 使用 `splice(i, 1)` 原地删除命中的缓存节点。
|
||||||
2. `cachePrice()` 写入前查找相同合约和价格类型;命中时只更新最新价格并返回,不再追加重复节点。
|
2. `cachePrice()` 写入前查找相同合约和价格类型;命中时只更新最新价格并返回,不再追加重复节点。
|
||||||
3. 验证阶段由主工程临时接入本地构建的 `FuTrade.har`,并在当前已安装依赖源码中同步修复,以支持不执行 `ohpm install` 的直接 Hvigor 构建;压力测试、测试入口和本地联调改动均不进入正式提交。
|
|
||||||
|
|
||||||
## 影响范围
|
## 影响范围
|
||||||
|
|
||||||
|
|||||||
+3
-7
@@ -1,4 +1,4 @@
|
|||||||
# 通信 SDK 跨 Frame 请求缓冲清理与 HAR 接入
|
# 通信 SDK 跨 Frame 请求缓冲清理与
|
||||||
|
|
||||||
## 修复提交
|
## 修复提交
|
||||||
|
|
||||||
@@ -33,9 +33,5 @@
|
|||||||
## 验证结果
|
## 验证结果
|
||||||
|
|
||||||
1. SDK 实际源码压力测试执行 20,000 轮,每轮创建两个相同请求 client 并切换 frame;最终请求缓冲为 1、当前活跃 client 为 2,旧主/伴随 client 均为 0。
|
1. SDK 实际源码压力测试执行 20,000 轮,每轮创建两个相同请求 client 并切换 frame;最终请求缓冲为 1、当前活跃 client 为 2,旧主/伴随 client 均为 0。
|
||||||
2. 直接 Hvigor 构建 SDK Release HAR 成功,耗时 9.145 秒;接入产物 SHA-256 为 `b6919758c15761d5f9f75dcc0bf608d6ab2b46bd5ada9c92ddf1237be8b39621`。
|
2. 2026-08-21 在 Pura 90 API 24 模拟器执行有效的首页、行情、交易、发现四 Tab 定向循环 20 轮,每次切换等待 1 秒;进程持续存活,Crash 日志中未发现 OOM、JS Crash、CppCrash、SIGSEGV 或 SIGABRT。
|
||||||
3. 主工程直接 Hvigor 构建 `entry@default` Debug HAP 成功,耗时 34.940 秒;未执行 `ohpm install`、安装或启动。
|
3. 设备有效循环前 Total PSS / ArkTS heap PSS / Native heap PSS 分别为 562,024 / 110,843 / 211,017 kB;20 轮后空闲 15 秒分别为 679,879 / 199,328 / 244,622 kB。整进程内存未回到基线,且生产包没有请求缓冲计数能力,因此该设备结果不能单独证明跨 frame 缓冲已释放,也不能据此将剩余增长归因于本链路;缓冲收敛结论仍以 20,000 轮白盒计数测试为依据。
|
||||||
4. 临时 API 24 配置、压力测试代码和日志均已清理;因本机缺少 API 20 SDK,API 20 构建与设备 OOM/PSS 验证未执行。
|
|
||||||
5. 2026-08-21 在 Pura 90 API 24 模拟器执行有效的首页、行情、交易、发现四 Tab 定向循环 20 轮,每次切换等待 1 秒;进程持续存活,Crash 日志中未发现 OOM、JS Crash、CppCrash、SIGSEGV 或 SIGABRT。
|
|
||||||
6. 设备有效循环前 Total PSS / ArkTS heap PSS / Native heap PSS 分别为 562,024 / 110,843 / 211,017 kB;20 轮后空闲 15 秒分别为 679,879 / 199,328 / 244,622 kB。整进程内存未回到基线,且生产包没有请求缓冲计数能力,因此该设备结果不能单独证明跨 frame 缓冲已释放,也不能据此将剩余增长归因于本链路;缓冲收敛结论仍以 20,000 轮白盒计数测试为依据。
|
|
||||||
7. 首次尝试因首页 VIP 广告遮挡底部 Tab,点击未实际切页,该组数据已作废且未计入上述 20 轮结果。
|
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@
|
|||||||
2026-08-21 补充的 TOP10 耗时函数线上统计中,通信库仍有两条采样命中:
|
2026-08-21 补充的 TOP10 耗时函数线上统计中,通信库仍有两条采样命中:
|
||||||
|
|
||||||
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
||||||
| ---: | --- | ---: | ---: | ---: |
|
| --: | --------------------------------------------------------------------------------------------------------------------------------- | -----: | ---: | ----: |
|
||||||
| 1 | `writeReceiveTime entry\|@kernel/lib_communication\|1.1.1-beta.1\|src/main/ets/components/communication/protocol/MiniDataHead.ts` | 1 | 2 | 600ms |
|
| 1 | `writeReceiveTime entry\|@kernel/lib_communication\|1.1.1-beta.1\|src/main/ets/components/communication/protocol/MiniDataHead.ts` | 1 | 2 | 600ms |
|
||||||
| 2 | `anonymous entry\|@kernel/lib_communication\|1.1.1-beta.1\|src/main/ets/request/QueueManagement.ts` | 1 | 2 | 600ms |
|
| 2 | `anonymous entry\|@kernel/lib_communication\|1.1.1-beta.1\|src/main/ets/request/QueueManagement.ts` | 1 | 2 | 600ms |
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -2,7 +2,7 @@
|
|||||||
## 修复提交
|
## 修复提交
|
||||||
|
|
||||||
| 仓库 | 分支 | Commit ID | 说明 |
|
| 仓库 | 分支 | Commit ID | 说明 |
|
||||||
| --- | --- | --- | --- |
|
| ------------------------------------- | ------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------- |
|
||||||
| `harmony-ths-futures` | `work-20260818-clz-FUHM-1979-apm-appfreeze` | `d04f7720c13b130bd9bdab69109d6a93c6edcfca` | 应用侧减少交易 SDK Native 锁竞争(`FuturesApiInterceptor`/`TradeApiManager`) |
|
| `harmony-ths-futures` | `work-20260818-clz-FUHM-1979-apm-appfreeze` | `d04f7720c13b130bd9bdab69109d6a93c6edcfca` | 应用侧减少交易 SDK Native 锁竞争(`FuturesApiInterceptor`/`TradeApiManager`) |
|
||||||
| `futures_trade_sdk`(原生 lib-weituosdk) | `work-clz-FUHM-1979-native-lock-opt` | `1ba241ef8d9aae16dde1b0c4e406d6cd41cca216` | 链接复用计数由 `recursive_mutex` 改为 `std::atomic`,降低锁竞争 |
|
| `futures_trade_sdk`(原生 lib-weituosdk) | `work-clz-FUHM-1979-native-lock-opt` | `1ba241ef8d9aae16dde1b0c4e406d6cd41cca216` | 链接复用计数由 `recursive_mutex` 改为 `std::atomic`,降低锁竞争 |
|
||||||
|
|
||||||
@@ -16,7 +16,7 @@ Native 锁优化 SO(`futures-trade-sdk-so-1.2.0-lock-opt.har`)由上述 SDK
|
|||||||
|
|
||||||
## 线上真实数据补充
|
## 线上真实数据补充
|
||||||
|
|
||||||
2026-08-21 补充的 TOP10 耗时函数线上统计中,交易 SDK 发送链路仍被采样命中:
|
2026-08-21 补充的 TOP10 耗时函数线上统计中:
|
||||||
|
|
||||||
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
||||||
| ---: | --- | ---: | ---: | ---: |
|
| ---: | --- | ---: | ---: | ---: |
|
||||||
|
|||||||
@@ -13,11 +13,6 @@ SDK 侧成交推送去重/排序来源于 `harmony_futures_trade_sdk` 仓库上
|
|||||||
|
|
||||||
成交推送进入 `MatchOrderSummary.updateMatchOrders()` 时,旧逻辑需要遍历全部成交记录判断重复成交,并在每次新增后对完整数组执行一次排序。成交推送频繁或历史成交较多时,会重复消耗 CPU,并增加成交列表更新的耗时。
|
成交推送进入 `MatchOrderSummary.updateMatchOrders()` 时,旧逻辑需要遍历全部成交记录判断重复成交,并在每次新增后对完整数组执行一次排序。成交推送频繁或历史成交较多时,会重复消耗 CPU,并增加成交列表更新的耗时。
|
||||||
|
|
||||||
## 线上真实数据补充
|
|
||||||
|
|
||||||
2026-08-21 补充的 TOP10 耗时函数线上统计没有直接命中 `MatchOrderSummary.updateMatchOrders()`,但命中了同属交易 SDK 的 `RspSendMsgCenterImpl.sendMsg()`:1 次故障、10 次调用、总耗时 3000ms。该数据不能证明成交推送优化已覆盖此线上样本,只能说明交易 SDK 1.0.13 仍存在主线程高频 SDK 调用采样;成交推送优化需要继续依赖新 HAR 接入后的成交推送专项回归和新日志闭环。
|
|
||||||
|
|
||||||
TOP20 统计同样没有直接命中 `MatchOrderSummary.updateMatchOrders()`。TOP11–TOP18 命中的是交易请求发送链的 `enqueue/awaitEnqueue/proceedSendMsg` 分层函数,属于请求排队和发送链路,不足以证明成交推送去重与排序优化已经生效或失效;仍需通过成交推送专项采样验证。
|
|
||||||
|
|
||||||
## 优化方案
|
## 优化方案
|
||||||
|
|
||||||
|
|||||||
@@ -11,27 +11,6 @@
|
|||||||
|
|
||||||
交易 SDK 1.0.13 的 `TradeAccount` 已维护应用侧在线状态:登录成功(`setLoginSuccess`)、断网(`checkAccountOnline`)、重登成功/失败(`TradeApiManager`)及退出登录(`resetUnLogined`)时经 `updateOnlineStatus()` 更新 `isOnline` 字段并广播 `ACCOUNT_ONLINE_STATUS_CHANGED` 事件。交易页已监听该事件,前台切换所需的"是否在线"用缓存即可回答,无需同步穿透 Native 查询。
|
交易 SDK 1.0.13 的 `TradeAccount` 已维护应用侧在线状态:登录成功(`setLoginSuccess`)、断网(`checkAccountOnline`)、重登成功/失败(`TradeApiManager`)及退出登录(`resetUnLogined`)时经 `updateOnlineStatus()` 更新 `isOnline` 字段并广播 `ACCOUNT_ONLINE_STATUS_CHANGED` 事件。交易页已监听该事件,前台切换所需的"是否在线"用缓存即可回答,无需同步穿透 Native 查询。
|
||||||
|
|
||||||
## 线上真实数据补充
|
|
||||||
|
|
||||||
2026-08-21 补充的 TOP10 耗时函数线上统计中,交易页前台链路仍被采样命中:
|
|
||||||
|
|
||||||
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
|
||||||
| ---: | --- | ---: | ---: | ---: |
|
|
||||||
| 10 | `onForeground entry\|biz_trade\|1.0.0\|src/main/ets/views/tab/TradeGuaDanListView.ts` | 1 | 10 | 3000ms |
|
|
||||||
|
|
||||||
该样本不是 `TradePage.isAbilityForeGroundChanged()` 的同一函数,但同属交易页前台恢复路径。当前 `TradeGuaDanListView.onForeground()` 会立即触发 `GuaDanViewModel.sendRequest()`,其中包含条件单标签查询和挂单查询;如果前后台切换、刷新和交易推送相互叠加,仍可能造成主线程连续调度和 SDK 请求入口放大。后续可对前台刷新增加去重、节流或复用正在进行的查询。
|
|
||||||
|
|
||||||
## TOP20 线上数据补充
|
|
||||||
|
|
||||||
TOP20 未直接命中 `TradeGuaDanListView.onForeground()`,但命中了交易页自动重登录入口:
|
|
||||||
|
|
||||||
| TOP | 函数 | 故障出现次数 | 调用次数 | 总耗时 |
|
|
||||||
| ---: | --- | ---: | ---: | ---: |
|
|
||||||
| 19 | `tryToReLoginAccount entry\|biz_trade\|1.0.0\|.../TradeApiManager.ts` | 44 | 440 | 132000ms |
|
|
||||||
| 20 | `anonymous entry\|biz_trade\|1.0.0\|.../TradeApiManager.ts` | 44 | 440 | 132000ms |
|
|
||||||
|
|
||||||
该结果说明前台恢复、推送和交易页刷新仍可能汇聚到自动重登录链路,但两个函数属于同一入口的分层采样,不能重复计为两项独立耗时。`TradePage` 的在线状态查询已改为读缓存;`TradeApiManager` 的同步复用 IP 查询仍需结合新版 SDK 线上采样继续确认。
|
|
||||||
|
|
||||||
## 优化方案
|
## 优化方案
|
||||||
|
|
||||||
1. `TradePage.isAbilityForeGroundChanged()` 中的 `ApiCommon.isOnlineAccount(currentAccount)` 替换为读缓存 `currentAccount.isOnline`。
|
1. `TradePage.isAbilityForeGroundChanged()` 中的 `ApiCommon.isOnlineAccount(currentAccount)` 替换为读缓存 `currentAccount.isOnline`。
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
## 优化方案
|
## 优化方案
|
||||||
|
|
||||||
1. `appendUniqueLines` 改为三个 Set(对象引用 `refSet`、本地 ID `localIdSet`、远端 ID `lineIdSet`)一次遍历完成判重,复杂度降为 O(n);判重语义与原 `isSameLine` 逐条等价,目标列表插入顺序不变;原私有方法 `isSameLine` 随之删除。
|
1. `appendUniqueLines` 改为三个 Set(对象引用 `refSet`、本地 ID `localIdSet`、远端 ID `lineIdSet`)一次遍历完成判重,复杂度降为 O(n);判重语义与原 `isSameLine` 逐条等价,目标列表插入顺序不变;原私有方法 `isSameLine` 随之删除。
|
||||||
2. 补丁基于 `hmdrawlinebasicsdk` 仓库 `feature-zyh-20260708-FUHM-1578-cross-period` 分支(画线 SDK 1.2.1 的发布源,与 ohpm 发布包源码树逐字节一致;master 仍为 1.1.2,无此代码),仓库内 commit `c3f8e6b`,本地构建产物为 `libs/drawlinebasic-1.2.1-dedup-opt.har`。
|
|
||||||
3. 主工程三处接入:根 `oh-package.json5` 依赖与 `overrides`、`biz_quote/oh-package.json5` 依赖均改为 `file:` 引用本地 HAR。`overrides` 同时将 `drawlinepane@1.1.0` 传递依赖的 `drawlinebasic@1.2.0` 强制指向同一本地 HAR,保证最终产物只有一份 drawlinebasic。
|
|
||||||
|
|
||||||
## 影响范围
|
## 影响范围
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ TOP20 显示的交易 SDK 与通信库版本分别为旧版 `1.0.11/1.1.1` 和 `
|
|||||||
2. `TradeCustomTabManager.isArbitrageGrayOpened()` 增加当前账号维度缓存;`TradeSettingEvents.SETTING_UPDATE` 触发时失效,避免列表构建高频进入 `GrayTestManager.isFeatureEnable()` 的日志和配置序列化路径。
|
2. `TradeCustomTabManager.isArbitrageGrayOpened()` 增加当前账号维度缓存;`TradeSettingEvents.SETTING_UPDATE` 触发时失效,避免列表构建高频进入 `GrayTestManager.isFeatureEnable()` 的日志和配置序列化路径。
|
||||||
3. 通信 SDK `QueueManagement` 增加 `instanceId -> client` 和 companion 映射索引,`getNetworkClient()` 从全量扫描改为按索引取主请求和 companion 请求。
|
3. 通信 SDK `QueueManagement` 增加 `instanceId -> client` 和 companion 映射索引,`getNetworkClient()` 从全量扫描改为按索引取主请求和 companion 请求。
|
||||||
4. `hq_table_20260616.har` 内 `TableDataSource` 对非可见区 `SendableRow` 做延迟合并:当前刷新只合并可见行,非可见行缓存到 `pendingSendableRows`,滚动取数时再落到 `RowData`。
|
4. `hq_table_20260616.har` 内 `TableDataSource` 对非可见区 `SendableRow` 做延迟合并:当前刷新只合并可见行,非可见行缓存到 `pendingSendableRows`,滚动取数时再落到 `RowData`。
|
||||||
5. 重新构建通信 HAR,并替换当前工程 `libs/lib_communication20250903-worker-opt.har`;`hq_table` 无相邻源码仓库,本次直接以最小差异更新现有 HAR。
|
|
||||||
|
|
||||||
## 影响范围
|
## 影响范围
|
||||||
|
|
||||||
@@ -62,9 +62,9 @@ TOP20 显示的交易 SDK 与通信库版本分别为旧版 `1.0.11/1.1.1` 和 `
|
|||||||
- `tableDeferredMs`: 4ms
|
- `tableDeferredMs`: 4ms
|
||||||
- `requestRealSendAfter1000Triggers`: 2
|
- `requestRealSendAfter1000Triggers`: 2
|
||||||
|
|
||||||
### 新模拟器真实账户验证
|
### 真实账户验证
|
||||||
|
|
||||||
- 设备:Mate X7,`127.0.0.1:5557`,HarmonyOS 6.1.1(24);通过 `devecocli ui` 完成控件树检查和交互。
|
- 通过 `devecocli ui` 完成控件树检查和交互。
|
||||||
- 真实账户登录成功,交易首页权益、可用资金和行情盘口加载完成。
|
- 真实账户登录成功,交易首页权益、可用资金和行情盘口加载完成。
|
||||||
- 进入当日委托/挂单页面,连续 10 轮切换挂单、委托、成交并触发刷新;页面保持响应,无 `APPFREEZE`,无应用 crash。
|
- 进入当日委托/挂单页面,连续 10 轮切换挂单、委托、成交并触发刷新;页面保持响应,无 `APPFREEZE`,无应用 crash。
|
||||||
- 该轮未执行下单、撤单或改价,避免产生真实资金业务副作用。
|
- 该轮未执行下单、撤单或改价,避免产生真实资金业务副作用。
|
||||||
|
|||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
# 影响面与 Git Commit 追溯
|
||||||
|
|
||||||
|
## 1. 说明
|
||||||
|
|
||||||
|
本文整理当前需求影响面对应的功能改动文档、代码仓库和 Git commit。`harmony-ths-futures-apm-oom/` 是本证据仓库中的文档目录,其应用代码改动统一归属 `harmony-ths-futures`。
|
||||||
|
|
||||||
|
本文仅覆盖应用层、ArkTS SDK 和画线 SDK 的业务影响,明确排除:
|
||||||
|
|
||||||
|
- `ohos_mobile_lib_communication` 的 Worker、解压、曲线解析、队列索引及跨 Frame 缓冲等内部修改;
|
||||||
|
- `futures_trade_sdk` 原生 `lib-weituosdk` 的 C++ 锁优化提交。
|
||||||
|
|
||||||
|
同一功能涉及上游 SDK 实现和应用 HAR 接入时,分别列入对应代码库。
|
||||||
|
|
||||||
|
## 2. `harmony-ths-futures`
|
||||||
|
|
||||||
|
| 类型 | 影响面 | 功能改动文档 | Git Commit |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Freeze | XML 异步解析 | [02-xml-taskpool-refactor.md](harmony-ths-futures-freeze/doc/change-notes/02-xml-taskpool-refactor.md) | `e16813f86b8dbabcf6e6e4a18df72c80c69cc9db` |
|
||||||
|
| Freeze | 画线优化 HAR 接入 | [09-drawline-dedup-optimization.md](harmony-ths-futures-freeze/doc/change-notes/09-drawline-dedup-optimization.md) | `ce0719178530b5ca64272c6c1e90b5bcdb8297fc` |
|
||||||
|
| Freeze | 减少同步交易 SDK 查询、合并同账号重登 | [05-trade-sdk-native-lock-app-mitigation.md](harmony-ths-futures-freeze/doc/change-notes/05-trade-sdk-native-lock-app-mitigation.md) | `d04f7720c13b130bd9bdab69109d6a93c6edcfca` |
|
||||||
|
| Freeze | 交易页在线状态读缓存 | [08-trade-page-online-status-cache.md](harmony-ths-futures-freeze/doc/change-notes/08-trade-page-online-status-cache.md) | `8c3170778f50bf767c9146ea177e82080d629da2` |
|
||||||
|
| Freeze | 挂单请求合并、套利开关缓存 | [11-top10-followup-fixes.md](harmony-ths-futures-freeze/doc/change-notes/11-top10-followup-fixes.md) | `0d10cf71a01c8c5d875ca4c950d6d2fd71d3fd42` |
|
||||||
|
| Freeze | 成交推送优化 HAR 接入 | [07-trade-sdk-match-push-optimization.md](harmony-ths-futures-freeze/doc/change-notes/07-trade-sdk-match-push-optimization.md) | `ce0719178530b5ca64272c6c1e90b5bcdb8297fc` |
|
||||||
|
| OOM | 行情订阅与请求缓冲清理 | [10-table-request-client-subscription-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/10-table-request-client-subscription-cleanup.md) | `5f6e007c7f431521350a68543c4db5314a8c644f`<br>`2ca4759c4e0212b4c80c41b94a0ae1339569e89c` |
|
||||||
|
| OOM | 行情实时通知合并 | [11-table-request-client-notification-coalescing.md](harmony-ths-futures-apm-oom/doc/change-notes/11-table-request-client-notification-coalescing.md) | `909ab7e83795ca418138da81dc8273c29046ce55` |
|
||||||
|
| OOM | WebView 总览请求释放 | [13-webview-overview-request-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/13-webview-overview-request-cleanup.md) | `da5599387d82f06256e9224eb8c8001410de1a6b` |
|
||||||
|
|
||||||
|
## 3. `harmony_futures_trade_sdk`
|
||||||
|
|
||||||
|
| 类型 | 影响面 | 功能改动文档 | Git Commit |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Freeze | 成交推送去重与稳定排序 | [07-trade-sdk-match-push-optimization.md](harmony-ths-futures-freeze/doc/change-notes/07-trade-sdk-match-push-optimization.md) | `9e56923cfaadb14fff0fa928cabe4e5aef615490`<br>`31256eff45b51a96551a2ba8f2b31bb02e4258af` |
|
||||||
|
| OOM | 交易市价缓存清理 | [12-trade-sdk-market-price-cache-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/12-trade-sdk-market-price-cache-cleanup.md) | `fbfb85d704510fcbe94d1c58f732e0add4a76292` |
|
||||||
|
|
||||||
|
## 4. `hmdrawlinebasicsdk`
|
||||||
|
|
||||||
|
| 类型 | 影响面 | 功能改动文档 | Git Commit |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| Freeze | 画线候选集去重 | [09-drawline-dedup-optimization.md](harmony-ths-futures-freeze/doc/change-notes/09-drawline-dedup-optimization.md) | `c3f8e6bc2ca44af9afa9bf0163d88d2508d55a0a` |
|
||||||
|
|
||||||
|
## 5. 不纳入本表的提交
|
||||||
|
|
||||||
|
| 排除项 | 仓库 | Git Commit | 原因 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| 通信 SDK Worker、曲线解析及队列索引 | `ohos_mobile_lib_communication` | `031d4cf221b4da6d9aaf2db443ba293559a0d4a5` | 属于 communication SDK 内部实现 |
|
||||||
|
| 通信 SDK 跨 Frame 缓冲清理 | `ohos_mobile_lib_communication` | `4784e4698a3d335471f275fd7c8dd9c113323b78` | 属于 communication SDK 内部实现 |
|
||||||
|
| 原生交易锁优化 | `futures_trade_sdk` / `lib-weituosdk` | `1ba241ef8d9aae16dde1b0c4e406d6cd41cca216` | 属于交易 SDK C++ 代码 |
|
||||||
@@ -15,8 +15,6 @@
|
|||||||
| 交易 SDK | `harmony_futures_trade_sdk` `futures_trade_sdk`(原生 `lib-weituosdk`) | Native 锁规避、成交推送、市价缓存 |
|
| 交易 SDK | `harmony_futures_trade_sdk` `futures_trade_sdk`(原生 `lib-weituosdk`) | Native 锁规避、成交推送、市价缓存 |
|
||||||
| 画线 SDK | `hmdrawlinebasicsdk` | 绘制候选集去重 |
|
| 画线 SDK | `hmdrawlinebasicsdk` | 绘制候选集去重 |
|
||||||
|
|
||||||
本仓库仅保存变更说明,不能直接构建或产出 HAP/HAR。
|
|
||||||
|
|
||||||
## 3. 功能需求
|
## 3. 功能需求
|
||||||
|
|
||||||
### FR-01 通信与解析异步化
|
### FR-01 通信与解析异步化
|
||||||
@@ -44,37 +42,45 @@
|
|||||||
2. WebView 总览页销毁时,必须停止三个行情请求并清空 client 与 JS bridge 的双向引用。
|
2. WebView 总览页销毁时,必须停止三个行情请求并清空 client 与 JS bridge 的双向引用。
|
||||||
|
|
||||||
## 4. 影响面
|
## 4. 影响面
|
||||||
|
本章仅描述应用层、ArkTS SDK 和画线 SDK 的业务影响,不包含 `ohos_mobile_lib_communication` 的 Worker、解压、曲线解析、队列索引及跨 Frame 缓冲等内部修改,也不包含 `futures_trade_sdk` 原生 `lib-weituosdk` 的 C++ 锁优化。
|
||||||
|
|
||||||
| 需求域 | 用户/业务入口 | 受影响组件 | 保持不变 | 重点回归 |
|
同一功能涉及上游 SDK 实现和应用 HAR 接入时,分别列入对应代码库。
|
||||||
|
|
||||||
|
### 4.1 `harmony-ths-futures`
|
||||||
|
|
||||||
|
| 类型 | 业务入口 | 应用层改动 | 保持不变 | 重点回归 |
|
||||||
| --- | --- | --- | --- | --- |
|
| --- | --- | --- | --- | --- |
|
||||||
| 通信与解析 | 登录、验证码、行情包与 K 线加载 | XML Parser、通信 Worker、`QueueManagement` | 协议、回调结果、消息顺序 | 损坏 XML、大包、周期连续切换、跨 Frame 请求 |
|
| Freeze | 登录、验证码、手机号查询 | XML 解码与属性解析改为异步执行,主线程只处理结果 | 请求协议、回调接口、Cookie 与手机号存储规则 | Upass 登录、验证码成功/失败、手机号回填、用户切换、损坏 XML |
|
||||||
| 行情与画线 | 行情列表刷新、合约详情、K 线绘制 | `TableRequestClient`、画线 SDK | 行情数据、线条样式、命中与层级 | 高频推送、分组切换、滚动、跨周期线合并 |
|
| Freeze | K 线详情与画线 | 接入画线去重优化 HAR,并通过 overrides 统一依赖版本 | 画线数据、样式、顺序、命中及编辑规则 | HAR 依赖唯一性、多画线滑动、周期切换、跨周期画线 |
|
||||||
| 交易 | 前后台、账号切换、挂单/委托/成交页 | `TradePage`、`TradeApiManager`、交易 SDK | 下单/撤单、账户过滤、成交汇总与排序规则 | 断网重登、重复刷新、重复推送、真实账户切换 |
|
| Freeze | 交易页前后台、断网重登、挂单刷新 | 在线状态改读应用缓存;同账号重登复用进行中任务;挂单请求合并并保留一次尾随刷新;套利开关按账号缓存 | 下单/撤单流程、查询结果、重登回调及条件单补查时机 | 前后台切换、断网恢复、账号切换、挂单/委托刷新、灰度配置更新 |
|
||||||
| 页面生命周期 | WebView 行情总览页退出 | `OverViewEvent`、请求 client、JS bridge | 总览请求参数、前后台恢复行为 | 反复进入/退出总览页、页面销毁后回调 |
|
| Freeze | 成交查询与成交推送 | 接入成交推送去重与排序优化 HAR | 成交查询入口、账号过滤、成交量及盈亏展示 | HAR 接入、重复推送、账号切换及成交汇总 |
|
||||||
|
| OOM | 行情列表分组切换与实时刷新 | `TableRequestClient` 在切换或释放时清理订阅、请求缓冲和待通知数据;同一事件循环只保留最新通知 | 行情请求参数、解析结果与最终展示数据 | 高频推送、连续切换分组、离开行情页、Local Heap 稳态 |
|
||||||
|
| OOM | WebView 行情总览页退出 | 页面销毁时停止三个行情请求,并断开 request client 与 JS bridge 引用 | 请求参数、回调数据及前后台恢复行为 | 反复进入/退出、真实页面销毁、销毁后回调、堆快照与 OOM 日志 |
|
||||||
|
|
||||||
## 5. 非功能要求与边界
|
### 4.2 `harmony_futures_trade_sdk`
|
||||||
|
|
||||||
- 所有异步任务仅传递基础类型、`Uint8Array` 或其他可序列化数据;单个 Worker 消息受 16 MB 限制,接近上限时需分块设计。
|
| 类型 | 业务入口 | ArkTS SDK 改动 | 保持不变 | 重点回归 |
|
||||||
- 不修改网络协议、公开接口、交易下单/撤单规则、行情数据模型或画线样式。
|
| --- | --- | --- | --- | --- |
|
||||||
- 不将 SDK 对象迁移至 Worker;Native 锁的根治依赖交易 SDK 缩小锁粒度,应用侧仅减少进入锁域的次数。
|
| Freeze | 成交查询与成交推送 | 按成交标识去重;首次加载完成排序,后续成交使用稳定二分插入 | 成交量、盈亏汇总、账号过滤与既有排序规则 | 重复推送、乱序推送、夜盘边界、账号切换及成交汇总 |
|
||||||
- 临时 HAR 路径、压测代码、计数日志和 API SDK 替换不得进入正式提交。
|
| OOM | 交易市价缓存 | 对相同“合约 + 价格类型”更新既有节点,消费后正确删除 | 报价来源、缓存键与取价结果 | 重复更新、读取最新价格、删除后为空、长时间交易页运行 |
|
||||||
|
|
||||||
## 6. 验收标准
|
### 4.3 `hmdrawlinebasicsdk`
|
||||||
|
|
||||||
1. 在上游项目执行 `devecocli build --modules <module>@default` 或对应 HAP 构建成功,且 `devecocli check lint` 无新增问题。
|
| 类型 | 业务入口 | 画线 SDK 改动 | 保持不变 | 重点回归 |
|
||||||
2. 覆盖登录/断网重登、前后台、账号切换、挂单/委托/成交刷新、行情分组切换、K 线周期切换及 WebView 总览销毁;无 JS Crash、CppCrash、OOM 或 `APPFREEZE`。
|
| --- | --- | --- | --- | --- |
|
||||||
3. 成交去重、稳定排序、缓存删除和请求解绑须具备单元或白盒压力测试;测试后不存在旧订阅、旧缓冲、待通知数据或缓存节点残留。
|
| Freeze | K 线详情与画线 | 画线候选集使用线性去重,避免画线较多时主线程反复遍历 | 画线样式、顺序、命中、编辑、删除及云端合并规则 | 多画线滑动、周期切换、跨周期画线及重复描边 |
|
||||||
4. 新包须在真机或模拟器重新采集冻屏采样。`QueueManagement`、`isArbitrageEnabled` 与 `TradeGuaDanListView.onForeground` 不应继续作为可归因的 TOP 耗时热点;分层采样不得重复相加作为性能收益。
|
|
||||||
|
|
||||||
## 7. 交付与追溯
|
|
||||||
|
|
||||||
每个交付项需提供:所属仓库/分支/commit、HAR 或 HAP 版本与校验值、修改文件清单、构建日志、测试设备与场景、前后指标、未覆盖项及回滚包。详细历史证据见 `harmony-ths-futures-freeze/doc/change-notes/` 和 `harmony-ths-futures-apm-oom/doc/change-notes/`。
|
## 7. 附Change-notes 追溯
|
||||||
|
|
||||||
## 8. Change-notes 追溯
|
|
||||||
|
|
||||||
| 需求域 | 改动仓库 | 原始功能改动记录(括号内为改动仓库) |
|
| 需求域 | 改动仓库 | 原始功能改动记录(括号内为改动仓库) |
|
||||||
| ------ | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ------ | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| 通信与解析 | `harmony-ths-futures`<br>`ohos_mobile_lib_communication` | <ul><li>[02-xml-taskpool-refactor.md](harmony-ths-futures-freeze/doc/change-notes/02-xml-taskpool-refactor.md)(`harmony-ths-futures`)</li><li>[03-communication-taskpool-decompression.md](harmony-ths-futures-freeze/doc/change-notes/03-communication-taskpool-decompression.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li><li>[04-curve-parsing-taskpool.md](harmony-ths-futures-freeze/doc/change-notes/04-curve-parsing-taskpool.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li><li>[14-communication-request-buffer-frame-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/14-communication-request-buffer-frame-cleanup.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li></ul> |
|
| 通信与解析 | `harmony-ths-futures`<br>`ohos_mobile_lib_communication` | <ul><li>[02-xml-taskpool-refactor.md](harmony-ths-futures-freeze/doc/change-notes/02-xml-taskpool-refactor.md)(`harmony-ths-futures`)</li><li>[03-communication-taskpool-decompression.md](harmony-ths-futures-freeze/doc/change-notes/03-communication-taskpool-decompression.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li><li>[04-curve-parsing-taskpool.md](harmony-ths-futures-freeze/doc/change-notes/04-curve-parsing-taskpool.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li><li>[14-communication-request-buffer-frame-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/14-communication-request-buffer-frame-cleanup.md)(`ohos_mobile_lib_communication`、`harmony-ths-futures`)</li></ul> |
|
||||||
| 行情与画线 | `harmony-ths-futures`<br>`hmdrawlinebasicsdk` | <ul><li>[09-drawline-dedup-optimization.md](harmony-ths-futures-freeze/doc/change-notes/09-drawline-dedup-optimization.md)(`hmdrawlinebasicsdk`、`harmony-ths-futures`)</li><li>[10-table-request-client-subscription-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/10-table-request-client-subscription-cleanup.md)(`harmony-ths-futures`)</li><li>[11-table-request-client-notification-coalescing.md](harmony-ths-futures-apm-oom/doc/change-notes/11-table-request-client-notification-coalescing.md)(`harmony-ths-futures`)</li></ul> |
|
| 行情与画线 | `harmony-ths-futures`<br>`hmdrawlinebasicsdk` | <ul><li>[09-drawline-dedup-optimization.md](harmony-ths-futures-freeze/doc/change-notes/09-drawline-dedup-optimization.md)(`hmdrawlinebasicsdk`、`harmony-ths-futures`)</li><li>[10-table-request-client-subscription-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/10-table-request-client-subscription-cleanup.md)(`harmony-ths-futures`)</li><li>[11-table-request-client-notification-coalescing.md](harmony-ths-futures-apm-oom/doc/change-notes/11-table-request-client-notification-coalescing.md)(`harmony-ths-futures`)</li></ul> |
|
||||||
| 交易 | `harmony-ths-futures`<br>`futures_trade_sdk`(原生 `lib-weituosdk`)<br>`harmony_futures_trade_sdk` | <ul><li>[05-trade-sdk-native-lock-app-mitigation.md](harmony-ths-futures-freeze/doc/change-notes/05-trade-sdk-native-lock-app-mitigation.md)(`harmony-ths-futures`、`futures_trade_sdk` 的原生 `lib-weituosdk`)</li><li>[07-trade-sdk-match-push-optimization.md](harmony-ths-futures-freeze/doc/change-notes/07-trade-sdk-match-push-optimization.md)(`harmony-ths-futures`、`harmony_futures_trade_sdk`)</li><li>[08-trade-page-online-status-cache.md](harmony-ths-futures-freeze/doc/change-notes/08-trade-page-online-status-cache.md)(`harmony-ths-futures`)</li><li>[11-top10-followup-fixes.md](harmony-ths-futures-freeze/doc/change-notes/11-top10-followup-fixes.md)(`harmony-ths-futures`)</li><li>[12-trade-sdk-market-price-cache-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/12-trade-sdk-market-price-cache-cleanup.md)(`harmony_futures_trade_sdk`)</li></ul> |
|
| 交易 | `harmony-ths-futures`<br>`futures_trade_sdk`(原生 `lib-weituosdk`)<br>`harmony_futures_trade_sdk` | <ul><li>[05-trade-sdk-native-lock-app-mitigation.md](harmony-ths-futures-freeze/doc/change-notes/05-trade-sdk-native-lock-app-mitigation.md)(`harmony-ths-futures`、`futures_trade_sdk` 的原生 `lib-weituosdk`)</li><li>[07-trade-sdk-match-push-optimization.md](harmony-ths-futures-freeze/doc/change-notes/07-trade-sdk-match-push-optimization.md)(`harmony-ths-futures`、`harmony_futures_trade_sdk`)</li><li>[08-trade-page-online-status-cache.md](harmony-ths-futures-freeze/doc/change-notes/08-trade-page-online-status-cache.md)(`harmony-ths-futures`)</li><li>[12-trade-sdk-market-price-cache-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/12-trade-sdk-market-price-cache-cleanup.md)(`harmony_futures_trade_sdk`)</li></ul> |
|
||||||
| 页面生命周期 | `harmony-ths-futures` | <ul><li>[13-webview-overview-request-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/13-webview-overview-request-cleanup.md)(`harmony-ths-futures`)</li></ul> |
|
| 页面生命周期 | `harmony-ths-futures` | <ul><li>[13-webview-overview-request-cleanup.md](harmony-ths-futures-apm-oom/doc/change-notes/13-webview-overview-request-cleanup.md)(`harmony-ths-futures`)</li></ul> |
|
||||||
|
|
||||||
|
|
||||||
|
1. app_freeze ohos_mobile_lib_communication wuwei 沟通
|
||||||
|
2. harmony_futures_trade_sdk cpp代码 锁 处理 看下三端是否都存在
|
||||||
|
3. 改动前后内存的线上真实收益。app_freeze改动前后
|
||||||
|
|||||||
Reference in New Issue
Block a user