From be49f1eca4a9d2d101207943742a53b445baf5be Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sat, 24 Feb 2024 22:38:32 +0100 Subject: [PATCH] Create UhidManager only on first use There is no need to create a UhidManager instance (with its thread) if no UHID is used. --- .../java/com/genymobile/scrcpy/Controller.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/Controller.java b/server/src/main/java/com/genymobile/scrcpy/Controller.java index 0cdadfae..2dfe966e 100644 --- a/server/src/main/java/com/genymobile/scrcpy/Controller.java +++ b/server/src/main/java/com/genymobile/scrcpy/Controller.java @@ -26,7 +26,7 @@ public class Controller implements AsyncProcessor { private Thread thread; - private final UhidManager uhidManager; + private UhidManager uhidManager; private final Device device; private final ControlChannel controlChannel; @@ -52,7 +52,13 @@ public class Controller implements AsyncProcessor { this.powerOn = powerOn; initPointers(); sender = new DeviceMessageSender(controlChannel); - uhidManager = new UhidManager(sender); + } + + private UhidManager getUhidManager() { + if (uhidManager == null) { + uhidManager = new UhidManager(sender); + } + return uhidManager; } private void initPointers() { @@ -98,7 +104,9 @@ public class Controller implements AsyncProcessor { // this is expected on close } finally { Ln.d("Controller stopped"); - uhidManager.closeAll(); + if (uhidManager != null) { + uhidManager.closeAll(); + } listener.onTerminated(true); } }, "control-recv"); @@ -431,7 +439,7 @@ public class Controller implements AsyncProcessor { private void uhidOpen(int id, byte[] data) { try { - uhidManager.open(id, data); + getUhidManager().open(id, data); } catch (IOException e) { Ln.e("Could not open UHID", e); } @@ -439,7 +447,7 @@ public class Controller implements AsyncProcessor { private void uhidWriteInput(int id, byte[] data) { try { - uhidManager.writeInput(id, data); + getUhidManager().writeInput(id, data); } catch (IOException e) { Ln.e("Could not write UHID input", e); }