Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(322)

Side by Side Diff: device/generic_sensor/platform_sensor_android.cc

Issue 2395853003: [Sensors] Improvements in shared buffer managing (Closed)
Patch Set: Pass task runner to PlatformSensor constructor Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/generic_sensor/platform_sensor_android.h" 5 #include "device/generic_sensor/platform_sensor_android.h"
6 6
7 #include "base/android/context_utils.h" 7 #include "base/android/context_utils.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/threading/thread_task_runner_handle.h"
10 #include "jni/PlatformSensor_jni.h" 9 #include "jni/PlatformSensor_jni.h"
11 10
12 using base::android::AttachCurrentThread; 11 using base::android::AttachCurrentThread;
13 using base::android::JavaRef; 12 using base::android::JavaRef;
14 13
15 namespace device { 14 namespace device {
16 15
17 // static 16 // static
18 bool PlatformSensorAndroid::RegisterJNI(JNIEnv* env) { 17 bool PlatformSensorAndroid::RegisterJNI(JNIEnv* env) {
19 return RegisterNativesImpl(env); 18 return RegisterNativesImpl(env);
20 } 19 }
21 20
22 PlatformSensorAndroid::PlatformSensorAndroid( 21 PlatformSensorAndroid::PlatformSensorAndroid(
23 mojom::SensorType type, 22 mojom::SensorType type,
24 mojo::ScopedSharedBufferMapping mapping, 23 mojo::ScopedSharedBufferMapping mapping,
25 uint64_t buffer_size,
26 PlatformSensorProvider* provider, 24 PlatformSensorProvider* provider,
25 scoped_refptr<base::SingleThreadTaskRunner> task_runner,
27 const JavaRef<jobject>& java_sensor) 26 const JavaRef<jobject>& java_sensor)
28 : PlatformSensor(type, std::move(mapping), provider), 27 : PlatformSensor(type,
29 task_runner_(base::ThreadTaskRunnerHandle::Get()) { 28 std::move(mapping),
29 provider,
30 std::move(task_runner)) {
30 JNIEnv* env = AttachCurrentThread(); 31 JNIEnv* env = AttachCurrentThread();
31 j_object_.Reset(java_sensor); 32 j_object_.Reset(java_sensor);
32 33
33 jobject byte_buffer = 34 Java_PlatformSensor_initPlatformSensorAndroid(env, j_object_.obj(),
34 env->NewDirectByteBuffer(shared_buffer_mapping_.get(), buffer_size); 35 reinterpret_cast<jlong>(this));
35 Java_PlatformSensor_initPlatformSensorAndroid(
36 env, j_object_.obj(), reinterpret_cast<jlong>(this), byte_buffer);
37 } 36 }
38 37
39 PlatformSensorAndroid::~PlatformSensorAndroid() { 38 PlatformSensorAndroid::~PlatformSensorAndroid() {
40 StopSensor(); 39 StopSensor();
41 } 40 }
42 41
43 mojom::ReportingMode PlatformSensorAndroid::GetReportingMode() { 42 mojom::ReportingMode PlatformSensorAndroid::GetReportingMode() {
44 JNIEnv* env = AttachCurrentThread(); 43 JNIEnv* env = AttachCurrentThread();
45 return static_cast<mojom::ReportingMode>( 44 return static_cast<mojom::ReportingMode>(
46 Java_PlatformSensor_getReportingMode(env, j_object_.obj())); 45 Java_PlatformSensor_getReportingMode(env, j_object_.obj()));
(...skipping 18 matching lines...) Expand all
65 Java_PlatformSensor_stopSensor(env, j_object_.obj()); 64 Java_PlatformSensor_stopSensor(env, j_object_.obj());
66 } 65 }
67 66
68 bool PlatformSensorAndroid::CheckSensorConfiguration( 67 bool PlatformSensorAndroid::CheckSensorConfiguration(
69 const PlatformSensorConfiguration& configuration) { 68 const PlatformSensorConfiguration& configuration) {
70 JNIEnv* env = AttachCurrentThread(); 69 JNIEnv* env = AttachCurrentThread();
71 return Java_PlatformSensor_checkSensorConfiguration( 70 return Java_PlatformSensor_checkSensorConfiguration(
72 env, j_object_.obj(), configuration.frequency()); 71 env, j_object_.obj(), configuration.frequency());
73 } 72 }
74 73
75 void PlatformSensorAndroid::NotifyPlatformSensorReadingChanged(
76 JNIEnv*,
77 const JavaRef<jobject>& caller) {
78 task_runner_->PostTask(
79 FROM_HERE,
80 base::Bind(&PlatformSensorAndroid::NotifySensorReadingChanged, this));
81 }
82
83 void PlatformSensorAndroid::NotifyPlatformSensorError( 74 void PlatformSensorAndroid::NotifyPlatformSensorError(
84 JNIEnv*, 75 JNIEnv*,
85 const JavaRef<jobject>& caller) { 76 const JavaRef<jobject>& caller) {
86 task_runner_->PostTask( 77 task_runner_->PostTask(
87 FROM_HERE, base::Bind(&PlatformSensorAndroid::NotifySensorError, this)); 78 FROM_HERE, base::Bind(&PlatformSensorAndroid::NotifySensorError, this));
88 } 79 }
89 80
81 void PlatformSensorAndroid::UpdatePlatformSensorReading(
82 JNIEnv*,
83 const base::android::JavaRef<jobject>& caller,
84 jdouble timestamp,
85 jdouble value1,
86 jdouble value2,
87 jdouble value3) {
88 SensorReading reading;
89 reading.timestamp = timestamp;
90 reading.values[0] = value1;
91 reading.values[1] = value2;
92 reading.values[2] = value3;
93
94 bool needNotify = (GetReportingMode() == mojom::ReportingMode::ON_CHANGE);
95 UpdateSensorReading(reading, needNotify);
96 }
97
90 } // namespace device 98 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698