Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
3c74ee2
Initial prototype of neotrace viewer
alexreinking Jan 27, 2026
c2c0938
Add local_laplacian_trace / process_viz to build
alexreinking Jun 1, 2026
ffdb3fd
basic neotrace fixups
alexreinking Jun 1, 2026
4a55161
pre-commit after rebase
alexreinking Jun 1, 2026
ff016ce
Add profiling; fix render performance
alexreinking Jun 1, 2026
787e3d0
Improve scrubbing performance
alexreinking Jun 1, 2026
eba4189
feat: Initial commit for basic client-server setup for Halidoscope.
Jun 3, 2026
6626cd6
feat: Support full playback and forward scrubbing of Halide traces.
Jun 4, 2026
1a2c76e
feat: Support RGB.
Jun 9, 2026
744b31f
feat: Add support for heatmap visualizations of load / store counts.
parkerziegler Jun 16, 2026
bacddcb
feat: Migrate to Rust backend and add Histograms.
parkerziegler Jun 19, 2026
2e7f7af
feat: Add support for Reuse Distance visualization and highlight live…
parkerziegler Jun 24, 2026
515b6d0
fix: Remove Python backend and shift Tauri app to root directory of a…
parkerziegler Jun 24, 2026
5b5d030
Support produce-consume liveness highlighting and refactor backend wi…
parkerziegler Jun 25, 2026
313c7ca
Add CLI for snapshotting Func buffers at packet indices.
parkerziegler Jun 26, 2026
f778731
Add dot subcommand to Halidoscope CLI.
parkerziegler Jul 6, 2026
7beb811
Adjust packet parsing to accommodate #9192 and report thread count in…
parkerziegler Jul 7, 2026
aa32b5b
Fix responsive text aliasing issues by using NodeToolbar.
parkerziegler Jul 7, 2026
a2c8f12
Fix liveness producer-consumer derivation to align more closely with …
parkerziegler Jul 8, 2026
4c335c1
Adjust liveness color mappings.
parkerziegler Jul 9, 2026
3567a7d
Adjust redundant store count metric to mark a redundant store only if…
parkerziegler Jul 9, 2026
df8db64
Add support for normalization modes and real-time histogram rendering.
parkerziegler Jul 13, 2026
9a6df8b
Add list and stats CLI subcommands.
parkerziegler Jul 13, 2026
d3ad8eb
Adjust halidoscope snapshot subcommand to return values as JSON.
parkerziegler Jul 14, 2026
a3c89bd
Add docs on building Halidoscope, using the GUI and CLI, and developi…
parkerziegler Jul 14, 2026
ce70798
Add support for NaN and inf rendering.
parkerziegler Jul 17, 2026
a7bce0f
Add support for Thread Coverage rendering.
parkerziegler Jul 21, 2026
c5d2432
Dramatically improve rendering performancefor Load Frequency render m…
parkerziegler Jul 22, 2026
674697a
Add support for thread filtering and highlighting.
parkerziegler Jul 23, 2026
db1b831
Back out changes to Python tracing infrastructure that are not on mai…
parkerziegler Jul 23, 2026
daef3e3
Add support for visualizing information from the Halide profiler.
parkerziegler Jul 26, 2026
2cb04a0
Reduce IPC calls by shifting NaN/Inf overlay computation into the IPC…
parkerziegler Jul 27, 2026
4a00fe5
Support user-selected colors for NaN and Inf highlighting. Rework UI …
parkerziegler Jul 28, 2026
749fec8
Ignore demos.
parkerziegler Aug 10, 2026
c1fbb5f
Add support for Grayscale render mode histograms.
parkerziegler Jul 30, 2026
fa823e4
Add basic support for RGB histograms.
parkerziegler Jul 30, 2026
6f5ca5c
Add .halidoscope method to Pipeline class.
parkerziegler Jul 31, 2026
799e621
Support invoking Halidoscope with no arguments.
parkerziegler Aug 3, 2026
a87f2fb
Apply clippy recommended fixes.
parkerziegler Aug 4, 2026
cf335a3
Reduce trace loading and parsing time 1.25x by combining stats comput…
parkerziegler Aug 4, 2026
22c61d4
Adjust and document types for the frontend.
parkerziegler Aug 5, 2026
531c8a6
Add HalidoscopeOptions to allow callers of Pipeline::halidoscope to s…
parkerziegler Aug 5, 2026
556969c
Allow callers of Pipeline::halidoscope to specify a non-volatile dire…
parkerziegler Aug 6, 2026
37fd6d2
Fix missing end bin in histogram rendering and shift all render mode …
parkerziegler Aug 6, 2026
1b55d58
Only include NaN and Inf overlay buffers when explicitly requested.
parkerziegler Aug 7, 2026
8087d59
Only request live Funcs during playback to reduce IPC calls.
parkerziegler Aug 7, 2026
0ae5ba1
Add more granular loading feedback to support XL traces.
parkerziegler Aug 10, 2026
b4616c5
Send NaN and Inf buffers as bit masks.
parkerziegler Aug 11, 2026
a8fe027
Fix caching scope bug in FuncNode.
parkerziegler Aug 11, 2026
f2073c6
Use bindgen to derive halide_trace_packet_t's field names and offsets…
parkerziegler Aug 11, 2026
f21bac0
Introduce RAII type to support accumulating profiler stats in Halidos…
parkerziegler Aug 13, 2026
fe599ee
Standardize styles for Select and Checkbox components and reuse acros…
parkerziegler Aug 16, 2026
b33a3df
Add new Profile UI.
parkerziegler Aug 17, 2026
03d5597
Move halidoscope into the tools directory.
parkerziegler Aug 17, 2026
0d331bf
Remove erroneously committed files.
parkerziegler Aug 17, 2026
c7863ce
Fix Halidoscope profiling pass to snapshot profiler stats once just b…
parkerziegler Aug 17, 2026
0a89d69
Fix clang-tidy warnings.
parkerziegler Aug 18, 2026
97178f5
Check in Halidoscope's icon set.
parkerziegler Aug 19, 2026
0bfeafc
Misc improvements to tooltips and styling in Profile tab.
parkerziegler Aug 19, 2026
0b18d4f
Make sizes a required argument for Pipeline::halidoscope's first over…
parkerziegler Aug 19, 2026
f51f9bb
Rework component directory structure for maintainability and clarity.
parkerziegler Aug 19, 2026
8fcdfac
Standardize Props naming convention.
parkerziegler Aug 19, 2026
a97c7dc
Make all HalidoscopeOptions fields optional, and update README.
parkerziegler Aug 20, 2026
e3729d2
Add updated icons.
parkerziegler Aug 20, 2026
cc1385d
Remove unneeded icons.
parkerziegler Aug 20, 2026
efd871f
Add basic tests for Pipeline::halidoscope.
parkerziegler Aug 20, 2026
fed5f82
Fix CI error on Windows owing to unreferenced local variable.
parkerziegler Aug 20, 2026
df45af3
Only run halidoscope tests with serialization enabled.
parkerziegler Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,18 @@
################################################################################
## Halide-specific exclusions

