Skip to main content

Detect Python performance regressions and compare execution traces with lightweight call graph visualization

Project description

OracleTrace — Detect Python Performance Regressions with Execution Diff

Detect performance regressions between runs of your Python script in seconds.

OracleTrace Logo

Fail your CI when performance regresses.

OracleTrace is a git diff for performance.

Run your script twice and instantly see what got slower — with function-level precision.

PyPI PyPI Downloads GitHub Stars GitHub Forks CI Tests

Documentation: https://kaykcaputo.github.io/oracletrace/

Featured in: PyCoder's Weekly #729awesome-debuggerawesome-profiling


Installation

pip install oracletrace

Quick Start

1. See where your program spends time instantly:

oracletrace app.py

2. Compare runs and detect regressions:

oracletrace app.py --json baseline.json
oracletrace app.py --json new.json --compare baseline.json

See it in action

See exactly which functions got slower between runs:

OracleTrace CLI demo


Example Output

Starting application...

Iteration 1:
  > Processing data...
    > Calculating results...

Iteration 2:
  > Processing data...
    > Calculating results...

Application finished.

Summary:
                         Top functions by Total Time
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┓
┃ Function                     ┃ Total Time (s) ┃ Calls ┃ Avg. Time/Call (ms) ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━┩
│ my_app.py:main               │         0.6025 │     1 │             602.510 │
│ my_app.py:process_data       │         0.6021 │     2 │             301.050 │
│ my_app.py:calculate_results  │         0.4015 │     2 │             200.750 │
└──────────────────────────────┴────────────────┴───────┴─────────────────────┘

Logic Flow:
<module>
└── my_app.py:main (1x, 0.6025s)
    └── my_app.py:process_data (2x, 0.6021s)
        └── my_app.py:calculate_results (2x, 0.4015s)

Why OracleTrace?

Problem

Performance regressions are hard to detect early.

Solution

OracleTrace compares execution traces and highlights what got slower.

How it works

  1. Run your script
  2. Generate a trace
  3. Compare results
  4. Identify slowdowns

CI Integration

Fail your pipeline when performance degrades:

oracletrace app.py --json current.json --compare baseline.json --fail-on-regression --threshold 25

Add it to your CI to automatically fail on performance regressions.


Key Features

  • Detect slower and faster functions
  • Identify new or removed functions
  • Execution time and call count analysis
  • Call graph visualization
  • JSON and CSV export
  • Regex-based filtering (--ignore)
  • Top-N function focus (--top)
  • CI regression gates

CLI Reference

Flag Description
--json Export trace to JSON
--csv Export trace to CSV
--compare Compare with another trace
--fail-on-regression Exit with error if regression detected
--threshold Regression percentage threshold
--ignore Ignore functions/files via regex
--top Show top N functions

Use Cases

Primary

  • Detect performance regressions between runs

Secondary

  • CI performance validation
  • Execution trace inspection
  • Call graph visualization

How It Works

OracleTrace uses Python’s sys.setprofile() to intercept function calls and returns.

It measures execution time per function and records caller–callee relationships.

Filtering removes external/internal calls to focus on application code.


Requirements

  • Python >= 3.10
  • rich

Contributing

Contributions are welcome.

Please read the Contributing Guide for details on how to get started, coding standards, and the contribution process.


Contributors


⭐ Support the Project

If OracleTrace is useful, consider giving it a star:

GitHub Repository


Maintainers

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oracletrace-2.0.1.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

oracletrace-2.0.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

Details for the file oracletrace-2.0.1.tar.gz.

File metadata

  • Download URL: oracletrace-2.0.1.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for oracletrace-2.0.1.tar.gz
Algorithm Hash digest
SHA256 f4c041dc6a2988f58a176c0bb675aba4db0adcd0d481e2ab8821364fafbfbbfb
MD5 d6feb04066b87ad63cdf03ef4c1547e8
BLAKE2b-256 6c9f71b27cf4d2923b1beaf87f1f18bea63ff370caa8c26bfba2ac1fcb949532

See more details on using hashes here.

File details

Details for the file oracletrace-2.0.1-py3-none-any.whl.

File metadata

  • Download URL: oracletrace-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 11.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for oracletrace-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1eb3a6688c225296c74bb732e4477977ebe4d388ce1a2c1012226af150b2d88b
MD5 64f3679d7d7d38e787dd18aa01362e22
BLAKE2b-256 9d0897aef5e9dc3dc0d240240ef5dc6c99b0fae2d112208b4348f18c3a955d28

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page