blob: 82d0b48b0bf81a2a1197de6cf4f7ea4738e88ef2 [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.
#import "ios/chrome/browser/text_selection/text_classifier_model_service.h"
#import <string>
#import "base/files/file_path.h"
#import "components/optimization_guide/core/optimization_guide_logger.h"
#import "components/optimization_guide/core/optimization_guide_model_provider.h"
#import "components/optimization_guide/proto/models.pb.h"
#import "ios/chrome/browser/optimization_guide/optimization_guide_service.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
TextClassifierModelService::TextClassifierModelService(
OptimizationGuideService* opt_guide_service)
: opt_guide_service_(opt_guide_service) {
DCHECK(opt_guide_service_);
opt_guide_service_->AddObserverForOptimizationTargetModel(
optimization_guide::proto::OPTIMIZATION_TARGET_TEXT_CLASSIFIER,
/*model_metadata=*/absl::nullopt, this);
}
TextClassifierModelService::~TextClassifierModelService() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
}
const base::FilePath& TextClassifierModelService::GetModelPath() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return model_path_;
}
bool TextClassifierModelService::HasValidModelPath() const {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return !model_path_.empty();
}
void TextClassifierModelService::Shutdown() {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
opt_guide_service_->RemoveObserverForOptimizationTargetModel(
optimization_guide::proto::OPTIMIZATION_TARGET_TEXT_CLASSIFIER, this);
}
void TextClassifierModelService::OnModelUpdated(
optimization_guide::proto::OptimizationTarget optimization_target,
const optimization_guide::ModelInfo& model_info) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
if (optimization_target !=
optimization_guide::proto::OPTIMIZATION_TARGET_TEXT_CLASSIFIER) {
return;
}
model_path_ = model_info.GetModelFilePath();
}
bool TextClassifierModelService::ShouldRecordInternalsPageLog() const {
return opt_guide_service_->GetOptimizationGuideLogger()
->ShouldEnableDebugLogs();
}
void TextClassifierModelService::RecordInternalsPageLog(
const std::string& debug) {
OPTIMIZATION_GUIDE_LOGGER(
optimization_guide_common::mojom::LogSource::TEXT_CLASSIFIER,
opt_guide_service_->GetOptimizationGuideLogger())
<< debug;
}