Allocate packetMeta up front to reduce number of allocations. (#1108)

This commit is contained in:
Raja Subramanian
2022-10-20 14:31:19 +05:30
committed by GitHub
parent 4344af6fd3
commit b9894ab014
3 changed files with 28 additions and 16 deletions

View File

@@ -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)
}

View File

@@ -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]
}

View File

@@ -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)