Fixes crashes by making native library thread-safe, makes Annotate calls much faster by
re-using tokens, fixes default values in enums in FlatBuffer schema.
Test: bit FrameworksCoreTests:android.view.textclassifier.TextClassificationManagerTest
Test: bit CtsViewTestCases:android.view.textclassifier.cts.TextClassificationManagerTest
Bug: 74193987
Bug: 68239358
Change-Id: Ic5ca42b628280bece59d31203748072084ac452c
(cherry picked from commit 2191547d7109587d73077f9d4818c691f7d7dafb)
Merged-In: Ic5ca42b628280bece59d31203748072084ac452c
diff --git a/cached-features_test.cc b/cached-features_test.cc
index 9566a8d..f064a63 100644
--- a/cached-features_test.cc
+++ b/cached-features_test.cc
@@ -37,22 +37,15 @@
return ElementsAreArray(matchers);
}
-// EmbeddingExecutor that always returns features based on
-class FakeEmbeddingExecutor : public EmbeddingExecutor {
- public:
- bool AddEmbedding(const TensorView<int>& sparse_features, float* dest,
- int dest_size) override {
- TC_CHECK_GE(dest_size, 2);
- EXPECT_EQ(sparse_features.size(), 1);
-
- dest[0] = sparse_features.data()[0] * 11.0f;
- dest[1] = -sparse_features.data()[0] * 11.0f;
- return true;
+std::unique_ptr<std::vector<float>> MakeFeatures(int num_tokens) {
+ std::unique_ptr<std::vector<float>> features(new std::vector<float>());
+ for (int i = 1; i <= num_tokens; ++i) {
+ features->push_back(i * 11.0f);
+ features->push_back(-i * 11.0f);
+ features->push_back(i * 0.1f);
}
-
- private:
- std::vector<float> storage_;
-};
+ return features;
+}
std::vector<float> GetCachedClickContextFeatures(
const CachedFeatures& cached_features, int click_pos) {
@@ -78,25 +71,15 @@
builder.Finish(CreateFeatureProcessorOptions(builder, &options));
flatbuffers::DetachedBuffer options_fb = builder.Release();
- std::vector<std::vector<int>> sparse_features(9);
- for (int i = 0; i < sparse_features.size(); ++i) {
- sparse_features[i].push_back(i + 1);
- }
- std::vector<std::vector<float>> dense_features(9);
- for (int i = 0; i < dense_features.size(); ++i) {
- dense_features[i].push_back((i + 1) * 0.1);
- }
+ std::unique_ptr<std::vector<float>> features = MakeFeatures(9);
+ std::unique_ptr<std::vector<float>> padding_features(
+ new std::vector<float>{112233.0, -112233.0, 321.0});
- std::vector<int> padding_sparse_features = {10203};
- std::vector<float> padding_dense_features = {321.0};
-
- FakeEmbeddingExecutor executor;
const std::unique_ptr<CachedFeatures> cached_features =
CachedFeatures::Create(
- {3, 10}, sparse_features, dense_features, padding_sparse_features,
- padding_dense_features,
+ {3, 10}, std::move(features), std::move(padding_features),
flatbuffers::GetRoot<FeatureProcessorOptions>(options_fb.data()),
- &executor, /*feature_vector_size=*/3);
+ /*feature_vector_size=*/3);
ASSERT_TRUE(cached_features);
EXPECT_THAT(GetCachedClickContextFeatures(*cached_features, 5),
@@ -129,25 +112,15 @@
builder.Finish(CreateFeatureProcessorOptions(builder, &options));
flatbuffers::DetachedBuffer options_fb = builder.Release();
- std::vector<std::vector<int>> sparse_features(6);
- for (int i = 0; i < sparse_features.size(); ++i) {
- sparse_features[i].push_back(i + 1);
- }
- std::vector<std::vector<float>> dense_features(6);
- for (int i = 0; i < dense_features.size(); ++i) {
- dense_features[i].push_back((i + 1) * 0.1);
- }
+ std::unique_ptr<std::vector<float>> features = MakeFeatures(9);
+ std::unique_ptr<std::vector<float>> padding_features(
+ new std::vector<float>{112233.0, -112233.0, 321.0});
- std::vector<int> padding_sparse_features = {10203};
- std::vector<float> padding_dense_features = {321.0};
-
- FakeEmbeddingExecutor executor;
const std::unique_ptr<CachedFeatures> cached_features =
CachedFeatures::Create(
- {3, 9}, sparse_features, dense_features, padding_sparse_features,
- padding_dense_features,
+ {3, 9}, std::move(features), std::move(padding_features),
flatbuffers::GetRoot<FeatureProcessorOptions>(options_fb.data()),
- &executor, /*feature_vector_size=*/3);
+ /*feature_vector_size=*/3);
ASSERT_TRUE(cached_features);
EXPECT_THAT(