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

Side by Side Diff: content/browser/device_sensors/sensor_manager_android.cc

Issue 661413003: Android: add support for Device Orientation on devices where ROTATION_VECTOR is not availabl… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add test when rotation vector is not available Created 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/device_sensors/sensor_manager_android.h" 5 #include "content/browser/device_sensors/sensor_manager_android.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
(...skipping 13 matching lines...) Expand all
24 24
25 namespace content { 25 namespace content {
26 26
27 SensorManagerAndroid::SensorManagerAndroid() 27 SensorManagerAndroid::SensorManagerAndroid()
28 : number_active_device_motion_sensors_(0), 28 : number_active_device_motion_sensors_(0),
29 device_light_buffer_(NULL), 29 device_light_buffer_(NULL),
30 device_motion_buffer_(NULL), 30 device_motion_buffer_(NULL),
31 device_orientation_buffer_(NULL), 31 device_orientation_buffer_(NULL),
32 is_light_buffer_ready_(false), 32 is_light_buffer_ready_(false),
33 is_motion_buffer_ready_(false), 33 is_motion_buffer_ready_(false),
34 is_orientation_buffer_ready_(false) { 34 is_orientation_buffer_ready_(false),
35 is_using_backup_sensors_for_orientation_(false) {
35 memset(received_motion_data_, 0, sizeof(received_motion_data_)); 36 memset(received_motion_data_, 0, sizeof(received_motion_data_));
36 device_sensors_.Reset(Java_DeviceSensors_getInstance( 37 device_sensors_.Reset(Java_DeviceSensors_getInstance(
37 AttachCurrentThread(), base::android::GetApplicationContext())); 38 AttachCurrentThread(), base::android::GetApplicationContext()));
38 } 39 }
39 40
40 SensorManagerAndroid::~SensorManagerAndroid() { 41 SensorManagerAndroid::~SensorManagerAndroid() {
41 } 42 }
42 43
43 bool SensorManagerAndroid::Register(JNIEnv* env) { 44 bool SensorManagerAndroid::Register(JNIEnv* env) {
44 return RegisterNativesImpl(env); 45 return RegisterNativesImpl(env);
(...skipping 15 matching lines...) Expand all
60 device_orientation_buffer_->data.alpha = alpha; 61 device_orientation_buffer_->data.alpha = alpha;
61 device_orientation_buffer_->data.hasAlpha = true; 62 device_orientation_buffer_->data.hasAlpha = true;
62 device_orientation_buffer_->data.beta = beta; 63 device_orientation_buffer_->data.beta = beta;
63 device_orientation_buffer_->data.hasBeta = true; 64 device_orientation_buffer_->data.hasBeta = true;
64 device_orientation_buffer_->data.gamma = gamma; 65 device_orientation_buffer_->data.gamma = gamma;
65 device_orientation_buffer_->data.hasGamma = true; 66 device_orientation_buffer_->data.hasGamma = true;
66 device_orientation_buffer_->seqlock.WriteEnd(); 67 device_orientation_buffer_->seqlock.WriteEnd();
67 68
68 if (!is_orientation_buffer_ready_) { 69 if (!is_orientation_buffer_ready_) {
69 SetOrientationBufferReadyStatus(true); 70 SetOrientationBufferReadyStatus(true);
70 updateRotationVectorHistogram(true); 71 updateRotationVectorHistogram(!is_using_backup_sensors_for_orientation_);
71 } 72 }
72 } 73 }
73 74
74 void SensorManagerAndroid::GotAcceleration( 75 void SensorManagerAndroid::GotAcceleration(
75 JNIEnv*, jobject, double x, double y, double z) { 76 JNIEnv*, jobject, double x, double y, double z) {
76 base::AutoLock autolock(motion_buffer_lock_); 77 base::AutoLock autolock(motion_buffer_lock_);
77 78
78 if (!device_motion_buffer_) 79 if (!device_motion_buffer_)
79 return; 80 return;
80 81
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 device_sensors_.obj(), 167 device_sensors_.obj(),
167 static_cast<jint>(event_type)); 168 static_cast<jint>(event_type));
168 } 169 }
169 170
170 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() { 171 int SensorManagerAndroid::GetNumberActiveDeviceMotionSensors() {
171 DCHECK(!device_sensors_.is_null()); 172 DCHECK(!device_sensors_.is_null());
172 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors( 173 return Java_DeviceSensors_getNumberActiveDeviceMotionSensors(
173 AttachCurrentThread(), device_sensors_.obj()); 174 AttachCurrentThread(), device_sensors_.obj());
174 } 175 }
175 176
177 bool SensorManagerAndroid::isUsingBackupSensorsForOrientation() {
178 DCHECK(!device_sensors_.is_null());
179 return Java_DeviceSensors_isUsingBackupSensorsForOrientation(
180 AttachCurrentThread(), device_sensors_.obj());
181 }
176 182
177 // ----- Shared memory API methods 183 // ----- Shared memory API methods
178 184
179 // --- Device Light 185 // --- Device Light
180 186
181 bool SensorManagerAndroid::StartFetchingDeviceLightData( 187 bool SensorManagerAndroid::StartFetchingDeviceLightData(
182 DeviceLightHardwareBuffer* buffer) { 188 DeviceLightHardwareBuffer* buffer) {
183 DCHECK(buffer); 189 DCHECK(buffer);
184 { 190 {
185 base::AutoLock autolock(light_buffer_lock_); 191 base::AutoLock autolock(light_buffer_lock_);
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 307
302 { 308 {
303 base::AutoLock autolock(orientation_buffer_lock_); 309 base::AutoLock autolock(orientation_buffer_lock_);
304 // If Start() was unsuccessful then set the buffer ready flag to true 310 // If Start() was unsuccessful then set the buffer ready flag to true
305 // to start firing all-null events. 311 // to start firing all-null events.
306 SetOrientationBufferReadyStatus(!success); 312 SetOrientationBufferReadyStatus(!success);
307 } 313 }
308 314
309 if (!success) 315 if (!success)
310 updateRotationVectorHistogram(false); 316 updateRotationVectorHistogram(false);
317 else
318 is_using_backup_sensors_for_orientation_ =
319 isUsingBackupSensorsForOrientation();
311 320
312 return success; 321 return success;
313 } 322 }
314 323
315 void SensorManagerAndroid::StopFetchingDeviceOrientationData() { 324 void SensorManagerAndroid::StopFetchingDeviceOrientationData() {
316 Stop(kTypeOrientation); 325 Stop(kTypeOrientation);
317 { 326 {
318 base::AutoLock autolock(orientation_buffer_lock_); 327 base::AutoLock autolock(orientation_buffer_lock_);
319 if (device_orientation_buffer_) { 328 if (device_orientation_buffer_) {
320 SetOrientationBufferReadyStatus(false); 329 SetOrientationBufferReadyStatus(false);
321 device_orientation_buffer_ = NULL; 330 device_orientation_buffer_ = NULL;
322 } 331 }
323 } 332 }
324 } 333 }
325 334
326 } // namespace content 335 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698