Remove dependency on singletons in translate and language_detection.
This is a pre-factor for https://crrev.com/c/6029830.
It is intended to be a no-op.
There are 2 different methods that are expected to return singletons:
- `translate::GetLanguagerDetector`
- `language_detection::GetLanguagerDetector`
They are called in multiple places. With this CL they are called and
their object is retained.
For `language_detection::GetLanguagerDetector`, we are probably going
to need to switch to per-thread instances anyway, so the singleton
model is not sustainable.
For `translate::GetLanguagerDetector`, I think it's just a bit clearer
when you don't have to know that this produces a singleton.
Bug: 354069716
Change-Id: I8b827cc71cffcd8ce1cc159c84e1e08281f673a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6038976
Reviewed-by: Trevor Perrier <[email protected]>
Commit-Queue: Fergal Daly <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1386666}
diff --git a/components/translate/content/renderer/translate_agent.cc b/components/translate/content/renderer/translate_agent.cc
index bee5bb61..fffdf5e 100644
--- a/components/translate/content/renderer/translate_agent.cc
+++ b/components/translate/content/renderer/translate_agent.cc
@@ -101,9 +101,12 @@
TranslateAgent::TranslateAgent(content::RenderFrame* render_frame, int world_id)
: content::RenderFrameObserver(render_frame),
world_id_(world_id),
+ translate_language_detection_model_(GetLanguageDetectionModel()),
language_detection_agent_(
IsTFLiteLanguageDetectionEnabled()
- ? new language_detection::LanguageDetectionAgent(render_frame)
+ ? new language_detection::LanguageDetectionAgent(
+ render_frame,
+ translate_language_detection_model_->tflite_model())
: nullptr) {
translate_task_runner_ = this->render_frame()->GetTaskRunner(
blink::TaskType::kInternalTranslation);
@@ -192,12 +195,10 @@
translate::LanguageVerificationType::kNoPageContent);
} else if (translate::IsTFLiteLanguageDetectionEnabled()) {
// Use TFLite and page contents to assist with language detection.
- translate::LanguageDetectionModel& language_detection_model =
- GetLanguageDetectionModel();
- bool is_available = language_detection_model.IsAvailable();
+ bool is_available = translate_language_detection_model_->IsAvailable();
language =
is_available
- ? language_detection_model.DeterminePageLanguage(
+ ? translate_language_detection_model_->DeterminePageLanguage(
content_language, html_lang, contents->as_string(),
&model_detected_language, &is_model_reliable,
model_reliability_score)
@@ -213,7 +214,8 @@
"LanguageDetection.TFLiteModel.WasModelUnavailableDueToDeferredLoad",
!is_available &&
language_detection_agent_->waiting_for_first_foreground());
- detection_model_version = language_detection_model.GetModelVersion();
+ detection_model_version =
+ translate_language_detection_model_->GetModelVersion();
details.has_run_lang_detection = true;
} else {
// Use CLD3 and page contents to assist with language detection.
diff --git a/components/translate/content/renderer/translate_agent.h b/components/translate/content/renderer/translate_agent.h
index b4dcc25..15f5d8d 100644
--- a/components/translate/content/renderer/translate_agent.h
+++ b/components/translate/content/renderer/translate_agent.h
@@ -17,6 +17,7 @@
#include "components/language_detection/content/renderer/language_detection_agent.h"
#include "components/translate/content/common/translate.mojom.h"
#include "components/translate/core/common/translate_errors.h"
+#include "components/translate/core/language_detection/language_detection_model.h"
#include "content/public/renderer/render_frame_observer.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
@@ -181,6 +182,9 @@
// Mojo interface).
mojo::Remote<mojom::ContentTranslateDriver> translate_handler_;
+ const raw_ref<translate::LanguageDetectionModel>
+ translate_language_detection_model_;
+
// Same lifetime as this.
raw_ptr<language_detection::LanguageDetectionAgent> language_detection_agent_;
std::optional<LanguageDetectionDetails> last_details_;