Commit e420c0a2 authored by Alex Turner's avatar Alex Turner Committed by Commit Bot

Allow for disabling of font identifiability metrics recording via finch

Currently, FontMatchingMetrics uses the broader
IdentifiabilityStudySettings::IsActive() call for its early returns.
This ensures that unnecessary computation is not performed for users not
participating in the study. We update these methods to use more specific
checks that allow for server-side disabling of font metrics recording.

Bug: 1136938
Change-Id: I12bdbd47e8bc0e6567f796fd3b058f02f4dd105a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2466143Reviewed-by: default avatarDominik Röttsches <drott@chromium.org>
Reviewed-by: default avatarAsanka Herath <asanka@chromium.org>
Commit-Queue: Alex Turner <alexmt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817019}
parent 7201dc96
......@@ -43,9 +43,7 @@ FontMatchingMetrics::FontMatchingMetrics(
identifiability_metrics_timer_(
task_runner,
this,
&FontMatchingMetrics::IdentifiabilityMetricsTimerFired),
identifiability_study_enabled_(
IdentifiabilityStudySettings::Get()->IsActive()) {
&FontMatchingMetrics::IdentifiabilityMetricsTimerFired) {
Initialize();
}
......@@ -59,9 +57,7 @@ FontMatchingMetrics::FontMatchingMetrics(
identifiability_metrics_timer_(
task_runner,
this,
&FontMatchingMetrics::IdentifiabilityMetricsTimerFired),
identifiability_study_enabled_(
IdentifiabilityStudySettings::Get()->IsActive()) {
&FontMatchingMetrics::IdentifiabilityMetricsTimerFired) {
Initialize();
}
......@@ -105,13 +101,20 @@ void FontMatchingMetrics::ReportFailedLocalFontMatch(
void FontMatchingMetrics::InsertFontHashIntoMap(IdentifiableTokenKey input_key,
SimpleFontData* font_data,
TokenToTokenHashMap hash_map) {
DCHECK(IdentifiabilityStudySettings::Get()->IsActive());
if (hash_map.Contains(input_key))
return;
IdentifiableToken output_token(GetHashForFontData(font_data));
hash_map.insert(input_key, output_token);
if (!font_data)
// We only record postscript name metrics if both the the broader lookup's
// type and kLocalFontLoadPostScriptName are allowed. (If the former is not,
// InsertFontHashIntoMap would not be called.)
if (!font_data ||
!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kLocalFontLoadPostScriptName)) {
return;
}
IdentifiableTokenKey postscript_name_key(
GetPostScriptNameTokenForFontData(font_data));
font_load_postscript_name_.insert(postscript_name_key, output_token);
......@@ -129,7 +132,8 @@ void FontMatchingMetrics::ReportFontLookupByUniqueOrFamilyName(
const AtomicString& name,
const FontDescription& font_description,
SimpleFontData* resulting_font_data) {
if (!identifiability_study_enabled_) {
if (!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kLocalFontLookupByUniqueOrFamilyName)) {
return;
}
OnFontLookup();
......@@ -152,7 +156,9 @@ void FontMatchingMetrics::ReportFontLookupByUniqueNameOnly(
bool is_loading_fallback) {
// We ignore lookups that result in loading fallbacks for now as they should
// only be temporary.
if (!identifiability_study_enabled_ || is_loading_fallback) {
if (is_loading_fallback ||
!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kLocalFontLookupByUniqueNameOnly)) {
return;
}
OnFontLookup();
......@@ -173,7 +179,8 @@ void FontMatchingMetrics::ReportFontLookupByFallbackCharacter(
FontFallbackPriority fallback_priority,
const FontDescription& font_description,
SimpleFontData* resulting_font_data) {
if (!identifiability_study_enabled_) {
if (!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kLocalFontLookupByFallbackCharacter)) {
return;
}
OnFontLookup();
......@@ -191,7 +198,8 @@ void FontMatchingMetrics::ReportFontLookupByFallbackCharacter(
void FontMatchingMetrics::ReportLastResortFallbackFontLookup(
const FontDescription& font_description,
SimpleFontData* resulting_font_data) {
if (!identifiability_study_enabled_) {
if (!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kLocalFontLookupAsLastResort)) {
return;
}
OnFontLookup();
......@@ -209,7 +217,8 @@ void FontMatchingMetrics::ReportFontFamilyLookupByGenericFamily(
UScriptCode script,
FontDescription::GenericFamilyType generic_family_type,
const AtomicString& resulting_font_name) {
if (!identifiability_study_enabled_) {
if (!IdentifiabilityStudySettings::Get()->IsTypeAllowed(
IdentifiableSurface::Type::kGenericFontLookup)) {
return;
}
OnFontLookup();
......@@ -235,7 +244,8 @@ void FontMatchingMetrics::ReportFontFamilyLookupByGenericFamily(
}
void FontMatchingMetrics::PublishIdentifiabilityMetrics() {
DCHECK(identifiability_study_enabled_);
if (!IdentifiabilityStudySettings::Get()->IsActive())
return;
IdentifiabilityMetricBuilder builder(source_id_);
......@@ -258,10 +268,12 @@ void FontMatchingMetrics::PublishIdentifiabilityMetrics() {
for (const auto& surface_entry : hash_maps_with_corresponding_surface_types) {
TokenToTokenHashMap* hash_map = surface_entry.first;
const IdentifiableSurface::Type& surface_type = surface_entry.second;
for (const auto& individual_lookup : *hash_map) {
builder.Set(IdentifiableSurface::FromTypeAndToken(
surface_type, individual_lookup.key.token),
individual_lookup.value);
if (IdentifiabilityStudySettings::Get()->IsTypeAllowed(surface_type)) {
for (const auto& individual_lookup : *hash_map) {
builder.Set(IdentifiableSurface::FromTypeAndToken(
surface_type, individual_lookup.key.token),
individual_lookup.value);
}
}
hash_map->clear();
}
......@@ -293,7 +305,7 @@ void FontMatchingMetrics::PublishUkmMetrics() {
}
void FontMatchingMetrics::OnFontLookup() {
DCHECK(identifiability_study_enabled_);
DCHECK(IdentifiabilityStudySettings::Get()->IsActive());
if (!identifiability_metrics_timer_.IsActive()) {
identifiability_metrics_timer_.StartOneShot(base::TimeDelta::FromMinutes(1),
FROM_HERE);
......@@ -305,9 +317,7 @@ void FontMatchingMetrics::IdentifiabilityMetricsTimerFired(TimerBase*) {
}
void FontMatchingMetrics::PublishAllMetrics() {
if (identifiability_study_enabled_) {
PublishIdentifiabilityMetrics();
}
PublishIdentifiabilityMetrics();
PublishUkmMetrics();
}
......
......@@ -248,8 +248,6 @@ class PLATFORM_EXPORT FontMatchingMetrics {
const ukm::SourceId source_id_;
TaskRunnerTimer<FontMatchingMetrics> identifiability_metrics_timer_;
const bool identifiability_study_enabled_;
};
} // namespace blink
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment