| OLD | NEW |
| 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/data_fetcher_shared_memory.h" | 5 #include "content/browser/device_sensors/data_fetcher_shared_memory.h" |
| 6 | 6 |
| 7 #include <GuidDef.h> | 7 #include <GuidDef.h> |
| 8 #include <InitGuid.h> | 8 #include <InitGuid.h> |
| 9 #include <PortableDeviceTypes.h> | 9 #include <PortableDeviceTypes.h> |
| 10 #include <Sensors.h> | 10 #include <Sensors.h> |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 | 256 |
| 257 private: | 257 private: |
| 258 DeviceLightHardwareBuffer* const buffer_; | 258 DeviceLightHardwareBuffer* const buffer_; |
| 259 | 259 |
| 260 DISALLOW_COPY_AND_ASSIGN(SensorEventSinkLight); | 260 DISALLOW_COPY_AND_ASSIGN(SensorEventSinkLight); |
| 261 }; | 261 }; |
| 262 | 262 |
| 263 DataFetcherSharedMemory::DataFetcherSharedMemory() | 263 DataFetcherSharedMemory::DataFetcherSharedMemory() |
| 264 : motion_buffer_(nullptr), | 264 : motion_buffer_(nullptr), |
| 265 orientation_buffer_(nullptr), | 265 orientation_buffer_(nullptr), |
| 266 orientation_absolute_buffer_(nullptr), |
| 266 light_buffer_(nullptr) { | 267 light_buffer_(nullptr) { |
| 267 } | 268 } |
| 268 | 269 |
| 269 DataFetcherSharedMemory::~DataFetcherSharedMemory() { | 270 DataFetcherSharedMemory::~DataFetcherSharedMemory() { |
| 270 } | 271 } |
| 271 | 272 |
| 272 DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const { | 273 DataFetcherSharedMemory::FetcherType DataFetcherSharedMemory::GetType() const { |
| 273 return FETCHER_TYPE_SEPARATE_THREAD; | 274 return FETCHER_TYPE_SEPARATE_THREAD; |
| 274 } | 275 } |
| 275 | 276 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 287 SENSOR_TYPE_INCLINOMETER_3D, sensor_inclinometer_.Receive(), sink); | 288 SENSOR_TYPE_INCLINOMETER_3D, sensor_inclinometer_.Receive(), sink); |
| 288 UMA_HISTOGRAM_BOOLEAN("InertialSensor.InclinometerWindowsAvailable", | 289 UMA_HISTOGRAM_BOOLEAN("InertialSensor.InclinometerWindowsAvailable", |
| 289 inclinometer_available); | 290 inclinometer_available); |
| 290 if (inclinometer_available) | 291 if (inclinometer_available) |
| 291 return true; | 292 return true; |
| 292 // if no sensors are available set buffer to ready, to fire null-events. | 293 // if no sensors are available set buffer to ready, to fire null-events. |
| 293 SetBufferAvailableState(consumer_type, true); | 294 SetBufferAvailableState(consumer_type, true); |
| 294 } | 295 } |
| 295 break; | 296 break; |
| 296 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 297 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
| 297 NOTIMPLEMENTED(); | 298 { |
| 299 orientation_absolute_buffer_ = |
| 300 static_cast<DeviceOrientationHardwareBuffer*>(buffer); |
| 301 scoped_refptr<SensorEventSink> sink( |
| 302 new SensorEventSinkOrientation(orientation_absolute_buffer_)); |
| 303 // Currently we use the same sensor as for orientation which provides |
| 304 // absolute angles. |
| 305 bool inclinometer_available = RegisterForSensor( |
| 306 SENSOR_TYPE_INCLINOMETER_3D, |
| 307 sensor_inclinometer_absolute_.Receive(), sink); |
| 308 // TODO(timvolodine): consider adding UMA. |
| 309 if (inclinometer_available) |
| 310 return true; |
| 311 // if no sensors are available set buffer to ready, to fire null-events. |
| 312 SetBufferAvailableState(consumer_type, true); |
| 313 } |
| 298 break; | 314 break; |
| 299 case CONSUMER_TYPE_MOTION: | 315 case CONSUMER_TYPE_MOTION: |
| 300 { | 316 { |
| 301 motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer); | 317 motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer); |
| 302 scoped_refptr<SensorEventSink> sink( | 318 scoped_refptr<SensorEventSink> sink( |
| 303 new SensorEventSinkMotion(motion_buffer_)); | 319 new SensorEventSinkMotion(motion_buffer_)); |
| 304 bool accelerometer_available = RegisterForSensor( | 320 bool accelerometer_available = RegisterForSensor( |
| 305 SENSOR_TYPE_ACCELEROMETER_3D, sensor_accelerometer_.Receive(), | 321 SENSOR_TYPE_ACCELEROMETER_3D, sensor_accelerometer_.Receive(), |
| 306 sink); | 322 sink); |
| 307 bool gyrometer_available = RegisterForSensor( | 323 bool gyrometer_available = RegisterForSensor( |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 } | 359 } |
| 344 | 360 |
| 345 bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) { | 361 bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) { |
| 346 DisableSensors(consumer_type); | 362 DisableSensors(consumer_type); |
| 347 switch (consumer_type) { | 363 switch (consumer_type) { |
| 348 case CONSUMER_TYPE_ORIENTATION: | 364 case CONSUMER_TYPE_ORIENTATION: |
| 349 SetBufferAvailableState(consumer_type, false); | 365 SetBufferAvailableState(consumer_type, false); |
| 350 orientation_buffer_ = nullptr; | 366 orientation_buffer_ = nullptr; |
| 351 return true; | 367 return true; |
| 352 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 368 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
| 353 NOTIMPLEMENTED(); | 369 SetBufferAvailableState(consumer_type, false); |
| 354 break; | 370 orientation_absolute_buffer_ = nullptr; |
| 371 return true; |
| 355 case CONSUMER_TYPE_MOTION: | 372 case CONSUMER_TYPE_MOTION: |
| 356 SetBufferAvailableState(consumer_type, false); | 373 SetBufferAvailableState(consumer_type, false); |
| 357 motion_buffer_ = nullptr; | 374 motion_buffer_ = nullptr; |
| 358 return true; | 375 return true; |
| 359 case CONSUMER_TYPE_LIGHT: | 376 case CONSUMER_TYPE_LIGHT: |
| 360 SetLightBuffer(light_buffer_, -1); | 377 SetLightBuffer(light_buffer_, -1); |
| 361 light_buffer_ = nullptr; | 378 light_buffer_ = nullptr; |
| 362 return true; | 379 return true; |
| 363 default: | 380 default: |
| 364 NOTREACHED(); | 381 NOTREACHED(); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 | 436 |
| 420 void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) { | 437 void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) { |
| 421 switch(consumer_type) { | 438 switch(consumer_type) { |
| 422 case CONSUMER_TYPE_ORIENTATION: | 439 case CONSUMER_TYPE_ORIENTATION: |
| 423 if (sensor_inclinometer_.get()) { | 440 if (sensor_inclinometer_.get()) { |
| 424 sensor_inclinometer_->SetEventSink(nullptr); | 441 sensor_inclinometer_->SetEventSink(nullptr); |
| 425 sensor_inclinometer_.Release(); | 442 sensor_inclinometer_.Release(); |
| 426 } | 443 } |
| 427 break; | 444 break; |
| 428 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: | 445 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
| 429 NOTIMPLEMENTED(); | 446 if (sensor_inclinometer_absolute_.get()) { |
| 447 sensor_inclinometer_absolute_->SetEventSink(nullptr); |
| 448 sensor_inclinometer_absolute_.Release(); |
| 449 } |
| 430 break; | 450 break; |
| 431 case CONSUMER_TYPE_MOTION: | 451 case CONSUMER_TYPE_MOTION: |
| 432 if (sensor_accelerometer_.get()) { | 452 if (sensor_accelerometer_.get()) { |
| 433 sensor_accelerometer_->SetEventSink(nullptr); | 453 sensor_accelerometer_->SetEventSink(nullptr); |
| 434 sensor_accelerometer_.Release(); | 454 sensor_accelerometer_.Release(); |
| 435 } | 455 } |
| 436 if (sensor_gyrometer_.get()) { | 456 if (sensor_gyrometer_.get()) { |
| 437 sensor_gyrometer_->SetEventSink(nullptr); | 457 sensor_gyrometer_->SetEventSink(nullptr); |
| 438 sensor_gyrometer_.Release(); | 458 sensor_gyrometer_.Release(); |
| 439 } | 459 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 452 void DataFetcherSharedMemory::SetBufferAvailableState( | 472 void DataFetcherSharedMemory::SetBufferAvailableState( |
| 453 ConsumerType consumer_type, bool enabled) { | 473 ConsumerType consumer_type, bool enabled) { |
| 454 switch(consumer_type) { | 474 switch(consumer_type) { |
| 455 case CONSUMER_TYPE_ORIENTATION: | 475 case CONSUMER_TYPE_ORIENTATION: |
| 456 if (orientation_buffer_) { | 476 if (orientation_buffer_) { |
| 457 orientation_buffer_->seqlock.WriteBegin(); | 477 orientation_buffer_->seqlock.WriteBegin(); |
| 458 orientation_buffer_->data.allAvailableSensorsAreActive = enabled; | 478 orientation_buffer_->data.allAvailableSensorsAreActive = enabled; |
| 459 orientation_buffer_->seqlock.WriteEnd(); | 479 orientation_buffer_->seqlock.WriteEnd(); |
| 460 } | 480 } |
| 461 break; | 481 break; |
| 482 case CONSUMER_TYPE_ORIENTATION_ABSOLUTE: |
| 483 if (orientation_absolute_buffer_) { |
| 484 orientation_absolute_buffer_->seqlock.WriteBegin(); |
| 485 orientation_absolute_buffer_->data.allAvailableSensorsAreActive = |
| 486 enabled; |
| 487 orientation_absolute_buffer_->seqlock.WriteEnd(); |
| 488 } |
| 489 break; |
| 462 case CONSUMER_TYPE_MOTION: | 490 case CONSUMER_TYPE_MOTION: |
| 463 if (motion_buffer_) { | 491 if (motion_buffer_) { |
| 464 motion_buffer_->seqlock.WriteBegin(); | 492 motion_buffer_->seqlock.WriteBegin(); |
| 465 motion_buffer_->data.allAvailableSensorsAreActive = enabled; | 493 motion_buffer_->data.allAvailableSensorsAreActive = enabled; |
| 466 motion_buffer_->seqlock.WriteEnd(); | 494 motion_buffer_->seqlock.WriteEnd(); |
| 467 } | 495 } |
| 468 break; | 496 break; |
| 469 default: | 497 default: |
| 470 NOTREACHED(); | 498 NOTREACHED(); |
| 471 } | 499 } |
| 472 } | 500 } |
| 473 | 501 |
| 474 } // namespace content | 502 } // namespace content |
| OLD | NEW |