Create UhidManager only on first use

There is no need to create a UhidManager instance (with its thread) if
no UHID is used.

PR #4473 <https://github.com/Genymobile/scrcpy/pull/4473>
This commit is contained in:
Romain Vimont 2024-02-24 22:38:32 +01:00
parent 87da68ee0d
commit f557188dc8
1 changed files with 13 additions and 5 deletions

View File

@ -26,7 +26,7 @@ public class Controller implements AsyncProcessor {
private Thread thread; private Thread thread;
private final UhidManager uhidManager; private UhidManager uhidManager;
private final Device device; private final Device device;
private final ControlChannel controlChannel; private final ControlChannel controlChannel;
@ -52,8 +52,14 @@ public class Controller implements AsyncProcessor {
this.powerOn = powerOn; this.powerOn = powerOn;
initPointers(); initPointers();
sender = new DeviceMessageSender(controlChannel); sender = new DeviceMessageSender(controlChannel);
}
private UhidManager getUhidManager() {
if (uhidManager == null) {
uhidManager = new UhidManager(sender); uhidManager = new UhidManager(sender);
} }
return uhidManager;
}
private void initPointers() { private void initPointers() {
for (int i = 0; i < PointersState.MAX_POINTERS; ++i) { for (int i = 0; i < PointersState.MAX_POINTERS; ++i) {
@ -99,7 +105,9 @@ public class Controller implements AsyncProcessor {
Ln.e("Controller error", e); Ln.e("Controller error", e);
} finally { } finally {
Ln.d("Controller stopped"); Ln.d("Controller stopped");
if (uhidManager != null) {
uhidManager.closeAll(); uhidManager.closeAll();
}
listener.onTerminated(true); listener.onTerminated(true);
} }
}, "control-recv"); }, "control-recv");
@ -195,10 +203,10 @@ public class Controller implements AsyncProcessor {
device.rotateDevice(); device.rotateDevice();
break; break;
case ControlMessage.TYPE_UHID_CREATE: case ControlMessage.TYPE_UHID_CREATE:
uhidManager.open(msg.getId(), msg.getData()); getUhidManager().open(msg.getId(), msg.getData());
break; break;
case ControlMessage.TYPE_UHID_INPUT: case ControlMessage.TYPE_UHID_INPUT:
uhidManager.writeInput(msg.getId(), msg.getData()); getUhidManager().writeInput(msg.getId(), msg.getData());
break; break;
default: default:
// do nothing // do nothing