1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_METADATA_FEATURE_QUERY_H_
#define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_METADATA_FEATURE_QUERY_H_
#include "base/memory/stack_allocated.h"
#include "components/segmentation_platform/internal/metadata/metadata_writer.h"
namespace segmentation_platform {
inline constexpr std::array<float, 1> kZeroDefaultValue{0};
#define DEFINE_UMA_FEATURE_LATEST(var_name, uma_name) \
FeatureQuery var_name = FeatureQuery::FromUMAFeature( \
MetadataWriter::UMAFeature::FromValueHistogram( \
uma_name, 28, proto::Aggregation::LATEST_OR_DEFAULT, \
kZeroDefaultValue.size(), kZeroDefaultValue.data()))
#define DEFINE_UMA_FEATURE_COUNT(var_name, uma_name, days) \
FeatureQuery var_name = FeatureQuery::FromUMAFeature( \
MetadataWriter::UMAFeature::FromValueHistogram( \
uma_name, days, proto::Aggregation::COUNT))
#define DEFINE_UMA_FEATURE_ENUM_COUNT(var_name, uma_name, enum_id, enum_size, \
days) \
FeatureQuery var_name = FeatureQuery::FromUMAFeature( \
MetadataWriter::UMAFeature::FromEnumHistogram(uma_name, days, enum_id, \
enum_size))
#define DEFINE_UMA_FEATURE_SUM(var_name, uma_name, days) \
FeatureQuery var_name = FeatureQuery::FromUMAFeature( \
MetadataWriter::UMAFeature::FromValueHistogram(uma_name, days, \
proto::Aggregation::SUM))
#define DEFINE_INPUT_CONTEXT(var_name, input_name) \
constexpr std::array<MetadataWriter::CustomInput::Arg, 1> kArg##__LINE__{ \
std::make_pair("name", input_name)}; \
FeatureQuery var_name = \
FeatureQuery::FromCustomInput(MetadataWriter::CustomInput{ \
.tensor_length = 1, \
.fill_policy = proto::CustomInput::FILL_FROM_INPUT_CONTEXT, \
.name = input_name, \
.arg = kArg##__LINE__.data(), \
.arg_size = kArg##__LINE__.size()})
struct FeatureQuery {
STACK_ALLOCATED();
public:
static constexpr FeatureQuery FromUMAFeature(
MetadataWriter::UMAFeature uma_feature) {
return FeatureQuery{.uma_feature = uma_feature};
}
static constexpr FeatureQuery FromSqlFeature(
MetadataWriter::SqlFeature sql_feature) {
return FeatureQuery{.sql_feature = sql_feature};
}
static constexpr FeatureQuery FromCustomInput(
MetadataWriter::CustomInput custom_input) {
return FeatureQuery{.custom_input = custom_input};
}
const std::optional<MetadataWriter::UMAFeature> uma_feature;
const std::optional<MetadataWriter::SqlFeature> sql_feature;
const std::optional<MetadataWriter::CustomInput> custom_input;
};
// Helper function to create a `FeatureQuery` from a custom input name.
constexpr FeatureQuery CreateFeatureQueryFromCustomInputName(
const char* input_name) {
return FeatureQuery::FromCustomInput(MetadataWriter::CustomInput{
.tensor_length = 1,
.fill_policy = proto::CustomInput::FILL_FROM_INPUT_CONTEXT,
.name = input_name});
}
} // namespace segmentation_platform
#endif // COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_METADATA_FEATURE_QUERY_H_
|