// 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 ASH_CAPTURE_MODE_CAPTURE_MODE_METRICS_H_ #define ASH_CAPTURE_MODE_CAPTURE_MODE_METRICS_H_ #include #include #include "ash/ash_export.h" #include "ash/capture_mode/capture_mode_types.h" namespace ash { // Enumeration of the reasons that lead to ending the screen recording. // Note that these values are persisted to histograms so existing values should // remain unchanged and new values should be added to the end. enum class EndRecordingReason { kStopRecordingButton, kDisplayOrWindowClosing, kActiveUserChange, kSessionBlocked, kShuttingDown, kImminentSuspend, kRecordingServiceDisconnected, kFileIoError, kDlpInterruption, kLowDiskSpace, kHdcpInterruption, kServiceClosing, kVizVideoCaptureDisconnected, kAudioEncoderInitializationFailure, kVideoEncoderInitializationFailure, kAudioEncodingError, kVideoEncodingError, kProjectorTranscriptionError, kLowDriveFsQuota, kMaxValue = kLowDriveFsQuota, }; // Enumeration of capture bar buttons that can be pressed while in capture mode. // Note that these values are persisted to histograms so existing values should // remain unchanged and new values should be added to the end. enum class CaptureModeBarButtonType { kScreenCapture, kScreenRecord, kFull, kRegion, kWindow, kExit, kMaxValue = kExit, }; // Enumeration of the various configurations a user can have while in capture // mode. Note that these values are persisted to histograms so existing values // should remain unchanged and new values should be added to the end. enum class CaptureModeConfiguration { kFullscreenScreenshot, kRegionScreenshot, kWindowScreenshot, kFullscreenRecording, kRegionRecording, kWindowRecording, kMaxValue = kWindowRecording, }; // Enumeration of actions that can be taken to enter capture mode. Note that // these values are persisted to histograms so existing values should remain // unchanged and new values should be added to the end. enum class CaptureModeEntryType { kAccelTakePartialScreenshot, kAccelTakeWindowScreenshot, kQuickSettings, kStylusPalette, kPowerMenu, kSnipKey, kCaptureAllDisplays, kProjector, kMaxValue = kProjector, }; // Enumeration of quick actions on screenshot notification. Note that these // values are persisted to histograms so existing values should remain // unchanged and new values should be added to the end. enum class CaptureQuickAction { kBacklight, kFiles, kDelete, kMaxValue = kDelete, }; // Enumeration of user's selection on save-to locations. Note that these values // are persisted to histograms so existing values should remain unchanged and // new values should be added to the end. enum class CaptureModeSaveToLocation { kDefault, kDrive, kDriveFolder, kCustomizedFolder, kMaxValue = kCustomizedFolder, }; // Enumeration of reasons for which the capture folder is switched to default // downloads folder. Note that these values are persisted to histograms so // existing values should remain unchanged and new values should be added to the // end. enum class CaptureModeSwitchToDefaultReason { kFolderUnavailable, kUserSelectedFromFolderSelectionDialog, kUserSelectedFromSettingsMenu, kMaxValue = kUserSelectedFromSettingsMenu, }; // Enumeration of the camera preview size. Note that these values are persisted // to histograms so existing values should remain unchanged and new values // should be added to the end. enum class CaptureModeCameraSize { kExpanded, kCollapsed, kMaxValue = kCollapsed, }; // Records the `reason` for which screen recording was ended. void RecordEndRecordingReason(EndRecordingReason reason); // Records capture mode bar button presses given by `button_type`. void RecordCaptureModeBarButtonType(CaptureModeBarButtonType button_type); // Records a user's configuration when they perform a capture. void RecordCaptureModeConfiguration(CaptureModeType type, CaptureModeSource source, bool audio_on, bool is_in_projector_mode); // Records the method the user enters capture mode given by |entry_type|. void RecordCaptureModeEntryType(CaptureModeEntryType entry_type); // Records the length in seconds of a recording taken by capture mode. void RecordCaptureModeRecordTime(int64_t length_in_seconds, bool is_in_projector_mode); // Records if the user has switched modes during a capture session. void RecordCaptureModeSwitchesFromInitialMode(bool switched); // Records the number of times a user adjusts a capture region. This includes // moving and resizing. The count is started when a user sets the capture source // as a region. The count is recorded and reset when a user performs a capture. // The count is just reset when a user selects a new region or the user switches // capture sources. void RecordNumberOfCaptureRegionAdjustments(int num_adjustments, bool is_in_projector_mode); // Records the number of times a user consecutively screenshots. Only records a // sample if `num_consecutive_screenshots` is greater than 1. void RecordNumberOfConsecutiveScreenshots(int num_consecutive_screenshots); // Records the number of screenshots taken. This metric is meant to be a rough // approximation so its counts are not persisted across crashes, restarts or // sessions. void RecordNumberOfScreenshotsTakenInLastDay( int num_screenshots_taken_in_last_day); void RecordNumberOfScreenshotsTakenInLastWeek( int num_screenshots_taken_in_last_week); // Records the action taken on screen notification. void RecordScreenshotNotificationQuickAction(CaptureQuickAction action); // Records the location where screen capture is saved. void RecordSaveToLocation(CaptureModeSaveToLocation save_location); // Records the `reason` for which the capture folder is switched to default // downloads folder. void RecordSwitchToDefaultFolderReason(CaptureModeSwitchToDefaultReason reason); // Maps given `type` and `source` to CaptureModeConfiguration enum. ASH_EXPORT CaptureModeConfiguration GetConfiguration(CaptureModeType type, CaptureModeSource source); // Records how often recording starts with a camera on. void RecordRecordingStartsWithCamera(bool starts_with_camera, bool is_in_projector_mode); // Records the number of camera disconnections during recording. void RecordCameraDisconnectionsDuringRecordings(int num_camera_disconnections); // Records the given `num_camera_connected`. void RecordNumberOfConnectedCameras(int num_camera_connected); // Records the duration of camera becoming available again after camera // disconnection. void RecordCameraReconnectDuration(int length_in_seconds, int grace_period_in_seconds); // Records the camera size when recording starts. void RecordCameraSizeOnStart(CaptureModeCameraSize camera_size); // Records the camera position when recording starts. void RecordCameraPositionOnStart(CameraPreviewSnapPosition camera_position); // Appends the proper suffix to `prefix` based on whether the user is in tablet // mode or not. ASH_EXPORT std::string GetCaptureModeHistogramName(std::string prefix); } // namespace ash #endif // ASH_CAPTURE_MODE_CAPTURE_MODE_METRICS_H_