1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_CLICK_INPUT_TRACKER_H_
#define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_CLICK_INPUT_TRACKER_H_
#include "base/feature_list.h"
#include "base/time/time.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "third_party/blink/public/common/input/web_input_event.h"
#include "ui/gfx/geometry/point_f.h"
namespace page_load_metrics {
// This class considers user input clicks for a page load to determine if a
// burst of clicks occurs at the screen position. This is a possible signal
// that the user may be rage clicking on an unresponsive page.
class ClickInputTracker {
public:
ClickInputTracker();
ClickInputTracker(const ClickInputTracker&) = delete;
ClickInputTracker& operator=(const ClickInputTracker&) = delete;
~ClickInputTracker();
// Considers whether |event| is part of a user click burst. Must be called
// when the user input is encountered (for proper timing consideration).
void OnUserInput(const blink::WebInputEvent& event);
// If this tracker identified a click burst, this will report metrics for it.
void RecordClickBurst(ukm::SourceId source_id);
int GetCurrentBurstCountForTesting() const {
return current_click_input_burst_;
}
int GetMaxBurstCountForTesting() const { return max_click_input_burst_; }
private:
// Maximum time delta between clicks at same location to be considered part
// of a click burst. May be set via Feature parameter.
base::TimeDelta time_delta_threshold_;
// Maximum position delta in X or Y dimensions to be considered the "same"
// click location to be considered as part of a click burst. May be set via
// Feature parameter.
int position_delta_threshold_;
// Number of clicks to be considered a burst. May be set via Feature
// parameter.
int burst_count_threshold_;
// Counter of user clicks (GestureTap or MouseUp) in a burst (that occur
// close together in time and position). This counter is reset when there
// is a time gap or position gap between clicks.
int current_click_input_burst_ = 0;
// Max user click input burst. This is the maximum of any previous counts
// recorded in |current_click_input_burst_| for the page load. This will
// be recorded to metrics if over a minimum size.
int max_click_input_burst_ = 0;
// Timestamp of last user click input.
base::TimeTicks last_click_timestamp_;
// Position of the last click input.
gfx::PointF last_click_position_;
};
} // namespace page_load_metrics
#endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_CLICK_INPUT_TRACKER_H_
|