int rbuf_push_back(ringbuffer_t *rb, void *data, size_t len) { if (!rb || !data || len != rb->block_size) return -1; char *rbuf = rb->buffer; if (!rbuf) return -1; osal_memcpy(rbuf + rb->end * rb->block_size, data, len); AdvanceIndex(rb->end, rb->capacity); if (rb->length == rb->capacity) { AdvanceIndex(rb->start, rb->capacity); } else { rb->length += 1; } return 0; }
void UpdatePerfStats( void ) { float flCurTime = Plat_FloatTime(); if ( ( m_flLastSampleTime == -1 ) || ( flCurTime - m_flLastSampleTime >= STATS_RECORD_INTERVAL ) ) { if ( ( m_flLastRealTime > 0 ) && ( flCurTime > m_flLastRealTime ) ) { float flFrameRate = 1.0 / ( flCurTime - m_flLastRealTime ); StatsBufferRecord_t &stat = m_StatsBuffer[m_nWriteIndex]; stat.m_flFrameRate = flFrameRate; AdvanceIndex(); m_flLastSampleTime = flCurTime; } } m_flLastRealTime = flCurTime; }
void *rbuf_pop_front(ringbuffer_t *rb, void *pop_value, size_t len) { if (!rb || !pop_value || len != rb->block_size) return 0; char *rbuf = rb->buffer; if (!rbuf) return 0; // empty FIFO, nothing pop out. if (rb->length > 0) { osal_memcpy(pop_value, rbuf + rb->start * len, len); AdvanceIndex(rb->start, rb->capacity); rb->length -= 1; return pop_value; } return nullptr; }