blob: 59abdce146aeee420b6287227b774754b277c609 [file] [log] [blame]
// Copyright 2018 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 CHROME_BROWSER_UI_VIEWS_MEDIA_ROUTER_CAST_DIALOG_METRICS_H_
#define CHROME_BROWSER_UI_VIEWS_MEDIA_ROUTER_CAST_DIALOG_METRICS_H_
#include "base/macros.h"
#include "base/time/time.h"
#include "chrome/browser/media/router/media_router_metrics.h"
class Profile;
namespace media_router {
// Records UMA metrics for the behavior of a Cast dialog. A new recorder
// instance should be used each time the dialog is opened.
// TODO(takumif): Once we have removed the WebUI Cast dialog, we should move
// MediaRouter.Ui.* metrics from media_router_metrics.h into this file, and move
// this file to chrome/browser/ui/media_router/.
class CastDialogMetrics {
public:
// |initialization_time| is when the dialog UI started initializing. We use
// this value as the baseline for how long the dialog took to paint, load
// sinks, etc.
CastDialogMetrics(const base::Time& initialization_time,
MediaRouterDialogOpenOrigin activation_location,
Profile* profile);
virtual ~CastDialogMetrics();
// Records the time it took to load sinks when called for the first time. This
// is called when the list of sinks becomes non-empty.
void OnSinksLoaded(const base::Time& sinks_load_time);
// Records the time it took to paint when called for the first time.
void OnPaint(const base::Time& paint_time);
// Records the index of the selected sink in the sink list. Also records how
// long it took to start casting if no other action (aside from selecting a
// sink) was taken prior to that.
void OnStartCasting(const base::Time& start_time,
int selected_sink_index,
MediaCastMode cast_mode);
void OnStopCasting(bool is_local_route);
void OnCastModeSelected();
// Records the time it took to close the dialog, if no other action was taken
// prior to that after opening the dialog.
void OnCloseDialog(const base::Time& close_time);
// Records the number of sinks, which may be 0.
void OnRecordSinkCount(int sink_count);
private:
// Records the first user action if it hasn't already been recorded.
void MaybeRecordFirstAction(MediaRouterUserAction action);
void MaybeRecordActivationLocationAndCastMode(MediaCastMode cast_mode);
// The time when the dialog UI started initializing.
base::Time initialization_time_;
// The time when the dialog was painted.
base::Time paint_time_;
// The time when a non-empty list of sinks was loaded.
base::Time sinks_load_time_;
MediaRouterDialogOpenOrigin const activation_location_;
bool const is_icon_pinned_;
// Whether we have already recorded the first user action taken in this dialog
// instance.
bool first_action_recorded_ = false;
bool activation_location_and_cast_mode_recorded_ = false;
DISALLOW_COPY_AND_ASSIGN(CastDialogMetrics);
};
} // namespace media_router
#endif // CHROME_BROWSER_UI_VIEWS_MEDIA_ROUTER_CAST_DIALOG_METRICS_H_