blob: bfe850fb67c062d81214d187a235104c7eddbbd2 [file] [log] [blame]
Jeffrey Huangb8f54032020-03-23 13:42:42 -07001/*
2 * Copyright (C) 2020 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "FieldValue.h"
18#include "metadata_util.h"
19
20namespace android {
21namespace os {
22namespace statsd {
23
24void writeValueToProto(metadata::FieldValue* metadataFieldValue, const Value& value) {
25 std::string storage_value;
26 switch (value.getType()) {
27 case INT:
28 metadataFieldValue->set_value_int(value.int_value);
29 break;
30 case LONG:
31 metadataFieldValue->set_value_long(value.long_value);
32 break;
33 case FLOAT:
34 metadataFieldValue->set_value_float(value.float_value);
35 break;
36 case DOUBLE:
37 metadataFieldValue->set_value_double(value.double_value);
38 break;
39 case STRING:
40 metadataFieldValue->set_value_str(value.str_value.c_str());
41 break;
42 case STORAGE: // byte array
43 storage_value = ((char*) value.storage_value.data());
44 metadataFieldValue->set_value_storage(storage_value);
45 break;
46 default:
47 break;
48 }
49}
50
51void writeMetricDimensionKeyToMetadataDimensionKey(
52 const MetricDimensionKey& metricKey,
53 metadata::MetricDimensionKey* metadataMetricKey) {
54 for (const FieldValue& fieldValue : metricKey.getDimensionKeyInWhat().getValues()) {
55 metadata::FieldValue* metadataFieldValue = metadataMetricKey->add_dimension_key_in_what();
56 metadata::Field* metadataField = metadataFieldValue->mutable_field();
57 metadataField->set_tag(fieldValue.mField.getTag());
58 metadataField->set_field(fieldValue.mField.getField());
59 writeValueToProto(metadataFieldValue, fieldValue.mValue);
60 }
61
62 for (const FieldValue& fieldValue : metricKey.getStateValuesKey().getValues()) {
63 metadata::FieldValue* metadataFieldValue = metadataMetricKey->add_state_values_key();
64 metadata::Field* metadataField = metadataFieldValue->mutable_field();
65 metadataField->set_tag(fieldValue.mField.getTag());
66 metadataField->set_field(fieldValue.mField.getField());
67 writeValueToProto(metadataFieldValue, fieldValue.mValue);
68 }
69}
70
71} // namespace statsd
72} // namespace os
73} // namespace android