#ifndef ASH_WM_MULTI_DISPLAY_MULTI_DISPLAY_METRICS_CONTROLLER_H_
#define ASH_WM_MULTI_DISPLAY_MULTI_DISPLAY_METRICS_CONTROLLER_H_
#include "ash/ash_export.h"
#include "base/timer/timer.h"
#include "ui/aura/window_tracker.h"
#include "ui/display/display_observer.h"
namespace aura {
class Window;
}
namespace ash {
class ASH_EXPORT MultiDisplayMetricsController
: public display::DisplayObserver {
public:
constexpr static char kRotatedHistogram[] =
"Ash.MultiDisplay.WindowsMovedAfterRemap.DisplayRotated";
constexpr static char kWorkAreaChangedHistogram[] =
"Ash.MultiDisplay.WindowsMovedAfterRemap.DisplayWorkAreaChanged";
MultiDisplayMetricsController();
MultiDisplayMetricsController(const MultiDisplayMetricsController&) = delete;
MultiDisplayMetricsController& operator=(
const MultiDisplayMetricsController&) = delete;
~MultiDisplayMetricsController() override;
void OnWindowMovedOrResized(aura::Window* window);
void OnDisplayMetricsChanged(const display::Display& display,
uint32_t changed_metrics) override;
private:
friend class MultiDisplayMetricsControllerTest;
enum class DisplayChangeType {
kRotated = 0,
kWorkArea,
};
void OnTimerFinished();
void RecordHistogram(bool user_moved_window);
aura::WindowTracker windows_;
DisplayChangeType last_display_change_type_ = DisplayChangeType::kRotated;
base::OneShotTimer timer_;
display::ScopedDisplayObserver display_observer_{this};
};
}
#endif