mirror of
https://github.com/livekit/livekit.git
synced 2026-03-30 19:55:41 +00:00
Allocate packetMeta up front to reduce number of allocations. (#1108)
This commit is contained in:
@@ -102,7 +102,7 @@ type VideoAllocation struct {
|
||||
}
|
||||
|
||||
func (v VideoAllocation) String() string {
|
||||
return fmt.Sprintf("VideoAllocation{state: %s, change: %s, bw: %d, del: %d, avail: %+v, exmpt: %+v, rates: %+v, target: %s, dist: %d}",
|
||||
return fmt.Sprintf("VideoAllocation{state: %s, change: %s, bw: %d, del: %d, avail: %+v, exempt: %+v, rates: %+v, target: %s, dist: %d}",
|
||||
v.state, v.change, v.bandwidthRequested, v.bandwidthDelta, v.availableLayers, v.exemptedLayers, v.bitrates, v.targetLayers, v.distanceToDesired)
|
||||
}
|
||||
|
||||
|
||||
@@ -93,23 +93,27 @@ func (p *packetMeta) unpackVP8() *buffer.VP8 {
|
||||
// Sequencer stores the packet sequence received by the down track
|
||||
type sequencer struct {
|
||||
sync.Mutex
|
||||
init bool
|
||||
max int
|
||||
seq []*packetMeta
|
||||
step int
|
||||
headSN uint16
|
||||
startTime int64
|
||||
rtt uint32
|
||||
logger logger.Logger
|
||||
init bool
|
||||
max int
|
||||
seq []*packetMeta
|
||||
meta []packetMeta
|
||||
metaWritePtr int
|
||||
step int
|
||||
headSN uint16
|
||||
startTime int64
|
||||
rtt uint32
|
||||
logger logger.Logger
|
||||
}
|
||||
|
||||
func newSequencer(maxTrack int, maxPadding int, logger logger.Logger) *sequencer {
|
||||
return &sequencer{
|
||||
startTime: time.Now().UnixNano() / 1e6,
|
||||
max: maxTrack + maxPadding,
|
||||
seq: make([]*packetMeta, maxTrack+maxPadding),
|
||||
rtt: defaultRtt,
|
||||
logger: logger,
|
||||
startTime: time.Now().UnixNano() / 1e6,
|
||||
max: maxTrack + maxPadding,
|
||||
seq: make([]*packetMeta, maxTrack+maxPadding),
|
||||
meta: make([]packetMeta, maxTrack),
|
||||
metaWritePtr: 0,
|
||||
rtt: defaultRtt,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,12 +137,20 @@ func (s *sequencer) push(sn, offSn uint16, timeStamp uint32, layer int8) *packet
|
||||
return nil
|
||||
}
|
||||
|
||||
s.seq[slot] = &packetMeta{
|
||||
s.meta[s.metaWritePtr] = packetMeta{
|
||||
sourceSeqNo: sn,
|
||||
targetSeqNo: offSn,
|
||||
timestamp: timeStamp,
|
||||
layer: layer,
|
||||
}
|
||||
|
||||
s.seq[slot] = &s.meta[s.metaWritePtr]
|
||||
|
||||
s.metaWritePtr++
|
||||
if s.metaWritePtr >= len(s.meta) {
|
||||
s.metaWritePtr -= len(s.meta)
|
||||
}
|
||||
|
||||
return s.seq[slot]
|
||||
}
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ func Test_sequencer_getNACKSeqNo(t *testing.T) {
|
||||
for _, tt := range tests {
|
||||
tt := tt
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
n := newSequencer(500, 0, logger.GetDefaultLogger())
|
||||
n := newSequencer(5, 10, logger.GetDefaultLogger())
|
||||
|
||||
for _, i := range tt.fields.input {
|
||||
n.push(i, i+tt.fields.offset, 123, 3)
|
||||
|
||||
Reference in New Issue
Block a user