From fd57f24a14736e09770f4b867a1d5df45b566e44 Mon Sep 17 00:00:00 2001 From: cfig Date: Tue, 15 Jul 2025 16:04:13 +0800 Subject: [PATCH] cumulated update boot editor: support dtb in linux lazybox: more commands --- .../main/kotlin/packable/DeviceTreeParser.kt | 18 +- lazybox/src/main/kotlin/cfig/lazybox/App.kt | 5 + .../kotlin/cfig/lazybox/staging/Perfetto.kt | 280 ++++++++++++++++++ .../kotlin/cfig/lazybox/staging/RepoWorker.kt | 3 +- tools/bin/dtc-linux | Bin 0 -> 99536 bytes 5 files changed, 297 insertions(+), 9 deletions(-) create mode 100644 lazybox/src/main/kotlin/cfig/lazybox/staging/Perfetto.kt create mode 100755 tools/bin/dtc-linux diff --git a/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt b/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt index 4a9bd0d..40f5084 100644 --- a/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt +++ b/bbootimg/src/main/kotlin/packable/DeviceTreeParser.kt @@ -87,20 +87,24 @@ class DeviceTreeParser : IPackable { //pull "adb root".check_call() - "adb push tools/bin/dtc-android /data/vendor/dtc-android".check_call() - val hw = "adb shell getprop ro.hardware".check_output() - log.info("ro.hardware=$hw") - "adb shell /data/vendor/dtc-android -I fs /proc/device-tree -o /data/vendor/file.to.pull".check_call() + var hw = "linux" + if ("adb shell which getprop".check_output().isBlank()) { //linux + "adb push tools/bin/dtc-linux /data/vendor/dtc".check_call() + } else { //android + "adb push tools/bin/dtc-android /data/vendor/dtc".check_call() + hw = "adb shell getprop ro.hardware".check_output() + log.info("ro.hardware=$hw") + } + "adb shell /data/vendor/dtc -I fs /proc/device-tree -o /data/vendor/file.to.pull".check_call() "adb pull /data/vendor/file.to.pull $workDir$hw.dts".check_call() - "adb shell /data/vendor/dtc-android -I fs -O dtb /proc/device-tree -o /data/vendor/file.to.pull".check_call() + "adb shell /data/vendor/dtc -I fs -O dtb /proc/device-tree -o /data/vendor/file.to.pull".check_call() "adb pull /data/vendor/file.to.pull $hw.dtb".check_call() "adb shell rm /data/vendor/file.to.pull".check_call() - "adb shell rm /data/vendor/dtc-android".check_call() + "adb shell rm /data/vendor/dtc".check_call() if (fileName != "$hw.dtb") { File(fileName).delete() log.warn("deleting intermediate dtb file: $fileName") } - //print summary val prints: MutableList> = mutableListOf() prints.add(Pair("source", "/proc/device-tree")) diff --git a/lazybox/src/main/kotlin/cfig/lazybox/App.kt b/lazybox/src/main/kotlin/cfig/lazybox/App.kt index 1ab99cd..740e052 100644 --- a/lazybox/src/main/kotlin/cfig/lazybox/App.kt +++ b/lazybox/src/main/kotlin/cfig/lazybox/App.kt @@ -1,6 +1,7 @@ package cfig.lazybox import cfig.lazybox.staging.DiffCI +import cfig.lazybox.staging.Perfetto import cfig.lazybox.staging.RepoWorker import cfig.lazybox.sysinfo.BootChart import cfig.lazybox.sysinfo.CpuInfo @@ -32,6 +33,7 @@ fun main(args: Array) { println("diffci : find changelist files from CI server based on date and time ranges") println("repo_lfs : pull LFS files from Git repositories managed by 'repo'") println("repo_unshallow: unshallow Git repositories managed by 'repo'") + println("perfetto : generate a Perfetto configuration file") exitProcess(0) } if (args[0] == "cpuinfo") { @@ -111,4 +113,7 @@ fun main(args: Array) { if (args[0] == "repo_unshallow") { RepoWorker().unshallowRepo(args.drop(1).toTypedArray()) } + if (args[0] == "perfetto") { + Perfetto().run(args.drop(1).toTypedArray()) + } } diff --git a/lazybox/src/main/kotlin/cfig/lazybox/staging/Perfetto.kt b/lazybox/src/main/kotlin/cfig/lazybox/staging/Perfetto.kt new file mode 100644 index 0000000..0651cdd --- /dev/null +++ b/lazybox/src/main/kotlin/cfig/lazybox/staging/Perfetto.kt @@ -0,0 +1,280 @@ +package cfig.lazybox.staging + +import java.io.File +import org.slf4j.LoggerFactory + +class Perfetto { + private val log = LoggerFactory.getLogger(Perfetto::class.java.simpleName) + + /** + * Main entry method to generate the configuration file. + */ + fun run(args: Array) { + val options = args.toSet() + + // Check for help flags + if ("-h" in options || "--help" in options) { + printUsage() + return + } + + log.info("Running Perfetto configuration generation with arguments: ${args.joinToString(", ")}") + val outputFileName = "pftrace.cfg" + val finalConfig = generatePerfettoConfig(options) + + try { + File(outputFileName).writeText(finalConfig) + log.info("Successfully wrote Perfetto configuration to '$outputFileName'.") + log.info("Options used: ${options.ifEmpty { setOf("default") }}") + + if ("+boot" in options) { + val adbCommands = """ + + -------------------------------------------------------------------- + Boot trace config enabled. To capture a boot trace, run these commands: + + [enable tracing] + adb root + adb push pftrace.cfg /data/misc/perfetto-configs/boottrace.pbtxt + adb shell setprop persist.debug.perfetto.boottrace 1 + + [pull trace result after reboot] + adb pull /data/misc/perfetto-traces/boottrace.perfetto-trace + -------------------------------------------------------------------- + """.trimIndent() + println(adbCommands) + } + } catch (e: Exception) { + log.error("Failed to write to file '$outputFileName'. Reason: ${e.message}") + } + } + + /** + * Prints the help/usage message for the script. + */ + private fun printUsage() { + val usage = """ + Usage: kotlin Perfetto.main.kts [options...] + + Generates a pftrace.cfg file for Perfetto tracing based on specified options. + The output file is named 'pftrace.cfg'. + + Options: + -h, --help Show this help message and exit. + + +power Include ftrace power events and Android power rail data sources. + +atrace Include a wide range of atrace categories for detailed app tracing. + +lmk Include Low Memory Killer (LMK) and OOM score ftrace events. + +cpu_usage Include detailed CPU time and process fork count statistics. + +logcat Include all Android logcat buffers in the trace. + +sf Include SurfaceFlinger frame timeline data. + +boot Enable boot tracing. After generating the config, this prints the + necessary adb commands to set up the trace for the next boot. + """.trimIndent() + println(usage) + } + + /** + * Builds the Perfetto configuration string based on the provided options. + */ + fun generatePerfettoConfig(options: Set = emptySet()): String { + log.info("Generating Perfetto configuration with options: $options") + val configBuilder = StringBuilder() + + // --- 1. Base Config: Buffers --- + log.info("Adding buffers") + configBuilder.append( + """ + # === Buffers === + buffers: { + size_kb: 63488 + fill_policy: DISCARD + } + buffers: { + size_kb: 2048 + fill_policy: DISCARD + } + + """.trimIndent() + ) + + // --- 2. Base Config: Core Data Sources (excluding sys_stats) --- + log.info("Adding core data sources") + configBuilder.append( + """ + # === Base Data Sources === + data_sources: { + config { + name: "linux.process_stats" + process_stats_config { + scan_all_processes_on_start: true + proc_stats_poll_ms: 250 + } + } + } + data_sources: { + config { + name: "android.packages_list" + target_buffer: 1 + } + } + """.trimIndent() + ) + + // --- 3. Dynamic and Optional Config --- + + // Dynamically build linux.sys_stats config + val sysStatsLines = mutableListOf( + "meminfo_period_ms: 250", + "vmstat_period_ms: 250", + "cpufreq_period_ms: 250" + ) + if ("+cpu_usage" in options) { + log.info("Adding data sources for: +cpu_usage") + sysStatsLines.add("stat_period_ms: 250") + sysStatsLines.add("stat_counters: STAT_CPU_TIMES") + sysStatsLines.add("stat_counters: STAT_FORK_COUNT") + } + + log.info("Appending sys_stats data source to config") + configBuilder.append("\n\n# === System-wide Stats ===") + configBuilder.append( + """ + data_sources: { + config { + name: "linux.sys_stats" + sys_stats_config { + """.trimIndent() + ) + sysStatsLines.forEach { configBuilder.append("\n $it") } + configBuilder.append( + """ + } + } + } + """.trimIndent() + ) + + // Dynamically build ftrace config + val ftraceEvents = mutableListOf() + val atraceCategories = mutableListOf() + val atraceApps = mutableListOf() + + if ("+power" in options) { + ftraceEvents.add("power/*") + } + if ("+atrace" in options) { + ftraceEvents.add("ftrace/print") + atraceCategories.addAll( + listOf( + "adb", "aidl", "am", "audio", "binder_driver", "binder_lock", + "bionic", "camera", "dalvik", "database", "gfx", "hal", + "input", "network", "nnapi", "pm", "power", "res", "rro", + "rs", "sm", "ss", "vibrator", "video", "view", "webview", "wm" + ) + ) + } + if ("+lmk" in options) { + log.info("Adding data sources for: +lmk") + ftraceEvents.add("lowmemorykiller/lowmemory_kill") + ftraceEvents.add("oom/oom_score_adj_update") + atraceApps.add("lmkd") + } + + if (ftraceEvents.isNotEmpty() || atraceCategories.isNotEmpty() || atraceApps.isNotEmpty()) { + log.info("Appending ftrace data source to config") + configBuilder.append("\n\n# === Optional Ftrace/Atrace Tracing ===") + configBuilder.append( + """ + data_sources: { + config { + name: "linux.ftrace" + ftrace_config { + """.trimIndent() + ) + ftraceEvents.forEach { configBuilder.append("\n ftrace_events: \"$it\"") } + atraceCategories.forEach { configBuilder.append("\n atrace_categories: \"$it\"") } + atraceApps.forEach { configBuilder.append("\n atrace_apps: \"$it\"") } + configBuilder.append( + """ + } + } + } + """.trimIndent() + ) + } + + if ("+power" in options) { + log.info("Adding data sources for: android.power") + configBuilder.append( + """ + + # === Optional Android Power Tracing === + data_sources: { + config { + name: "android.power" + android_power_config { + battery_poll_ms: 250 + battery_counters: BATTERY_COUNTER_CAPACITY_PERCENT + battery_counters: BATTERY_COUNTER_CHARGE + battery_counters: BATTERY_COUNTER_CURRENT + collect_power_rails: true + } + } + } + """.trimIndent() + ) + } + + if ("+logcat" in options) { + log.info("Adding data sources for: +logcat") + configBuilder.append( + """ + # === Optional Logcat Tracing === + data_sources { + config { + name: "android.log" + android_log_config { + log_ids: LID_CRASH + log_ids: LID_DEFAULT + log_ids: LID_EVENTS + log_ids: LID_KERNEL + log_ids: LID_RADIO + log_ids: LID_SECURITY + log_ids: LID_STATS + log_ids: LID_SYSTEM + } + } + } + """.trimIndent() + ) + } + + // (REVISED) Add SurfaceFlinger data source if option is present + if ("+sf" in options) { + log.info("Adding data sources for: +sf") + configBuilder.append( + """ + # === Optional SurfaceFlinger Tracing === + data_sources { + config { + name: "android.surfaceflinger.frametimeline" + } + } + """.trimIndent() + ) + } + + // --- 4. Trace Duration --- + log.info("Adding trace duration") + configBuilder.append( + """ + # === Trace Duration === + # The total duration of the trace in milliseconds. + duration_ms: 15000 + """.trimIndent() + ) + + return configBuilder.toString() + } +} diff --git a/lazybox/src/main/kotlin/cfig/lazybox/staging/RepoWorker.kt b/lazybox/src/main/kotlin/cfig/lazybox/staging/RepoWorker.kt index daf3400..788cf40 100644 --- a/lazybox/src/main/kotlin/cfig/lazybox/staging/RepoWorker.kt +++ b/lazybox/src/main/kotlin/cfig/lazybox/staging/RepoWorker.kt @@ -51,8 +51,7 @@ class RepoWorker { gitRepositories.forEach { repoDir -> val relativePath = repoDir.toRelativeString(startDir).ifEmpty { "." } if (checker(repoDir)) { - log.info("Checking [$relativePath]...") - log.info(" -> ✅ $checkerName") + log.info("Checking [$relativePath]... ✅ $checkerName") ret.add(repoDir) } else { //log.info("Checking [$relativePath]...") diff --git a/tools/bin/dtc-linux b/tools/bin/dtc-linux new file mode 100755 index 0000000000000000000000000000000000000000..465e66eb4aad0f4c4614b70b55dfcc2dd3afdee3 GIT binary patch literal 99536 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