# LatencyLogger

LatencyLogger is a tool to track the time from first pixel to actuation. Timestamps are printed in a table as well as plotted in a graph. Start openpilot with `LOG_TIMESTAMPS=1` set to enable the necessary logging.

## Usage

```
$ python latency_logger.py -h
usage: latency_logger.py [-h] [--relative] [--demo] [--plot] [route_or_segment_name]

A tool for analyzing openpilot's end-to-end latency

positional arguments:
  route_or_segment_name
                        The route to print (default: None)

optional arguments:
  -h, --help            show this help message and exit
  --relative            Make timestamps relative to the start of each frame (default: False)
  --demo                Use the demo route instead of providing one (default: False)
  --plot                If a plot should be generated (default: False)
  --offset              Offset service to better visualize overlap (default: False)
```
To timestamp an event, use `LOGT("msg")` in c++ code or `cloudlog.timestamp("msg")` in python code. If the print is warning for frameId assignment ambiguity, use `LOGT(frameId ,"msg")`.

## Examples

Timestamps are visualized as diamonds

|  | Relative  | Absolute |
| ------------- | ------------- | ------------- |
| Inline | ![inrel](https://user-images.githubusercontent.com/42323981/170559939-465df3b1-bf87-46d5-b5ee-5cc87dc49470.png) | ![inabs](https://user-images.githubusercontent.com/42323981/170559985-a82f87e7-82c4-4e48-a348-4221568dd589.png) |
| Offset | ![offrel](https://user-images.githubusercontent.com/42323981/170559854-93fba90f-acc4-4d08-b317-d3f8fc649ea8.png) | ![offabs](https://user-images.githubusercontent.com/42323981/170559782-06ed5599-d4e3-4701-ad78-5c1eec6cb61e.png) |

Printed timestamps of a frame with internal durations.
```
Frame ID: 1202
  camerad
    wideRoadCameraState start of frame                   0.0
    roadCameraState start of frame                       0.049583
    wideRoadCameraState published                        35.01206
    WideRoadCamera: Image set                            35.020028
    roadCameraState published                            38.508261
    RoadCamera: Image set                                38.520344
    RoadCamera: Transformed                              38.616176
    wideRoadCameraState.processingTime                   3.152403049170971
    roadCameraState.processingTime                       6.453451234847307
  modeld
    Image added                                          40.909841
    Extra image added                                    42.515027
    Execution finished                                   63.002552
    modelV2 published                                    63.148747
    modelV2.modelExecutionTime                           23.62649142742157
    modelV2.gpuExecutionTime                             0.0
  plannerd
    lateralPlan published                                66.915049
    longitudinalPlan published                           69.715999
    lateralPlan.solverExecutionTime                      0.8170719956979156
    longitudinalPlan.solverExecutionTime                 0.5619999719783664
  controlsd
    Data sampled                                         70.217763
    Events updated                                       71.037178
    sendcan published                                    72.278775
    controlsState published                              72.825226
    Data sampled                                         80.008354
    Events updated                                       80.787666
    sendcan published                                    81.849682
    controlsState published                              82.238323
    Data sampled                                         90.521123
    Events updated                                       91.626003
    sendcan published                                    93.413218
    controlsState published                              94.143989
    Data sampled                                         100.991497
    Events updated                                       101.973774
    sendcan published                                    103.565575
    controlsState published                              104.146088
    Data sampled                                         110.284387
    Events updated                                       111.183541
    sendcan published                                    112.981692
    controlsState published                              113.731994
  boardd
    sending sendcan to panda: 250027001751393037323631   81.928119
    sendcan sent to panda: 250027001751393037323631      82.164834
    sending sendcan to panda: 250027001751393037323631   93.569986
    sendcan sent to panda: 250027001751393037323631      93.92795
    sending sendcan to panda: 250027001751393037323631   103.689167
    sendcan sent to panda: 250027001751393037323631      104.012235
    sending sendcan to panda: 250027001751393037323631   113.109555
    sendcan sent to panda: 250027001751393037323631      113.525487
    sending sendcan to panda: 250027001751393037323631   122.508434
    sendcan sent to panda: 250027001751393037323631      122.834314
```
