Commit 403f8d87 authored by Sophie Chang's avatar Sophie Chang Committed by Commit Bot

Pass up finch groups for getmodelsrequest

Bug: 1112970
Change-Id: If19c5dbb08ad1648b23b260481bcf31c12287264
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2342067Reviewed-by: default avatarMichael Crouse <mcrouse@chromium.org>
Commit-Queue: Sophie Chang <sophiechang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#796012}
parent efd30f38
......@@ -957,8 +957,6 @@ static_library("browser") {
"optimization_guide/optimization_guide_session_statistic.h",
"optimization_guide/optimization_guide_top_host_provider.cc",
"optimization_guide/optimization_guide_top_host_provider.h",
"optimization_guide/optimization_guide_util.cc",
"optimization_guide/optimization_guide_util.h",
"optimization_guide/optimization_guide_web_contents_observer.cc",
"optimization_guide/optimization_guide_web_contents_observer.h",
"optimization_guide/prediction/prediction_manager.cc",
......
......@@ -26,7 +26,6 @@
#include "chrome/browser/navigation_predictor/navigation_predictor_keyed_service_factory.h"
#include "chrome/browser/optimization_guide/optimization_guide_navigation_data.h"
#include "chrome/browser/optimization_guide/optimization_guide_permissions_util.h"
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
#include "chrome/browser/profiles/profile.h"
#include "components/google/core/common/google_util.h"
......@@ -44,6 +43,7 @@
#include "components/optimization_guide/optimization_guide_service.h"
#include "components/optimization_guide/optimization_guide_store.h"
#include "components/optimization_guide/optimization_guide_switches.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/optimization_metadata.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/optimization_guide/top_host_provider.h"
......@@ -985,7 +985,7 @@ void OptimizationGuideHintsManager::CanApplyOptimizationAsync(
optimization_guide::OptimizationMetadata metadata;
optimization_guide::OptimizationTypeDecision type_decision =
CanApplyOptimization(navigation_url, optimization_type, &metadata);
optimization_guide::OptimizationGuideDecision decision =
optimization_guide::OptimizationGuideDecision decision = optimization_guide::
GetOptimizationGuideDecisionFromOptimizationTypeDecision(type_decision);
// It's possible that a hint that applies to |navigation_url| will come in
// later, so only run the callback if we are sure we can apply the decision.
......@@ -1150,7 +1150,9 @@ void OptimizationGuideHintsManager::OnReadyToInvokeRegisteredCallbacks(
optimization_guide::OptimizationTypeDecision type_decision =
CanApplyOptimization(navigation_url, opt_type, &metadata);
optimization_guide::OptimizationGuideDecision decision =
GetOptimizationGuideDecisionFromOptimizationTypeDecision(type_decision);
optimization_guide::
GetOptimizationGuideDecisionFromOptimizationTypeDecision(
type_decision);
for (auto& callback : opt_type_and_callbacks.second) {
base::UmaHistogramEnumeration(
......
......@@ -14,7 +14,6 @@
#include "chrome/browser/optimization_guide/optimization_guide_navigation_data.h"
#include "chrome/browser/optimization_guide/optimization_guide_session_statistic.h"
#include "chrome/browser/optimization_guide/optimization_guide_top_host_provider.h"
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "chrome/browser/optimization_guide/prediction/prediction_manager.h"
#include "chrome/browser/profiles/profile.h"
#include "components/leveldb_proto/public/proto_database_provider.h"
......@@ -23,6 +22,7 @@
#include "components/optimization_guide/optimization_guide_decider.h"
#include "components/optimization_guide/optimization_guide_features.h"
#include "components/optimization_guide/optimization_guide_service.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/optimization_guide/top_host_provider.h"
#include "content/public/browser/browser_context.h"
......@@ -78,7 +78,8 @@ void LogOptimizationTargetDecisionAndPassOptimizationGuideDecision(
optimization_target_decision) {
base::UmaHistogramExactLinear(
"OptimizationGuide.TargetDecision." +
GetStringNameForOptimizationTarget(optimization_target),
optimization_guide::GetStringNameForOptimizationTarget(
optimization_target),
static_cast<int>(optimization_target_decision),
static_cast<int>(
optimization_guide::OptimizationTargetDecision::kMaxValue));
......
......@@ -24,7 +24,6 @@
#include "chrome/browser/optimization_guide/optimization_guide_navigation_data.h"
#include "chrome/browser/optimization_guide/optimization_guide_permissions_util.h"
#include "chrome/browser/optimization_guide/optimization_guide_session_statistic.h"
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "chrome/browser/optimization_guide/prediction/prediction_model_fetcher.h"
#include "chrome/browser/optimization_guide/prediction/remote_decision_tree_predictor.h"
#include "chrome/browser/profiles/profile.h"
......@@ -40,6 +39,7 @@
#include "components/optimization_guide/optimization_guide_store.h"
#include "components/optimization_guide/optimization_guide_switches.h"
#include "components/optimization_guide/optimization_guide_test_util.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/prediction_model.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/optimization_guide/store_update_data.h"
......@@ -106,7 +106,8 @@ class ScopedPredictionManagerModelStatusRecorder {
base::UmaHistogramEnumeration(
"OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus." +
GetStringNameForOptimizationTarget(optimization_target_),
optimization_guide::GetStringNameForOptimizationTarget(
optimization_target_),
status_);
}
......@@ -134,7 +135,8 @@ class ScopedPredictionModelConstructionAndValidationRecorder {
is_valid_);
base::UmaHistogramBoolean(
"OptimizationGuide.IsPredictionModelValid." +
GetStringNameForOptimizationTarget(optimization_target_),
optimization_guide::GetStringNameForOptimizationTarget(
optimization_target_),
is_valid_);
// Only record the timing if the model is valid and was able to be
......@@ -147,7 +149,8 @@ class ScopedPredictionModelConstructionAndValidationRecorder {
validation_latency);
base::UmaHistogramTimes(
"OptimizationGuide.PredictionModelValidationLatency." +
GetStringNameForOptimizationTarget(optimization_target_),
optimization_guide::GetStringNameForOptimizationTarget(
optimization_target_),
validation_latency);
}
}
......@@ -492,7 +495,8 @@ OptimizationTargetDecision PredictionManager::ShouldTargetNavigation(
if (target_decision != OptimizationTargetDecision::kUnknown) {
UmaHistogramTimes(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(optimization_target),
optimization_guide::GetStringNameForOptimizationTarget(
optimization_target),
base::TimeTicks::Now() - model_evaluation_start_time);
}
......@@ -615,7 +619,8 @@ void PredictionManager::OnModelEvaluated(
machine_learning::mojom::DecisionTreePredictionResult::kUnknown) {
UmaHistogramTimes(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(params->optimization_target),
optimization_guide::GetStringNameForOptimizationTarget(
params->optimization_target),
base::TimeTicks::Now() - params->model_evaluation_start_time);
}
......@@ -823,10 +828,11 @@ void PredictionManager::UpdatePredictionModels(
// Storing the model regardless of whether the model is valid or not. Model
// will be removed from store if it fails to load.
prediction_model_update_data->CopyPredictionModelIntoUpdateData(model);
base::UmaHistogramSparse("OptimizationGuide.PredictionModelUpdateVersion." +
GetStringNameForOptimizationTarget(
model.model_info().optimization_target()),
model.model_info().version());
base::UmaHistogramSparse(
"OptimizationGuide.PredictionModelUpdateVersion." +
optimization_guide::GetStringNameForOptimizationTarget(
model.model_info().optimization_target()),
model.model_info().version());
OnLoadPredictionModel(std::make_unique<proto::PredictionModel>(model));
}
model_and_features_store_->UpdatePredictionModels(
......@@ -962,10 +968,11 @@ void PredictionManager::OnProcessOrSendPredictionModel(
bool success) {
SEQUENCE_CHECKER(sequence_checker_);
if (success) {
base::UmaHistogramSparse("OptimizationGuide.PredictionModelLoadedVersion." +
GetStringNameForOptimizationTarget(
model->model_info().optimization_target()),
model->model_info().version());
base::UmaHistogramSparse(
"OptimizationGuide.PredictionModelLoadedVersion." +
optimization_guide::GetStringNameForOptimizationTarget(
model->model_info().optimization_target()),
model->model_info().version());
return;
}
......
......@@ -33,6 +33,7 @@
#include "components/optimization_guide/store_update_data.h"
#include "components/page_load_metrics/browser/page_load_metrics_test_waiter.h"
#include "components/previews/core/previews_switches.h"
#include "components/variations/hashing.h"
#include "content/public/browser/service_process_host.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
......@@ -370,6 +371,11 @@ class PredictionManagerBrowserTestBase : public InProcessBrowserTest {
web_contents);
}
void SetExpectedFieldTrialNames(
const base::flat_set<uint32_t>& expected_field_trial_name_hashes) {
expected_field_trial_name_hashes_ = expected_field_trial_name_hashes;
}
bool using_ml_service() const { return using_ml_service_; }
GURL https_url_with_content() { return https_url_with_content_; }
GURL https_url_without_content() { return https_url_without_content_; }
......@@ -395,6 +401,21 @@ class PredictionManagerBrowserTestBase : public InProcessBrowserTest {
// POST.
EXPECT_EQ(request.method, net::test_server::METHOD_POST);
EXPECT_NE(request.headers.end(), request.headers.find("X-Client-Data"));
optimization_guide::proto::GetModelsRequest models_request;
EXPECT_TRUE(models_request.ParseFromString(request.content));
// Make sure we actually filter field trials appropriately.
EXPECT_EQ(expected_field_trial_name_hashes_.size(),
static_cast<size_t>(models_request.active_field_trials_size()));
base::flat_set<uint32_t> seen_field_trial_name_hashes;
for (const auto& field_trial : models_request.active_field_trials()) {
EXPECT_TRUE(
expected_field_trial_name_hashes_.find(field_trial.name_hash()) !=
expected_field_trial_name_hashes_.end());
seen_field_trial_name_hashes.insert(field_trial.name_hash());
}
EXPECT_EQ(seen_field_trial_name_hashes.size(),
expected_field_trial_name_hashes_.size());
response->set_code(net::HTTP_OK);
std::unique_ptr<optimization_guide::proto::GetModelsResponse>
get_models_response = BuildGetModelsResponse(
......@@ -411,9 +432,9 @@ class PredictionManagerBrowserTestBase : public InProcessBrowserTest {
response->set_code(net::HTTP_NOT_FOUND);
}
std::string serialized_request;
get_models_response->SerializeToString(&serialized_request);
response->set_content(serialized_request);
std::string serialized_response;
get_models_response->SerializeToString(&serialized_response);
response->set_content(serialized_response);
return std::move(response);
}
......@@ -425,6 +446,7 @@ class PredictionManagerBrowserTestBase : public InProcessBrowserTest {
PredictionModelsFetcherRemoteResponseType::
kSuccessfulWithModelsAndFeatures;
std::unique_ptr<OptimizationGuideConsumerWebContentsObserver> consumer_;
base::flat_set<uint32_t> expected_field_trial_name_hashes_;
};
// Parametrized on whether the ML Service path is enabled.
......@@ -852,14 +874,26 @@ class PredictionManagerUsingMLServiceMetricsOnlyBrowserTest
private:
void InitializeFeatureList() override {
scoped_feature_list_.InitWithFeaturesAndParameters(
{{optimization_guide::features::kOptimizationHints, {}},
{optimization_guide::features::kRemoteOptimizationGuideFetching, {}},
{optimization_guide::features::kOptimizationTargetPrediction,
{{"painful_page_load_metrics_only", "true"}}},
{optimization_guide::features::
kOptimizationTargetPredictionUsingMLService,
{}}},
{
{optimization_guide::features::kOptimizationHints, {}},
{optimization_guide::features::kRemoteOptimizationGuideFetching,
{}},
{optimization_guide::features::kOptimizationTargetPrediction,
{{"painful_page_load_metrics_only", "true"}}},
{optimization_guide::features::
kOptimizationTargetPredictionUsingMLService,
{}},
{optimization_guide::features::kOptimizationHintsFieldTrials,
{{"allowed_field_trial_names",
"scoped_feature_list_trial_for_OptimizationHints,scoped_feature_"
"list_trial_for_OptimizationHintsFetching"}}},
},
{});
SetExpectedFieldTrialNames(base::flat_set<uint32_t>(
{variations::HashName(
"scoped_feature_list_trial_for_OptimizationHints"),
variations::HashName(
"scoped_feature_list_trial_for_OptimizationHintsFetching")}));
}
};
......
......@@ -15,7 +15,6 @@
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/optimization_guide/optimization_guide_navigation_data.h"
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "chrome/browser/optimization_guide/optimization_guide_web_contents_observer.h"
#include "chrome/browser/optimization_guide/prediction/prediction_model_fetcher.h"
#include "chrome/browser/optimization_guide/prediction/remote_decision_tree_predictor.h"
......@@ -28,6 +27,7 @@
#include "components/optimization_guide/optimization_guide_service.h"
#include "components/optimization_guide/optimization_guide_store.h"
#include "components/optimization_guide/optimization_guide_switches.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/prediction_model.h"
#include "components/optimization_guide/proto/hint_cache.pb.h"
#include "components/optimization_guide/proto/models.pb.h"
......@@ -667,12 +667,12 @@ TEST_P(PredictionManagerMLServiceTest,
.has_value());
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_UNKNOWN),
0);
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
0);
}
......@@ -729,7 +729,7 @@ TEST_P(PredictionManagerMLServiceTest,
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
0);
}
......@@ -789,13 +789,13 @@ TEST_P(PredictionManagerMLServiceTest, EvaluatePredictionModel) {
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
1);
histogram_tester.ExpectUniqueSample(
"OptimizationGuide.IsPredictionModelValid." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
true, 1);
......@@ -804,7 +804,7 @@ TEST_P(PredictionManagerMLServiceTest, EvaluatePredictionModel) {
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelValidationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
1);
histogram_tester.ExpectTotalCount(
......@@ -1291,7 +1291,7 @@ TEST_P(PredictionManagerMLServiceTest,
histogram_tester.ExpectBucketCount(
"OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
PredictionManagerModelStatus::kModelAvailable, 1);
}
......@@ -1346,7 +1346,7 @@ TEST_P(PredictionManagerMLServiceTest,
histogram_tester.ExpectBucketCount(
"OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
PredictionManagerModelStatus::kStoreAvailableNoModelForTarget, 1);
}
......@@ -1400,7 +1400,7 @@ TEST_P(PredictionManagerMLServiceTest,
histogram_tester.ExpectBucketCount(
"OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
PredictionManagerModelStatus::kStoreAvailableModelNotLoaded, 1);
......@@ -1454,7 +1454,7 @@ TEST_P(PredictionManagerMLServiceTest,
histogram_tester.ExpectBucketCount(
"OptimizationGuide.ShouldTargetNavigation.PredictionModelStatus." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
PredictionManagerModelStatus::kStoreUnavailableModelUnknown, 1);
}
......@@ -1633,13 +1633,13 @@ TEST_P(PredictionManagerMLServiceEnabledTest,
histogram_tester.ExpectTotalCount(
"OptimizationGuide.PredictionModelEvaluationLatency." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
0);
histogram_tester.ExpectUniqueSample(
"OptimizationGuide.IsPredictionModelValid." +
GetStringNameForOptimizationTarget(
optimization_guide::GetStringNameForOptimizationTarget(
optimization_guide::proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD),
true, 1);
}
......
......@@ -12,8 +12,8 @@
#include "base/feature_list.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/optimization_guide_features.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/variations/net/variations_http_headers.h"
#include "content/public/browser/network_service_instance.h"
......@@ -70,6 +70,9 @@ bool PredictionModelFetcher::FetchOptimizationGuideServiceModels(
pending_models_request_->set_request_context(request_context);
*pending_models_request_->mutable_active_field_trials() =
optimization_guide::GetActiveFieldTrialsAllowedForFetch();
// Limit the number of hosts to fetch features for, the list of hosts
// is assumed to be ordered from most to least important by the top
// host provider.
......
......@@ -48,6 +48,8 @@ static_library("optimization_guide") {
"optimization_guide_switches.h",
"optimization_guide_test_util.cc",
"optimization_guide_test_util.h",
"optimization_guide_util.cc",
"optimization_guide_util.h",
"optimization_metadata.cc",
"optimization_metadata.h",
"prediction_model.cc",
......
......@@ -14,10 +14,10 @@
#include "components/optimization_guide/hints_processing_util.h"
#include "components/optimization_guide/optimization_guide_features.h"
#include "components/optimization_guide/optimization_guide_prefs.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/proto/hints.pb.h"
#include "components/prefs/pref_service.h"
#include "components/prefs/scoped_user_pref_update.h"
#include "components/variations/active_field_trials.h"
#include "components/variations/net/variations_http_headers.h"
#include "content/public/browser/network_service_instance.h"
#include "net/base/load_flags.h"
......@@ -91,8 +91,6 @@ HintsFetcher::HintsFetcher(
url_loader_factory_ = std::move(url_loader_factory);
CHECK(optimization_guide_service_url_.SchemeIs(url::kHttpsScheme));
DCHECK(features::IsRemoteFetchingEnabled());
allowed_field_trial_name_hashes_ =
features::FieldTrialNameHashesAllowedForFetch();
}
HintsFetcher::~HintsFetcher() {
......@@ -205,29 +203,8 @@ bool HintsFetcher::FetchOptimizationGuideServiceHints(
get_hints_request.set_context(request_context_);
if (!allowed_field_trial_name_hashes_.empty()) {
std::vector<variations::ActiveGroupId> active_field_trials;
variations::GetFieldTrialActiveGroupIds(/*suffix=*/"",
&active_field_trials);
for (const auto& active_field_trial : active_field_trials) {
if (static_cast<size_t>(get_hints_request.active_field_trials_size()) ==
allowed_field_trial_name_hashes_.size()) {
// We've found all the field trials that we are allowed to send to the
// server.
break;
}
if (allowed_field_trial_name_hashes_.find(active_field_trial.name) ==
allowed_field_trial_name_hashes_.end()) {
// Continue if we are not allowed to send the field trial to the server.
continue;
}
proto::FieldTrial* ft_proto = get_hints_request.add_active_field_trials();
ft_proto->set_name_hash(active_field_trial.name);
ft_proto->set_group_hash(active_field_trial.group);
}
}
*get_hints_request.mutable_active_field_trials() =
GetActiveFieldTrialsAllowedForFetch();
for (const auto& url : valid_urls)
get_hints_request.add_urls()->set_url(url.spec());
......
......@@ -163,10 +163,6 @@ class HintsFetcher {
// retrieving hints from the remote Optimization Guide Service.
base::TimeTicks hints_fetch_start_time_;
// Field trial name hashes that are allowed to be sent up in the request to
// the remote Optimization Guide Service.
base::flat_set<uint32_t> allowed_field_trial_name_hashes_;
SEQUENCE_CHECKER(sequence_checker_);
DISALLOW_COPY_AND_ASSIGN(HintsFetcher);
......
......@@ -2,12 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/optimization_guide/optimization_guide_util.h"
#include "components/optimization_guide/optimization_guide_util.h"
#include "base/containers/flat_set.h"
#include "base/notreached.h"
#include "components/optimization_guide/optimization_guide_features.h"
#include "components/variations/active_field_trials.h"
#include "net/base/url_util.h"
#include "url/url_canon.h"
namespace optimization_guide {
std::string GetStringNameForOptimizationTarget(
optimization_guide::proto::OptimizationTarget optimization_target) {
switch (optimization_target) {
......@@ -57,3 +62,38 @@ GetOptimizationGuideDecisionFromOptimizationTypeDecision(
return optimization_guide::OptimizationGuideDecision::kFalse;
}
}
google::protobuf::RepeatedPtrField<proto::FieldTrial>
GetActiveFieldTrialsAllowedForFetch() {
google::protobuf::RepeatedPtrField<proto::FieldTrial>
filtered_active_field_trials;
base::flat_set<uint32_t> allowed_field_trials_for_fetch =
features::FieldTrialNameHashesAllowedForFetch();
if (allowed_field_trials_for_fetch.empty())
return filtered_active_field_trials;
std::vector<variations::ActiveGroupId> active_field_trials;
variations::GetFieldTrialActiveGroupIds(/*suffix=*/"", &active_field_trials);
for (const auto& active_field_trial : active_field_trials) {
if (static_cast<size_t>(filtered_active_field_trials.size()) ==
allowed_field_trials_for_fetch.size()) {
// We've found all the field trials that we are allowed to send to the
// server.
break;
}
if (allowed_field_trials_for_fetch.find(active_field_trial.name) ==
allowed_field_trials_for_fetch.end()) {
// Continue if we are not allowed to send the field trial to the server.
continue;
}
proto::FieldTrial* ft_proto = filtered_active_field_trials.Add();
ft_proto->set_name_hash(active_field_trial.name);
ft_proto->set_group_hash(active_field_trial.group);
}
return filtered_active_field_trials;
}
} // namespace optimization_guide
......@@ -2,21 +2,24 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
#define CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
#ifndef COMPONENTS_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
#define COMPONENTS_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
#include <string>
#include "components/optimization_guide/optimization_guide_decider.h"
#include "components/optimization_guide/optimization_guide_enums.h"
#include "components/optimization_guide/proto/common_types.pb.h"
#include "components/optimization_guide/proto/models.pb.h"
namespace optimization_guide {
// Returns the string than can be used to record histograms for the optimization
// target. If adding a histogram to use the string or adding an optimization
// target, update the OptimizationGuide.OptimizationTargets histogram suffixes
// in histograms.xml.
std::string GetStringNameForOptimizationTarget(
optimization_guide::proto::OptimizationTarget optimization_target);
proto::OptimizationTarget optimization_target);
// Returns false if the host is an IP address, localhosts, or an invalid
// host that is not supported by the remote optimization guide.
......@@ -25,6 +28,13 @@ bool IsHostValidToFetchFromRemoteOptimizationGuide(const std::string& host);
// Returns the OptimizationGuideDecision from |optimization_type_decision|.
optimization_guide::OptimizationGuideDecision
GetOptimizationGuideDecisionFromOptimizationTypeDecision(
optimization_guide::OptimizationTypeDecision optimization_type_decision);
OptimizationTypeDecision optimization_type_decision);
// Returns the set of active field trials that are allowed to be sent to the
// remote Optimization Guide Service.
google::protobuf::RepeatedPtrField<proto::FieldTrial>
GetActiveFieldTrialsAllowedForFetch();
} // namespace optimization_guide
#endif // CHROME_BROWSER_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
#endif // COMPONENTS_OPTIMIZATION_GUIDE_OPTIMIZATION_GUIDE_UTIL_H_
......@@ -49,3 +49,10 @@ enum RequestContext {
// Requesting items as part of a batch update.
CONTEXT_BATCH_UPDATE = 3;
}
message FieldTrial {
// The hash of a field trial.
optional uint32 name_hash = 1;
// The hash of the active group within the field trial.
optional uint32 group_hash = 2;
}
......@@ -39,13 +39,6 @@ message UrlInfo {
optional string url = 1;
}
message FieldTrial {
// The hash of a field trial.
optional uint32 name_hash = 1;
// The hash of the active group within the field trial.
optional uint32 group_hash = 2;
}
// Request to return a set of hints that guide what optimizations to perform
// on those hosts.
message GetHintsRequest {
......
......@@ -159,6 +159,8 @@ message GetModelsRequest {
// CONTEXT_PAGE_NAVIGATION), then no model updates will be returned for the
// requested models.
optional RequestContext request_context = 3;
// The field trials that are currently active when this request is made.
repeated FieldTrial active_field_trials = 4;
}
// Response to the GetModels request.
......
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