From 02a506608f72b2884d8559994a97f5928f3a4c1d Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Wed, 10 Feb 2016 21:18:51 +0100 Subject: [PATCH] Significantly decreased CPU usage. Calls to InputStream#available() weren't blocking, so the loops in both classes were running hot. Replaced the conditional with a blocking call instead. CPU usage is down from 100% to barely noticable. --- .../ensichat/bluetooth/BluetoothTransferThread.scala | 11 ++++++----- .../core/internet/InternetConnectionThread.scala | 10 ++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/android/src/main/scala/com/nutomic/ensichat/bluetooth/BluetoothTransferThread.scala b/android/src/main/scala/com/nutomic/ensichat/bluetooth/BluetoothTransferThread.scala index 406ec82..0ef5268 100644 --- a/android/src/main/scala/com/nutomic/ensichat/bluetooth/BluetoothTransferThread.scala +++ b/android/src/main/scala/com/nutomic/ensichat/bluetooth/BluetoothTransferThread.scala @@ -65,12 +65,13 @@ class BluetoothTransferThread(context: Context, device: Device, socket: Bluetoot while (socket.isConnected) { try { - if (inStream.available() > 0) { - val msg = Message.read(inStream) + // Block until data arrives. + inStream.read(Array[Byte](), 0, 0) - onReceive(msg, device.id) - Log.v(Tag, "Receiving " + msg) - } + val msg = Message.read(inStream) + Log.v(Tag, "Received " + msg) + + onReceive(msg, device.id) } catch { case e @ (_: ReadMessageException | _: IOException) => Log.w(Tag, "Failed to read incoming message", e) diff --git a/core/src/main/scala/com/nutomic/ensichat/core/internet/InternetConnectionThread.scala b/core/src/main/scala/com/nutomic/ensichat/core/internet/InternetConnectionThread.scala index cfe6c2c..d420ee7 100644 --- a/core/src/main/scala/com/nutomic/ensichat/core/internet/InternetConnectionThread.scala +++ b/core/src/main/scala/com/nutomic/ensichat/core/internet/InternetConnectionThread.scala @@ -50,11 +50,13 @@ class InternetConnectionThread(socket: Socket, crypto: Crypto, onDisconnected: ( try { socket.setKeepAlive(true) while (socket.isConnected) { - if (inStream.available() > 0) { - val msg = Message.read(inStream) + // Block until data arrives. + inStream.read(Array[Byte](), 0, 0) - onReceive(msg, this) - } + val msg = Message.read(inStream) + Log.v(Tag, "Received " + msg) + + onReceive(msg, this) } } catch { case e @ (_: ReadMessageException | _: IOException) =>