| // Copyright 2020 The Chromium 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 IOS_CHROME_BROWSER_METRICS_WINDOW_CONFIGURATION_RECORDER_H_ |
| #define IOS_CHROME_BROWSER_METRICS_WINDOW_CONFIGURATION_RECORDER_H_ |
| |
| #import <UIKit/UIKit.h> |
| |
| // These values are persisted to logs. Entries should not be renumbered and |
| // numeric values should never be reused. |
| enum class WindowConfiguration { |
| kUnspecified = 0, |
| // Chrome is showing one window, fullscreen. |
| kFullscreen, |
| // Chrome is showing two windows, one fullscreen and one slide-over. |
| kFullscreenWithSlideover, |
| // Chrome is showing one standard-width window, and another app has |
| // a window alongside it. |
| kSharedStandard, |
| // As above, and Chrome also has a slide-over window. |
| kSharedStandardWithSlideover, |
| // Chrome is showing one compact-width window, and another app has |
| // a window alongside it. |
| kSharedCompact, |
| // As above, and Chrome also has a slide-over window. |
| kSharedCompactWithSlideover, |
| // Chrome has only one foreground window, and it's in slide-over mode. |
| kSlideoverOnly, |
| // Chrome has two windows, both standard-width |
| kStandardBesideStandard, |
| // As above, and Chrome also has a third window in slide-over mode. |
| kStandardBesideStandardWithSlideover, |
| // Chrome has two windows, one standard-width and one compact-width. |
| kStandardBesideCompact, |
| // As above, and Chrome also has a third window in slide-over mode. |
| kStandardBesideCompactWithSlideover, |
| // Chrome has two windows, both compact-width |
| kCompactBesideCompact, |
| // As above, and Chrome also has a third window in slide-over mode. |
| kCompactBesideCompactWithSlideover, |
| // NOTE: add new configurations above this line. |
| kMaxValue = kCompactBesideCompactWithSlideover |
| }; |
| |
| // Reports time spent for each MultiWindow configuration. |
| // It looks at the window configuration every minute, and increments the |
| // histogram bucket for that configuration. Suspends when app is |
| // backgrounded and restarts when foregrounded. |
| @interface WindowConfigurationRecorder : NSObject |
| |
| // State of recording. |
| @property(nonatomic) BOOL recording; |
| |
| @end |
| |
| @interface WindowConfigurationRecorder (VisibleForTesting) |
| |
| // Computes configuration from given screen and windows. |
| - (WindowConfiguration)configurationForScreen:(UIScreen*)screen |
| windows:(NSArray<UIWindow*>*)windows; |
| @end |
| |
| #endif // IOS_CHROME_BROWSER_METRICS_WINDOW_CONFIGURATION_RECORDER_H_ |