Home | History | Annotate | Download | only in Logging
      1 /*
      2  * Copyright (C) 2016 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 package android.telecom.Logging;
     18 
     19 import java.util.Collection;
     20 import java.util.HashMap;
     21 import java.util.Map;
     22 
     23 /**
     24  * @hide
     25  */
     26 public abstract class TimedEvent<T> {
     27     public abstract long getTime();
     28     public abstract T getKey();
     29 
     30     public static <T> Map<T, Double> averageTimings(Collection<? extends TimedEvent<T>> events) {
     31         HashMap<T, Integer> counts = new HashMap<>();
     32         HashMap<T, Double> result = new HashMap<>();
     33 
     34         for (TimedEvent<T> entry : events) {
     35             if (counts.containsKey(entry.getKey())) {
     36                 counts.put(entry.getKey(), counts.get(entry.getKey()) + 1);
     37                 result.put(entry.getKey(), result.get(entry.getKey()) + entry.getTime());
     38             } else {
     39                 counts.put(entry.getKey(), 1);
     40                 result.put(entry.getKey(), (double) entry.getTime());
     41             }
     42         }
     43 
     44         for (Map.Entry<T, Double> entry : result.entrySet()) {
     45             result.put(entry.getKey(), entry.getValue() / counts.get(entry.getKey()));
     46         }
     47 
     48         return result;
     49     }
     50 }
     51