react-native-inapp-inspector 2.3.24 → 2.3.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/components/AnalyticsDetail.js +8 -8
- package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
- package/dist/commonjs/components/AppHeaderLogo.js +1 -1
- package/dist/commonjs/components/BrandSquareIcon.js +12 -12
- package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
- package/dist/commonjs/components/ConsoleLogCard.js +92 -80
- package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
- package/dist/commonjs/components/EndOfListFooter.js +27 -5
- package/dist/commonjs/components/Inspector/AnalyticsTab.js +30 -298
- package/dist/commonjs/components/Inspector/ConsoleTab.js +38 -93
- package/dist/commonjs/components/Inspector/CrashDetail.js +12 -12
- package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
- package/dist/commonjs/components/Inspector/DebuggingTab.js +9 -9
- package/dist/commonjs/components/Inspector/DeviceInfoTab.js +54 -52
- package/dist/commonjs/components/Inspector/InspectorHeader.js +1 -1
- package/dist/commonjs/components/Inspector/MainScreen.js +23 -25
- package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
- package/dist/commonjs/components/Inspector/NetworkTab.js +31 -31
- package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
- package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
- package/dist/commonjs/components/Inspector/ReduxTab.js +110 -97
- package/dist/commonjs/components/Inspector/SettingsPanel.js +48 -100
- package/dist/commonjs/components/Inspector/StorageTab.js +56 -52
- package/dist/commonjs/components/Inspector/TabBar.js +29 -26
- package/dist/commonjs/components/JsonViewer.js +169 -164
- package/dist/commonjs/components/LogCard.js +34 -38
- package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
- package/dist/commonjs/components/SegmentedTabs.d.ts +4 -1
- package/dist/commonjs/components/SegmentedTabs.js +8 -8
- package/dist/commonjs/constants/index.js +1 -1
- package/dist/commonjs/constants/version.d.ts +1 -1
- package/dist/commonjs/constants/version.js +1 -1
- package/dist/commonjs/customHooks/networkLogger.js +1 -2
- package/dist/commonjs/helpers/index.d.ts +6 -0
- package/dist/commonjs/helpers/index.js +4 -4
- package/dist/commonjs/helpers/memoryManager.d.ts +0 -1
- package/dist/commonjs/helpers/memoryManager.js +1 -1
- package/dist/commonjs/helpers/remoteConfig.js +1 -1
- package/dist/commonjs/helpers/settingsStore.js +1 -1
- package/dist/commonjs/i18n/index.d.ts +35 -0
- package/dist/commonjs/i18n/index.js +1 -1
- package/dist/commonjs/i18n/locales/ar.json +1 -0
- package/dist/commonjs/i18n/locales/de.json +1 -0
- package/dist/commonjs/i18n/locales/en.json +1 -1
- package/dist/commonjs/i18n/locales/es.json +1 -0
- package/dist/commonjs/i18n/locales/fr.json +1 -0
- package/dist/commonjs/i18n/locales/hi.json +1 -0
- package/dist/commonjs/i18n/locales/ja.json +1 -0
- package/dist/commonjs/i18n/locales/ko.json +1 -0
- package/dist/commonjs/i18n/locales/pt.json +1 -0
- package/dist/commonjs/i18n/locales/ru.json +1 -0
- package/dist/commonjs/i18n/locales/zh.json +1 -0
- package/dist/commonjs/index.d.ts +2 -4
- package/dist/commonjs/index.js +2 -2
- package/dist/commonjs/styles/AppColors.d.ts +40 -0
- package/dist/commonjs/styles/AppColors.js +1 -1
- package/dist/commonjs/styles/index.js +1 -1
- package/dist/commonjs/types/enums.d.ts +0 -20
- package/dist/commonjs/types/enums.js +1 -1
- package/dist/esm/components/AnalyticsDetail.js +75 -75
- package/dist/esm/components/AnalyticsEventCard.js +20 -17
- package/dist/esm/components/AppHeaderLogo.js +5 -5
- package/dist/esm/components/BrandSquareIcon.js +39 -39
- package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
- package/dist/esm/components/ConsoleLogCard.js +98 -86
- package/dist/esm/components/EndOfListFooter.d.ts +5 -1
- package/dist/esm/components/EndOfListFooter.js +36 -14
- package/dist/esm/components/Inspector/AnalyticsTab.js +47 -315
- package/dist/esm/components/Inspector/ConsoleTab.js +61 -116
- package/dist/esm/components/Inspector/CrashDetail.js +49 -49
- package/dist/esm/components/Inspector/CrashTab.js +75 -65
- package/dist/esm/components/Inspector/DebuggingTab.js +31 -31
- package/dist/esm/components/Inspector/DeviceInfoTab.js +146 -144
- package/dist/esm/components/Inspector/InspectorHeader.js +5 -5
- package/dist/esm/components/Inspector/MainScreen.js +51 -53
- package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
- package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
- package/dist/esm/components/Inspector/NetworkTab.js +63 -63
- package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
- package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
- package/dist/esm/components/Inspector/ReduxTab.js +163 -150
- package/dist/esm/components/Inspector/SettingsPanel.js +136 -188
- package/dist/esm/components/Inspector/StorageTab.js +88 -84
- package/dist/esm/components/Inspector/TabBar.js +37 -34
- package/dist/esm/components/JsonViewer.js +173 -168
- package/dist/esm/components/LogCard.js +38 -42
- package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
- package/dist/esm/components/SegmentedTabs.d.ts +4 -1
- package/dist/esm/components/SegmentedTabs.js +8 -8
- package/dist/esm/constants/index.js +1 -1
- package/dist/esm/constants/version.d.ts +1 -1
- package/dist/esm/constants/version.js +1 -1
- package/dist/esm/customHooks/networkLogger.js +1 -2
- package/dist/esm/helpers/index.d.ts +6 -0
- package/dist/esm/helpers/index.js +4 -4
- package/dist/esm/helpers/memoryManager.d.ts +0 -1
- package/dist/esm/helpers/memoryManager.js +1 -1
- package/dist/esm/helpers/remoteConfig.js +1 -1
- package/dist/esm/helpers/settingsStore.js +1 -1
- package/dist/esm/i18n/index.d.ts +35 -0
- package/dist/esm/i18n/index.js +1 -1
- package/dist/esm/i18n/locales/ar.json +1 -0
- package/dist/esm/i18n/locales/de.json +1 -0
- package/dist/esm/i18n/locales/en.json +1 -1
- package/dist/esm/i18n/locales/es.json +1 -0
- package/dist/esm/i18n/locales/fr.json +1 -0
- package/dist/esm/i18n/locales/hi.json +1 -0
- package/dist/esm/i18n/locales/ja.json +1 -0
- package/dist/esm/i18n/locales/ko.json +1 -0
- package/dist/esm/i18n/locales/pt.json +1 -0
- package/dist/esm/i18n/locales/ru.json +1 -0
- package/dist/esm/i18n/locales/zh.json +1 -0
- package/dist/esm/index.d.ts +2 -4
- package/dist/esm/index.js +5 -5
- package/dist/esm/styles/AppColors.d.ts +40 -0
- package/dist/esm/styles/AppColors.js +1 -1
- package/dist/esm/styles/index.js +1 -1
- package/dist/esm/types/enums.d.ts +0 -20
- package/dist/esm/types/enums.js +1 -1
- package/package.json +1 -15
- package/dist/commonjs/bundle.d.ts +0 -2
- package/dist/commonjs/bundle.js +0 -1
- package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
- package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
- package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
- package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
- package/dist/commonjs/customHooks/performanceTracker.js +0 -63
- package/dist/commonjs/performance.d.ts +0 -2
- package/dist/commonjs/performance.js +0 -1
- package/dist/esm/bundle.d.ts +0 -2
- package/dist/esm/bundle.js +0 -1
- package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
- package/dist/esm/components/Inspector/BundleTab.js +0 -1297
- package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
- package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
- package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
- package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
- package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
- package/dist/esm/customHooks/performanceTracker.js +0 -63
- package/dist/esm/performance.d.ts +0 -2
- package/dist/esm/performance.js +0 -1
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
export interface PerformanceEvent {
|
|
3
|
-
id: string;
|
|
4
|
-
timestamp: number;
|
|
5
|
-
type: 'fps_drop' | 'slow_render' | 'transition' | 'memory' | 'network' | 'bridge' | 'touch';
|
|
6
|
-
category: 'render' | 'navigation' | 'memory' | 'io' | 'bridge';
|
|
7
|
-
fps: number;
|
|
8
|
-
durationMs: number;
|
|
9
|
-
droppedFrames?: number;
|
|
10
|
-
frameTimeMs?: number;
|
|
11
|
-
frameBudgetPct?: number;
|
|
12
|
-
bottleneckThread?: 'JS Thread' | 'UI Thread' | 'Bridge' | 'Balanced';
|
|
13
|
-
screenName?: string;
|
|
14
|
-
label: string;
|
|
15
|
-
detail: string;
|
|
16
|
-
source?: string;
|
|
17
|
-
breakdown?: {
|
|
18
|
-
jsTimeMs: number;
|
|
19
|
-
uiTimeMs: number;
|
|
20
|
-
bridgeLatencyMs?: number;
|
|
21
|
-
};
|
|
22
|
-
heapDeltaKb?: number;
|
|
23
|
-
advice?: string;
|
|
24
|
-
severity: 'optimal' | 'warning' | 'critical';
|
|
25
|
-
}
|
|
26
|
-
declare const PerformanceTab: React.MemoExoticComponent<() => React.JSX.Element>;
|
|
27
|
-
export default PerformanceTab;
|
|
@@ -1,454 +0,0 @@
|
|
|
1
|
-
import rr,{useState as I,useEffect as Q,useMemo as J,useRef as ke}from"react";import{ScrollView as Se,StyleSheet as tr,Text as C,TextInput as Tr,TouchableOpacity as Cr,View as T}from"react-native";import Sr,{Path as Be,Defs as Br,LinearGradient as Fr,Stop as Fe,Line as Me,Circle as Ve,G as Mr}from"react-native-svg";import K from"../TouchableScale";import Vr from"../CopyButton";import Re from"../HighlightText";import Rr from"../EndOfListFooter";import Ir from"./FeatureUnderDevNotice";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as k}from"../../styles/AppFonts";import{useTranslation as vr}from"../../i18n";import{getRuntimeDiagnostics as Dr}from"../../helpers";import{SearchIcon as Wr,CircleXIcon as Lr,CircleAlertIcon as Ar,PerformanceIcon as Ie,BoltIcon as Te,LightbulbIcon as Hr,MapIcon as Nr,AtomIcon as Pr,BrainIcon as Er,GlobeIcon as $r,ChevronIcon as Gr}from"../NetworkIcons";import{getPerformanceEvents as Or,subscribePerformanceEvents as Jr,logPerformanceEvent as Kr,clearPerformanceEvents as Ur}from"../../customHooks/performanceTracker";import{startNativeFpsMonitoring as Yr,stopNativeFpsMonitoring as qr,getNativeFpsMetrics as Xr,getNativeSystemMetrics as _r,isNativeModuleAvailable as ve}from"../../native/NativeInspector";import{trackInspectorScreenRecord as Zr}from"../../helpers/telemetry";const Qr=rr.memo(()=>{const{t:w}=vr(),[j,De]=I(!0),[ee,We]=I(60),[we,Le]=I(57),[et,Ae]=I(60),[v,He]=I(59),[Ce,Ne]=I(4820),[Pe,Ee]=I(4),[q,je]=I(1.2),[$e,Ge]=I({"perf-1":!0}),Oe=t=>{Ge(S=>({...S,[t]:!S[t]}))},[$,Je]=I([60,59,60,60,58,60,59,60,60,60,57,60,59,60,60,58,60,60,59,60]),[re,Ke]=I(()=>Or()),[P,Ue]=I("ALL"),[W,te]=I("");Q(()=>Jr(S=>{Ke(S)}),[]);const oe=ke(Date.now()),X=ke(null),[L,Ye]=I(null);Q(()=>{let t=!0;const S=async()=>{const F=await _r();t&&F&&Ye(F)};S();const B=setInterval(S,2e3);return()=>{t=!1,clearInterval(B)}},[]),Q(()=>{if(ve())return Yr(),()=>{qr()}},[]),Q(()=>{if(!j)return;let t=!0,S=0,B=0,F=Date.now();const R=async()=>{if(!t)return;const z=Date.now(),E=z-oe.current;oe.current=z;const D=Math.max(0,E-16.67);if(D>B&&(B=D),S++,z-F>=1e3){const O=z-F;let V=Math.min(120,Math.max(0,Math.round(S*1e3/O)));if(ve())try{const M=await Xr();M&&M.fps>0&&(V=Math.round(M.fps))}catch{}if(We(V),Le(M=>Math.min(M,V)),Ae(M=>Math.max(M,V)),Ne(M=>M+S),je(Number(B.toFixed(1))),V<55&&Ee(M=>M+1),Je(M=>{const Y=[...M.slice(-19),V],Ze=Y.reduce((Qe,er)=>Qe+er,0);return He(Math.round(Ze/Y.length)),Y}),V<50){const M=(1e3/V).toFixed(1);Kr({type:"fps_drop",category:"render",fps:V,durationMs:Number(M),label:w("performance.liveFpsDip",{fps:V}),detail:w("performance.liveFpsDipDetail",{duration:M}),source:w("performance.uiRenderThread"),breakdown:{jsTimeMs:Number((1e3/V*.65).toFixed(1)),uiTimeMs:Number((1e3/V*.35).toFixed(1))},advice:w("performance.liveFpsDipAdvice"),severity:V<30?"critical":"warning"})}S=0,B=0,F=z}X.current=requestAnimationFrame(R)};return oe.current=Date.now(),X.current=requestAnimationFrame(R),()=>{t=!1,X.current&&cancelAnimationFrame(X.current)}},[j]);const _=J(()=>re.filter(t=>{let S=!0;if(W&&W.trim().length>0){const F=W.trim().toLowerCase().split(/\s+/).filter(Boolean),R=[t.label||"",t.detail||"",t.source||"",t.category||"",t.severity||"",t.bottleneckThread||""].join(" ").toLowerCase();S=F.every(z=>R.includes(z))}const B=P==="ALL"?!0:P==="JANKY"?t.severity==="warning"||t.severity==="critical":P==="NAVIGATION"?t.category==="navigation":P==="RENDER"?t.category==="render":P==="MEMORY"?t.category==="memory":t.category==="io"||t.category==="bridge";return S&&B}),[re,W,P]),ae=J(()=>v>=58?{score:"98/100",grade:w("performance.excellent"),color:e.emerald600,bg:e.greenBg}:v>=50?{score:"84/100",grade:w("performance.good"),color:e.firebaseOrange,bg:e.amberBg}:{score:"58/100",grade:w("performance.needsOptimization"),color:e.errorColor,bg:e.errorCardBg},[v,w]),G=J(()=>{const t=Dr(),S={hermes:w("performance.hermesAot"),v8:w("performance.v8Jit"),jsc:w("performance.jscEngine")},B={hermes:w("performance.bytecodeCompiled"),v8:w("performance.jitEngine"),jsc:w("performance.webkitEngine")},F={fabric:w("performance.fabricJsi"),paper:w("performance.paperBridge")},R={fabric:w("performance.directCppBindings"),paper:w("performance.asyncJsonBridge")};return{jsEngineName:S[t.engineType],jsEngineSub:B[t.engineType],uiArchName:F[t.archType],uiArchSub:R[t.archType],usedHeapMb:t.usedHeapMb,totalAllocMb:t.totalAllocMb}},[w]),A=J(()=>{const t=v>0?1e3/v:16.67,S=Number(Math.max(1,Math.min(t*.45,2+q)).toFixed(1)),B=Number(Math.max(1,t*.2).toFixed(1)),F=Number(Math.max(1,t*.25).toFixed(1)),R=S+B+F,z=Math.max(0,Number((16.67-R).toFixed(1))),E=Math.max(0,Math.min(100,Math.round(z/16.67*100)));return{jsTime:S,layoutTime:B,renderTime:F,freeTime:z,headroomPercent:E}},[v,q]),[U,qe]=I(null),Z=320,H=64,N=J(()=>{const t=$.length>0?$:[60,60],S=Z/Math.max(1,t.length-1),B=t.map((D,O)=>{const V=Math.max(0,Math.min(60,D)),M=Number((O*S).toFixed(1)),Y=Number((H-V/60*(H-14)-6).toFixed(1));return{x:M,y:Y,val:D}});let F=`M ${B[0].x} ${B[0].y}`;for(let D=0;D<B.length-1;D++){const O=B[D],V=B[D+1],M=Number(((O.x+V.x)/2).toFixed(1));F+=` C ${M} ${O.y}, ${M} ${V.y}, ${V.x} ${V.y}`}const R=B[B.length-1],z=B[0],E=`${F} L ${R.x} ${H} L ${z.x} ${H} Z`;return{linePath:F,areaPath:E,coords:B}},[$]),Xe=J(()=>{let t=0,S=0,B=0,F=0;$.forEach(z=>{z>=55?t++:z>=30?S++:z>=20?B++:F++});const R=Math.max(1,$.length);return[{key:"optimal",label:w("performance.optimalBucket"),count:t,percent:Number((t/R*100).toFixed(0)),color:e.emerald500,bgColor:e.emerald100},{key:"minorJank",label:w("performance.minorJankBucket"),count:S,percent:Number((S/R*100).toFixed(0)),color:e.amber500,bgColor:e.amber100},{key:"noticeableJank",label:w("performance.noticeableJankBucket"),count:B,percent:Number((B/R*100).toFixed(0)),color:e.firebaseOrange,bgColor:e.lightOrange},{key:"severeFreeze",label:w("performance.severeFreezeBucket"),count:F,percent:Number((F/R*100).toFixed(0)),color:e.errorColor,bgColor:e.errorCardBg}]},[$,w]),_e=()=>{Ur()},ie=U!==null&&N.coords[U]?N.coords[U]:null;return<T style={r.container}>
|
|
2
|
-
|
|
3
|
-
<T style={r.headerBar}>
|
|
4
|
-
<T style={r.searchBox}>
|
|
5
|
-
<Wr color={e.grayTextWeak}size={15}/>
|
|
6
|
-
<Tr placeholder={w("performance.searchPlaceholder")}placeholderTextColor={e.grayTextWeak}value={W}onChangeText={te}style={r.searchInput}autoCapitalize="none"autoCorrect={!1}/>
|
|
7
|
-
{W?<K onPress={()=>te("")}>
|
|
8
|
-
<Lr color={e.grayTextWeak}size={16}/>
|
|
9
|
-
</K>:null}
|
|
10
|
-
</T>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<K onPress={()=>{De(t=>{const S=!t;return Zr(S?"start":"stop","performance_fps"),S})}}style={[r.recordToggleBtn,j?r.recordToggleActive:r.recordToggleInactive]}>
|
|
14
|
-
<T style={[r.recordingDot,{backgroundColor:j?e.errorColor:e.grayTextWeak}]}/>
|
|
15
|
-
<C style={[r.recordToggleText,{color:j?e.errorColor:e.grayTextWeak}]}>
|
|
16
|
-
{w(j?"performance.recording":"performance.paused")}
|
|
17
|
-
</C>
|
|
18
|
-
</K>
|
|
19
|
-
</T>
|
|
20
|
-
|
|
21
|
-
<Ir featureName="Performance & FPS Profiler"/>
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
<T style={r.categoryScrollWrapper}>
|
|
25
|
-
<Se horizontal showsHorizontalScrollIndicator={!1}style={r.categoryScrollView}contentContainerStyle={r.categoryScroll}>
|
|
26
|
-
{[{key:"ALL",label:w("performance.catAll"),icon:t=><Ie size={12}color={t}/>},{key:"JANKY",label:w("performance.catJanky"),icon:t=><Ar size={12}color={t}/>},{key:"NAVIGATION",label:w("performance.catNavigation"),icon:t=><Nr size={12}color={t}/>},{key:"RENDER",label:w("performance.catRender"),icon:t=><Pr size={12}color={t}/>},{key:"MEMORY",label:w("performance.catMemory"),icon:t=><Er size={12}color={t}/>},{key:"IO",label:w("performance.catIo"),icon:t=><$r size={12}color={t}/>}].map(t=>{const S=P===t.key,B=S?e.white:e.grayTextWeak;return<K key={t.key}onPress={()=>Ue(t.key)}style={[r.categoryChip,S&&r.categoryChipActive,{flexDirection:"row",alignItems:"center",gap:5}]}>
|
|
27
|
-
{t.icon(B)}
|
|
28
|
-
<C style={[r.categoryChipText,S&&r.categoryChipTextActive]}>
|
|
29
|
-
{t.label}
|
|
30
|
-
</C>
|
|
31
|
-
</K>})}
|
|
32
|
-
</Se>
|
|
33
|
-
</T>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
<Se style={r.scrollBody}contentContainerStyle={r.scrollContent}showsVerticalScrollIndicator={!1}>
|
|
37
|
-
|
|
38
|
-
<T style={r.heroCard}>
|
|
39
|
-
<T style={r.heroHeaderRow}>
|
|
40
|
-
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
41
|
-
<Ie color={e.purple}size={17}/>
|
|
42
|
-
<T>
|
|
43
|
-
<C style={r.heroTitle}>
|
|
44
|
-
{w("performance.fpsAreaChartTitle")}
|
|
45
|
-
</C>
|
|
46
|
-
<C style={r.heroSubTitle}>
|
|
47
|
-
{w("performance.fpsAreaChartSub")}
|
|
48
|
-
</C>
|
|
49
|
-
</T>
|
|
50
|
-
</T>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
<T style={[r.scorePill,{backgroundColor:ae.bg}]}>
|
|
54
|
-
<C style={[r.scorePillText,{color:ae.color}]}>
|
|
55
|
-
{ae.grade}
|
|
56
|
-
</C>
|
|
57
|
-
</T>
|
|
58
|
-
</T>
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<T style={r.primaryFpsRow}>
|
|
62
|
-
<T style={r.fpsBigNumberBox}>
|
|
63
|
-
<C style={[r.fpsBigNumber,{color:ee>=55?e.emerald600:ee>=40?e.firebaseOrange:e.errorColor}]}>
|
|
64
|
-
{ee}
|
|
65
|
-
</C>
|
|
66
|
-
<C style={r.fpsUnit}>{w("performance.fpsUnit")}</C>
|
|
67
|
-
</T>
|
|
68
|
-
|
|
69
|
-
<T style={r.fpsStatsGrid}>
|
|
70
|
-
<T style={r.statItem}>
|
|
71
|
-
<C style={r.statLabel}>
|
|
72
|
-
{w("performance.avgFrameTime")}
|
|
73
|
-
</C>
|
|
74
|
-
<C style={r.statValue}>{v}</C>
|
|
75
|
-
</T>
|
|
76
|
-
<T style={r.statItem}>
|
|
77
|
-
<C style={r.statLabel}>
|
|
78
|
-
{w("performance.peakTime")}
|
|
79
|
-
</C>
|
|
80
|
-
<C style={[r.statValue,we<50&&{color:e.firebaseOrange}]}>
|
|
81
|
-
{we}
|
|
82
|
-
</C>
|
|
83
|
-
</T>
|
|
84
|
-
<T style={r.statItem}>
|
|
85
|
-
<C style={r.statLabel}>
|
|
86
|
-
{w("performance.jsLag")}
|
|
87
|
-
</C>
|
|
88
|
-
<C style={[r.statValue,q>5&&{color:e.firebaseOrange}]}>
|
|
89
|
-
{q}ms
|
|
90
|
-
</C>
|
|
91
|
-
</T>
|
|
92
|
-
<T style={r.statItem}>
|
|
93
|
-
<C style={r.statLabel}>
|
|
94
|
-
{w("performance.jankRate")}
|
|
95
|
-
</C>
|
|
96
|
-
<C style={r.statValue}>
|
|
97
|
-
{Ce>0?`${(Pe/Math.max(1,Ce/60)*100).toFixed(0)}%`:"0%"}
|
|
98
|
-
</C>
|
|
99
|
-
</T>
|
|
100
|
-
</T>
|
|
101
|
-
</T>
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
{ie&&<T style={r.graphScrubTooltip}>
|
|
105
|
-
<C style={r.graphScrubTooltipText}>
|
|
106
|
-
{ie.val} FPS •{" "}
|
|
107
|
-
{Number((1e3/Math.max(1,ie.val)).toFixed(1))}
|
|
108
|
-
ms
|
|
109
|
-
</C>
|
|
110
|
-
</T>}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
<T style={r.svgGraphContainer}>
|
|
114
|
-
<Sr width="100%"height={H}viewBox={`0 0 ${Z} ${H}`}preserveAspectRatio="none">
|
|
115
|
-
<Br>
|
|
116
|
-
<Fr id="fpsAreaGradient"x1="0"y1="0"x2="0"y2="1">
|
|
117
|
-
<Fe offset="0%"stopColor={v>=55?e.emerald500:v>=40?e.amber500:e.errorColor}stopOpacity="0.32"/>
|
|
118
|
-
<Fe offset="100%"stopColor={v>=55?e.emerald500:v>=40?e.amber500:e.errorColor}stopOpacity="0.02"/>
|
|
119
|
-
</Fr>
|
|
120
|
-
</Br>
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
<Me x1="0"y1="7"x2={Z}y2="7"stroke={e.emerald500}strokeWidth="1"strokeDasharray="4,4"opacity="0.4"/>
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
<Me x1="0"y1={H/2}x2={Z}y2={H/2}stroke={e.amber500}strokeWidth="0.8"strokeDasharray="3,3"opacity="0.3"/>
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
{N.areaPath?<Be d={N.areaPath}fill="url(#fpsAreaGradient)"/>:null}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
{N.linePath?<Be d={N.linePath}fill="none"stroke={v>=55?e.emerald600:v>=40?e.amber600:e.errorColor}strokeWidth="2.2"/>:null}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
{N.coords.map((t,S)=>{const B=U===S,F=t.val<50;return<Mr key={S}>
|
|
136
|
-
{F&&<Ve cx={t.x}cy={t.y}r="4"fill={e.errorColor}opacity="0.25"/>}
|
|
137
|
-
<Ve cx={t.x}cy={t.y}r={B?4:F?2.5:1.8}fill={B?e.brandPurple:F?e.errorColor:e.emerald600}stroke={e.white}strokeWidth={B?1.5:.8}/>
|
|
138
|
-
</Mr>})}
|
|
139
|
-
</Sr>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
<T style={r.svgTouchOverlay}>
|
|
143
|
-
{N.coords.map((t,S)=><Cr key={S}style={r.svgTouchCol}activeOpacity={.7}onPress={()=>qe(U===S?null:S)}/>)}
|
|
144
|
-
</T>
|
|
145
|
-
</T>
|
|
146
|
-
|
|
147
|
-
<T style={r.sparklineFooter}>
|
|
148
|
-
<C style={r.sparklineFooterText}>
|
|
149
|
-
{w("performance.realtimeWindow")}
|
|
150
|
-
</C>
|
|
151
|
-
<C style={r.sparklineFooterTarget}>
|
|
152
|
-
{w("performance.target60Fps",{fps:v})}
|
|
153
|
-
</C>
|
|
154
|
-
</T>
|
|
155
|
-
</T>
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
<T style={r.budgetCard}>
|
|
159
|
-
<T style={r.budgetHeader}>
|
|
160
|
-
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
161
|
-
<Te color={e.brandPurple}size={15}/>
|
|
162
|
-
<T>
|
|
163
|
-
<C style={r.budgetTitle}>Native Hardware & System Health</C>
|
|
164
|
-
<C style={r.heroSubTitle}>Live kernel metrics, resident RAM, and thermal state</C>
|
|
165
|
-
</T>
|
|
166
|
-
</T>
|
|
167
|
-
{L&&<T style={{paddingHorizontal:7,paddingVertical:2.5,borderRadius:5,backgroundColor:L.thermalState==="nominal"?`${e.emerald600}18`:L.thermalState==="fair"?`${e.amber800Warm}18`:`${e.errorColor}18`}}>
|
|
168
|
-
<C style={{fontFamily:k.interBold,fontSize:9.5,color:L.thermalState==="nominal"?e.emerald600:L.thermalState==="fair"?e.amber800Warm:e.errorColor,textTransform:"uppercase"}}>
|
|
169
|
-
{L.thermalState} THERMAL
|
|
170
|
-
</C>
|
|
171
|
-
</T>}
|
|
172
|
-
</T>
|
|
173
|
-
|
|
174
|
-
<T style={{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:10}}>
|
|
175
|
-
<T style={{flex:1,minWidth:100,backgroundColor:e.grayBackground,padding:8,borderRadius:8,borderWidth:1,borderColor:e.dividerColor}}>
|
|
176
|
-
<C style={{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak}}>Resident RAM</C>
|
|
177
|
-
<C style={{fontFamily:k.interBold,fontSize:13,color:e.brandPurple,marginTop:2}}>
|
|
178
|
-
{L?`${L.residentRamMb.toFixed(1)} MB`:"18.4 MB"}
|
|
179
|
-
</C>
|
|
180
|
-
</T>
|
|
181
|
-
<T style={{flex:1,minWidth:100,backgroundColor:e.grayBackground,padding:8,borderRadius:8,borderWidth:1,borderColor:e.dividerColor}}>
|
|
182
|
-
<C style={{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak}}>Total Physical RAM</C>
|
|
183
|
-
<C style={{fontFamily:k.interBold,fontSize:13,color:e.primaryBlack,marginTop:2}}>
|
|
184
|
-
{L?`${Math.round(L.totalPhysicalRamMb)} MB`:"3840 MB"}
|
|
185
|
-
</C>
|
|
186
|
-
</T>
|
|
187
|
-
<T style={{flex:1,minWidth:100,backgroundColor:e.grayBackground,padding:8,borderRadius:8,borderWidth:1,borderColor:e.dividerColor}}>
|
|
188
|
-
<C style={{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak}}>Active CPU Cores</C>
|
|
189
|
-
<C style={{fontFamily:k.interBold,fontSize:13,color:e.skyBlue,marginTop:2}}>
|
|
190
|
-
{L?`${L.activeCpuCores} Cores`:"6 Cores"}
|
|
191
|
-
</C>
|
|
192
|
-
</T>
|
|
193
|
-
</T>
|
|
194
|
-
</T>
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
<T style={r.budgetCard}>
|
|
198
|
-
<T style={r.budgetHeader}>
|
|
199
|
-
<T>
|
|
200
|
-
<C style={r.budgetTitle}>
|
|
201
|
-
{w("performance.frameLatencyDistTitle")}
|
|
202
|
-
</C>
|
|
203
|
-
<C style={r.heroSubTitle}>
|
|
204
|
-
{w("performance.frameLatencyDistSub")}
|
|
205
|
-
</C>
|
|
206
|
-
</T>
|
|
207
|
-
</T>
|
|
208
|
-
|
|
209
|
-
<T style={r.histogramContainer}>
|
|
210
|
-
{Xe.map(t=><T key={t.key}style={r.histogramRow}>
|
|
211
|
-
<T style={r.histogramLabelCol}>
|
|
212
|
-
<T style={[r.legendDot,{backgroundColor:t.color}]}/>
|
|
213
|
-
<C style={r.histogramLabelText}>{t.label}</C>
|
|
214
|
-
</T>
|
|
215
|
-
|
|
216
|
-
<T style={r.histogramBarCol}>
|
|
217
|
-
<T style={r.histogramTrack}>
|
|
218
|
-
<T style={[r.histogramBarFill,{width:`${Math.max(t.percent>0?4:0,t.percent)}%`,backgroundColor:t.color}]}/>
|
|
219
|
-
</T>
|
|
220
|
-
</T>
|
|
221
|
-
|
|
222
|
-
<T style={r.histogramStatsCol}>
|
|
223
|
-
<C style={[r.histogramPercentText,{color:t.color}]}>
|
|
224
|
-
{t.percent}%
|
|
225
|
-
</C>
|
|
226
|
-
<C style={r.histogramCountText}>
|
|
227
|
-
({t.count})
|
|
228
|
-
</C>
|
|
229
|
-
</T>
|
|
230
|
-
</T>)}
|
|
231
|
-
</T>
|
|
232
|
-
</T>
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
<T style={r.budgetCard}>
|
|
236
|
-
<T style={r.budgetHeader}>
|
|
237
|
-
<C style={r.budgetTitle}>{w("performance.budgetUsage")}</C>
|
|
238
|
-
<C style={r.budgetHeadroom}>
|
|
239
|
-
{w("performance.budgetHeadroom",{time:A.freeTime,percent:A.headroomPercent})}
|
|
240
|
-
</C>
|
|
241
|
-
</T>
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
<T style={r.budgetBarContainer}>
|
|
245
|
-
<T style={[r.budgetBarSegment,{flex:Math.max(.5,A.jsTime),backgroundColor:e.sky400}]}/>
|
|
246
|
-
<T style={[r.budgetBarSegment,{flex:Math.max(.5,A.layoutTime),backgroundColor:e.indigo500}]}/>
|
|
247
|
-
<T style={[r.budgetBarSegment,{flex:Math.max(.5,A.renderTime),backgroundColor:e.pink400}]}/>
|
|
248
|
-
<T style={[r.budgetBarSegment,{flex:Math.max(.5,A.freeTime),backgroundColor:e.emerald400}]}/>
|
|
249
|
-
</T>
|
|
250
|
-
|
|
251
|
-
<T style={r.budgetLegendGrid}>
|
|
252
|
-
<T style={r.legendItem}>
|
|
253
|
-
<T style={[r.legendDot,{backgroundColor:e.sky400}]}/>
|
|
254
|
-
<C style={r.legendText}>
|
|
255
|
-
{w("performance.jsExec",{time:A.jsTime})}
|
|
256
|
-
</C>
|
|
257
|
-
</T>
|
|
258
|
-
<T style={r.legendItem}>
|
|
259
|
-
<T style={[r.legendDot,{backgroundColor:e.indigo500}]}/>
|
|
260
|
-
<C style={r.legendText}>
|
|
261
|
-
{w("performance.yogaLayoutTime",{time:A.layoutTime})}
|
|
262
|
-
</C>
|
|
263
|
-
</T>
|
|
264
|
-
<T style={r.legendItem}>
|
|
265
|
-
<T style={[r.legendDot,{backgroundColor:e.pink400}]}/>
|
|
266
|
-
<C style={r.legendText}>
|
|
267
|
-
{w("performance.uiRenderTime",{time:A.renderTime})}
|
|
268
|
-
</C>
|
|
269
|
-
</T>
|
|
270
|
-
<T style={r.legendItem}>
|
|
271
|
-
<T style={[r.legendDot,{backgroundColor:e.emerald400}]}/>
|
|
272
|
-
<C style={[r.legendText,{color:e.emerald600,fontFamily:k.interBold}]}>
|
|
273
|
-
{w("performance.freeTime",{time:A.freeTime})}
|
|
274
|
-
</C>
|
|
275
|
-
</T>
|
|
276
|
-
</T>
|
|
277
|
-
</T>
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
<T style={r.engineSummaryGrid}>
|
|
281
|
-
<T style={r.engineSummaryCard}>
|
|
282
|
-
<C style={r.engineSummaryLabel}>{w("performance.jsEngine")}</C>
|
|
283
|
-
<C style={r.engineSummaryValue}>{G.jsEngineName}</C>
|
|
284
|
-
<C style={r.engineSummarySub}>{G.jsEngineSub}</C>
|
|
285
|
-
</T>
|
|
286
|
-
<T style={r.engineSummaryCard}>
|
|
287
|
-
<C style={r.engineSummaryLabel}>{w("performance.uiRenderThread")}</C>
|
|
288
|
-
<C style={r.engineSummaryValue}>{G.uiArchName}</C>
|
|
289
|
-
<C style={r.engineSummarySub}>{G.uiArchSub}</C>
|
|
290
|
-
</T>
|
|
291
|
-
<T style={r.engineSummaryCard}>
|
|
292
|
-
<C style={r.engineSummaryLabel}>{w("performance.tabMemory")}</C>
|
|
293
|
-
<C style={r.engineSummaryValue}>{G.usedHeapMb} MB</C>
|
|
294
|
-
<C style={r.engineSummarySub}>
|
|
295
|
-
{w("performance.heapAllocatedSub",{allocated:G.totalAllocMb})}
|
|
296
|
-
</C>
|
|
297
|
-
</T>
|
|
298
|
-
</T>
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
<T style={r.logsHeaderRow}>
|
|
302
|
-
<C style={r.logsSectionHeading}>
|
|
303
|
-
{w("performance.recordedEvents")} ({_.length})
|
|
304
|
-
</C>
|
|
305
|
-
{re.length>0&&<K onPress={_e}>
|
|
306
|
-
<C style={r.clearLink}>{w("common.clear")}</C>
|
|
307
|
-
</K>}
|
|
308
|
-
</T>
|
|
309
|
-
|
|
310
|
-
{_.length===0?<T style={r.emptyCard}>
|
|
311
|
-
<Te color={e.amber500}size={30}/>
|
|
312
|
-
<C style={r.emptyTitle}>
|
|
313
|
-
{W.trim().length>0?"No Matching Events":w("performance.emptyTitle")}
|
|
314
|
-
</C>
|
|
315
|
-
<C style={r.emptySub}>
|
|
316
|
-
{W.trim().length>0?`No performance events match "${W}"`:w("performance.emptySubtitle")}
|
|
317
|
-
</C>
|
|
318
|
-
{W.trim().length>0&&<K onPress={()=>te("")}style={{marginTop:10,paddingHorizontal:14,paddingVertical:6,borderRadius:8,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.grayBorderSecondary}}>
|
|
319
|
-
<C style={{color:e.brandPurple,fontSize:12,fontFamily:k.interBold}}>
|
|
320
|
-
Clear Search
|
|
321
|
-
</C>
|
|
322
|
-
</K>}
|
|
323
|
-
</T>:_.map(t=>{const S=t.severity==="optimal",B=t.severity==="warning",F=t.severity==="critical",R=!!$e[t.id],z=S?e.greenBg:B?e.amberBg:e.errorCardBg,E=S?e.greenBorder:B?e.lightOrange:e.errorBorder,D=S?e.emerald600:B?e.amber700:e.errorColor;return<K key={t.id}onPress={()=>Oe(t.id)}style={[r.eventCard,F&&{borderColor:e.errorBorder,backgroundColor:e.errorCardBg}]}>
|
|
324
|
-
<T style={r.eventTopRow}>
|
|
325
|
-
<T style={r.fpsBadgeGroup}>
|
|
326
|
-
<T style={[r.fpsBadge,{backgroundColor:z,borderColor:E}]}>
|
|
327
|
-
<C style={[r.fpsBadgeText,{color:D}]}>
|
|
328
|
-
{t.fps} FPS
|
|
329
|
-
</C>
|
|
330
|
-
</T>
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
<T style={[r.droppedBadge,(t.droppedFrames??Math.max(0,60-t.fps))>0?r.droppedBadgeWarning:r.droppedBadgeOptimal]}>
|
|
334
|
-
<C style={[r.droppedBadgeText,(t.droppedFrames??Math.max(0,60-t.fps))>0?{color:e.red600}:{color:e.emerald600}]}>
|
|
335
|
-
{(t.droppedFrames??Math.max(0,60-t.fps))>0?w("performance.droppedFrames",{count:t.droppedFrames??Math.max(0,60-t.fps)}):w("performance.zeroDropped")}
|
|
336
|
-
</C>
|
|
337
|
-
</T>
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
{t.bottleneckThread&&<T style={[r.bottleneckTag,{flexDirection:"row",alignItems:"center",gap:3}]}>
|
|
341
|
-
{t.bottleneckThread==="JS Thread"&&<Te size={10}color={e.warningIconGold}/>}
|
|
342
|
-
<C style={r.bottleneckTagText}>
|
|
343
|
-
{t.bottleneckThread==="JS Thread"?w("performance.jsBound"):t.bottleneckThread==="UI Thread"?w("performance.uiBound"):w("performance.balanced")}
|
|
344
|
-
</C>
|
|
345
|
-
</T>}
|
|
346
|
-
</T>
|
|
347
|
-
|
|
348
|
-
<T style={{flexDirection:"row",alignItems:"center",gap:6}}>
|
|
349
|
-
<Vr value={()=>t}label={w("common.copyJson")}/>
|
|
350
|
-
<Gr isExpanded={R}size={14}color={e.grayTextWeak}/>
|
|
351
|
-
</T>
|
|
352
|
-
</T>
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
<T style={{marginTop:4}}>
|
|
356
|
-
<Re text={t.label}search={W}style={r.eventLabel}highlightStyle={r.searchHighlight}/>
|
|
357
|
-
<T style={r.eventMetaRow}>
|
|
358
|
-
<C style={r.eventMeta}>
|
|
359
|
-
{w("performance.msTotal",{duration:t.durationMs,time:new Date(t.timestamp).toLocaleTimeString()})}
|
|
360
|
-
</C>
|
|
361
|
-
<C style={r.eventMetaDot}>•</C>
|
|
362
|
-
<C style={[r.frameBudgetHint,t.durationMs>16.67?{color:e.amber800Warm}:{color:e.emerald600}]}>
|
|
363
|
-
{w("performance.frameBudgetMs",{time:t.durationMs,budget:Number((t.durationMs/16.67*100).toFixed(0))})}
|
|
364
|
-
</C>
|
|
365
|
-
</T>
|
|
366
|
-
</T>
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
<T style={r.frameBarTrack}>
|
|
370
|
-
<T style={[r.frameBarFill,{width:`${Math.min(100,Math.max(10,t.durationMs/33.33*100))}%`,backgroundColor:D}]}/>
|
|
371
|
-
</T>
|
|
372
|
-
|
|
373
|
-
<Re text={t.detail}search={W}style={r.eventDetail}highlightStyle={r.searchHighlight}/>
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
{R&&<T style={r.expandedDetailBox}>
|
|
377
|
-
|
|
378
|
-
{(t.screenName||t.source)&&<T style={r.sourceRow}>
|
|
379
|
-
<C style={r.sourceTag}>{w("performance.screenContext")}</C>
|
|
380
|
-
<C style={r.sourceText}numberOfLines={1}>
|
|
381
|
-
{t.screenName||t.source}
|
|
382
|
-
</C>
|
|
383
|
-
</T>}
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
<T style={r.fpsMetricsGrid}>
|
|
387
|
-
<T style={r.fpsMetricItem}>
|
|
388
|
-
<C style={r.fpsMetricLabel}>{w("performance.target60Fps",{fps:t.fps})}</C>
|
|
389
|
-
<C style={[r.fpsMetricVal,{color:D}]}>
|
|
390
|
-
{t.fps} FPS
|
|
391
|
-
</C>
|
|
392
|
-
</T>
|
|
393
|
-
<T style={r.fpsMetricItem}>
|
|
394
|
-
<C style={r.fpsMetricLabel}>{w("performance.frameDuration")}</C>
|
|
395
|
-
<C style={r.fpsMetricVal}>
|
|
396
|
-
{t.durationMs} ms
|
|
397
|
-
</C>
|
|
398
|
-
</T>
|
|
399
|
-
<T style={r.fpsMetricItem}>
|
|
400
|
-
<C style={r.fpsMetricLabel}>{w("performance.jankRate")}</C>
|
|
401
|
-
<C style={[r.fpsMetricVal,(t.droppedFrames??0)>0?{color:e.red600}:{color:e.emerald600}]}>
|
|
402
|
-
{t.droppedFrames??Math.max(0,60-t.fps)} frames
|
|
403
|
-
</C>
|
|
404
|
-
</T>
|
|
405
|
-
<T style={r.fpsMetricItem}>
|
|
406
|
-
<C style={r.fpsMetricLabel}>{w("performance.bottleneck")}</C>
|
|
407
|
-
<C style={r.fpsMetricVal}>
|
|
408
|
-
{t.bottleneckThread||w("performance.balanced")}
|
|
409
|
-
</C>
|
|
410
|
-
</T>
|
|
411
|
-
</T>
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
{t.breakdown&&<T style={r.breakdownGrid}>
|
|
415
|
-
<T style={r.breakdownCol}>
|
|
416
|
-
<C style={r.breakdownLabel}>{w("performance.jsThread")}</C>
|
|
417
|
-
<C style={r.breakdownVal}>
|
|
418
|
-
{t.breakdown.jsTimeMs} ms
|
|
419
|
-
</C>
|
|
420
|
-
</T>
|
|
421
|
-
<T style={r.breakdownCol}>
|
|
422
|
-
<C style={r.breakdownLabel}>{w("performance.uiThread")}</C>
|
|
423
|
-
<C style={r.breakdownVal}>
|
|
424
|
-
{t.breakdown.uiTimeMs} ms
|
|
425
|
-
</C>
|
|
426
|
-
</T>
|
|
427
|
-
{t.breakdown.bridgeLatencyMs!=null&&<T style={r.breakdownCol}>
|
|
428
|
-
<C style={r.breakdownLabel}>{w("performance.jsiLatency")}</C>
|
|
429
|
-
<C style={r.breakdownVal}>
|
|
430
|
-
{t.breakdown.bridgeLatencyMs} ms
|
|
431
|
-
</C>
|
|
432
|
-
</T>}
|
|
433
|
-
{t.heapDeltaKb!=null&&<T style={r.breakdownCol}>
|
|
434
|
-
<C style={r.breakdownLabel}>{w("performance.heapImpact")}</C>
|
|
435
|
-
<C style={[r.breakdownVal,{color:t.heapDeltaKb>0?e.amber700:e.emerald600}]}>
|
|
436
|
-
{t.heapDeltaKb>0?`+${t.heapDeltaKb}`:t.heapDeltaKb} KB
|
|
437
|
-
</C>
|
|
438
|
-
</T>}
|
|
439
|
-
</T>}
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
{t.advice&&<T style={r.adviceCard}>
|
|
443
|
-
<T style={{flexDirection:"row",alignItems:"center",gap:5}}>
|
|
444
|
-
<Hr color={e.purpleShade700}size={12}/>
|
|
445
|
-
<C style={r.adviceHeading}>{w("performance.optimizationTip")}</C>
|
|
446
|
-
</T>
|
|
447
|
-
<C style={r.adviceBodyText}>{t.advice}</C>
|
|
448
|
-
</T>}
|
|
449
|
-
</T>}
|
|
450
|
-
</K>})}
|
|
451
|
-
|
|
452
|
-
<Rr count={_.length}label={w("performance.recordedEvents")}/>
|
|
453
|
-
</Se>
|
|
454
|
-
</T>}),r=tr.create({container:{flex:1,backgroundColor:e.grayBackground},headerBar:{flexDirection:"row",alignItems:"center",paddingHorizontal:12,paddingVertical:8,backgroundColor:e.white,borderBottomWidth:1,borderBottomColor:e.dividerColor,gap:8},searchBox:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:8,paddingHorizontal:8,height:36,gap:6,borderWidth:1,borderColor:e.dividerColor},searchInput:{flex:1,fontFamily:k.interRegular,fontSize:12,color:e.primaryBlack,paddingVertical:0},recordToggleBtn:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:8,paddingVertical:6,borderRadius:7,borderWidth:1},recordToggleActive:{backgroundColor:`${e.errorColor}14`,borderColor:`${e.errorColor}30`},recordToggleInactive:{backgroundColor:e.graySurface,borderColor:e.dividerColor},recordingDot:{width:6,height:6,borderRadius:3},recordToggleText:{fontFamily:k.interBold,fontSize:11},categoryScrollWrapper:{backgroundColor:e.white,borderBottomWidth:1,borderBottomColor:e.dividerColor,height:42},categoryScrollView:{flexGrow:0,height:42},categoryScroll:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:12,height:42},categoryChip:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingHorizontal:12,height:28,borderRadius:14,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.dividerColor},categoryChipActive:{backgroundColor:e.brandPurple,borderColor:e.brandPurple},categoryChipText:{fontFamily:k.interMedium,fontSize:11,color:e.grayTextStrong},categoryChipTextActive:{fontFamily:k.interBold,color:e.white},scrollBody:{flex:1},scrollContent:{padding:12,gap:10},heroCard:{backgroundColor:e.white,borderRadius:12,padding:14,borderWidth:1,borderColor:e.dividerColor,shadowColor:e.black,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:1},heroHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginBottom:10},heroTitle:{fontFamily:k.interBold,fontSize:13,color:e.primaryBlack},heroSubTitle:{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak,marginTop:1},scorePill:{paddingHorizontal:8,paddingVertical:3,borderRadius:6},scorePillText:{fontFamily:k.interBold,fontSize:10.5},primaryFpsRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingVertical:6},fpsBigNumberBox:{flexDirection:"row",alignItems:"baseline",gap:4,minWidth:80},fpsBigNumber:{fontFamily:k.interBold,fontSize:42,lineHeight:48,letterSpacing:-1,minWidth:54},fpsUnit:{fontFamily:k.interBold,fontSize:14,color:e.grayTextWeak},fpsStatsGrid:{flexDirection:"row",alignItems:"center",gap:8},statItem:{alignItems:"center",minWidth:50},statLabel:{fontFamily:k.interRegular,fontSize:10,color:e.grayTextWeak},statValue:{fontFamily:k.interBold,fontSize:13,color:e.primaryBlack,marginTop:2,textAlign:"center"},graphScrubTooltip:{alignSelf:"center",backgroundColor:e.primaryBlack,paddingHorizontal:8,paddingVertical:3,borderRadius:6,marginBottom:4},graphScrubTooltipText:{fontFamily:k.interBold,fontSize:10,color:e.white},svgGraphContainer:{width:"100%",height:64,marginTop:6,position:"relative",overflow:"hidden",borderRadius:8},svgTouchOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,flexDirection:"row"},svgTouchCol:{flex:1,height:"100%"},histogramContainer:{gap:8,marginTop:4},histogramRow:{flexDirection:"row",alignItems:"center",gap:8},histogramLabelCol:{flexDirection:"row",alignItems:"center",gap:6,width:140},histogramLabelText:{fontFamily:k.interMedium,fontSize:10,color:e.grayTextStrong},histogramBarCol:{flex:1},histogramTrack:{height:8,backgroundColor:e.grayBackground,borderRadius:4,overflow:"hidden"},histogramBarFill:{height:"100%",borderRadius:4},histogramStatsCol:{flexDirection:"row",alignItems:"center",gap:4,minWidth:52,justifyContent:"flex-end"},histogramPercentText:{fontFamily:k.interBold,fontSize:10.5},histogramCountText:{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak},sparklineFooter:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginTop:6},sparklineFooterText:{fontFamily:k.interRegular,fontSize:10,color:e.grayTextWeak},sparklineFooterTarget:{fontFamily:k.interMedium,fontSize:10,color:e.emerald600},budgetCard:{backgroundColor:e.white,borderRadius:12,padding:12,borderWidth:1,borderColor:e.dividerColor,gap:8},budgetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},budgetTitle:{fontFamily:k.interBold,fontSize:12.5,color:e.primaryBlack},budgetHeadroom:{fontFamily:k.interBold,fontSize:11,color:e.emerald600},budgetBarContainer:{flexDirection:"row",height:8,borderRadius:4,overflow:"hidden",backgroundColor:e.grayBackground,gap:2},budgetBarSegment:{height:"100%",borderRadius:2},budgetLegendGrid:{flexDirection:"row",flexWrap:"wrap",gap:10,marginTop:2},legendItem:{flexDirection:"row",alignItems:"center",gap:4},legendDot:{width:6,height:6,borderRadius:3},legendText:{fontFamily:k.interRegular,fontSize:10,color:e.grayTextStrong},engineSummaryGrid:{flexDirection:"row",alignItems:"center",gap:8},engineSummaryCard:{flex:1,backgroundColor:e.white,borderRadius:10,padding:10,borderWidth:1,borderColor:e.dividerColor},engineSummaryLabel:{fontFamily:k.interMedium,fontSize:10,color:e.grayTextWeak},engineSummaryValue:{fontFamily:k.interBold,fontSize:11.5,color:e.primaryBlack,marginTop:2},engineSummarySub:{fontFamily:k.interRegular,fontSize:9.5,color:e.grayTextWeak,marginTop:1},logsHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginTop:4},logsSectionHeading:{fontFamily:k.interBold,fontSize:13,color:e.primaryBlack},clearLink:{fontFamily:k.interBold,fontSize:11.5,color:e.purple},eventCard:{backgroundColor:e.white,borderRadius:10,padding:10,borderWidth:1,borderColor:e.dividerColor,gap:6},eventTopRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},fpsBadgeGroup:{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"},fpsBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,borderWidth:1},fpsBadgeText:{fontFamily:k.interBold,fontSize:10},droppedBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,borderWidth:1},droppedBadgeWarning:{backgroundColor:e.red100,borderColor:e.errorBorder},droppedBadgeOptimal:{backgroundColor:e.green100,borderColor:e.greenBorder},droppedBadgeText:{fontFamily:k.interBold,fontSize:9.5},bottleneckTag:{backgroundColor:e.purpleShade50,paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1,borderColor:e.purpleTint2},bottleneckTagText:{fontFamily:k.interMedium,fontSize:9.5,color:e.purple},eventMetaRow:{flexDirection:"row",alignItems:"center",gap:6,marginTop:2,flexWrap:"wrap"},eventMetaDot:{fontSize:9,color:e.grayTextWeak},frameBudgetHint:{fontFamily:k.interMedium,fontSize:10},frameBarTrack:{height:4,borderRadius:2,backgroundColor:e.graySurface,overflow:"hidden",marginVertical:4},frameBarFill:{height:"100%",borderRadius:2},fpsMetricsGrid:{flexDirection:"row",alignItems:"center",backgroundColor:e.white,borderRadius:6,padding:6,borderWidth:1,borderColor:e.dividerColor,justifyContent:"space-between",gap:4},fpsMetricItem:{alignItems:"center",flex:1},fpsMetricLabel:{fontFamily:k.interRegular,fontSize:8.5,color:e.grayTextWeak,textAlign:"center"},fpsMetricVal:{fontFamily:k.interBold,fontSize:10.5,color:e.primaryBlack,marginTop:1,textAlign:"center"},eventLabel:{fontFamily:k.interBold,fontSize:12,color:e.primaryBlack},eventMeta:{fontFamily:k.interRegular,fontSize:10,color:e.grayTextWeak,marginTop:1},eventDetail:{fontFamily:k.interRegular,fontSize:11,color:e.grayTextStrong,lineHeight:15},expandChevron:{fontSize:10,color:e.grayTextWeak,marginLeft:2},expandedDetailBox:{backgroundColor:e.grayBackground,borderRadius:8,padding:8,marginTop:4,gap:6,borderWidth:1,borderColor:e.dividerColor},sourceRow:{flexDirection:"row",alignItems:"center",gap:6},sourceTag:{fontFamily:k.interBold,fontSize:8.5,color:e.purple,backgroundColor:`${e.purple}14`,paddingHorizontal:4,paddingVertical:1,borderRadius:3},sourceText:{fontFamily:k.interMedium,fontSize:10.5,color:e.grayTextStrong,flex:1},breakdownGrid:{flexDirection:"row",alignItems:"center",backgroundColor:e.white,borderRadius:6,padding:6,borderWidth:1,borderColor:e.dividerColor,justifyContent:"space-between"},breakdownCol:{alignItems:"center",flex:1},breakdownLabel:{fontFamily:k.interRegular,fontSize:9,color:e.grayTextWeak},breakdownVal:{fontFamily:k.interBold,fontSize:11,color:e.primaryBlack,marginTop:1},adviceCard:{backgroundColor:e.purpleTintBg,borderRadius:6,padding:6,borderWidth:1,borderColor:e.purpleBorder},adviceHeading:{fontFamily:k.interBold,fontSize:10,color:e.purpleShade700},adviceBodyText:{fontFamily:k.interRegular,fontSize:10.5,color:e.purple,lineHeight:14,marginTop:1},searchHighlight:{backgroundColor:e.yellowHighlight,color:e.amber800,fontFamily:k.interBold},emptyCard:{backgroundColor:e.white,borderRadius:12,padding:24,alignItems:"center",justifyContent:"center",gap:8,borderWidth:1,borderColor:e.dividerColor},emptyTitle:{fontFamily:k.interBold,fontSize:14,color:e.primaryBlack},emptySub:{fontFamily:k.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center",lineHeight:16}});export default Qr;
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
export type FileTypeCategory = 'image' | 'typescript' | 'javascript' | 'font' | 'json';
|
|
2
|
-
export interface HostBundleFileItem {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
path: string;
|
|
6
|
-
ext: string;
|
|
7
|
-
category: FileTypeCategory;
|
|
8
|
-
sizeKb: number;
|
|
9
|
-
meta: string;
|
|
10
|
-
color: string;
|
|
11
|
-
status?: 'optimal' | 'warning' | 'info';
|
|
12
|
-
advice?: string;
|
|
13
|
-
isConsumed?: boolean;
|
|
14
|
-
previewUri?: string;
|
|
15
|
-
}
|
|
16
|
-
export interface HostBundlePackageItem {
|
|
17
|
-
id: string;
|
|
18
|
-
name: string;
|
|
19
|
-
version: string;
|
|
20
|
-
latestVersion?: string;
|
|
21
|
-
sizeKb: number;
|
|
22
|
-
percentage: number;
|
|
23
|
-
type: 'direct' | 'peer' | 'transitive';
|
|
24
|
-
isDirectDefined?: boolean;
|
|
25
|
-
parentPackageName?: string;
|
|
26
|
-
subpackages?: HostBundlePackageItem[];
|
|
27
|
-
category: 'core' | 'navigation' | 'network' | 'ui' | 'utils';
|
|
28
|
-
color: string;
|
|
29
|
-
description: string;
|
|
30
|
-
npmUrl?: string;
|
|
31
|
-
isDeprecated?: boolean;
|
|
32
|
-
deprecationReason?: string;
|
|
33
|
-
lastActive?: string;
|
|
34
|
-
}
|
|
35
|
-
export interface HostBinaryComponentItem {
|
|
36
|
-
id: string;
|
|
37
|
-
name: string;
|
|
38
|
-
category: 'js' | 'native' | 'frameworks' | 'assets' | 'meta';
|
|
39
|
-
sizeMb: number;
|
|
40
|
-
pct: number;
|
|
41
|
-
color: string;
|
|
42
|
-
description: string;
|
|
43
|
-
advice: string;
|
|
44
|
-
}
|
|
45
|
-
export interface HostBundleAnalysisResult {
|
|
46
|
-
isLive: boolean;
|
|
47
|
-
scriptURL: string;
|
|
48
|
-
totalDevBytes: number;
|
|
49
|
-
totalDevMb: number;
|
|
50
|
-
totalDevKb: number;
|
|
51
|
-
isHermes: boolean;
|
|
52
|
-
moduleCount: number;
|
|
53
|
-
packageCount: number;
|
|
54
|
-
filesCount: number;
|
|
55
|
-
splitUp: {
|
|
56
|
-
appSource: {
|
|
57
|
-
kb: number;
|
|
58
|
-
mb: number;
|
|
59
|
-
pct: number;
|
|
60
|
-
};
|
|
61
|
-
nodeModules: {
|
|
62
|
-
kb: number;
|
|
63
|
-
mb: number;
|
|
64
|
-
pct: number;
|
|
65
|
-
};
|
|
66
|
-
assetsMedia: {
|
|
67
|
-
kb: number;
|
|
68
|
-
mb: number;
|
|
69
|
-
pct: number;
|
|
70
|
-
};
|
|
71
|
-
metroDevOverhead: {
|
|
72
|
-
kb: number;
|
|
73
|
-
mb: number;
|
|
74
|
-
pct: number;
|
|
75
|
-
};
|
|
76
|
-
};
|
|
77
|
-
files: HostBundleFileItem[];
|
|
78
|
-
packages: HostBundlePackageItem[];
|
|
79
|
-
production: {
|
|
80
|
-
ios: {
|
|
81
|
-
totalInstallMb: number;
|
|
82
|
-
totalDownloadMb: number;
|
|
83
|
-
compressionRatioPct: number;
|
|
84
|
-
components: HostBinaryComponentItem[];
|
|
85
|
-
};
|
|
86
|
-
androidAab: {
|
|
87
|
-
totalInstallMb: number;
|
|
88
|
-
totalDownloadMb: number;
|
|
89
|
-
compressionRatioPct: number;
|
|
90
|
-
components: HostBinaryComponentItem[];
|
|
91
|
-
};
|
|
92
|
-
androidApk: {
|
|
93
|
-
totalInstallMb: number;
|
|
94
|
-
totalDownloadMb: number;
|
|
95
|
-
compressionRatioPct: number;
|
|
96
|
-
components: HostBinaryComponentItem[];
|
|
97
|
-
};
|
|
98
|
-
android: {
|
|
99
|
-
totalInstallMb: number;
|
|
100
|
-
totalDownloadMb: number;
|
|
101
|
-
compressionRatioPct: number;
|
|
102
|
-
components: HostBinaryComponentItem[];
|
|
103
|
-
};
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
export declare const setBundleModuleEnabled: (enabled: boolean) => void;
|
|
107
|
-
export declare const getBundleModuleEnabled: () => boolean;
|
|
108
|
-
export declare const getHostScriptURL: () => string;
|
|
109
|
-
export declare const trackRuntimeModuleExecution: () => void;
|
|
110
|
-
export declare const trackRuntimeDefine: () => void;
|
|
111
|
-
export declare const parseBundleSource: (bundleText: string, totalBytes: number, scriptURL: string, isLive?: boolean) => HostBundleAnalysisResult;
|
|
112
|
-
export declare const getInitialBundleAnalysis: () => HostBundleAnalysisResult;
|
|
113
|
-
export declare const analyzeHostAppBundle: (forceRefresh?: boolean) => Promise<HostBundleAnalysisResult>;
|
|
114
|
-
export declare const clearCachedBundleAnalysis: () => void;
|
|
115
|
-
export declare const getCachedBundleAnalysis: () => HostBundleAnalysisResult | null;
|