12161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org/* 2a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * Copyright 2015 The WebRTC Project Authors. All rights reserved. 32161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org * 4a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * Use of this source code is governed by a BSD-style license 5a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * that can be found in the LICENSE file in the root of the source 6a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * tree. An additional intellectual property rights grant can be found 7a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * in the file PATENTS. All contributing project authors may 8a8736448970fedd82f051c6b2cc89185b755ddf3Donald E Curtis * be found in the AUTHORS file in the root of the source tree. 92161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org */ 102161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 112161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgpackage org.appspot.apprtc; 122161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 132161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.app.Fragment; 142161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.os.Bundle; 152161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.util.TypedValue; 162161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.view.LayoutInflater; 172161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.view.View; 182161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.view.ViewGroup; 192161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.widget.ImageButton; 202161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport android.widget.TextView; 212161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 222161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport org.webrtc.StatsReport; 232161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 242161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport java.util.HashMap; 252161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgimport java.util.Map; 262161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 272161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org/** 282161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org * Fragment for HUD statistics display. 292161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org */ 302161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.orgpublic class HudFragment extends Fragment { 312161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private View controlView; 322161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private TextView encoderStatView; 332161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private TextView hudViewBwe; 342161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private TextView hudViewConnection; 352161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private TextView hudViewVideoSend; 362161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private TextView hudViewVideoRecv; 372161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private ImageButton toggleDebugButton; 382161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private boolean videoCallEnabled; 392161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private boolean displayHud; 402161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private volatile boolean isRunning; 412161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private final CpuMonitor cpuMonitor = new CpuMonitor(); 422161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 432161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org @Override 442161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org public View onCreateView(LayoutInflater inflater, ViewGroup container, 452161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Bundle savedInstanceState) { 462161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org controlView = inflater.inflate(R.layout.fragment_hud, container, false); 472161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 482161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // Create UI controls. 492161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStatView = (TextView) controlView.findViewById(R.id.encoder_stat_call); 502161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewBwe = (TextView) controlView.findViewById(R.id.hud_stat_bwe); 512161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewConnection = (TextView) controlView.findViewById(R.id.hud_stat_connection); 522161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoSend = (TextView) controlView.findViewById(R.id.hud_stat_video_send); 532161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoRecv = (TextView) controlView.findViewById(R.id.hud_stat_video_recv); 542161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org toggleDebugButton = (ImageButton) controlView.findViewById(R.id.button_toggle_debug); 552161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 562161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org toggleDebugButton.setOnClickListener(new View.OnClickListener() { 572161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org @Override 582161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org public void onClick(View view) { 592161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (displayHud) { 602161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org int visibility = (hudViewBwe.getVisibility() == View.VISIBLE) 612161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org ? View.INVISIBLE : View.VISIBLE; 622161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewsSetProperties(visibility); 632161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 642161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 652161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org }); 662161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 672161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org return controlView; 682161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 692161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 702161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org @Override 712161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org public void onStart() { 722161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org super.onStart(); 732161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 742161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Bundle args = getArguments(); 752161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (args != null) { 762161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org videoCallEnabled = args.getBoolean(CallActivity.EXTRA_VIDEO_CALL, true); 772161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org displayHud = args.getBoolean(CallActivity.EXTRA_DISPLAY_HUD, false); 782161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 792161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org int visibility = displayHud ? View.VISIBLE : View.INVISIBLE; 802161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStatView.setVisibility(visibility); 812161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org toggleDebugButton.setVisibility(visibility); 822161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewsSetProperties(View.INVISIBLE); 832161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org isRunning = true; 842161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 852161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 862161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org @Override 872161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org public void onStop() { 882161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org isRunning = false; 892161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org super.onStop(); 902161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 912161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 922161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private void hudViewsSetProperties(int visibility) { 932161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewBwe.setVisibility(visibility); 942161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewConnection.setVisibility(visibility); 952161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoSend.setVisibility(visibility); 962161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoRecv.setVisibility(visibility); 972161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewBwe.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5); 982161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewConnection.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5); 992161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoSend.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5); 1002161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoRecv.setTextSize(TypedValue.COMPLEX_UNIT_PT, 5); 1012161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1022161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1032161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org private Map<String, String> getReportMap(StatsReport report) { 1042161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Map<String, String> reportMap = new HashMap<String, String>(); 1052161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport.Value value : report.values) { 1062161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org reportMap.put(value.name, value.value); 1072161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1082161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org return reportMap; 1092161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1102161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1112161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org public void updateEncoderStatistics(final StatsReport[] reports) { 1122161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (!isRunning || !displayHud) { 1132161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org return; 1142161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1152161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org StringBuilder encoderStat = new StringBuilder(128); 1162161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org StringBuilder bweStat = new StringBuilder(); 1172161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org StringBuilder connectionStat = new StringBuilder(); 1182161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org StringBuilder videoSendStat = new StringBuilder(); 1192161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org StringBuilder videoRecvStat = new StringBuilder(); 1202161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String fps = null; 1212161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String targetBitrate = null; 1222161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String actualBitrate = null; 1232161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1242161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport report : reports) { 1252161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (report.type.equals("ssrc") && report.id.contains("ssrc") 1262161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org && report.id.contains("send")) { 1272161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // Send video statistics. 1282161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Map<String, String> reportMap = getReportMap(report); 1292161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String trackId = reportMap.get("googTrackId"); 1302161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (trackId != null && trackId.contains(PeerConnectionClient.VIDEO_TRACK_ID)) { 1312161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org fps = reportMap.get("googFrameRateSent"); 1322161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org videoSendStat.append(report.id).append("\n"); 1332161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport.Value value : report.values) { 1342161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String name = value.name.replace("goog", ""); 1352161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org videoSendStat.append(name).append("=").append(value.value).append("\n"); 1362161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1372161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1382161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } else if (report.type.equals("ssrc") && report.id.contains("ssrc") 1392161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org && report.id.contains("recv")) { 1402161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // Receive video statistics. 1412161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Map<String, String> reportMap = getReportMap(report); 1422161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // Check if this stat is for video track. 1432161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String frameWidth = reportMap.get("googFrameWidthReceived"); 1442161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (frameWidth != null) { 1452161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org videoRecvStat.append(report.id).append("\n"); 1462161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport.Value value : report.values) { 1472161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String name = value.name.replace("goog", ""); 1482161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org videoRecvStat.append(name).append("=").append(value.value).append("\n"); 1492161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1502161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1512161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } else if (report.id.equals("bweforvideo")) { 1522161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // BWE statistics. 1532161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Map<String, String> reportMap = getReportMap(report); 1542161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org targetBitrate = reportMap.get("googTargetEncBitrate"); 1552161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org actualBitrate = reportMap.get("googActualEncBitrate"); 1562161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1572161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org bweStat.append(report.id).append("\n"); 1582161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport.Value value : report.values) { 1592161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String name = value.name.replace("goog", "").replace("Available", ""); 1602161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org bweStat.append(name).append("=").append(value.value).append("\n"); 1612161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1622161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } else if (report.type.equals("googCandidatePair")) { 1632161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org // Connection statistics. 1642161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org Map<String, String> reportMap = getReportMap(report); 1652161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String activeConnection = reportMap.get("googActiveConnection"); 1662161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (activeConnection != null && activeConnection.equals("true")) { 1672161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org connectionStat.append(report.id).append("\n"); 1682161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org for (StatsReport.Value value : report.values) { 1692161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org String name = value.name.replace("goog", ""); 1702161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org connectionStat.append(name).append("=").append(value.value).append("\n"); 1712161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1722161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1732161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1742161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1752161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewBwe.setText(bweStat.toString()); 1762161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewConnection.setText(connectionStat.toString()); 1772161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoSend.setText(videoSendStat.toString()); 1782161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org hudViewVideoRecv.setText(videoRecvStat.toString()); 1792161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1802161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (videoCallEnabled) { 1812161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (fps != null) { 1822161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStat.append("Fps: ").append(fps).append("\n"); 1832161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1842161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (targetBitrate != null) { 1852161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStat.append("Target BR: ").append(targetBitrate).append("\n"); 1862161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1872161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (actualBitrate != null) { 1882161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStat.append("Actual BR: ").append(actualBitrate).append("\n"); 1892161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1902161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1912161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org 1922161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org if (cpuMonitor.sampleCpuUtilization()) { 1932161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStat.append("CPU%: ") 1942161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org .append(cpuMonitor.getCpuCurrent()).append("/") 1952161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org .append(cpuMonitor.getCpuAvg3()).append("/") 1962161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org .append(cpuMonitor.getCpuAvgAll()); 1972161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 1982161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org encoderStatView.setText(encoderStat.toString()); 1992161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org } 2002161234cf6260feb4ec4e7e4ec1d6fd6c041df1fglaznev@webrtc.org} 201