tree: 2beafc1fdac249ea6d4425e928539d8ea6462dcb [path history] [tgz]
  1. res/
  2. src/
  3. tests/
  4. Android.bp
  5. AndroidManifest.xml
  6. README.md
tests/CarTelemetryApp/README.md

CarTelemetry Demo Vendor Application

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.

Usage

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.

Privileged Permission

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

MetricsConfigs in assets/ Folder

The assets/ folder contains the MetricsConfigs proto binaries. Examples:

activity_foreground_state_changed_config

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

process_memory_metrics_config

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