blob: afa35478defbe0561dc19093587f4102932f2e47 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/omnibox/browser/on_device_tail_model_observer.h"
#include "base/logging.h"
#include "components/omnibox/browser/on_device_model_update_listener.h"
#include "components/optimization_guide/core/optimization_guide_util.h"
#include "components/optimization_guide/proto/models.pb.h"
#include "components/optimization_guide/proto/on_device_tail_suggest_model_metadata.pb.h"
OnDeviceTailModelObserver::OnDeviceTailModelObserver(
optimization_guide::OptimizationGuideModelProvider* opt_guide)
: opt_guide_(opt_guide) {
if (opt_guide_) {
opt_guide_->AddObserverForOptimizationTargetModel(
optimization_guide::proto::
OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST,
/* model_metadata= */ absl::nullopt, this);
}
}
OnDeviceTailModelObserver::~OnDeviceTailModelObserver() {
opt_guide_->RemoveObserverForOptimizationTargetModel(
optimization_guide::proto::
OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST,
this);
opt_guide_ = nullptr;
}
void OnDeviceTailModelObserver::OnModelUpdated(
optimization_guide::proto::OptimizationTarget optimization_target,
const optimization_guide::ModelInfo& model_info) {
if (optimization_target !=
optimization_guide::proto::
OPTIMIZATION_TARGET_OMNIBOX_ON_DEVICE_TAIL_SUGGEST) {
return;
}
auto* listener = OnDeviceModelUpdateListener::GetInstance();
if (listener) {
absl::optional<optimization_guide::proto::OnDeviceTailSuggestModelMetadata>
metadata = optimization_guide::ParsedAnyMetadata<
optimization_guide::proto::OnDeviceTailSuggestModelMetadata>(
model_info.GetModelMetadata().value());
if (!metadata.has_value()) {
DVLOG(1) << "Failed to fetch metadata for Omnibox on device tail model";
return;
}
listener->OnTailModelUpdate(model_info.GetModelFilePath(),
model_info.GetAdditionalFiles(),
metadata.value());
}
}