1 /* 2 * Copyright (C) 2018 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 package android.cts.statsd.metric; 17 18 import com.android.internal.os.StatsdConfigProto; 19 import com.android.internal.os.StatsdConfigProto.AtomMatcher; 20 import com.android.internal.os.StatsdConfigProto.EventActivation; 21 import com.android.internal.os.StatsdConfigProto.FieldValueMatcher; 22 import com.android.internal.os.StatsdConfigProto.SimpleAtomMatcher; 23 import com.android.os.AtomsProto.Atom; 24 import com.android.os.AtomsProto.AppBreadcrumbReported; 25 import com.google.protobuf.Message; 26 import com.google.protobuf.Descriptors.Descriptor; 27 import com.google.protobuf.Descriptors.FieldDescriptor; 28 29 import static org.junit.Assert.assertTrue; 30 31 public class MetricsUtils { 32 public static final long COUNT_METRIC_ID = 3333; 33 public static final long DURATION_METRIC_ID = 4444; 34 public static final long GAUGE_METRIC_ID = 5555; 35 public static final long VALUE_METRIC_ID = 6666; 36 37 public static AtomMatcher.Builder getAtomMatcher(int atomId) { 38 AtomMatcher.Builder builder = AtomMatcher.newBuilder(); 39 builder.setSimpleAtomMatcher(SimpleAtomMatcher.newBuilder() 40 .setAtomId(atomId)); 41 return builder; 42 } 43 44 public static AtomMatcher startAtomMatcher(int id) { 45 return AtomMatcher.newBuilder() 46 .setId(id) 47 .setSimpleAtomMatcher( 48 SimpleAtomMatcher.newBuilder() 49 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 50 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 51 .setField(AppBreadcrumbReported.STATE_FIELD_NUMBER) 52 .setEqInt(AppBreadcrumbReported.State.START.ordinal()))) 53 .build(); 54 } 55 56 public static AtomMatcher startAtomMatcherWithLabel(int id, int label) { 57 return appBreadcrumbMatcherWithLabelAndState(id, label, AppBreadcrumbReported.State.START); 58 } 59 60 public static AtomMatcher stopAtomMatcher(int id) { 61 return AtomMatcher.newBuilder() 62 .setId(id) 63 .setSimpleAtomMatcher( 64 SimpleAtomMatcher.newBuilder() 65 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 66 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 67 .setField(AppBreadcrumbReported.STATE_FIELD_NUMBER) 68 .setEqInt(AppBreadcrumbReported.State.STOP.ordinal()))) 69 .build(); 70 } 71 72 public static AtomMatcher stopAtomMatcherWithLabel(int id, int label) { 73 return appBreadcrumbMatcherWithLabelAndState(id, label, AppBreadcrumbReported.State.STOP); 74 } 75 76 public static AtomMatcher unspecifiedAtomMatcher(int id) { 77 return AtomMatcher.newBuilder() 78 .setId(id) 79 .setSimpleAtomMatcher(SimpleAtomMatcher.newBuilder() 80 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 81 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 82 .setField(AppBreadcrumbReported.STATE_FIELD_NUMBER) 83 .setEqInt(AppBreadcrumbReported.State.UNSPECIFIED.ordinal()))) 84 .build(); 85 } 86 87 public static AtomMatcher simpleAtomMatcher(int id) { 88 return AtomMatcher.newBuilder() 89 .setId(id) 90 .setSimpleAtomMatcher( 91 SimpleAtomMatcher.newBuilder().setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER)) 92 .build(); 93 } 94 95 public static AtomMatcher appBreadcrumbMatcherWithLabel(int id, int label) { 96 return AtomMatcher.newBuilder() 97 .setId(id) 98 .setSimpleAtomMatcher(SimpleAtomMatcher.newBuilder() 99 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 100 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 101 .setField(AppBreadcrumbReported.LABEL_FIELD_NUMBER) 102 .setEqInt(label))) 103 .build(); 104 } 105 106 public static AtomMatcher appBreadcrumbMatcherWithLabelAndState(int id, int label, 107 final AppBreadcrumbReported.State state) { 108 109 return AtomMatcher.newBuilder() 110 .setId(id) 111 .setSimpleAtomMatcher(SimpleAtomMatcher.newBuilder() 112 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 113 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 114 .setField(AppBreadcrumbReported.STATE_FIELD_NUMBER) 115 .setEqInt(state.ordinal())) 116 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 117 .setField(AppBreadcrumbReported.LABEL_FIELD_NUMBER) 118 .setEqInt(label))) 119 .build(); 120 } 121 122 public static AtomMatcher simpleAtomMatcher(int id, int label) { 123 return AtomMatcher.newBuilder() 124 .setId(id) 125 .setSimpleAtomMatcher(SimpleAtomMatcher.newBuilder() 126 .setAtomId(Atom.APP_BREADCRUMB_REPORTED_FIELD_NUMBER) 127 .addFieldValueMatcher(FieldValueMatcher.newBuilder() 128 .setField(AppBreadcrumbReported.LABEL_FIELD_NUMBER) 129 .setEqInt(label) 130 ) 131 ) 132 .build(); 133 } 134 135 public static EventActivation.Builder createEventActivation(int ttlSecs, int matcherId, 136 int cancelMatcherId) { 137 return EventActivation.newBuilder() 138 .setAtomMatcherId(matcherId) 139 .setTtlSeconds(ttlSecs) 140 .setDeactivationAtomMatcherId(cancelMatcherId); 141 } 142 143 public static long StringToId(String str) { 144 return str.hashCode(); 145 } 146 147 public static void assertBucketTimePresent(Message bucketInfo) { 148 Descriptor descriptor = bucketInfo.getDescriptorForType(); 149 boolean found = false; 150 FieldDescriptor bucketNum = descriptor.findFieldByName("bucket_num"); 151 FieldDescriptor startMillis = descriptor.findFieldByName("start_bucket_elapsed_millis"); 152 FieldDescriptor endMillis = descriptor.findFieldByName("end_bucket_elapsed_millis"); 153 if (bucketNum != null && bucketInfo.hasField(bucketNum)) { 154 found = true; 155 } else if (startMillis != null && bucketInfo.hasField(startMillis) && 156 endMillis != null && bucketInfo.hasField(endMillis)) { 157 found = true; 158 } 159 assertTrue("Bucket info did not have either bucket num or start and end elapsed millis", 160 found); 161 } 162 } 163