• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2016 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 package org.webrtc;
12 
13 import java.util.HashMap;
14 import java.util.Map;
15 
16 // Java-side of androidmetrics.cc
17 //
18 // Rtc histograms can be queried through the API, getAndReset().
19 // The returned map holds the name of a histogram and its samples.
20 //
21 // Example of `map` with one histogram:
22 // `name`: "WebRTC.Video.InputFramesPerSecond"
23 //     `min`: 1
24 //     `max`: 100
25 //     `bucketCount`: 50
26 //     `samples`: [30]:1
27 //
28 // Most histograms are not updated frequently (e.g. most video metrics are an
29 // average over the call and recorded when a stream is removed).
30 // The metrics can for example be retrieved when a peer connection is closed.
31 public class Metrics {
32   private static final String TAG = "Metrics";
33 
34   public final Map<String, HistogramInfo> map =
35       new HashMap<String, HistogramInfo>(); // <name, HistogramInfo>
36 
37   @CalledByNative
Metrics()38   Metrics() {}
39 
40   /**
41    * Class holding histogram information.
42    */
43   public static class HistogramInfo {
44     public final int min;
45     public final int max;
46     public final int bucketCount;
47     public final Map<Integer, Integer> samples =
48         new HashMap<Integer, Integer>(); // <value, # of events>
49 
50     @CalledByNative("HistogramInfo")
HistogramInfo(int min, int max, int bucketCount)51     public HistogramInfo(int min, int max, int bucketCount) {
52       this.min = min;
53       this.max = max;
54       this.bucketCount = bucketCount;
55     }
56 
57     @CalledByNative("HistogramInfo")
addSample(int value, int numEvents)58     public void addSample(int value, int numEvents) {
59       samples.put(value, numEvents);
60     }
61   }
62 
63   @CalledByNative
add(String name, HistogramInfo info)64   private void add(String name, HistogramInfo info) {
65     map.put(name, info);
66   }
67 
68   // Enables gathering of metrics (which can be fetched with getAndReset()).
69   // Must be called before PeerConnectionFactory is created.
enable()70   public static void enable() {
71     nativeEnable();
72   }
73 
74   // Gets and clears native histograms.
getAndReset()75   public static Metrics getAndReset() {
76     return nativeGetAndReset();
77   }
78 
nativeEnable()79   private static native void nativeEnable();
nativeGetAndReset()80   private static native Metrics nativeGetAndReset();
81 }
82