This directory contains source code for a test application that CarService binds to at boot.
The application uses CarTelemetryManager APIs to add metrics configurations and collect telemetry.
The Car Telemetry Collector
app is the UI component of this test application. It allows the adding/removing of configs and viewing retrieved data and errors on screen.
CarService should bind to the vendor service, the list of early start up applications that CarService binds to are listed in vendor/auto/embedded/products/rro_overlay/CarServiceOverlay/res/values/config.xml
.
Add
<item>com.android.car.cartelemetryapp/.CarMetricsCollectorService#bind=bind,user=system,trigger=userUnlocked</item>
to config_earlyStartupServices
in vendor/auto/embedded/products/rro_overlay/CarServiceOverlay/res/values/config.xml
m CarTelemetryApp adb root && adb remount && adb sync system && adb shell stop && adb shell start
Verify that adb logcat -b all -T 10000 -v color | egrep -i 'CAR.TELEMETRY|CarMetricsCollector'
contains the messages related to addMetricsConfig
Note that stats reports are created after 10 minutes. Keep the process running and verify logcat.
CarTelemetryManager APIs are protected with a permission android.car.permission.USE_CAR_TELEMETRY_SERVICE
.
The application declares the permission in AndroidManifest.xml
and has a permission allowlist file at frameworks/base/data/etc/car/com.android.car.cartelemetryapp.xml
The assets/ folder contains the MetricsConfigs proto binaries. Examples:
name: activity_foreground_state_changed_config version: 1 script: """ function onActivityForegroundStateChanged(published_data, state) result = {} n = 0 for k, v in pairs(published_data) do result[k] = v[1] n = n + 1 end result.n = n on_script_finished(result) end """ subscribers: - handler: onActivityForegroundStateChanged publisher: stats: system_metric: ACTIVITY_FOREGROUND_STATE_CHANGED priority: 0
name: process_memory_metrics_config version: 1 script: """ function calculateAverage(tbl) sum = 0 size = 0 for _, value in ipairs(tbl) do sum = sum + value size = size + 1 end return sum/size end function onProcessMemory(published_data, state) result = {} result.page_fault_avg = calculateAverage(published_data.page_fault) result.major_page_fault_avg = calculateAverage(" + "published_data.page_major_fault) result.oom_adj_score_avg = calculateAverage(" + "published_data.oom_adj_score) result.rss_in_bytes_avg = calculateAverage(" + "published_data.rss_in_bytes) result.swap_in_bytes_avg = calculateAverage(" + "published_data.swap_in_bytes) result.cache_in_bytes_avg = calculateAverage(" + "published_data.cache_in_bytes) on_script_finished(result) end """ subscribers: - handler: onProcessMemory publisher: stats: system_metric: PROCESS_MEMORY_STATE priority: 0