From 53c9355e988d8efc838b9c81a604e47d5d441074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Tue, 23 Dec 2025 17:31:46 +0000 Subject: [PATCH] Improve logging when multiple devices are connected --- .../gadgetbridge/service/btbr/BtBRQueue.java | 12 ++++++++---- .../service/btclassic/BtClassicIoThread.java | 2 +- .../gadgetbridge/service/btle/BtLEQueue.java | 17 +++++++++++------ .../casio/gb6900/CasioGB6900HandlerThread.java | 2 +- .../devices/hplus/HPlusHandlerThread.java | 2 +- .../service/devices/pebble/PebbleIoThread.java | 2 +- .../devices/pebble/ble/PebbleLESupport.java | 2 +- .../serial/AbstractSerialDeviceSupport.java | 5 +++-- 8 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java index 894051c655..8ffd66fb0f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java @@ -43,7 +43,8 @@ import nodomain.freeyourgadget.gadgetbridge.service.DeviceSupport; import nodomain.freeyourgadget.gadgetbridge.util.GB; public final class BtBRQueue { - private static final Logger LOG = LoggerFactory.getLogger(BtBRQueue.class); + private final Logger LOG; + private static final AtomicLong QUEUE_COUNTER = new AtomicLong(0L); private static final AtomicLong THREAD_COUNTER = new AtomicLong(0L); public static final int HANDLER_SUBJECT_CONNECT = 0; public static final int HANDLER_SUBJECT_PERFORM_TRANSACTION = 1; @@ -68,7 +69,7 @@ public final class BtBRQueue { return new Thread("BtBRQueue_read_" + THREAD_COUNTER.getAndIncrement()) { @Override public void run() { - LOG.debug("started thread {}", getName()); + LOG.debug("started thread {} for {}", getName(), mGbDevice.getAddress()); final byte[] buffer = new byte[mBufferSize]; int nRead; @@ -115,6 +116,8 @@ public final class BtBRQueue { } public BtBRQueue(BluetoothAdapter btAdapter, GBDevice gbDevice, Context context, SocketCallback socketCallback, @NonNull UUID supportedService, int bufferSize) { + LOG = LoggerFactory.getLogger(BtBRQueue.class.getName() + "(" + QUEUE_COUNTER.getAndIncrement() + ")"); + mBtAdapter = btAdapter; mGbDevice = gbDevice; mContext = context; @@ -126,9 +129,10 @@ public final class BtBRQueue { mWriteHandlerThread.start(); new Handler(mWriteHandlerThread.getLooper()).post(() - -> LOG.debug("started thread {}", Thread.currentThread().getName())); + -> LOG.debug("started thread {} for {}", Thread.currentThread().getName(), gbDevice.getAddress())); + + LOG.debug("Write handler thread for {} is prepared, creating write handler", gbDevice.getAddress()); - LOG.debug("Write handler thread is prepared, creating write handler"); mWriteHandler = new Handler(mWriteHandlerThread.getLooper()) { @SuppressLint("MissingPermission") @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btclassic/BtClassicIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btclassic/BtClassicIoThread.java index e470aacb9b..a4d40c0d3a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btclassic/BtClassicIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btclassic/BtClassicIoThread.java @@ -87,7 +87,7 @@ public abstract class BtClassicIoThread extends GBDeviceIoThread { @Override public void run() { - LOG.debug("started thread {}", getName()); + LOG.debug("Started thread {} for {}", getName(), gbDevice.getAddress()); mIsConnected = connect(); if (!mIsConnected) { if (GBApplication.getPrefs().getAutoReconnect(getDevice()) && !mQuit) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java index aea84a8037..44bf2dc35d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btle/BtLEQueue.java @@ -65,8 +65,9 @@ import nodomain.freeyourgadget.gadgetbridge.util.GB; */ @SuppressLint("MissingPermission") // if we're using this, we have bluetooth permissions public final class BtLEQueue implements Thread.UncaughtExceptionHandler { - private static final Logger LOG = LoggerFactory.getLogger(BtLEQueue.class); + private final Logger LOG; private static final byte[] EMPTY = new byte[0]; + private static final AtomicLong QUEUE_COUNTER = new AtomicLong(0L); private static final AtomicLong THREAD_COUNTER = new AtomicLong(0L); private final Object mGattMonitor; @@ -101,7 +102,7 @@ public final class BtLEQueue implements Thread.UncaughtExceptionHandler { private class DispatchRunnable implements Runnable { @Override public void run() { - LOG.debug("started thread {}", Thread.currentThread().getName()); + LOG.debug("started thread {} for {}", Thread.currentThread().getName(), mGbDevice.getAddress()); boolean crashed = false; while (!mDisposed.get() && !crashed) { @@ -216,6 +217,12 @@ public final class BtLEQueue implements Thread.UncaughtExceptionHandler { }; BtLEQueue(GBDevice gbDevice, Set supportedServerServices, AbstractBTLEDeviceSupport deviceSupport) { + final long threadIdx = THREAD_COUNTER.getAndIncrement(); + + LOG = LoggerFactory.getLogger(BtLEQueue.class.getName() + "(" + QUEUE_COUNTER.getAndIncrement() + ")"); + + LOG.debug("Initializing queue for {} with threadIdx={}", gbDevice.getAddress(), threadIdx); + // 1) apply all settings mBluetoothAdapter = deviceSupport.getBluetoothAdapter(); mContext = deviceSupport.getContext(); @@ -228,8 +235,6 @@ public final class BtLEQueue implements Thread.UncaughtExceptionHandler { // #5414 - some older android versions misbehave with the new constructor connectionForceLegacyGatt = deviceSupport.getDevicePrefs().getConnectionForceLegacyGatt(); - long threadIdx = THREAD_COUNTER.getAndIncrement(); - // 2) create new objects mDisposed = new AtomicBoolean(false); mGattMonitor = new Object(); @@ -243,12 +248,12 @@ public final class BtLEQueue implements Thread.UncaughtExceptionHandler { mDispatchThread.start(); // 4) handler thread ensure serial processing and informative thread name in the log - if(GBApplication.isRunningOreoOrLater() && !connectionForceLegacyGatt){ + if (GBApplication.isRunningOreoOrLater() && !connectionForceLegacyGatt) { mReceiverThread = new HandlerThread("BtLEQueue_" + threadIdx + "_in"); mReceiverThread.setUncaughtExceptionHandler(this); mReceiverThread.start(); mReceiverHandler = new Handler(mReceiverThread.getLooper()); - mReceiverHandler.post(() -> LOG.debug("started thread {}", Thread.currentThread().getName())); + mReceiverHandler.post(() -> LOG.debug("started thread {} for {}", Thread.currentThread().getName(), gbDevice.getAddress())); } else { mReceiverThread = null; mReceiverHandler = null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/gb6900/CasioGB6900HandlerThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/gb6900/CasioGB6900HandlerThread.java index b0f18110a7..4dcc6623cf 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/gb6900/CasioGB6900HandlerThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/gb6900/CasioGB6900HandlerThread.java @@ -46,7 +46,7 @@ public class CasioGB6900HandlerThread extends GBDeviceIoThread { @Override public void run() { - LOG.debug("started thread {}", getName()); + LOG.debug("started thread {} for {}", getName(), gbDevice.getAddress()); mQuit = false; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java index 2d0c4ed1e8..7887b0d543 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusHandlerThread.java @@ -85,7 +85,7 @@ class HPlusHandlerThread extends GBDeviceIoThread { @Override public void run() { - LOG.debug("started thread {}", getName()); + LOG.debug("started thread {} for {}", getName(), gbDevice.getAddress()); mQuit = false; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java index 0438589fa6..12558e77bb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java @@ -245,7 +245,7 @@ class PebbleIoThread extends GBDeviceIoThread { @Override public void run() { - LOG.debug("started thread {}", getName()); + LOG.debug("started thread {} for {}", getName(), gbDevice.getAddress()); mIsConnected = connect(); if (!mIsConnected) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java index d948ffd117..dc6f66da61 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/ble/PebbleLESupport.java @@ -68,7 +68,7 @@ public class PebbleLESupport { mWriteHandlerThread = new HandlerThread("PebbleLESupport_write_" + THREAD_COUNTER.getAndIncrement()); mWriteHandlerThread.start(); mWriteHandler = new Handler(mWriteHandlerThread.getLooper()); - mWriteHandler.post(() -> LOG.debug("started thread {}", Thread.currentThread().getName())); + mWriteHandler.post(() -> LOG.debug("started thread {} for {}", Thread.currentThread().getName(), gbDevice.getAddress())); mMTULimit = GBApplication.getDevicePrefs(gbDevice).getInt("pebble_mtu_limit", 512); mMTULimit = Math.max(mMTULimit, 20); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/AbstractSerialDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/AbstractSerialDeviceSupport.java index cda11e6327..c1b9f0ed2b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/AbstractSerialDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/AbstractSerialDeviceSupport.java @@ -109,8 +109,9 @@ public abstract class AbstractSerialDeviceSupport extends AbstractDeviceSupport */ public synchronized GBDeviceIoThread getDeviceIOThread() { if (gbDeviceIOThread == null || !gbDeviceIOThread.isAlive()) { - LOG.debug("Creating new IO thread"); - gbDeviceIOThread = createDeviceIOThread(); + LOG.debug("Creating new IO thread for {}", gbDevice.getAddress()); + final Thread thread = (gbDeviceIOThread = createDeviceIOThread()); + LOG.debug("New IO thread: {}", thread.getName()); } return gbDeviceIOThread; }