@gracker/smartperfetto 1.0.20 → 1.0.22
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/agent/config/domainManifest.d.ts +5 -3
- package/dist/agent/config/domainManifest.d.ts.map +1 -1
- package/dist/agent/config/domainManifest.js +120 -5
- package/dist/agent/config/domainManifest.js.map +1 -1
- package/dist/agent/core/orchestratorTypes.d.ts +5 -0
- package/dist/agent/core/orchestratorTypes.d.ts.map +1 -1
- package/dist/agent/core/orchestratorTypes.js.map +1 -1
- package/dist/agent/scene/buildSmartChatReport.d.ts +13 -0
- package/dist/agent/scene/buildSmartChatReport.d.ts.map +1 -0
- package/dist/agent/scene/buildSmartChatReport.js +333 -0
- package/dist/agent/scene/buildSmartChatReport.js.map +1 -0
- package/dist/agent/scene/sceneAnalysisJobRunner.d.ts +8 -4
- package/dist/agent/scene/sceneAnalysisJobRunner.d.ts.map +1 -1
- package/dist/agent/scene/sceneAnalysisJobRunner.js +78 -3
- package/dist/agent/scene/sceneAnalysisJobRunner.js.map +1 -1
- package/dist/agent/scene/sceneIntervalBuilder.d.ts +14 -5
- package/dist/agent/scene/sceneIntervalBuilder.d.ts.map +1 -1
- package/dist/agent/scene/sceneIntervalBuilder.js +578 -1
- package/dist/agent/scene/sceneIntervalBuilder.js.map +1 -1
- package/dist/agent/scene/sceneStage1Verifier.d.ts +8 -0
- package/dist/agent/scene/sceneStage1Verifier.d.ts.map +1 -0
- package/dist/agent/scene/sceneStage1Verifier.js +245 -0
- package/dist/agent/scene/sceneStage1Verifier.js.map +1 -0
- package/dist/agent/scene/sceneStoryService.d.ts +20 -2
- package/dist/agent/scene/sceneStoryService.d.ts.map +1 -1
- package/dist/agent/scene/sceneStoryService.js +238 -25
- package/dist/agent/scene/sceneStoryService.js.map +1 -1
- package/dist/agent/scene/smartCancelBridge.d.ts +13 -0
- package/dist/agent/scene/smartCancelBridge.d.ts.map +1 -0
- package/dist/agent/scene/smartCancelBridge.js +44 -0
- package/dist/agent/scene/smartCancelBridge.js.map +1 -0
- package/dist/agent/scene/smartDeepDiveDispatch.d.ts +15 -0
- package/dist/agent/scene/smartDeepDiveDispatch.d.ts.map +1 -0
- package/dist/agent/scene/smartDeepDiveDispatch.js +170 -0
- package/dist/agent/scene/smartDeepDiveDispatch.js.map +1 -0
- package/dist/agent/scene/types.d.ts +97 -6
- package/dist/agent/scene/types.d.ts.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agentv3/claudeMcpServer.d.ts.map +1 -1
- package/dist/agentv3/claudeMcpServer.js +3 -2
- package/dist/agentv3/claudeMcpServer.js.map +1 -1
- package/dist/agentv3/claudeSystemPrompt.d.ts.map +1 -1
- package/dist/agentv3/claudeSystemPrompt.js +8 -0
- package/dist/agentv3/claudeSystemPrompt.js.map +1 -1
- package/dist/agentv3/queryComplexityClassifier.d.ts +1 -1
- package/dist/agentv3/queryComplexityClassifier.d.ts.map +1 -1
- package/dist/agentv3/queryComplexityClassifier.js +20 -7
- package/dist/agentv3/queryComplexityClassifier.js.map +1 -1
- package/dist/agentv3/strategyLoader.d.ts +3 -0
- package/dist/agentv3/strategyLoader.d.ts.map +1 -1
- package/dist/agentv3/strategyLoader.js +17 -4
- package/dist/agentv3/strategyLoader.js.map +1 -1
- package/dist/agentv3/types.d.ts +5 -1
- package/dist/agentv3/types.d.ts.map +1 -1
- package/dist/agentv3/types.js.map +1 -1
- package/dist/config/index.d.ts +12 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -1
- package/dist/routes/agent/finalizeAgentDrivenSession.d.ts +67 -0
- package/dist/routes/agent/finalizeAgentDrivenSession.d.ts.map +1 -0
- package/dist/routes/agent/finalizeAgentDrivenSession.js +103 -0
- package/dist/routes/agent/finalizeAgentDrivenSession.js.map +1 -0
- package/dist/routes/agent/normalizeAnalyzeOptions.d.ts +42 -0
- package/dist/routes/agent/normalizeAnalyzeOptions.d.ts.map +1 -0
- package/dist/routes/agent/normalizeAnalyzeOptions.js +185 -0
- package/dist/routes/agent/normalizeAnalyzeOptions.js.map +1 -0
- package/dist/routes/agentRoutes.d.ts.map +1 -1
- package/dist/routes/agentRoutes.js +285 -125
- package/dist/routes/agentRoutes.js.map +1 -1
- package/dist/scripts/verifyAgentSseScrolling.js +131 -8
- package/dist/scripts/verifyAgentSseScrolling.js.map +1 -1
- package/dist/services/sceneReport/sceneJobArtifactStore.d.ts +22 -0
- package/dist/services/sceneReport/sceneJobArtifactStore.d.ts.map +1 -0
- package/dist/services/sceneReport/sceneJobArtifactStore.js +65 -0
- package/dist/services/sceneReport/sceneJobArtifactStore.js.map +1 -0
- package/dist/services/sceneReport/sceneReportMemoryCache.d.ts +5 -3
- package/dist/services/sceneReport/sceneReportMemoryCache.d.ts.map +1 -1
- package/dist/services/sceneReport/sceneReportMemoryCache.js +15 -10
- package/dist/services/sceneReport/sceneReportMemoryCache.js.map +1 -1
- package/dist/services/sceneReport/sceneReportStore.d.ts +9 -4
- package/dist/services/sceneReport/sceneReportStore.d.ts.map +1 -1
- package/dist/services/sceneReport/sceneReportStore.js +27 -7
- package/dist/services/sceneReport/sceneReportStore.js.map +1 -1
- package/dist/services/traceProcessor/sqlSemaphore.d.ts +16 -0
- package/dist/services/traceProcessor/sqlSemaphore.d.ts.map +1 -0
- package/dist/services/traceProcessor/sqlSemaphore.js +63 -0
- package/dist/services/traceProcessor/sqlSemaphore.js.map +1 -0
- package/dist/types/dataContract.d.ts +1 -1
- package/dist/types/dataContract.d.ts.map +1 -1
- package/dist/types/dataContract.js +2 -0
- package/dist/types/dataContract.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +13 -5
- package/skills/composite/device_state_snapshot.skill.yaml +204 -0
- package/skills/composite/scene_reconstruction.skill.yaml +5 -1
- package/skills/composite/selection_range_cpu_sched_summary.skill.yaml +428 -0
- package/strategies/scene-reconstruction-verifier.template.md +18 -0
- package/strategies/scrolling.strategy.md +5 -1
- package/strategies/selection-area.template.md +24 -9
- package/strategies/smart.strategy.md +53 -0
- package/skills/atomic/device_state_snapshot.skill.yaml +0 -171
|
@@ -7,28 +7,40 @@
|
|
|
7
7
|
{{durationMs}} - Duration in ms, e.g. "19.30"
|
|
8
8
|
{{trackCount}} - Number of selected tracks (number or "未知")
|
|
9
9
|
{{trackSummary}} - Pre-formatted track list grouped by process (string, may be empty)
|
|
10
|
+
{{sourceLabel}} - Selection source label, e.g. Perfetto area/time-range selection or current visible timeline window
|
|
10
11
|
-->
|
|
11
12
|
## 用户选区上下文
|
|
12
13
|
|
|
13
|
-
|
|
14
|
+
用户当前问题带有一个明确的时间范围 scope(来源: {{sourceLabel}}):
|
|
14
15
|
- **起始时间:** {{startNs}} ns
|
|
15
16
|
- **结束时间:** {{endNs}} ns
|
|
16
17
|
- **持续时间:** {{durationMs}} ms
|
|
17
18
|
- **选中 Track 数:** {{trackCount}}{{trackSummary}}
|
|
18
19
|
|
|
19
20
|
**分析约束:**
|
|
20
|
-
-
|
|
21
|
+
- 选区/窗口只定义时间和可选 track scope;用户真正要看的指标由用户问题决定,不要用固定 pattern 代替意图判断
|
|
22
|
+
- SQL 查询必须限制在上述时间范围。对 `slice` / `thread_state` / `sched_slice` 这类带持续时间的表,优先使用 overlap clipping:`ts < {{endNs}} AND ts + dur > {{startNs}}`,并用 `MIN(ts + dur, {{endNs}}) - MAX(ts, {{startNs}})` 计算区间内贡献
|
|
21
23
|
- 上述时间戳是 trace_processor 原始时间戳(ns),可直接用于 slice/thread_state/sched 等所有表的 ts 列
|
|
22
24
|
- 分析结论应聚焦于用户选择的这段区间
|
|
23
25
|
- 如果需要全局上下文(如整体 VSync 周期)来做对比,可以额外查询,但核心分析范围是选区内
|
|
24
|
-
- 当用户提到"选中的区间"/"这一段"/"选择的范围"/"marked area"等,指的就是上述时间窗口
|
|
26
|
+
- 当用户提到"选中的区间"/"这一段"/"选择的范围"/"marked area"/"current window"等,指的就是上述时间窗口
|
|
27
|
+
- 如果前端请求附带了 `traceContext` datasets,优先复用其中已经预取的选区数据;缺少用户所问的指标时,再调用工具补齐
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
**快速路径建议:**
|
|
30
|
+
- 对 CPU 摆核、task/core placement、各核平均频率、频率分布、Running task/process 排名、Running 四象限这类选区问题,优先调用:
|
|
31
|
+
`invoke_skill(skillId="selection_range_cpu_sched_summary", params={start_ts: {{startNs}}, end_ts: {{endNs}}})`
|
|
32
|
+
- 如果用户限定某个进程或线程,把它作为 `package` 或 `thread_name` 参数传给该 Skill;没有限定时保持未过滤,让结果按数据排序
|
|
33
|
+
- 如果用户只问一个 Skill 未覆盖的小指标,可以直接 `execute_sql`,但仍必须使用上述时间范围和 overlap clipping
|
|
34
|
+
|
|
35
|
+
**选区内常用 SQL 查询模板(需要自定义 SQL 时使用):**
|
|
27
36
|
```sql
|
|
28
37
|
-- 1) 选区内某线程的调度状态分布(大小核、Running/Sleeping/Runnable)
|
|
29
|
-
SELECT cpu, state,
|
|
38
|
+
SELECT cpu, state,
|
|
39
|
+
SUM(MIN(ts + dur, {{endNs}}) - MAX(ts, {{startNs}}))/1e6 AS total_ms,
|
|
40
|
+
COUNT(*) AS count
|
|
30
41
|
FROM thread_state
|
|
31
|
-
WHERE utid = <UTID>
|
|
42
|
+
WHERE utid = <UTID>
|
|
43
|
+
AND ts < {{endNs}} AND ts + dur > {{startNs}}
|
|
32
44
|
GROUP BY cpu, state ORDER BY total_ms DESC;
|
|
33
45
|
|
|
34
46
|
-- 2) 选区内 CPU 频率变化(使用 counter + cpu_counter_track,不要用 cpu_frequency_counters)
|
|
@@ -38,9 +50,12 @@ WHERE ct.name = 'cpufreq' AND c.ts >= {{startNs}} AND c.ts <= {{endNs}}
|
|
|
38
50
|
ORDER BY ct.cpu, c.ts;
|
|
39
51
|
|
|
40
52
|
-- 3) 选区内某线程的 Slice 热点(通过 thread_track 关联)
|
|
41
|
-
SELECT s.name,
|
|
53
|
+
SELECT s.name,
|
|
54
|
+
(MIN(s.ts + s.dur, {{endNs}}) - MAX(s.ts, {{startNs}}))/1e6 AS dur_ms,
|
|
55
|
+
s.ts, s.depth
|
|
42
56
|
FROM slice s JOIN thread_track tt ON s.track_id = tt.id
|
|
43
|
-
WHERE tt.utid = <UTID>
|
|
57
|
+
WHERE tt.utid = <UTID>
|
|
58
|
+
AND s.ts < {{endNs}} AND s.ts + s.dur > {{startNs}}
|
|
44
59
|
ORDER BY s.dur DESC LIMIT 20;
|
|
45
60
|
```
|
|
46
|
-
> 注意: 不要猜测表名。如果不确定表是否存在,先用 `lookup_sql_schema` 工具查询。
|
|
61
|
+
> 注意: 不要猜测表名。如果不确定表是否存在,先用 `lookup_sql_schema` 工具查询。
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
3
|
+
Copyright (C) 2024-2026 Gracker (Chris)
|
|
4
|
+
This file is part of SmartPerfetto. See LICENSE for details.
|
|
5
|
+
-->
|
|
6
|
+
---
|
|
7
|
+
scene: smart
|
|
8
|
+
strategy_kind: contract_only
|
|
9
|
+
priority: 5
|
|
10
|
+
effort: high
|
|
11
|
+
keywords:
|
|
12
|
+
- smart
|
|
13
|
+
- 智能
|
|
14
|
+
- mixed trace
|
|
15
|
+
- 场景混合
|
|
16
|
+
required_capabilities: []
|
|
17
|
+
optional_capabilities: []
|
|
18
|
+
final_report_contract:
|
|
19
|
+
required_sections:
|
|
20
|
+
- id: scene_timeline
|
|
21
|
+
label: 场景时间线
|
|
22
|
+
description: 按时间顺序列出 trace 中检测到的关键用户操作和设备状态场景。
|
|
23
|
+
pattern_groups:
|
|
24
|
+
- ["场景时间线", "timeline", "时间线"]
|
|
25
|
+
- ["冷启动", "热启动", "滑动", "点击", "返回", "Home", "亮屏", "熄屏", "ANR"]
|
|
26
|
+
- id: per_scene_summary
|
|
27
|
+
label: 分场景摘要
|
|
28
|
+
description: 对每个被深度分析的场景给出关键指标、结论和证据引用。
|
|
29
|
+
pattern_groups:
|
|
30
|
+
- ["分场景", "逐场景", "per-scene"]
|
|
31
|
+
- ["证据", "指标", "耗时", "延迟", "帧"]
|
|
32
|
+
- id: cross_scene_narrative
|
|
33
|
+
label: 跨场景叙事
|
|
34
|
+
description: 总结多个场景之间的关联、共同瓶颈或前后影响。
|
|
35
|
+
pattern_groups:
|
|
36
|
+
- ["跨场景", "整体", "关联", "链路"]
|
|
37
|
+
- ["原因", "影响", "共同", "瓶颈"]
|
|
38
|
+
- id: bottleneck_ranking
|
|
39
|
+
label: 瓶颈排序
|
|
40
|
+
description: 按影响范围、严重度和可行动性给出优化优先级。
|
|
41
|
+
pattern_groups:
|
|
42
|
+
- ["瓶颈排序", "优先级", "ranking"]
|
|
43
|
+
- ["P0", "P1", "优先", "建议"]
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Smart Analysis Contract
|
|
47
|
+
|
|
48
|
+
This strategy is intentionally contract-only. It must not be injected as a
|
|
49
|
+
normal scene strategy and must not participate in scene classification.
|
|
50
|
+
|
|
51
|
+
Smart Analysis Mode combines Scene Story detection with profile-specific
|
|
52
|
+
deep-dive routes, then projects the resulting scene report into a readable chat
|
|
53
|
+
summary and the standard HTML report chain.
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
-
# Copyright (C) 2024-2026 Gracker (Chris)
|
|
3
|
-
# This file is part of SmartPerfetto. See LICENSE for details.
|
|
4
|
-
|
|
5
|
-
# =============================================================================
|
|
6
|
-
# 设备环境状态快照(原子 Skill)
|
|
7
|
-
# =============================================================================
|
|
8
|
-
# 采集 trace 期间的设备环境信息:屏幕状态、电量、温度、CPU 频率、内存压力等。
|
|
9
|
-
|
|
10
|
-
name: device_state_snapshot
|
|
11
|
-
version: "1.0"
|
|
12
|
-
type: atomic
|
|
13
|
-
category: system_context
|
|
14
|
-
tier: B
|
|
15
|
-
|
|
16
|
-
meta:
|
|
17
|
-
display_name: "设备环境状态快照"
|
|
18
|
-
description: "采集 trace 期间的设备环境信息(屏幕、电量、温度、CPU、内存等)"
|
|
19
|
-
icon: "devices"
|
|
20
|
-
tags: [device, state, environment, context, atomic]
|
|
21
|
-
|
|
22
|
-
prerequisites:
|
|
23
|
-
required_tables:
|
|
24
|
-
- counter
|
|
25
|
-
- counter_track
|
|
26
|
-
|
|
27
|
-
inputs:
|
|
28
|
-
- name: start_ts
|
|
29
|
-
type: timestamp
|
|
30
|
-
required: false
|
|
31
|
-
description: "分析起始时间戳(ns)"
|
|
32
|
-
- name: end_ts
|
|
33
|
-
type: timestamp
|
|
34
|
-
required: false
|
|
35
|
-
description: "分析结束时间戳(ns)"
|
|
36
|
-
|
|
37
|
-
display:
|
|
38
|
-
level: summary
|
|
39
|
-
layer: overview
|
|
40
|
-
title: "设备环境状态"
|
|
41
|
-
columns:
|
|
42
|
-
- name: metric
|
|
43
|
-
label: "指标"
|
|
44
|
-
type: string
|
|
45
|
-
- name: value
|
|
46
|
-
label: "值"
|
|
47
|
-
type: string
|
|
48
|
-
- name: ts
|
|
49
|
-
label: "时间戳"
|
|
50
|
-
type: timestamp
|
|
51
|
-
unit: ns
|
|
52
|
-
clickAction: navigate_timeline
|
|
53
|
-
|
|
54
|
-
sql: |
|
|
55
|
-
WITH trace_bounds AS (
|
|
56
|
-
SELECT
|
|
57
|
-
COALESCE(${start_ts}, (SELECT MIN(ts) FROM slice)) as t_start,
|
|
58
|
-
COALESCE(${end_ts}, (SELECT MAX(ts + dur) FROM slice)) as t_end
|
|
59
|
-
),
|
|
60
|
-
screen_state AS (
|
|
61
|
-
SELECT
|
|
62
|
-
'screen_state' as metric,
|
|
63
|
-
CASE WHEN c.value > 0 THEN 'ON' ELSE 'OFF' END as value,
|
|
64
|
-
c.ts as ts
|
|
65
|
-
FROM counter c
|
|
66
|
-
JOIN counter_track ct ON c.track_id = ct.id
|
|
67
|
-
WHERE ct.name GLOB '*ScreenState*' OR ct.name GLOB '*screen_state*'
|
|
68
|
-
ORDER BY c.ts DESC
|
|
69
|
-
LIMIT 1
|
|
70
|
-
),
|
|
71
|
-
battery_info AS (
|
|
72
|
-
SELECT
|
|
73
|
-
'battery_level' as metric,
|
|
74
|
-
CAST(c.value AS TEXT) as value,
|
|
75
|
-
c.ts as ts
|
|
76
|
-
FROM counter c
|
|
77
|
-
JOIN counter_track ct ON c.track_id = ct.id
|
|
78
|
-
WHERE ct.name GLOB '*battery_level*' OR ct.name GLOB '*BatteryLevel*'
|
|
79
|
-
ORDER BY c.ts DESC
|
|
80
|
-
LIMIT 1
|
|
81
|
-
),
|
|
82
|
-
charging_info AS (
|
|
83
|
-
SELECT
|
|
84
|
-
'charging_state' as metric,
|
|
85
|
-
CASE WHEN c.value > 0 THEN 'CHARGING' ELSE 'NOT_CHARGING' END as value,
|
|
86
|
-
c.ts as ts
|
|
87
|
-
FROM counter c
|
|
88
|
-
JOIN counter_track ct ON c.track_id = ct.id
|
|
89
|
-
WHERE ct.name GLOB '*battery_status*' OR ct.name GLOB '*charging*' OR ct.name GLOB '*BatteryStatus*'
|
|
90
|
-
ORDER BY c.ts DESC
|
|
91
|
-
LIMIT 1
|
|
92
|
-
),
|
|
93
|
-
thermal_info AS (
|
|
94
|
-
SELECT
|
|
95
|
-
'thermal_zone' as metric,
|
|
96
|
-
ct.name || ': ' || CAST(ROUND(MAX(c.value) / 1000.0, 1) AS TEXT) || '°C' as value,
|
|
97
|
-
MAX(c.ts) as ts
|
|
98
|
-
FROM counter c
|
|
99
|
-
JOIN counter_track ct ON c.track_id = ct.id
|
|
100
|
-
CROSS JOIN trace_bounds tb
|
|
101
|
-
WHERE (ct.name GLOB '*thermal_zone*' OR ct.name GLOB '*Temperature*')
|
|
102
|
-
AND c.ts >= tb.t_start AND c.ts <= tb.t_end
|
|
103
|
-
GROUP BY ct.name
|
|
104
|
-
ORDER BY MAX(c.value) DESC
|
|
105
|
-
LIMIT 5
|
|
106
|
-
),
|
|
107
|
-
cpu_freq_summary AS (
|
|
108
|
-
SELECT
|
|
109
|
-
'cpu_max_freq' as metric,
|
|
110
|
-
'CPU' || ct.name || ': ' || CAST(ROUND(MAX(c.value) / 1e6, 2) AS TEXT) || 'GHz' as value,
|
|
111
|
-
MAX(c.ts) as ts
|
|
112
|
-
FROM counter c
|
|
113
|
-
JOIN cpu_counter_track ct ON c.track_id = ct.id
|
|
114
|
-
CROSS JOIN trace_bounds tb
|
|
115
|
-
WHERE ct.name = 'cpufreq'
|
|
116
|
-
AND c.ts >= tb.t_start AND c.ts <= tb.t_end
|
|
117
|
-
GROUP BY ct.cpu
|
|
118
|
-
ORDER BY ct.cpu
|
|
119
|
-
),
|
|
120
|
-
memory_info AS (
|
|
121
|
-
SELECT
|
|
122
|
-
'memory_pressure' as metric,
|
|
123
|
-
CAST(ROUND(MAX(c.value), 0) AS TEXT) as value,
|
|
124
|
-
MAX(c.ts) as ts
|
|
125
|
-
FROM counter c
|
|
126
|
-
JOIN counter_track ct ON c.track_id = ct.id
|
|
127
|
-
CROSS JOIN trace_bounds tb
|
|
128
|
-
WHERE (ct.name GLOB '*mem.*pressure*' OR ct.name GLOB '*MemFree*' OR ct.name GLOB '*MemAvailable*')
|
|
129
|
-
AND c.ts >= tb.t_start AND c.ts <= tb.t_end
|
|
130
|
-
),
|
|
131
|
-
process_count AS (
|
|
132
|
-
SELECT
|
|
133
|
-
'active_processes' as metric,
|
|
134
|
-
CAST(COUNT(DISTINCT p.upid) AS TEXT) as value,
|
|
135
|
-
NULL as ts
|
|
136
|
-
FROM process p
|
|
137
|
-
JOIN thread t ON t.upid = p.upid
|
|
138
|
-
JOIN thread_state ts_tbl ON ts_tbl.utid = t.utid
|
|
139
|
-
CROSS JOIN trace_bounds tb
|
|
140
|
-
WHERE ts_tbl.ts >= tb.t_start AND ts_tbl.ts <= tb.t_end
|
|
141
|
-
AND ts_tbl.state = 'Running'
|
|
142
|
-
),
|
|
143
|
-
oom_adj AS (
|
|
144
|
-
SELECT
|
|
145
|
-
'foreground_apps' as metric,
|
|
146
|
-
GROUP_CONCAT(p.name, ', ') as value,
|
|
147
|
-
NULL as ts
|
|
148
|
-
FROM (
|
|
149
|
-
SELECT DISTINCT p.name, p.upid
|
|
150
|
-
FROM counter c
|
|
151
|
-
JOIN process_counter_track pct ON c.track_id = pct.id
|
|
152
|
-
JOIN process p ON p.upid = pct.upid
|
|
153
|
-
CROSS JOIN trace_bounds tb
|
|
154
|
-
WHERE pct.name = 'oom_score_adj'
|
|
155
|
-
AND c.value <= 0
|
|
156
|
-
AND c.ts >= tb.t_start AND c.ts <= tb.t_end
|
|
157
|
-
AND p.name IS NOT NULL AND p.name != ''
|
|
158
|
-
LIMIT 10
|
|
159
|
-
) p
|
|
160
|
-
)
|
|
161
|
-
SELECT metric, value, printf('%d', ts) as ts FROM screen_state
|
|
162
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM battery_info
|
|
163
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM charging_info
|
|
164
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM thermal_info
|
|
165
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM cpu_freq_summary
|
|
166
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM memory_info
|
|
167
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM process_count
|
|
168
|
-
UNION ALL SELECT metric, value, printf('%d', ts) as ts FROM oom_adj
|
|
169
|
-
|
|
170
|
-
output:
|
|
171
|
-
format: structured
|