Home | History | Annotate | Download | only in device_sensors
      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
      3 // found in the LICENSE file.
      4 
      5 #include "data_fetcher_shared_memory.h"
      6 
      7 #include "base/logging.h"
      8 #include "base/metrics/histogram.h"
      9 
     10 namespace {
     11 
     12 static bool SetMotionBuffer(content::DeviceMotionHardwareBuffer* buffer,
     13     bool enabled) {
     14   if (!buffer)
     15     return false;
     16   buffer->seqlock.WriteBegin();
     17   buffer->data.allAvailableSensorsAreActive = enabled;
     18   buffer->seqlock.WriteEnd();
     19   return true;
     20 }
     21 
     22 static bool SetOrientationBuffer(
     23     content::DeviceOrientationHardwareBuffer* buffer, bool enabled) {
     24   if (!buffer)
     25     return false;
     26   buffer->seqlock.WriteBegin();
     27   buffer->data.allAvailableSensorsAreActive = enabled;
     28   buffer->seqlock.WriteEnd();
     29   return true;
     30 }
     31 
     32 }  // namespace
     33 
     34 namespace content {
     35 
     36 DataFetcherSharedMemory::DataFetcherSharedMemory()
     37     : motion_buffer_(NULL), orientation_buffer_(NULL) {
     38 }
     39 
     40 DataFetcherSharedMemory::~DataFetcherSharedMemory() {
     41 }
     42 
     43 bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
     44   DCHECK(buffer);
     45 
     46   switch (consumer_type) {
     47     case CONSUMER_TYPE_MOTION:
     48       motion_buffer_ = static_cast<DeviceMotionHardwareBuffer*>(buffer);
     49       UMA_HISTOGRAM_BOOLEAN("InertialSensor.MotionDefaultAvailable", false);
     50       return SetMotionBuffer(motion_buffer_, true);
     51     case CONSUMER_TYPE_ORIENTATION:
     52       orientation_buffer_ =
     53           static_cast<DeviceOrientationHardwareBuffer*>(buffer);
     54       UMA_HISTOGRAM_BOOLEAN("InertialSensor.OrientationDefaultAvailable",
     55           false);
     56       return SetOrientationBuffer(orientation_buffer_, true);
     57     default:
     58       NOTREACHED();
     59   }
     60   return false;
     61 }
     62 
     63 bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
     64   switch (consumer_type) {
     65     case CONSUMER_TYPE_MOTION:
     66       return SetMotionBuffer(motion_buffer_, false);
     67     case CONSUMER_TYPE_ORIENTATION:
     68       return SetOrientationBuffer(orientation_buffer_, false);
     69     default:
     70       NOTREACHED();
     71   }
     72   return false;
     73 }
     74 
     75 }  // namespace content
     76