Commit 7ff3d311 authored by dsq's avatar dsq

用于临时测试-不合入master2

parent 188e4831
......@@ -2,11 +2,14 @@ package com.dong.demo013
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.withFrameMillis
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
......@@ -15,6 +18,8 @@ import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
private fun perfPlatformTag(): String {
val n = "11111"
......@@ -29,6 +34,25 @@ private fun perfPlatformTag(): String {
internal fun Compose1500Text() {
val scrollState = rememberScrollState()
val platformTag = perfPlatformTag()
val listState = rememberLazyListState()
// ✅ 记录滚动开始和结束
var isScrolling by remember { mutableStateOf(false) }
var scrollStartTime by remember { mutableStateOf(0L) }
// 监听滚动状态变化
LaunchedEffect(scrollState.isScrollInProgress) {
if (scrollState.isScrollInProgress && !isScrolling) {
// 滚动开始
isScrolling = true
os_signal_set("滚动(开始)","1500_scroll",true)
}
else if (!scrollState.isScrollInProgress && isScrolling) {
// 滚动结束
isScrolling = false
os_signal_set("滚动(结束)","1500_scroll",false)
}
}
LaunchedEffect(Unit) {
// 至少等到一帧真正调度后再记「首帧」,避免与点击同一时刻的伪首帧
......@@ -36,18 +60,18 @@ internal fun Compose1500Text() {
//等一帧-开始渲染
os_signal_set("响应时间-上帧(结束)","respose_time",false)
// 等布局给出可滚动高度后再滚到底,再等一帧记「完成」- 确保可交互
// 等布局给出可滚动高度后再滚到底,再等一帧记「完成」
while (scrollState.maxValue == 0) {
withFrameMillis { }
}
withFrameMillis { }
os_signal_set("结束时间-加载完成+可交互(结束)","finish_time",false)
//这里发送开始滚动
os_signal_set("滚动(开始)","1500_scroll",true)
scrollState.scrollTo(scrollState.maxValue)
withFrameMillis { }
os_signal_set("滚动(结束)","1500_scroll",false)
//os_signal_set("滚动(开始)","1500_scroll",true)
// scrollState.scrollTo(scrollState.maxValue)
// withFrameMillis { }
// os_signal_set("滚动(结束)","1500_scroll",false)
}
Column(
......
......@@ -76,8 +76,7 @@ internal fun HomeScreen(
) {
Button(
onClick = {
os_signal_set("响应时延-从点击(开始)","respose_time",true)
os_signal_set("完成时延-从点击(开始)","finish_time",true)
val debugDataDemo = ComponentDemo(
id = "to_1500",
title = "进入1500Text测试页面",
......@@ -392,6 +391,8 @@ internal fun DemoScreen(
}
"to_1500" -> {
os_signal_set("响应时延-从点击(开始)","respose_time",true)
os_signal_set("完成时延-从点击(开始)","finish_time",true)
Compose1500Text()
}
......
......@@ -245,7 +245,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.3;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
......@@ -302,7 +302,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.3;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
......@@ -327,7 +327,7 @@
"$(PROJECT_DIR)/Frameworks",
);
INFOPLIST_FILE = iosApp/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.3;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
......@@ -360,7 +360,7 @@
"$(PROJECT_DIR)/Frameworks",
);
INFOPLIST_FILE = iosApp/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 15.3;
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
......
......@@ -2,14 +2,73 @@ import ComposeApp
import SwiftUI
import os
private let bundleSubsystem = Bundle.main.bundleIdentifier ?? "com.dong.demo013"
/// Use `OSSignposter` + interval state (Apple’s supported path). Raw `os_signpost` often does not
/// show up under the Points of Interest / os_signposts instruments unless wired this way.
private let signalSignposter = OSSignposter(
subsystem: bundleSubsystem,
category: .pointsOfInterest
)
private let signalLogger = Logger(
subsystem: bundleSubsystem,
category: "set_os_signal"
)
private enum SignalSignpostName {
static let interval: StaticString = "signal"
}
/// 多段区间可时间交叉:`respose_time` 与 `finish_time` 各自一条栈,互不影响。
/// 同一 `signalId` 多次 begin 再 end:按 **后进先出** 配对(嵌套重叠);若同一 id **交叉**
/// 非嵌套(begin A / begin B / end A / end B),需在 Kotlin 侧增加 token 再扩展 key。
private final class SignalIntervalBridge: @unchecked Sendable {
private var openStacks: [String: [OSSignpostIntervalState]] = [:]
private let lock = NSLock()
func begin(signalId: String, text: String) {
let sid = signalSignposter.makeSignpostID()
let state = signalSignposter.beginInterval(
SignalSignpostName.interval,
id: sid,
"\(text, privacy: .public)"
)
lock.lock()
var stack = openStacks[signalId] ?? []
stack.append(state)
openStacks[signalId] = stack
lock.unlock()
}
func end(signalId: String, text: String) {
lock.lock()
var stack = openStacks[signalId] ?? []
let state = stack.popLast()
if stack.isEmpty {
openStacks[signalId] = nil
} else {
openStacks[signalId] = stack
}
lock.unlock()
if let state {
signalSignposter.endInterval(
SignalSignpostName.interval,
state,
"\(text, privacy: .public)"
)
}
}
}
private let signalIntervalBridge = SignalIntervalBridge()
@main
struct iOSApp: App {
var body: some Scene {
let test1:String="111";
WindowGroup {
ContentView().onAppear(){
ContentView().onAppear() {
NotificationCenter.default.addObserver(
forName: NSNotification.Name("set_os_signal"),
object: nil,
......@@ -17,29 +76,25 @@ struct iOSApp: App {
) { note in
if let dic = note.object as? NSDictionary {
let text = dic.object(forKey: "text") as! String
print("set_os_signal: \(text)")
// let staticText = StaticString(stringLiteral: text as String)
print("set_os_signal-text: \(text)")
let isBeginNumber = dic.object(forKey: "isBegin") as! NSNumber
print("set_os_signal: \(isBeginNumber.boolValue)")
print("set_os_signal-isbegin: \(isBeginNumber.boolValue)")
let signalId = dic.object(forKey: "id") as! NSString
let signpostID = OSSignpostID(log: .default, object: signalId)
print("set_os_signal: \(signalId)")
let signalIdStr = signalId as String
print("set_os_signal-id: \(signalId)")
if isBeginNumber.boolValue == true {
os_signpost(.begin, log: .default, name: "开始", signpostID: signpostID)
signalLogger.notice("set_os_signal text=\(text, privacy: .public) id=\(signalIdStr, privacy: .public) isBegin=\(isBeginNumber.boolValue, privacy: .public)")
if isBeginNumber.boolValue {
signalIntervalBridge.begin(signalId: signalIdStr, text: text)
} else {
// ✅ 结束事件
os_signpost(.end, log: .default, name: "结束", signpostID: signpostID)
signalIntervalBridge.end(signalId: signalIdStr, text: text)
}
}
}
}
.ignoresSafeArea()
.background(Color.clear) // 确保整个背景透明
.background(Color.clear)
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment