wgengine/magicsock: don't use endpoint debug ringbuffer on mobile.

Save some memory.

Updates tailscale/corp#18514

Change-Id: Ibcaf3c6d8e5cc275c81f04141d0f176e2249509b
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick 2024-03-20 21:09:23 -07:00 committed by Brad Fitzpatrick
parent 512fc0b502
commit 5d1c72f76b
2 changed files with 19 additions and 3 deletions

View File

@ -24,7 +24,12 @@ type RingBuffer[T any] struct {
// Add appends a new item to the RingBuffer, possibly overwriting the oldest
// item in the buffer if it is already full.
//
// It does nothing if rb is nil.
func (rb *RingBuffer[T]) Add(t T) {
if rb == nil {
return
}
rb.mu.Lock()
defer rb.mu.Unlock()
if len(rb.buf) < rb.max {
@ -37,6 +42,8 @@ func (rb *RingBuffer[T]) Add(t T) {
// GetAll returns a copy of all the entries in the ring buffer in the order they
// were added.
//
// It returns nil if rb is nil.
func (rb *RingBuffer[T]) GetAll() []T {
if rb == nil {
return nil

View File

@ -1815,9 +1815,11 @@ func debugRingBufferSize(numPeers int) int {
}
var maxRingBufferSize int
if runtime.GOOS == "ios" || runtime.GOOS == "android" {
maxRingBufferSize = 1 * 1024 * 1024
maxRingBufferSize = 1 << 20
// But as of 2024-03-20, we now just disable the ring buffer entirely
// on mobile as it hadn't proven useful enough to justify even 1 MB.
} else {
maxRingBufferSize = 4 * 1024 * 1024
maxRingBufferSize = 4 << 20
}
if v := debugRingBufferMaxSizeBytes(); v > 0 {
maxRingBufferSize = v
@ -1984,7 +1986,6 @@ func (c *Conn) SetNetworkMap(nm *netmap.NetworkMap) {
ep = &endpoint{
c: c,
debugUpdates: ringbuffer.New[EndpointChange](entriesPerBuffer),
nodeID: n.ID(),
publicKey: n.Key(),
publicKeyHex: n.Key().UntypedHexString(),
@ -1993,6 +1994,14 @@ func (c *Conn) SetNetworkMap(nm *netmap.NetworkMap) {
heartbeatDisabled: flags.heartbeatDisabled,
isWireguardOnly: n.IsWireGuardOnly(),
}
switch runtime.GOOS {
case "ios", "android":
// Omit, to save memory. Prior to 2024-03-20 we used to limit it to
// ~1MB on mobile but we never used the data so the memory was just
// wasted.
default:
ep.debugUpdates = ringbuffer.New[EndpointChange](entriesPerBuffer)
}
if n.Addresses().Len() > 0 {
ep.nodeAddr = n.Addresses().At(0).Addr()
}