| Index: device/generic_sensor/android/java/src/org/chromium/device/sensors/PlatformSensor.java
|
| diff --git a/device/generic_sensor/android/java/src/org/chromium/device/sensors/PlatformSensor.java b/device/generic_sensor/android/java/src/org/chromium/device/sensors/PlatformSensor.java
|
| index fb4de42a150bcdf7ca591d848be3e2d27c770d05..2da8e583d0aeb2875e2f46366f49737d634104bf 100644
|
| --- a/device/generic_sensor/android/java/src/org/chromium/device/sensors/PlatformSensor.java
|
| +++ b/device/generic_sensor/android/java/src/org/chromium/device/sensors/PlatformSensor.java
|
| @@ -13,10 +13,6 @@ import org.chromium.base.annotations.CalledByNative;
|
| import org.chromium.base.annotations.JNINamespace;
|
| import org.chromium.device.mojom.ReportingMode;
|
|
|
| -import java.nio.BufferOverflowException;
|
| -import java.nio.ByteBuffer;
|
| -import java.nio.ByteOrder;
|
| -
|
| import java.util.List;
|
|
|
| /**
|
| @@ -26,7 +22,7 @@ import java.util.List;
|
| @JNINamespace("device")
|
| public class PlatformSensor implements SensorEventListener {
|
| private static final double MICROSECONDS_IN_SECOND = 1000000;
|
| - private static final double MILLISECONDS_IN_NANOSECOND = 0.000001d;
|
| + private static final double SECONDS_IN_NANOSECOND = 0.000000001d;
|
|
|
| /**
|
| * The SENSOR_FREQUENCY_NORMAL is defined as 5Hz which corresponds to a polling delay
|
| @@ -41,16 +37,6 @@ public class PlatformSensor implements SensorEventListener {
|
| private long mNativePlatformSensorAndroid;
|
|
|
| /**
|
| - * Shared buffer that is used to return data to the client.
|
| - */
|
| - private ByteBuffer mBuffer;
|
| -
|
| - /**
|
| - * Buffer that is filled with sensor reading data and swapped into mBuffer.
|
| - */
|
| - private ByteBuffer mSensorReadingData;
|
| -
|
| - /**
|
| * Used for fetching sensor reading values and obtaining information about the sensor.
|
| * @see android.hardware.Sensor
|
| */
|
| @@ -107,25 +93,9 @@ public class PlatformSensor implements SensorEventListener {
|
| * @param buffer shared buffer that is used to return data to the client.
|
| */
|
| @CalledByNative
|
| - protected void initPlatformSensorAndroid(long nativePlatformSensorAndroid, ByteBuffer buffer) {
|
| + protected void initPlatformSensorAndroid(long nativePlatformSensorAndroid) {
|
| assert nativePlatformSensorAndroid != 0;
|
| - assert buffer != null;
|
| mNativePlatformSensorAndroid = nativePlatformSensorAndroid;
|
| - mBuffer = buffer;
|
| - mSensorReadingData = ByteBuffer.allocate(mBuffer.capacity());
|
| - mSensorReadingData.order(ByteOrder.nativeOrder());
|
| - }
|
| -
|
| - /**
|
| - * Fills shared buffer with sensor reading data, throws exception if number of received values
|
| - * is less than the number required for the PlatformSensor.
|
| - */
|
| - private void fillSensorReadingData(SensorEvent event, ByteBuffer buffer)
|
| - throws IllegalStateException {
|
| - if (event.values.length < mReadingCount) throw new IllegalStateException();
|
| - for (int i = 0; i < mReadingCount; ++i) {
|
| - buffer.putDouble(event.values[i]);
|
| - }
|
| }
|
|
|
| /**
|
| @@ -213,17 +183,19 @@ public class PlatformSensor implements SensorEventListener {
|
| }
|
|
|
| /**
|
| - * Notifies native device::PlatformSensorAndroid when reading is changed.
|
| + * Notifies native device::PlatformSensorAndroid when there is an error.
|
| */
|
| - protected void sensorReadingChanged() {
|
| - nativeNotifyPlatformSensorReadingChanged(mNativePlatformSensorAndroid);
|
| + protected void sensorError() {
|
| + nativeNotifyPlatformSensorError(mNativePlatformSensorAndroid);
|
| }
|
|
|
| /**
|
| - * Notifies native device::PlatformSensorAndroid when there is an error.
|
| + * Updates reading at native device::PlatformSensorAndroid.
|
| */
|
| - protected void sensorError() {
|
| - nativeNotifyPlatformSensorError(mNativePlatformSensorAndroid);
|
| + protected void updateSensorReading(
|
| + double timestamp, double value1, double value2, double value3) {
|
| + nativeUpdatePlatformSensorReading(
|
| + mNativePlatformSensorAndroid, timestamp, value1, value2, value3);
|
| }
|
|
|
| @Override
|
| @@ -231,28 +203,26 @@ public class PlatformSensor implements SensorEventListener {
|
|
|
| @Override
|
| public void onSensorChanged(SensorEvent event) {
|
| - try {
|
| - mSensorReadingData.mark();
|
| - // Convert timestamp from nanoseconds to milliseconds.
|
| - mSensorReadingData.putDouble(event.timestamp * MILLISECONDS_IN_NANOSECOND);
|
| - fillSensorReadingData(event, mSensorReadingData);
|
| -
|
| - mSensorReadingData.reset();
|
| -
|
| - mBuffer.mark();
|
| - mBuffer.put(mSensorReadingData);
|
| - mSensorReadingData.reset();
|
| - mBuffer.reset();
|
| -
|
| - if (getReportingMode() == ReportingMode.ON_CHANGE) {
|
| - sensorReadingChanged();
|
| - }
|
| - } catch (BufferOverflowException | IllegalStateException e) {
|
| + if (event.values.length < mReadingCount) {
|
| sensorError();
|
| stopSensor();
|
| + return;
|
| + }
|
| +
|
| + double timestamp = event.timestamp * SECONDS_IN_NANOSECOND;
|
| + switch (event.values.length) {
|
| + case 1:
|
| + updateSensorReading(timestamp, event.values[0], 0.0, 0.0);
|
| + break;
|
| + case 2:
|
| + updateSensorReading(timestamp, event.values[0], event.values[1], 0.0);
|
| + break;
|
| + default:
|
| + updateSensorReading(timestamp, event.values[0], event.values[1], event.values[2]);
|
| }
|
| }
|
|
|
| - private native void nativeNotifyPlatformSensorReadingChanged(long nativePlatformSensorAndroid);
|
| private native void nativeNotifyPlatformSensorError(long nativePlatformSensorAndroid);
|
| + private native void nativeUpdatePlatformSensorReading(long nativePlatformSensorAndroid,
|
| + double timestamp, double value1, double value2, double value3);
|
| }
|
|
|