blob: 35d2112f91f018621390c3862c116bac9c2e622e [file] [log] [blame]
// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IIOSERVICE_DAEMON_SENSOR_METRICS_H_
#define IIOSERVICE_DAEMON_SENSOR_METRICS_H_
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <base/time/time.h>
#include <metrics/metrics_library.h>
#include "iioservice/include/export.h"
#include "iioservice/mojo/sensor.mojom.h"
namespace iioservice {
class IIOSERVICE_EXPORT SensorMetrics {
public:
enum class Location {
kBase = 0,
kLid = 1,
kCamera = 2,
kOthers = 3,
kMax = 4,
};
// Creates the global SensorMetrics instance.
static void Initialize();
// Destroys the global SensorMetrics instance if it exists.
static void Shutdown();
// Returns a pointer to the global SensorMetrics instance.
// Initialize(ForTesting)() should already have been called.
static SensorMetrics* GetInstance();
~SensorMetrics();
void SetConfigForDevice(int iio_device_id,
const std::vector<cros::mojom::DeviceType>& types,
const std::string& location);
// Records SensorUsage(Highspeed) of an IIO device in iioservice.
void SendSensorUsage(int iio_device_id, double frequency);
// Records SensorObserver(Open) in iioservice.
void SendSensorObserverOpened();
void SendSensorObserverClosed();
// Records SensorClientConcurrent in iioservice.
void SendSensorClientConnected();
void SendSensorClientDisconnected();
protected:
static void SetInstance(SensorMetrics* sensor_metrics);
explicit SensorMetrics(std::unique_ptr<MetricsLibraryInterface> metrics_lib);
private:
struct DeviceConfig {
std::vector<cros::mojom::DeviceType> types;
Location location;
double frequency = 0.0;
// Maximum frequency used in the last hour.
double max_frequency = 0.0;
};
SensorMetrics::Location FilterLocationString(std::string location);
void SummarizeTime();
std::unique_ptr<MetricsLibraryInterface> metrics_lib_;
base::RepeatingTimer summarize_timer_;
// First is the iio_device_id, second is the device's configs.
std::map<int, DeviceConfig> device_configs_;
int32_t enable_sensor_observer_counter_ = 0;
int32_t sensor_observer_counter_ = 0;
int32_t max_sensor_observer_counter_ = 0;
int32_t sensor_client_counter_ = 0;
int32_t max_sensor_client_counter_ = 0;
};
} // namespace iioservice
#endif // IIOSERVICE_DAEMON_SENSOR_METRICS_H_