diff --git a/thorlcr/activities/nsplitter/thnsplitterslave.cpp b/thorlcr/activities/nsplitter/thnsplitterslave.cpp index d1d8f2e2e8e..237e47eedae 100644 --- a/thorlcr/activities/nsplitter/thnsplitterslave.cpp +++ b/thorlcr/activities/nsplitter/thnsplitterslave.cpp @@ -58,6 +58,9 @@ class CSplitterOutput : public CSimpleInterfaceOf, pu virtual bool isInputOrdered(bool consumerOrdered) const override; virtual void setOutputStream(unsigned index, IEngineRowStream *stream) override; virtual IStrandJunction *getOutputStreams(CActivityBase &ctx, unsigned idx, PointerArrayOf &streams, const CThorStrandOptions * consumerOptions, bool consumerOrdered, IOrderedCallbackCollection * orderedCallbacks) override; + // queryTotalCycles is used by downstream activities for the purpose of calculating local execute time. + // queryTotalCycles should include all time taken in start() and nextRow() methods. + // n.b. This totalCycles are not actually reported - it is only used by downstream activities. virtual unsigned __int64 queryTotalCycles() const override { return COutputTiming::queryTotalCycles(); } virtual unsigned __int64 queryEndCycles() const override { return COutputTiming::queryEndCycles(); } virtual unsigned __int64 queryBlockedCycles() const { return COutputTiming::queryBlockedCycles(); } @@ -77,6 +80,13 @@ class CSplitterOutput : public CSimpleInterfaceOf, pu // // NSplitterSlaveActivity // +// Note regarding NSplitterSlaveActivity::COutputTiming methods: +// - queryTotalCycles in NSplitterSlaveActivity is not used by downstream +// activities (like they are in other activities). Downstream activities +// use CSplitterOutput::queryTotalCycles for the purposes of calculating +// local execute time +// - totalCycles in this class is reported as the activity's StTotalExecuteTime +// and it is used to calculate & report the StLocalExecuteTime. class NSplitterSlaveActivity : public CSlaveActivity, implements ISharedSmartBufferCallback { @@ -212,6 +222,7 @@ class NSplitterSlaveActivity : public CSlaveActivity, implements ISharedSmartBuf if (!inputPrepared) { inputPrepared = true; + ActivityTimer t(slaveTimerStats, queryTimeActivities()); try { assertex(((unsigned)-1) != connectedOutputCount); @@ -299,6 +310,7 @@ class NSplitterSlaveActivity : public CSlaveActivity, implements ISharedSmartBuf } inline const void *nextRow(unsigned outIdx, rowcount_t current) { + ActivityTimer t(slaveTimerStats, queryTimeActivities()); if (1 == activeOutputCount) // will be true, if only 1 input connected, or only 1 input was active (others stopped) when it started reading return inputStream->nextRow(); if (recsReady == current && writeAheadException.get())