blob: 615eb9e256b30677dd968c2649f5b01de65404cc [file] [log] [blame]
// Copyright 2016 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.
package org.chromium.chrome.browser.contextualsearch;
import org.chromium.base.TimeUtils;
import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial.ContextualSearchSetting;
/**
* Heuristic for Tap suppression after a recent scroll action.
* Handles logging of results seen and activation.
*/
public class RecentScrollTapSuppression extends ContextualSearchHeuristic {
private static final int DEFAULT_RECENT_SCROLL_SUPPRESSION_DURATION_MS = 300;
private final int mDurationSinceRecentScrollMs;
private final boolean mIsConditionSatisfied;
private final int mRecentScrollDurationThreshold;
/**
* Constructs a Tap suppression heuristic that handles a Tap after a recent scroll.
* This logs activation data that includes whether it activated for a threshold specified
* by an experiment. This also logs Results-seen data to profile when results are seen relative
* to a recent scroll.
* @param selectionController The {@link ContextualSearchSelectionController}.
*/
RecentScrollTapSuppression(ContextualSearchSelectionController selectionController) {
long recentScrollTimeNs = selectionController.getLastScrollTime();
if (recentScrollTimeNs > 0) {
mDurationSinceRecentScrollMs = (int) ((System.nanoTime() - recentScrollTimeNs)
/ TimeUtils.NANOSECONDS_PER_MILLISECOND);
} else {
mDurationSinceRecentScrollMs = 0;
}
int experimentThreshold = ContextualSearchFieldTrial.getValue(
ContextualSearchSetting.RECENT_SCROLL_DURATION_MS);
mRecentScrollDurationThreshold = experimentThreshold > 0
? experimentThreshold
: DEFAULT_RECENT_SCROLL_SUPPRESSION_DURATION_MS;
mIsConditionSatisfied = mDurationSinceRecentScrollMs > 0
&& mDurationSinceRecentScrollMs < mRecentScrollDurationThreshold;
}
@Override
protected boolean isConditionSatisfiedAndEnabled() {
return mIsConditionSatisfied && mRecentScrollDurationThreshold > 0;
}
@Override
protected void logConditionState() {
ContextualSearchUma.logRecentScrollSuppression(mIsConditionSatisfied);
}
@Override
protected void logRankerTapSuppression(ContextualSearchInteractionRecorder logger) {
logger.logFeature(ContextualSearchInteractionRecorder.Feature.DURATION_AFTER_SCROLL_MS,
mDurationSinceRecentScrollMs);
}
}