Index: components/translate/core/browser/translate_ranker_impl.cc |
diff --git a/components/translate/core/browser/translate_ranker_impl.cc b/components/translate/core/browser/translate_ranker_impl.cc |
index 7be53a8840ff34babda2bd91dbb3972f198c3878..906c498f964e219b6a57fecbed801ee529d65ae7 100644 |
--- a/components/translate/core/browser/translate_ranker_impl.cc |
+++ b/components/translate/core/browser/translate_ranker_impl.cc |
@@ -85,6 +85,9 @@ const base::Feature kTranslateRankerEnforcement{ |
const base::Feature kTranslateRankerLogging{"TranslateRankerLogging", |
base::FEATURE_ENABLED_BY_DEFAULT}; |
+const base::Feature kTranslateRankerDecisionOverride{ |
+ "TranslateRankerDecisionOverride", base::FEATURE_DISABLED_BY_DEFAULT}; |
+ |
TranslateRankerFeatures::TranslateRankerFeatures() {} |
TranslateRankerFeatures::TranslateRankerFeatures(int accepted, |
@@ -143,8 +146,11 @@ TranslateRankerImpl::TranslateRankerImpl(const base::FilePath& model_path, |
is_query_enabled_(base::FeatureList::IsEnabled(kTranslateRankerQuery)), |
is_enforcement_enabled_( |
base::FeatureList::IsEnabled(kTranslateRankerEnforcement)), |
+ is_decision_override_enabled_(base::FeatureList::IsEnabled( |
+ translate::kTranslateRankerDecisionOverride)), |
weak_ptr_factory_(this) { |
- if (IsQueryEnabled() || IsEnforcementEnabled()) { |
+ if (is_query_enabled_ || is_enforcement_enabled_ || |
+ is_decision_override_enabled_) { |
model_loader_ = base::MakeUnique<RankerModelLoader>( |
base::Bind(&ValidateModel), |
base::Bind(&TranslateRankerImpl::OnModelAvailable, |
@@ -189,26 +195,15 @@ void TranslateRankerImpl::EnableLogging(bool value) { |
is_logging_enabled_ = value; |
} |
-bool TranslateRankerImpl::IsLoggingEnabled() { |
- return is_logging_enabled_; |
-} |
- |
-bool TranslateRankerImpl::IsQueryEnabled() { |
- return is_query_enabled_; |
-} |
- |
-bool TranslateRankerImpl::IsEnforcementEnabled() { |
- return is_enforcement_enabled_; |
-} |
- |
-int TranslateRankerImpl::GetModelVersion() const { |
+uint32_t TranslateRankerImpl::GetModelVersion() const { |
return model_ ? model_->proto().translate().version() : 0; |
} |
bool TranslateRankerImpl::ShouldOfferTranslation( |
const TranslatePrefs& translate_prefs, |
const std::string& src_lang, |
- const std::string& dst_lang) { |
+ const std::string& dst_lang, |
+ metrics::TranslateEventProto* translate_event) { |
DCHECK(sequence_checker_.CalledOnValidSequence()); |
// The ranker is a gate in the "show a translation prompt" flow. To retain |
// the pre-existing functionality, it defaults to returning true in the |
@@ -217,11 +212,24 @@ bool TranslateRankerImpl::ShouldOfferTranslation( |
// (or become False). |
const bool kDefaultResponse = true; |
+ translate_event->set_ranker_request_timestamp_sec( |
+ (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
+ translate_event->set_ranker_version(GetModelVersion()); |
+ |
+ if (!is_query_enabled_ && !is_enforcement_enabled_ && |
+ !is_decision_override_enabled_) { |
+ translate_event->set_ranker_response( |
+ metrics::TranslateEventProto::NOT_QUERIED); |
+ return kDefaultResponse; |
+ } |
+ |
if (model_loader_) |
model_loader_->NotifyOfRankerActivity(); |
// If we don't have a model, request one and return the default. |
if (model_ == nullptr) { |
+ translate_event->set_ranker_response( |
+ metrics::TranslateEventProto::NOT_QUERIED); |
return kDefaultResponse; |
} |
@@ -245,6 +253,14 @@ bool TranslateRankerImpl::ShouldOfferTranslation( |
UMA_HISTOGRAM_BOOLEAN("Translate.Ranker.QueryResult", result); |
+ translate_event->set_ranker_response( |
+ result ? metrics::TranslateEventProto::SHOW |
+ : metrics::TranslateEventProto::DONT_SHOW); |
+ |
+ if (!is_enforcement_enabled_ && !is_decision_override_enabled_) { |
+ return kDefaultResponse; |
+ } |
+ |
return result; |
} |
@@ -311,7 +327,7 @@ void TranslateRankerImpl::AddTranslateEvent( |
const metrics::TranslateEventProto& event, |
const GURL& url) { |
DCHECK(sequence_checker_.CalledOnValidSequence()); |
- if (IsLoggingEnabled()) { |
+ if (is_logging_enabled_) { |
DVLOG(3) << "Adding translate ranker event."; |
if (url.is_valid()) { |
SendEventToUKM(event, url); |
@@ -329,6 +345,34 @@ bool TranslateRankerImpl::CheckModelLoaderForTesting() { |
return model_loader_ != nullptr; |
} |
+void TranslateRankerImpl::RecordTranslateEvent( |
+ int event_type, |
+ const GURL& url, |
+ metrics::TranslateEventProto* translate_event) { |
+ DCHECK(metrics::TranslateEventProto::EventType_IsValid(event_type)); |
+ translate_event->set_event_type( |
+ static_cast<metrics::TranslateEventProto::EventType>(event_type)); |
+ translate_event->set_event_timestamp_sec( |
+ (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
+ AddTranslateEvent(*translate_event, url); |
+} |
+ |
+bool TranslateRankerImpl::ShouldOverrideDecision( |
+ int event_type, |
+ const GURL& url, |
+ metrics::TranslateEventProto* translate_event) { |
+ DCHECK(metrics::TranslateEventProto::EventType_IsValid(event_type)); |
+ if (is_decision_override_enabled_) { |
+ translate_event->add_decision_overrides( |
+ static_cast<metrics::TranslateEventProto::EventType>(event_type)); |
+ DVLOG(3) << "Overriding decision of type: " << event_type; |
+ return true; |
+ } else { |
+ RecordTranslateEvent(event_type, url, translate_event); |
+ return false; |
+ } |
+} |
+ |
} // namespace translate |
std::ostream& operator<<(std::ostream& stream, |