diff --git a/examples/androidapp/res/layout/fragment_hud.xml b/examples/androidapp/res/layout/fragment_hud.xml
index 20d26549bd..483e7ba456 100644
--- a/examples/androidapp/res/layout/fragment_hud.xml
+++ b/examples/androidapp/res/layout/fragment_hud.xml
@@ -15,7 +15,7 @@
android:layout_height="48dp"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
index 5d9d394341..2da2073e2b 100644
--- a/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
+++ b/examples/androidapp/src/org/appspot/apprtc/CallActivity.java
@@ -51,10 +51,10 @@ import org.webrtc.FileVideoCapturer;
import org.webrtc.IceCandidate;
import org.webrtc.Logging;
import org.webrtc.PeerConnectionFactory;
+import org.webrtc.RTCStatsReport;
import org.webrtc.RendererCommon.ScalingType;
import org.webrtc.ScreenCapturerAndroid;
import org.webrtc.SessionDescription;
-import org.webrtc.StatsReport;
import org.webrtc.SurfaceViewRenderer;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoFileRenderer;
@@ -951,12 +951,12 @@ public class CallActivity extends Activity implements AppRTCClient.SignalingEven
public void onPeerConnectionClosed() {}
@Override
- public void onPeerConnectionStatsReady(final StatsReport[] reports) {
+ public void onPeerConnectionStatsReady(final RTCStatsReport report) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (!isError && connected) {
- hudFragment.updateEncoderStatistics(reports);
+ hudFragment.updateEncoderStatistics(report);
}
}
});
diff --git a/examples/androidapp/src/org/appspot/apprtc/HudFragment.java b/examples/androidapp/src/org/appspot/apprtc/HudFragment.java
index ad6b37dfa5..94ca05549a 100644
--- a/examples/androidapp/src/org/appspot/apprtc/HudFragment.java
+++ b/examples/androidapp/src/org/appspot/apprtc/HudFragment.java
@@ -12,29 +12,20 @@ package org.appspot.apprtc;
import android.app.Fragment;
import android.os.Bundle;
-import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
-
-import org.webrtc.StatsReport;
-
-import java.util.HashMap;
-import java.util.Map;
+import org.webrtc.RTCStats;
+import org.webrtc.RTCStatsReport;
/**
* Fragment for HUD statistics display.
*/
public class HudFragment extends Fragment {
- private TextView encoderStatView;
- private TextView hudViewBwe;
- private TextView hudViewConnection;
- private TextView hudViewVideoSend;
- private TextView hudViewVideoRecv;
+ private TextView statView;
private ImageButton toggleDebugButton;
- private boolean videoCallEnabled;
private boolean displayHud;
private volatile boolean isRunning;
private CpuMonitor cpuMonitor;
@@ -45,20 +36,15 @@ public class HudFragment extends Fragment {
View controlView = inflater.inflate(R.layout.fragment_hud, container, false);
// Create UI controls.
- encoderStatView = controlView.findViewById(R.id.encoder_stat_call);
- hudViewBwe = controlView.findViewById(R.id.hud_stat_bwe);
- hudViewConnection = controlView.findViewById(R.id.hud_stat_connection);
- hudViewVideoSend = controlView.findViewById(R.id.hud_stat_video_send);
- hudViewVideoRecv = controlView.findViewById(R.id.hud_stat_video_recv);
+ statView = controlView.findViewById(R.id.hud_stat_call);
toggleDebugButton = controlView.findViewById(R.id.button_toggle_debug);
toggleDebugButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (displayHud) {
- int visibility =
- (hudViewBwe.getVisibility() == View.VISIBLE) ? View.INVISIBLE : View.VISIBLE;
- hudViewsSetProperties(visibility);
+ statView.setVisibility(
+ statView.getVisibility() == View.VISIBLE ? View.INVISIBLE : View.VISIBLE);
}
}
});
@@ -72,13 +58,11 @@ public class HudFragment extends Fragment {
Bundle args = getArguments();
if (args != null) {
- videoCallEnabled = args.getBoolean(CallActivity.EXTRA_VIDEO_CALL, true);
displayHud = args.getBoolean(CallActivity.EXTRA_DISPLAY_HUD, false);
}
int visibility = displayHud ? View.VISIBLE : View.INVISIBLE;
- encoderStatView.setVisibility(visibility);
+ statView.setVisibility(View.INVISIBLE);
toggleDebugButton.setVisibility(visibility);
- hudViewsSetProperties(View.INVISIBLE);
isRunning = true;
}
@@ -92,113 +76,27 @@ public class HudFragment extends Fragment {
this.cpuMonitor = cpuMonitor;
}
- private void hudViewsSetProperties(int visibility) {
- hudViewBwe.setVisibility(visibility);
- hudViewConnection.setVisibility(visibility);
- hudViewVideoSend.setVisibility(visibility);
- hudViewVideoRecv.setVisibility(visibility);
- hudViewBwe.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5);
- hudViewConnection.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5);
- hudViewVideoSend.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5);
- hudViewVideoRecv.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5);
- }
-
- private Map getReportMap(StatsReport report) {
- Map reportMap = new HashMap<>();
- for (StatsReport.Value value : report.values) {
- reportMap.put(value.name, value.value);
- }
- return reportMap;
- }
-
- public void updateEncoderStatistics(final StatsReport[] reports) {
+ public void updateEncoderStatistics(final RTCStatsReport report) {
if (!isRunning || !displayHud) {
return;
}
- StringBuilder encoderStat = new StringBuilder(128);
- StringBuilder bweStat = new StringBuilder();
- StringBuilder connectionStat = new StringBuilder();
- StringBuilder videoSendStat = new StringBuilder();
- StringBuilder videoRecvStat = new StringBuilder();
- String fps = null;
- String targetBitrate = null;
- String actualBitrate = null;
- for (StatsReport report : reports) {
- if (report.type.equals("ssrc") && report.id.contains("ssrc") && report.id.contains("send")) {
- // Send video statistics.
- Map reportMap = getReportMap(report);
- String trackId = reportMap.get("googTrackId");
- if (trackId != null && trackId.contains(PeerConnectionClient.VIDEO_TRACK_ID)) {
- fps = reportMap.get("googFrameRateSent");
- videoSendStat.append(report.id).append("\n");
- for (StatsReport.Value value : report.values) {
- String name = value.name.replace("goog", "");
- videoSendStat.append(name).append("=").append(value.value).append("\n");
- }
- }
- } else if (report.type.equals("ssrc") && report.id.contains("ssrc")
- && report.id.contains("recv")) {
- // Receive video statistics.
- Map reportMap = getReportMap(report);
- // Check if this stat is for video track.
- String frameWidth = reportMap.get("googFrameWidthReceived");
- if (frameWidth != null) {
- videoRecvStat.append(report.id).append("\n");
- for (StatsReport.Value value : report.values) {
- String name = value.name.replace("goog", "");
- videoRecvStat.append(name).append("=").append(value.value).append("\n");
- }
- }
- } else if (report.id.equals("bweforvideo")) {
- // BWE statistics.
- Map reportMap = getReportMap(report);
- targetBitrate = reportMap.get("googTargetEncBitrate");
- actualBitrate = reportMap.get("googActualEncBitrate");
-
- bweStat.append(report.id).append("\n");
- for (StatsReport.Value value : report.values) {
- String name = value.name.replace("goog", "").replace("Available", "");
- bweStat.append(name).append("=").append(value.value).append("\n");
- }
- } else if (report.type.equals("googCandidatePair")) {
- // Connection statistics.
- Map reportMap = getReportMap(report);
- String activeConnection = reportMap.get("googActiveConnection");
- if (activeConnection != null && activeConnection.equals("true")) {
- connectionStat.append(report.id).append("\n");
- for (StatsReport.Value value : report.values) {
- String name = value.name.replace("goog", "");
- connectionStat.append(name).append("=").append(value.value).append("\n");
- }
- }
- }
- }
- hudViewBwe.setText(bweStat.toString());
- hudViewConnection.setText(connectionStat.toString());
- hudViewVideoSend.setText(videoSendStat.toString());
- hudViewVideoRecv.setText(videoRecvStat.toString());
-
- if (videoCallEnabled) {
- if (fps != null) {
- encoderStat.append("Fps: ").append(fps).append("\n");
- }
- if (targetBitrate != null) {
- encoderStat.append("Target BR: ").append(targetBitrate).append("\n");
- }
- if (actualBitrate != null) {
- encoderStat.append("Actual BR: ").append(actualBitrate).append("\n");
- }
- }
+ StringBuilder sb = new StringBuilder();
if (cpuMonitor != null) {
- encoderStat.append("CPU%: ")
+ sb.append("CPU%: ")
.append(cpuMonitor.getCpuUsageCurrent())
.append("/")
.append(cpuMonitor.getCpuUsageAverage())
.append(". Freq: ")
- .append(cpuMonitor.getFrequencyScaleAverage());
+ .append(cpuMonitor.getFrequencyScaleAverage())
+ .append("\n");
}
- encoderStatView.setText(encoderStat.toString());
+
+ for (RTCStats stat : report.getStatsMap().values()) {
+ sb.append(stat.toString()).append("\n");
+ }
+
+ statView.setText(sb.toString());
}
}
diff --git a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
index d027f97296..c5e9059b74 100644
--- a/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
+++ b/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java
@@ -54,6 +54,8 @@ import org.webrtc.PeerConnection;
import org.webrtc.PeerConnection.IceConnectionState;
import org.webrtc.PeerConnection.PeerConnectionState;
import org.webrtc.PeerConnectionFactory;
+import org.webrtc.RTCStatsCollectorCallback;
+import org.webrtc.RTCStatsReport;
import org.webrtc.RtpParameters;
import org.webrtc.RtpReceiver;
import org.webrtc.RtpSender;
@@ -62,8 +64,6 @@ import org.webrtc.SdpObserver;
import org.webrtc.SessionDescription;
import org.webrtc.SoftwareVideoDecoderFactory;
import org.webrtc.SoftwareVideoEncoderFactory;
-import org.webrtc.StatsObserver;
-import org.webrtc.StatsReport;
import org.webrtc.SurfaceTextureHelper;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoDecoderFactory;
@@ -312,7 +312,7 @@ public class PeerConnectionClient {
/**
* Callback fired once peer connection statistics is ready.
*/
- void onPeerConnectionStatsReady(final StatsReport[] reports);
+ void onPeerConnectionStatsReady(final RTCStatsReport report);
/**
* Callback fired once peer connection error happened.
@@ -747,20 +747,16 @@ public class PeerConnectionClient {
return isVideoCallEnabled() && videoWidth * videoHeight >= 1280 * 720;
}
- @SuppressWarnings("deprecation") // TODO(sakal): getStats is deprecated.
private void getStats() {
if (peerConnection == null || isError) {
return;
}
- boolean success = peerConnection.getStats(new StatsObserver() {
+ peerConnection.getStats(new RTCStatsCollectorCallback() {
@Override
- public void onComplete(final StatsReport[] reports) {
- events.onPeerConnectionStatsReady(reports);
+ public void onStatsDelivered(RTCStatsReport report) {
+ events.onPeerConnectionStatsReady(report);
}
- }, null);
- if (!success) {
- Log.e(TAG, "getStats() returns false!");
- }
+ });
}
public void enableStatsEvents(boolean enable, int periodMs) {
diff --git a/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java b/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java
index 63cea5911b..ac3fb23a6e 100644
--- a/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java
+++ b/examples/androidtests/src/org/appspot/apprtc/test/PeerConnectionClientTest.java
@@ -39,8 +39,8 @@ import org.webrtc.EglBase;
import org.webrtc.IceCandidate;
import org.webrtc.PeerConnection;
import org.webrtc.PeerConnectionFactory;
+import org.webrtc.RTCStatsReport;
import org.webrtc.SessionDescription;
-import org.webrtc.StatsReport;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoFrame;
import org.webrtc.VideoSink;
@@ -208,7 +208,7 @@ public class PeerConnectionClientTest implements PeerConnectionEvents {
}
@Override
- public void onPeerConnectionStatsReady(StatsReport[] reports) {}
+ public void onPeerConnectionStatsReady(final RTCStatsReport report) {}
// Helper wait functions.
private boolean waitForLocalDescription(int timeoutMs) throws InterruptedException {