+void Channels::disable_all_non_changing_channels()
+{
+ disable_channels_conditionally([](const shared_ptr<SignalBase> signal)
+ {
+ // Always disable channels without sample data
+ if (!signal->has_samples())
+ return true;
+
+ // Non-logic channels are considered to always have a signal
+ if (signal->type() != SignalBase::LogicChannel)
+ return false;
+
+ const shared_ptr<Logic> logic = signal->logic_data();
+ assert(logic);
+
+ // If any of the segments has edges, leave this channel enabled
+ for (shared_ptr<LogicSegment> segment : logic->logic_segments()) {
+ vector<LogicSegment::EdgePair> edges;
+
+ segment->get_subsampled_edges(edges,
+ 0, segment->get_sample_count() - 1,
+ LogicSegment::MipMapScaleFactor,
+ signal->index());
+
+ if (edges.size() > 2)
+ return false;
+ }
+
+ // No edges detected in any of the segments
+ return true;
+ });
+}
+