[TDC] Add test for upload_tensor = false
Removed migrated models from allowed_segment_ids.
Added testcase for continuous, ondemand and trigger API models.
Bug: b/294272590
Change-Id: I1ebfabe1ee511dc4aaf0234deabe4d7200d0ef87
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4985812
Commit-Queue: Hailey Wang <[email protected]>
Reviewed-by: Siddhartha S <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1217857}
diff --git a/components/segmentation_platform/internal/data_collection/training_data_collector_impl_unittest.cc b/components/segmentation_platform/internal/data_collection/training_data_collector_impl_unittest.cc
index d76771f..6d083fa 100644
--- a/components/segmentation_platform/internal/data_collection/training_data_collector_impl_unittest.cc
+++ b/components/segmentation_platform/internal/data_collection/training_data_collector_impl_unittest.cc
@@ -511,6 +511,33 @@
ExpectUkmCount(0u);
}
+// No training data recorded on startup if upload_tensor is set to false in
+// continuous collection.
+TEST_P(TrainingDataCollectorImplTest,
+ ContinuousCollectionOnStartupWithoutUploadTensor) {
+ ModelSource model_source = GetModelSource(GetParam());
+
+ // Create segment info.
+ test_segment_db()->AddUserActionFeature(kTestOptimizationTarget1, "action", 1,
+ 1, proto::Aggregation::COUNT,
+ model_source);
+
+ auto* segment_info = CreateSegment(kTestOptimizationTarget1, model_source);
+ segment_info->mutable_model_metadata()->set_upload_tensors(false);
+ segment_info->mutable_model_metadata()
+ ->mutable_training_outputs()
+ ->mutable_trigger_config()
+ ->set_decision_type(kPeriodicDecisionType);
+
+ // Add a uma feature output based on |kHistogramName0|.
+ AddOutput(segment_info, kHistogramName0);
+
+ clock()->Advance(base::Days(1));
+ Init();
+ task_environment()->RunUntilIdle();
+ ExpectUkmCount(0u);
+}
+
// Tests that continuous collection happens on startup.
TEST_P(TrainingDataCollectorImplTest, ContinuousCollectionOnStartupNoDelay) {
ModelSource model_source = GetModelSource(GetParam());
@@ -794,6 +821,32 @@
ExpectResult1Ukm();
}
+// Tests that if uma user action trigger is set, collection will not happen
+// without upload_tensor = true.
+TEST_P(TrainingDataCollectorImplTest,
+ DataCollectionWithTriggerWithoutUploadTensor) {
+ ModelSource model_source = GetModelSource(GetParam());
+
+ // Create a segment that contain a uma trigger.
+ auto* segment_info = CreateSegmentInfo(kTestOptimizationTarget1,
+ kOnDemandDecisionType, model_source);
+ segment_info->mutable_model_metadata()->set_upload_tensors(false);
+ AddUserActionTrigger(segment_info, kHistogramName1);
+ Init();
+
+ // Wait for input collection to be done and cached in memory.
+ auto input_context = base::MakeRefCounted<InputContext>();
+ collector()->OnDecisionTime(kTestOptimizationTarget1, input_context,
+ kOnDemandDecisionType,
+ ModelProvider::Request{1.f});
+ task_environment()->RunUntilIdle();
+ ExpectUkmCount(0u);
+
+ // Trigger output collection and check that no ukm was recorded.
+ collector()->OnUserAction(kHistogramName1, base::TimeTicks());
+ ExpectUkmCount(0u);
+}
+
// A histogram interested by multiple model will trigger multiple UKM reports.
TEST_P(TrainingDataCollectorImplTest,
DataCollectionWithUMATrigger_MultipleModels) {
@@ -935,7 +988,47 @@
ExpectResult1UkmWithSample(kSample);
}
-TEST_F(TrainingDataCollectorImplTest,
+// No training data recorded if upload_tensor is set to false in on-demand
+// collection using trigger API.
+TEST_P(TrainingDataCollectorImplTest,
+ DataCollectionTriggerAPIWithoutUploadTensor) {
+ ModelSource model_source = GetModelSource(GetParam());
+ base::HistogramTester tester;
+
+ // Create segment info.
+ auto* segment_info = CreateSegmentInfo(kTestOptimizationTarget1,
+ kOnDemandDecisionType, model_source);
+ segment_info->mutable_model_metadata()->set_upload_tensors(false);
+
+ Init();
+
+ // Wait for input collection to be done and cached in memory.
+ auto input_context = base::MakeRefCounted<InputContext>();
+ auto request_id =
+ collector()->OnDecisionTime(kTestOptimizationTarget1, input_context,
+ kOnDemandDecisionType, absl::nullopt);
+ task_environment()->RunUntilIdle();
+ ExpectUkmCount(0u);
+
+ TrainingLabels label;
+ label.output_metric = {{kHistogramName0, kSample}};
+ // Trigger output collection and ukm data recording.
+ collector()->CollectTrainingData(kTestOptimizationTarget1, request_id, label,
+ base::DoNothing());
+
+ // No histogram recorded for data collection.
+ EXPECT_EQ(0,
+ tester.GetBucketCount(
+ "SegmentationPlatform.TrainingDataCollectionEvents.SearchUser",
+ stats::TrainingDataCollectionEvent::kImmediateCollectionStart));
+ EXPECT_EQ(0,
+ tester.GetBucketCount(
+ "SegmentationPlatform.TrainingDataCollectionEvents.SearchUser",
+ stats::TrainingDataCollectionEvent::kObservationTimeReached));
+ ExpectUkmCount(0);
+}
+
+TEST_P(TrainingDataCollectorImplTest,
DataCollectionWithTriggerAPIForPreferredSegment) {
EXPECT_CALL(*feature_list_processor(),
ProcessFeatureList(_, _, _, _, _, _, _))
diff --git a/components/segmentation_platform/internal/segmentation_ukm_helper.cc b/components/segmentation_platform/internal/segmentation_ukm_helper.cc
index 2c17365..a41a83f 100644
--- a/components/segmentation_platform/internal/segmentation_ukm_helper.cc
+++ b/components/segmentation_platform/internal/segmentation_ukm_helper.cc
@@ -168,9 +168,7 @@
SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_VOICE,
SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_DUMMY,
- SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_CHROME_START_ANDROID,
- SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_QUERY_TILES,
- SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_CHROME_START_ANDROID_V2};
+ SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_QUERY_TILES};
}
sampling_rate_ = GetModelExecutionSamplingRate();
DCHECK_GE(sampling_rate_, 0);