| /* | |
| * Copyright 2017 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.Map; | |
| /** | |
| * Java version of webrtc::RTCStats. Represents an RTCStats object, as | |
| * described in https://w3c.github.io/webrtc-stats/. The |id|, |timestampUs| | |
| * and |type| accessors have the same meaning for this class as for the | |
| * RTCStats dictionary. Each RTCStatsReport produced by getStats contains | |
| * multiple RTCStats objects; one for each underlying object (codec, stream, | |
| * transport, etc.) that was inspected to produce the stats. | |
| */ | |
| public class RTCStats { | |
| private final long timestampUs; | |
| private final String type; | |
| private final String id; | |
| private final Map<String, Object> members; | |
| public RTCStats(long timestampUs, String type, String id, Map<String, Object> members) { | |
| this.timestampUs = timestampUs; | |
| this.type = type; | |
| this.id = id; | |
| this.members = members; | |
| } | |
| // Timestamp in microseconds. | |
| public double getTimestampUs() { | |
| return timestampUs; | |
| } | |
| // Equivalent to RTCStatsType in the stats spec. Indicates the type of the | |
| // object that was inspected to produce the stats. | |
| public String getType() { | |
| return type; | |
| } | |
| // Unique ID representing this stats object. May be referred to by members of | |
| // other stats objects. | |
| public String getId() { | |
| return id; | |
| } | |
| /** | |
| * Returns map of member names to values. Returns as an ordered map so that | |
| * the stats object can be serialized with a consistent ordering. | |
| * | |
| * Values will be one of the following objects: | |
| * - Boolean | |
| * - Integer (for 32-bit signed integers) | |
| * - Long (for 32-bit unsigned and 64-bit signed integers) | |
| * - BigInteger (for 64-bit unsigned integers) | |
| * - Double | |
| * - String | |
| * - The array form of any of the above (e.g., Integer[]) | |
| */ | |
| public Map<String, Object> getMembers() { | |
| return members; | |
| } | |
| @Override | |
| public String toString() { | |
| StringBuilder builder = new StringBuilder(); | |
| builder.append("{ timestampUs: ") | |
| .append(timestampUs) | |
| .append(", type: ") | |
| .append(type) | |
| .append(", id: ") | |
| .append(id); | |
| boolean first = true; | |
| for (Map.Entry<String, Object> entry : members.entrySet()) { | |
| builder.append(", ").append(entry.getKey()).append(": "); | |
| appendValue(builder, entry.getValue()); | |
| } | |
| builder.append(" }"); | |
| return builder.toString(); | |
| } | |
| private static void appendValue(StringBuilder builder, Object value) { | |
| if (value instanceof Object[]) { | |
| Object[] arrayValue = (Object[]) value; | |
| builder.append('['); | |
| for (int i = 0; i < arrayValue.length; ++i) { | |
| if (i != 0) { | |
| builder.append(", "); | |
| } | |
| appendValue(builder, arrayValue[i]); | |
| } | |
| builder.append(']'); | |
| } else if (value instanceof String) { | |
| // Enclose strings in quotes to make it clear they're strings. | |
| builder.append('"').append(value).append('"'); | |
| } else { | |
| builder.append(value); | |
| } | |
| } | |
| // TODO(bugs.webrtc.org/8557) Use ctor directly with full Map type. | |
| @SuppressWarnings("unchecked") | |
| @CalledByNative | |
| static RTCStats create(long timestampUs, String type, String id, Map members) { | |
| return new RTCStats(timestampUs, type, id, members); | |
| } | |
| } |