# Images only allowed in apps and directories named "images"
# Images only allowed in apps, directories named "images", and Halidoscope's
# icon set
*.png
!apps/**/*.png
!**/images/**/*.png
!tools/halidoscope/src-tauri/icons/*.png

# Halidoscope is desktop-only; `tauri icon` also emits mobile (Android/iOS)
# assets we don't want to commit.
tools/halidoscope/src-tauri/icons/android/
tools/halidoscope/src-tauri/icons/ios/


# Pre-trained weights only allowed in autoscheduler directories
*.weights
Expand Down
40 changes: 40 additions & 0 deletions python_bindings/halide/src/halide_/PyPipeline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,17 @@ void define_pipeline(py::module &m) {
return "<halide.AutoschedulerParams>";
});

py::class_<HalidoscopeOptions>(m, "HalidoscopeOptions")
.def(py::init<>())
.def_readwrite("halidoscope_path", &HalidoscopeOptions::halidoscope_path)
.def_readwrite("halidoscope_output_dir", &HalidoscopeOptions::halidoscope_output_dir)
.def_readwrite("halidoscope_profile_runs", &HalidoscopeOptions::halidoscope_profile_runs)
.def("__repr__", [](const HalidoscopeOptions &o) -> std::string {
return "<halide.HalidoscopeOptions halidoscope_path='" + o.halidoscope_path.value_or("halidoscope") +
"' halidoscope_output_dir='" + o.halidoscope_output_dir.value_or("") +
"' halidoscope_profile_runs=" + std::to_string(o.halidoscope_profile_runs.value_or(1)) + ">";
});

auto pipeline_class =
py::class_<Pipeline>(m, "Pipeline")
.def(py::init<>())
Expand Down Expand Up @@ -227,6 +238,35 @@ void define_pipeline(py::module &m) {
},
py::arg("dst"), py::arg("target") = Target())

// Development/debugging aid: see Pipeline::halidoscope() in Pipeline.h.
// Blocks until the Halidoscope window is closed, so the GIL must be
// released for the duration of the call, same as realize() above.
.def("halidoscope", //
[](Pipeline &p, Buffer<> buffer, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(Realization(std::move(buffer)), options, target); //
},
py::arg("dst"), py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

// See the comment on the corresponding realize() overload above: this
// overload must be declared before the list-of-sizes one, so that an
// empty list [] is resolved as list-of-sizes (a 0-dimensional Buffer)
// rather than as an ambiguous empty list-of-buffers.
.def("halidoscope", //
[](Pipeline &p, std::vector<int32_t> sizes, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(std::move(sizes), options, target); //
},
py::arg("sizes") = std::vector<int32_t>{}, py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

// This will actually allow a list-of-buffers as well as a tuple-of-buffers, but that's OK.
.def("halidoscope", //
[](Pipeline &p, std::vector<Buffer<>> buffers, const HalidoscopeOptions &options, const Target &target) -> void {
py::gil_scoped_release release;
p.halidoscope(Realization(std::move(buffers)), options, target); //
},
py::arg("dst"), py::arg("options") = HalidoscopeOptions(), py::arg("target") = Target())

.def("infer_input_bounds", //
[](Pipeline &p, const py::object &dst, const Target &target) -> void {
const Target t = to_jit_target(target);
Expand Down
Loading
Loading