Detect Python performance regressions and compare execution traces with lightweight call graph visualization
Project description
OracleTrace
Detect Python performance regressions and compare execution traces with a lightweight call graph profiler.
|
OracleTrace is a lightweight Python performance analysis tool designed to help developers detect performance regressions, compare execution traces, and visualize call graphs in a simple and readable way. |
It is ideal for:
- Detecting performance regressions between script versions
- Comparing execution time across runs
- Visualizing function call graphs
- Lightweight profiling without heavy instrumentation
- CI performance validation
Why OracleTrace?
Performance regressions in Python projects are often hard to detect early.
Traditional profilers focus on deep performance analysis, but they are not optimized for quick regression comparison between two executions.
OracleTrace solves this by allowing you to:
- Run a script and generate an execution trace
- Export results to JSON
- Compare two trace files
- Identify performance differences
- Detect new or removed functions
- Measure execution time deltas
Key Features
Performance Regression Detection
Compare two JSON trace files and instantly see:
- Slower functions
- Faster functions
- New function calls
- Removed function calls
Execution Trace Analysis
- Total execution time per function
- Average time per call
- Call counts
- Caller → callee relationships
Call Graph Visualization
Visual tree structure of your program’s execution flow.
JSON Export
Export trace results for:
- CI performance checks
- Historical comparison
- Automation pipelines
Clean Output
Filters internal Python calls to focus only on your project code.
Installation
pip install oracletrace
Quick Example
Step 1 — Create a script
import time
def process_data():
time.sleep(0.1)
calculate_results()
def calculate_results():
time.sleep(0.2)
def main():
for _ in range(2):
process_data()
if __name__ == "__main__":
main()
Step 2 — Run OracleTrace
oracletrace my_app.py
Export trace to JSON
oracletrace my_app.py --json baseline.json
Compare with a new version
oracletrace my_app.py --json new.json --compare baseline.json
This allows you to detect performance regressions between two executions.
How It Works
OracleTrace uses Python’s built-in sys.setprofile() function to intercept:
callreturn
It measures execution time per function and records caller-callee relationships.
By filtering functions outside your project directory, the output focuses only on relevant application code.
Example Output
Summary table showing top functions by total execution time and average time per call.
Call graph visualization displaying execution flow hierarchy.
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)
Use Cases
- Detect Python performance regressions in development
- Compare execution time between versions
- Lightweight alternative to heavy profilers
- CI/CD performance monitoring
- Educational demonstration of call graphs
Requirements
- Python >= 3.10
- rich
Contributing
Contributions are welcome.
If you have ideas for improving regression detection, trace comparison, or visualization features, feel free to open an issue or submit a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file oracletrace-1.0.21.tar.gz.
File metadata
- Download URL: oracletrace-1.0.21.tar.gz
- Upload date:
- Size: 8.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce169dbe64624603a2d0edd21059a1103e6f030e51651be2de7006bf740ebacc
|
|
| MD5 |
603a4ac77b36b7c65fa2d24be4cfa54d
|
|
| BLAKE2b-256 |
f168b3c31857e9b9cd2f85c2f79cb06e579444f2c9c5c43dce7621d47fcb019f
|
File details
Details for the file oracletrace-1.0.21-py3-none-any.whl.
File metadata
- Download URL: oracletrace-1.0.21-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a6589fa380e84b3c93a6d07efc1308823e5116f40b9965e772878cb66ac1f93
|
|
| MD5 |
9f71a3bd1b5b67e94c60825953d3669e
|
|
| BLAKE2b-256 |
4bfd04711e0fa754d46db9238c6a7d4e43e9d31a33298f9ca19666670c425213
|