platform_sensor_provider_base.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_BASE_H_
  5. #define SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_BASE_H_
  6. #include "base/memory/read_only_shared_memory_region.h"
  7. #include "base/task/single_thread_task_runner.h"
  8. #include "base/threading/thread_checker.h"
  9. #include "services/device/generic_sensor/platform_sensor.h"
  10. namespace device {
  11. // Base class that defines factory methods for PlatformSensor creation.
  12. // Its implementations must be accessed via GetInstance() method.
  13. class PlatformSensorProviderBase {
  14. public:
  15. using CreateSensorCallback =
  16. base::OnceCallback<void(scoped_refptr<PlatformSensor>)>;
  17. PlatformSensorProviderBase(const PlatformSensorProviderBase&) = delete;
  18. PlatformSensorProviderBase& operator=(const PlatformSensorProviderBase&) =
  19. delete;
  20. // Creates new instance of PlatformSensor.
  21. void CreateSensor(mojom::SensorType type, CreateSensorCallback callback);
  22. // Gets previously created instance of PlatformSensor by sensor type |type|.
  23. scoped_refptr<PlatformSensor> GetSensor(mojom::SensorType type);
  24. // Shared memory region getters.
  25. base::ReadOnlySharedMemoryRegion CloneSharedMemoryRegion();
  26. // Returns 'true' if some of sensor instances produced by this provider are
  27. // alive; 'false' otherwise.
  28. bool HasSensors() const;
  29. protected:
  30. PlatformSensorProviderBase();
  31. virtual ~PlatformSensorProviderBase();
  32. // Method that must be implemented by platform specific classes.
  33. virtual void CreateSensorInternal(mojom::SensorType type,
  34. SensorReadingSharedBuffer* reading_buffer,
  35. CreateSensorCallback callback) = 0;
  36. // Implementations might override this method to free resources when there
  37. // are no sensors left.
  38. virtual void FreeResources() {}
  39. void NotifySensorCreated(mojom::SensorType type,
  40. scoped_refptr<PlatformSensor> sensor);
  41. std::vector<mojom::SensorType> GetPendingRequestTypes();
  42. bool CreateSharedBufferIfNeeded();
  43. SensorReadingSharedBuffer* GetSensorReadingSharedBufferForType(
  44. mojom::SensorType type);
  45. void RemoveSensor(mojom::SensorType type, PlatformSensor* sensor);
  46. THREAD_CHECKER(thread_checker_);
  47. private:
  48. friend class PlatformSensor; // To call RemoveSensor();
  49. void FreeResourcesIfNeeded();
  50. private:
  51. using CallbackQueue = std::vector<CreateSensorCallback>;
  52. std::map<mojom::SensorType, PlatformSensor*> sensor_map_;
  53. std::map<mojom::SensorType, CallbackQueue> requests_map_;
  54. base::MappedReadOnlyRegion mapped_region_;
  55. };
  56. } // namespace device
  57. #endif // SERVICES_DEVICE_GENERIC_SENSOR_PLATFORM_SENSOR_PROVIDER_BASE_H_