* @brief Publishes a fully constructed DataModel frame to all registered output modules. The * dashboard draws the pooled slot directly; async sinks (gated on the cached m_anyAsyncSink * flag) get one detached copy so a slow-export backlog can never pin the pool. */
| 1851 | * flag) get one detached copy so a slow-export backlog can never pin the pool. |
| 1852 | */ |
| 1853 | void DataModel::FrameBuilder::hotpathTxFrame(const DataModel::TimestampedFramePtr& frame) |
| 1854 | { |
| 1855 | Q_ASSERT(frame); |
| 1856 | Q_ASSERT(!frame->data.groups.empty()); |
| 1857 | Q_ASSERT(!frame->data.title.isEmpty()); |
| 1858 | |
| 1859 | static auto& dashboard = UI::Dashboard::instance(); |
| 1860 | dashboard.hotpathRxFrame(frame); |
| 1861 | |
| 1862 | if (!m_anyAsyncSink) |
| 1863 | return; |
| 1864 | |
| 1865 | static auto& csvExport = CSV::Export::instance(); |
| 1866 | static auto& mdf4Export = MDF4::Export::instance(); |
| 1867 | static auto& pluginsServer = API::Server::instance(); |
| 1868 | #ifdef BUILD_COMMERCIAL |
| 1869 | static auto& sqliteExport = Sessions::Export::instance(); |
| 1870 | static auto& mqttPublisher = MQTT::Publisher::instance(); |
| 1871 | #endif |
| 1872 | #ifdef ENABLE_GRPC |
| 1873 | static auto& grpcServer = API::GRPC::GRPCServer::instance(); |
| 1874 | #endif |
| 1875 | |
| 1876 | const auto detached = |
| 1877 | std::make_shared<DataModel::TimestampedFrame>(frame->data, frame->timestamp); |
| 1878 | |
| 1879 | csvExport.hotpathTxFrame(detached); |
| 1880 | mdf4Export.hotpathTxFrame(detached); |
| 1881 | pluginsServer.hotpathTxFrame(detached); |
| 1882 | #ifdef BUILD_COMMERCIAL |
| 1883 | sqliteExport.hotpathTxFrame(detached); |
| 1884 | mqttPublisher.hotpathTxFrame(detached); |
| 1885 | #endif |
| 1886 | #ifdef ENABLE_GRPC |
| 1887 | grpcServer.hotpathTxFrame(detached); |
| 1888 | #endif |
| 1889 | } |
| 1890 | |
| 1891 | //-------------------------------------------------------------------------------------------------- |
| 1892 | // Per-dataset value transforms |
nothing calls this directly
no test coverage detected