Commit e6beeda6 authored by Thanh Nguyen's avatar Thanh Nguyen Committed by Commit Bot

[smart-charging] Collect last charge features

Adds code to collect last charge related features.

Bug: 1028853
Change-Id: I2b152139db0777acbd40534128ed8c92004799b5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1994035
Commit-Queue: Thanh Nguyen <thanhdng@chromium.org>
Reviewed-by: default avatarJia Meng <jiameng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#731862}
parent 1e787165
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_CHROMEOS_POWER_SMART_CHARGING_SMART_CHARGING_MANAGER_H_ #ifndef CHROME_BROWSER_CHROMEOS_POWER_SMART_CHARGING_SMART_CHARGING_MANAGER_H_
#define CHROME_BROWSER_CHROMEOS_POWER_SMART_CHARGING_SMART_CHARGING_MANAGER_H_ #define CHROME_BROWSER_CHROMEOS_POWER_SMART_CHARGING_SMART_CHARGING_MANAGER_H_
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h" #include "base/gtest_prod_util.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
...@@ -16,6 +17,8 @@ ...@@ -16,6 +17,8 @@
#include "chrome/browser/chromeos/power/smart_charging/smart_charging_ukm_logger.h" #include "chrome/browser/chromeos/power/smart_charging/smart_charging_ukm_logger.h"
#include "chrome/browser/chromeos/power/smart_charging/user_charging_event.pb.h" #include "chrome/browser/chromeos/power/smart_charging/user_charging_event.pb.h"
#include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power/power_manager_client.h"
#include "components/session_manager/core/session_manager.h"
#include "components/session_manager/core/session_manager_observer.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
#include "services/viz/public/mojom/compositing/video_detector_observer.mojom.h" #include "services/viz/public/mojom/compositing/video_detector_observer.mojom.h"
#include "ui/base/user_activity/user_activity_detector.h" #include "ui/base/user_activity/user_activity_detector.h"
...@@ -27,16 +30,21 @@ namespace ml { ...@@ -27,16 +30,21 @@ namespace ml {
class RecentEventsCounter; class RecentEventsCounter;
} // namespace ml } // namespace ml
using PastEvent = PastChargingEvents::Event;
using EventReason = UserChargingEvent::Event::Reason;
// SmartChargingManager logs battery percentage and other features related to // SmartChargingManager logs battery percentage and other features related to
// user charging events. It is currently used to log data and will be // user charging events. It is currently used to log data and will be
// extended to do inference in the future. // extended to do inference in the future.
class SmartChargingManager : public ui::UserActivityObserver, class SmartChargingManager : public ui::UserActivityObserver,
public PowerManagerClient::Observer, public PowerManagerClient::Observer,
public viz::mojom::VideoDetectorObserver { public viz::mojom::VideoDetectorObserver,
public session_manager::SessionManagerObserver {
public: public:
SmartChargingManager( SmartChargingManager(
ui::UserActivityDetector* detector, ui::UserActivityDetector* detector,
mojo::PendingReceiver<viz::mojom::VideoDetectorObserver> receiver, mojo::PendingReceiver<viz::mojom::VideoDetectorObserver> receiver,
session_manager::SessionManager* session_manager,
std::unique_ptr<base::RepeatingTimer> periodic_timer); std::unique_ptr<base::RepeatingTimer> periodic_timer);
~SmartChargingManager() override; ~SmartChargingManager() override;
SmartChargingManager(const SmartChargingManager&) = delete; SmartChargingManager(const SmartChargingManager&) = delete;
...@@ -73,6 +81,9 @@ class SmartChargingManager : public ui::UserActivityObserver, ...@@ -73,6 +81,9 @@ class SmartChargingManager : public ui::UserActivityObserver,
void OnVideoActivityStarted() override; void OnVideoActivityStarted() override;
void OnVideoActivityEnded() override; void OnVideoActivityEnded() override;
// session_manager::SessionManagerObserver overrides:
void OnUserSessionStarted(bool is_primary_user) override;
private: private:
friend class SmartChargingManagerTest; friend class SmartChargingManagerTest;
...@@ -80,7 +91,7 @@ class SmartChargingManager : public ui::UserActivityObserver, ...@@ -80,7 +91,7 @@ class SmartChargingManager : public ui::UserActivityObserver,
void PopulateUserChargingEventProto(UserChargingEvent* proto); void PopulateUserChargingEventProto(UserChargingEvent* proto);
// Log the event. // Log the event.
void LogEvent(const UserChargingEvent::Event::Reason& reason); void LogEvent(const EventReason& reason);
// Called when the periodic timer triggers. // Called when the periodic timer triggers.
void OnTimerFired(); void OnTimerFired();
...@@ -97,16 +108,47 @@ class SmartChargingManager : public ui::UserActivityObserver, ...@@ -97,16 +108,47 @@ class SmartChargingManager : public ui::UserActivityObserver,
// minutes). // minutes).
base::TimeDelta DurationRecentVideoPlaying(); base::TimeDelta DurationRecentVideoPlaying();
// Checks if the file for current user exists, if yes loads from disk.
void MaybeLoadFromDisk();
// Checks if we can create a path on disk to save the data, if yes saves to
// disk.
void MaybeSaveToDisk();
// Loads data from disk given a file path.
void LoadFromDisk(const base::FilePath& file_path);
// Saves data to disk given a file path.
void SaveToDisk(const base::FilePath& file_path);
// Calls after SaveToDisk completes.
void OnLoadProtoFromDiskComplete(std::unique_ptr<PastChargingEvents> proto);
// Adds a past events given it's reason to |past_events_|.
void AddPastEvent(const EventReason& reason);
// Updates and deletes events.
void UpdatePastEvents();
// Gets the "plug in" and "unplug" events of the last charge.
std::tuple<PastEvent, PastEvent> GetLastChargeEvents();
ScopedObserver<ui::UserActivityDetector, ui::UserActivityObserver> ScopedObserver<ui::UserActivityDetector, ui::UserActivityObserver>
user_activity_observer_{this}; user_activity_observer_{this};
ScopedObserver<chromeos::PowerManagerClient, ScopedObserver<chromeos::PowerManagerClient,
chromeos::PowerManagerClient::Observer> chromeos::PowerManagerClient::Observer>
power_manager_client_observer_{this}; power_manager_client_observer_{this};
ScopedObserver<session_manager::SessionManager,
session_manager::SessionManagerObserver>
session_manager_observer_{this};
// Timer to trigger periodically for logging data. // Timer to trigger periodically for logging data.
const std::unique_ptr<base::RepeatingTimer> periodic_timer_; const std::unique_ptr<base::RepeatingTimer> periodic_timer_;
// Checks if data is loaded from disk yet.
bool loaded_from_disk_ = false;
// Helper to return TimeSinceBoot. // Helper to return TimeSinceBoot.
ml::BootClock boot_clock_; ml::BootClock boot_clock_;
int event_id_ = -1; int event_id_ = -1;
...@@ -134,6 +176,7 @@ class SmartChargingManager : public ui::UserActivityObserver, ...@@ -134,6 +176,7 @@ class SmartChargingManager : public ui::UserActivityObserver,
// TODO(crbug.com/1028853): This is for testing only. Need to remove when ukm // TODO(crbug.com/1028853): This is for testing only. Need to remove when ukm
// logger is available. // logger is available.
UserChargingEvent user_charging_event_for_test_; UserChargingEvent user_charging_event_for_test_;
std::vector<PastEvent> past_events_;
base::Optional<double> battery_percent_; base::Optional<double> battery_percent_;
base::Optional<double> screen_brightness_percent_; base::Optional<double> screen_brightness_percent_;
...@@ -143,6 +186,7 @@ class SmartChargingManager : public ui::UserActivityObserver, ...@@ -143,6 +186,7 @@ class SmartChargingManager : public ui::UserActivityObserver,
const std::unique_ptr<SmartChargingUkmLogger> ukm_logger_; const std::unique_ptr<SmartChargingUkmLogger> ukm_logger_;
SEQUENCE_CHECKER(sequence_checker_); SEQUENCE_CHECKER(sequence_checker_);
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
base::WeakPtrFactory<SmartChargingManager> weak_ptr_factory_{this}; base::WeakPtrFactory<SmartChargingManager> weak_ptr_factory_{this};
}; };
......
...@@ -117,3 +117,21 @@ message UserChargingEvent { ...@@ -117,3 +117,21 @@ message UserChargingEvent {
optional Features features = 1; optional Features features = 1;
optional Event event = 2; optional Event event = 2;
} }
// PastChargingEvents contain a list of events that have information about "past
// charging events". It will only store the plug/unplug pair of the last charge
// and a recent plug/halt event if any.
message PastChargingEvents {
message Event {
// Time of the event in minutes since Windows epoch.
optional int32 time = 1;
// Battery percentage of the device.
optional int32 battery_percent = 2;
// Timezone of the device.
optional int32 timezone = 3;
// Reason for the event.
optional UserChargingEvent.Event.Reason reason = 4;
}
// A list containing past charging events.
repeated Event events = 1;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment