I replied to the code fragment, but for Algorand the ‘transaction counter’ is literally in each block.
Simply reading committed blocks from any algorand node is all you need to know to track total transactions per block (doing delta between block and block-1).
So tracking transactions per-block or average TPS should be trivial and require no cracking of transactions. The transaction counter is what’s used for asset ids and application ids for example - incremented with each transaction - and the creation of an asset or application just uses that transaction counter as its id.
Comment from the block header source code:
// TxnCounter is the number of the next transaction that will be
// committed after this block. Genesis blocks can start at either
// 0 or 1000, depending on a consensus parameter (AppForbidLowResources).
TxnCounter uint64 codec:"tc"