# How to collect and view camera traces

We use Perfetto to record camera traces on Chrome and CrOS Camera Service.
Therefore, we can collect camera traces from these components to evaluate the
performance of each steps when setting up the camera stream and understand the
journey of a camera capture request.

To do so, currently we can run perfetto command line tool while using the
camera.

**Step 1**:

You can use the [trace tool](../tracing/bin/trace.py) to automate trace
recording on a remote DUT and sync the trace output to the host. For example,
to record a 20 seconds trace on a remote DUT:

```shell
(host) $ tracing/bin/trace.py record -r <DUT> -t 20 -o /tmp/perfetto-trace
```

The output trace file will be stored in `/tmp/perfetto-trace` on the host. You
can omit `-t` and the tool will record until you stop the tracing with `Ctrl+C`.

You can also run the `perfetto` command on the DUT directly. You can specify how
long you want to record with the `duration_ms` field. For example, to record a
20 seconds camera trace:

```shell
(dut) $ perfetto -c - --txt -o /tmp/perfetto-trace \
<<EOF

# Buffer 0
buffers: {
    size_kb: 63488
    fill_policy: DISCARD
}

# Buffer 1
buffers: {
    size_kb: 63488
    fill_policy: DISCARD
}

# Events from cros-camera and Chrome. Enable more categories as you see fit.
# cros-camera use camera.*. Chrome uses "camera"

data_sources: {
    config {
        name: "track_event"
        target_buffer: 0
        track_event_config {
            enabled_categories: "camera"
            enabled_categories: "camera.*"
            disabled_categories: "*"
        }
    }
}

# Event-driven recording of frequency and idle state changes.
#
# The sched/* and task/* events produce a lot of noise. Disable them if you
# don't need them.

data_sources: {
    config {
        name: "linux.ftrace"
        target_buffer: 0
        ftrace_config {
            ftrace_events: "power/cpu_frequency"
            ftrace_events: "power/cpu_idle"
            ftrace_events: "power/suspend_resume"
            ftrace_events: "sched/sched_switch"
            ftrace_events: "sched/sched_process_exit"
            ftrace_events: "sched/sched_process_free"
            ftrace_events: "task/task_newtask"
            ftrace_events: "task/task_rename"
        }
    }
}

# Polling the current cpu frequency.

data_sources: {
    config {
        name: "linux.sys_stats"
        target_buffer: 1
        sys_stats_config {
            cpufreq_period_ms: 500
        }
    }
}

# Reporting the list of available frequency for each CPU.

data_sources {
    config {
        name: "linux.system_info"
        target_buffer: 1
    }
}

# This is to get full process name and thread<>process relationships.

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
    }
}

duration_ms: 20000

EOF
```

**Step 2**:

While perfetto command is recording, open up a camera application and exercise
the camera function you are interested in. (e.g. Taking a picture or recording
a video). Wait until perfetto flushes all the trace events when the tracing
ends.

**Step 3**:

Go to [Perfetto UI](https://ui.perfetto.dev/), click "Open trace file" and
select the trace output file (in our example it's `/tmp/perfetto-trace`). The
details of the tracing results should be shown on the UI.

<!---
TODO(b/212231270): Add instructions about how to use Perfett UI directly to
collect camera traces sent from each platforms once Perfetto UI supports
custom configuration.
-->

The trace tool has a `report` subcommand that can be used to compute metrics
from a recorded trace. To view the list of available metrics:

```shell
(host) $ tracing/bin/trace.py report --list_metrics
```

To compute metrics from a recorded trace stored in `/tmp/perfetto-trace`:

```shell
(host) $ tracing/bin/trace.py report -i /tmp/perfetto-trace --metrics <metric_names>
```
