diff --git a/lib/main.dart b/lib/main.dart index 2941477..378f6cf 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -126,6 +126,7 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { int _resumeRecoveryToken = 0; DateTime? _backgroundedAt; late ShellBranding _shellBranding; + final DateTime _shellStartedAt = DateTime.now(); _H5LineWebViewSlot get _currentSlot => _lineSlot; @@ -426,6 +427,22 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { debugPrint('[H5LineDebug] $message'); } + int get _elapsedSinceShellStartMs => + DateTime.now().difference(_shellStartedAt).inMilliseconds; + + void _logShellPerfBridge(Map decoded) { + final label = decoded['label']?.toString() ?? 'unknown'; + final status = decoded['status']?.toString() ?? 'info'; + final duration = decoded['durationMs']; + final detail = decoded['detail']; + final durationText = duration == null ? '' : ' ${duration}ms'; + final detailText = detail == null ? '' : ' detail=${jsonEncode(detail)}'; + debugPrint( + '[H5PerfBridge] +${_elapsedSinceShellStartMs}ms ' + '$label $status$durationText$detailText', + ); + } + bool _isCurrentLineGeneration(int generation) { return generation == _lineGeneration; } @@ -475,6 +492,8 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { _hideShellCover(generation); } else if (decoded is Map && decoded['type'] == 'keyboard-bridge-ready') { unawaited(_syncKeyboardState()); + } else if (decoded is Map && decoded['type'] == 'perf-log') { + _logShellPerfBridge(decoded); } else if (decoded is Map && decoded['type'] == 'openExternalUrl') { unawaited(_openExternalUrl(decoded['url']?.toString())); } @@ -514,6 +533,8 @@ class _H5ShellPageState extends State with WidgetsBindingObserver { unawaited(openAppSettings()); case 'keyboard-bridge-ready': unawaited(_syncKeyboardState()); + case 'perf-log': + _logShellPerfBridge(decoded); case 'openExternalUrl': unawaited(_openExternalUrl(decoded['url']?.toString())); }