Home | History | Annotate | Download | only in metric
      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 android.cts.statsd.atom.DeviceAtomTestCase;
     19 
     20 import com.android.internal.os.StatsdConfigProto;
     21 import com.android.internal.os.StatsdConfigProto.AtomMatcher;
     22 import com.android.internal.os.StatsdConfigProto.FieldFilter;
     23 import com.android.internal.os.StatsdConfigProto.FieldMatcher;
     24 import com.android.internal.os.StatsdConfigProto.FieldValueMatcher;
     25 import com.android.internal.os.StatsdConfigProto.Predicate;
     26 import com.android.internal.os.StatsdConfigProto.SimpleAtomMatcher;
     27 import com.android.internal.os.StatsdConfigProto.SimplePredicate;
     28 import com.android.os.AtomsProto.AppBreadcrumbReported;
     29 import com.android.os.AtomsProto.Atom;
     30 import com.android.os.StatsLog.GaugeMetricData;
     31 import com.android.os.StatsLog.StatsLogReport;
     32 import com.android.tradefed.log.LogUtil;
     33 
     34 public class GaugeMetricsTests extends DeviceAtomTestCase {
     35 
     36   private static final int APP_BREADCRUMB_REPORTED_A_MATCH_START_ID = 0;
     37   private static final int APP_BREADCRUMB_REPORTED_A_MATCH_STOP_ID = 1;
     38   private static final int APP_BREADCRUMB_REPORTED_B_MATCH_START_ID = 2;
     39 
     40   public void testGaugeMetric() throws Exception {
     41     if (statsdDisabled()) {
     42       return;
     43     }
     44     // Add AtomMatcher's.
     45     AtomMatcher startAtomMatcher =
     46         MetricsUtils.startAtomMatcher(APP_BREADCRUMB_REPORTED_A_MATCH_START_ID);
     47     AtomMatcher stopAtomMatcher =
     48         MetricsUtils.stopAtomMatcher(APP_BREADCRUMB_REPORTED_A_MATCH_STOP_ID);
     49     AtomMatcher atomMatcher =
     50         MetricsUtils.simpleAtomMatcher(APP_BREADCRUMB_REPORTED_B_MATCH_START_ID);
     51 
     52     StatsdConfigProto.StatsdConfig.Builder builder = createConfigBuilder();
     53     builder.addAtomMatcher(startAtomMatcher);
     54     builder.addAtomMatcher(stopAtomMatcher);
     55     builder.addAtomMatcher(atomMatcher);
     56 
     57     // Add Predicate's.
     58     SimplePredicate simplePredicate = SimplePredicate.newBuilder()
     59                                           .setStart(APP_BREADCRUMB_REPORTED_A_MATCH_START_ID)
     60                                           .setStop(APP_BREADCRUMB_REPORTED_A_MATCH_STOP_ID)
     61                                           .build();
     62     Predicate predicate = Predicate.newBuilder()
     63                               .setId(MetricsUtils.StringToId("Predicate"))
     64                               .setSimplePredicate(simplePredicate)
     65                               .build();
     66     builder.addPredicate(predicate);
     67 
     68     // Add GaugeMetric.
     69     FieldMatcher fieldMatcher =
     70         FieldMatcher.newBuilder().setField(APP_BREADCRUMB_REPORTED_B_MATCH_START_ID).build();
     71     builder.addGaugeMetric(
     72         StatsdConfigProto.GaugeMetric.newBuilder()
     73             .setId(MetricsUtils.GAUGE_METRIC_ID)
     74             .setWhat(APP_BREADCRUMB_REPORTED_B_MATCH_START_ID)
     75             .setCondition(predicate.getId())
     76             .setGaugeFieldsFilter(
     77                 FieldFilter.newBuilder().setIncludeAll(false).setFields(fieldMatcher).build())
     78             .setDimensionsInWhat(
     79                 FieldMatcher.newBuilder()
     80                     .setField(APP_BREADCRUMB_REPORTED_B_MATCH_START_ID)
     81                     .addChild(FieldMatcher.newBuilder()
     82                                   .setField(AppBreadcrumbReported.STATE_FIELD_NUMBER)
     83                                   .build())
     84                     .build())
     85             .setBucket(StatsdConfigProto.TimeUnit.CTS)
     86             .build());
     87 
     88     // Upload config.
     89     uploadConfig(builder);
     90 
     91     // Create AppBreadcrumbReported Start/Stop events.
     92     doAppBreadcrumbReportedStart(0);
     93     Thread.sleep(10);
     94     doAppBreadcrumbReportedStart(1);
     95     Thread.sleep(10);
     96     doAppBreadcrumbReportedStart(2);
     97     Thread.sleep(2000);
     98     doAppBreadcrumbReportedStop(2);
     99     Thread.sleep(10);
    100     doAppBreadcrumbReportedStop(0);
    101     Thread.sleep(10);
    102     doAppBreadcrumbReportedStop(1);
    103     doAppBreadcrumbReportedStart(2);
    104     Thread.sleep(10);
    105     doAppBreadcrumbReportedStart(1);
    106     Thread.sleep(2000);
    107     doAppBreadcrumbReportedStop(2);
    108     Thread.sleep(10);
    109     doAppBreadcrumbReportedStop(1);
    110 
    111     // Wait for the metrics to propagate to statsd.
    112     Thread.sleep(2000);
    113 
    114     StatsLogReport metricReport = getStatsLogReport();
    115     LogUtil.CLog.d("Got the following gauge metric data: " + metricReport.toString());
    116     assertEquals(MetricsUtils.GAUGE_METRIC_ID, metricReport.getMetricId());
    117     assertTrue(metricReport.hasGaugeMetrics());
    118     StatsLogReport.GaugeMetricDataWrapper gaugeData = metricReport.getGaugeMetrics();
    119     assertEquals(gaugeData.getDataCount(), 1);
    120 
    121     int bucketCount = gaugeData.getData(0).getBucketInfoCount();
    122     GaugeMetricData data = gaugeData.getData(0);
    123     assertTrue(bucketCount > 2);
    124     MetricsUtils.assertBucketTimePresent(data.getBucketInfo(0));
    125     assertEquals(data.getBucketInfo(0).getAtomCount(), 1);
    126     assertEquals(data.getBucketInfo(0).getAtom(0).getAppBreadcrumbReported().getLabel(), 0);
    127     assertEquals(data.getBucketInfo(0).getAtom(0).getAppBreadcrumbReported().getState(),
    128         AppBreadcrumbReported.State.START);
    129 
    130     MetricsUtils.assertBucketTimePresent(data.getBucketInfo(1));
    131     assertEquals(data.getBucketInfo(1).getAtomCount(), 1);
    132 
    133     MetricsUtils.assertBucketTimePresent(data.getBucketInfo(bucketCount-1));
    134     assertEquals(data.getBucketInfo(bucketCount - 1).getAtomCount(), 1);
    135     assertEquals(
    136         data.getBucketInfo(bucketCount - 1).getAtom(0).getAppBreadcrumbReported().getLabel(), 2);
    137     assertEquals(
    138         data.getBucketInfo(bucketCount - 1).getAtom(0).getAppBreadcrumbReported().getState(),
    139         AppBreadcrumbReported.State.STOP);
    140   }
    141 }
    142