ml: Add Clone method
MachineLearningServiceImpl gains a separate BindingSet for cloned
connections. Unlike the primordial D-Bus connection, the ml_service
won't quit if these connections are closed.
This CL is part of the work to allow Chrome-side clients to get their
own bound MachineLearningServicePtrs (on a thread of their choice).
BUG=chromium:916760
TEST=Added new unit tests, ebuild ... clean test
Change-Id: I58f58848ee97e802571dbef2f8464fde0fa2492a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/2289231
Tested-by: Andrew Moylan <amoylan@chromium.org>
Reviewed-by: Honglin Yu <honglinyu@chromium.org>
Commit-Queue: Andrew Moylan <amoylan@chromium.org>
diff --git a/ml/machine_learning_service_impl.h b/ml/machine_learning_service_impl.h
index fbde979..c21b6fa 100644
--- a/ml/machine_learning_service_impl.h
+++ b/ml/machine_learning_service_impl.h
@@ -12,6 +12,7 @@
#include <base/callback_forward.h>
#include <base/macros.h>
#include <mojo/public/cpp/bindings/binding.h>
+#include <mojo/public/cpp/bindings/binding_set.h>
#include "ml/model_metadata.h"
#include "ml/mojom/machine_learning_service.mojom.h"
@@ -40,28 +41,22 @@
private:
// chromeos::machine_learning::mojom::MachineLearningService:
+ void Clone(chromeos::machine_learning::mojom::MachineLearningServiceRequest
+ request) override;
void LoadBuiltinModel(
chromeos::machine_learning::mojom::BuiltinModelSpecPtr spec,
chromeos::machine_learning::mojom::ModelRequest request,
LoadBuiltinModelCallback callback) override;
-
- // chromeos::machine_learning::mojom::MachineLearningService:
void LoadFlatBufferModel(
chromeos::machine_learning::mojom::FlatBufferModelSpecPtr spec,
chromeos::machine_learning::mojom::ModelRequest request,
LoadFlatBufferModelCallback callback) override;
-
- // chromeos::machine_learning::mojom::MachineLearningService:
void LoadTextClassifier(
chromeos::machine_learning::mojom::TextClassifierRequest request,
LoadTextClassifierCallback callback) override;
-
- // chromeos::machine_learning::mojom::MachineLearningService:
void LoadHandwritingModel(
chromeos::machine_learning::mojom::HandwritingRecognizerRequest request,
LoadHandwritingModelCallback callback) override;
-
- // chromeos::machine_learning::mojom::MachineLearningService:
void LoadHandwritingModelWithSpec(
chromeos::machine_learning::mojom::HandwritingRecognizerSpecPtr spec,
chromeos::machine_learning::mojom::HandwritingRecognizerRequest request,
@@ -82,9 +77,14 @@
const std::string model_dir_;
+ // Primordial binding bootstrapped over D-Bus. Once opened, is never closed.
mojo::Binding<chromeos::machine_learning::mojom::MachineLearningService>
binding_;
+ // Additional bindings obtained via `Clone`.
+ mojo::BindingSet<chromeos::machine_learning::mojom::MachineLearningService>
+ clone_bindings_;
+
DISALLOW_COPY_AND_ASSIGN(MachineLearningServiceImpl);
};