/* * Copyright 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ package org.webrtc; import java.util.HashMap; import java.util.Map; // Java-side of androidmetrics.cc // // Rtc histograms can be queried through the API, getAndReset(). // The returned map holds the name of a histogram and its samples. // // Example of `map` with one histogram: // `name`: "WebRTC.Video.InputFramesPerSecond" // `min`: 1 // `max`: 100 // `bucketCount`: 50 // `samples`: [30]:1 // // Most histograms are not updated frequently (e.g. most video metrics are an // average over the call and recorded when a stream is removed). // The metrics can for example be retrieved when a peer connection is closed. public class Metrics { private static final String TAG = "Metrics"; public final Map map = new HashMap(); // @CalledByNative Metrics() {} /** * Class holding histogram information. */ public static class HistogramInfo { public final int min; public final int max; public final int bucketCount; public final Map samples = new HashMap(); // @CalledByNative("HistogramInfo") public HistogramInfo(int min, int max, int bucketCount) { this.min = min; this.max = max; this.bucketCount = bucketCount; } @CalledByNative("HistogramInfo") public void addSample(int value, int numEvents) { samples.put(value, numEvents); } } @CalledByNative private void add(String name, HistogramInfo info) { map.put(name, info); } // Enables gathering of metrics (which can be fetched with getAndReset()). // Must be called before PeerConnectionFactory is created. public static void enable() { nativeEnable(); } // Gets and clears native histograms. public static Metrics getAndReset() { return nativeGetAndReset(); } private static native void nativeEnable(); private static native Metrics nativeGetAndReset(); }