竹杖芒鞋轻胜马

Android 线上性能监控五 死锁检测

本文相关源码: java.lang.Class java.lang.Thread art/runtime/native/java_lang_Class.cc art/runtime/native/java_lang_Object.cc art/runtime/native/java_lang_Thread.cc art/runtime/class_linker.cc art/runtime...

Android 线上性能监控四 基础四 AARCH64 FP 栈回溯

一、本文目的 本文仅关注 AARCH64 FP 栈回溯过程,Arm32 下栈回溯方案及其适用范围不在本文讨论范围。 二、AARCH64 栈帧结构 栈帧结构如图,下面通过一个简单的示例,看下栈帧开辟、释放及寄存器值保存和恢复的过程。 2.1 示例 一个简单函数调用的例子,代码如下: void fun2(int a){ int c = a + 1; printf("He...

Android 线上性能监控三 基础三 bhook 源码分析

一、本文目的 前文中写了一个 native hook 的简单例子。 本文将分析下字节开源的 bhook 是怎么实现的。 字节关于 bhook 的介绍在这里,上面提到: 可以随时 hook 和 unhook 单个、部分、全部的调用者 ELF。 当新的 ELF 被加载到内存后,它应该自动的被执行所有预定的 hook 操作。 多个使用方如果 hook 了同一个调用点,它们应该可以彼...

Android 线上性能监控二 基础二 Android hook demo

一、本文目的 Android 线上性能监控一 基础一 Android 动态链接 中把 Android 动态链接流程走了一遍,并写了一个小示例以验证链接过程。 本文将继续完善这个示例,自己动手去 hook 一个函数。 二、动态链接示例 2.1 示例代码 定义一个方法,并将它打包成共享库,然后在主程序中调用这个方法。 共享库方法定义: //test.h #include <stdi...

Android 线上性能监控一 基础一 Android 动态链接

本文内容基于 Android 10。 相关代码目录: bionic/linker/linker_main.cpp bionic/linker/linker_phdr.cpp bionic/linker/linker_soinfo.cpp bionic/linker/linker.cpp 一、本文目的 Android 线上性能监控、性能优化会用到 native hook。其中 PLT ...

WebRTC 源码分析 四 拥塞控制

注意 本文基于 WebRTC M89 带宽探测 带宽探测在带宽大幅下降时被调用,相关的类有 ProbeController 和 ProbeBitrateEstimator。带宽探测的原理是以 cluster_id 为单位以一定速率发送 RTP 包,收到反馈消息后根据发送_接收数据除以间隔时间计算出发送端_接收端的「带宽」,最后取它们俩中的较小的值作为探测到的带宽。 带宽探测包 f...

WebRTC 源码分析 三 连通性检查与提名

连通性检查 WebRTC 有三处会触发连通性检查: 收集到本地 Candidate,触发 OnCandidateReady 接收到 Remote Candidate,触发 PeerConnection::AddIceCandidate 接收到对端 Stun ping request 这三种情况下都会触发 P2PTransportChannel::SortConnecti...

WebRTC 源码分析 二 本地 Candidate 收集

本文基于 WebRTC M89 上篇文章简要的看了一下视频从采集到发送到网络的整个 pipeline。从本篇开始分析从用户进入房间到成功建立 P2P 连接收发数据的过程。由于信令服务不是 WebRTC 的一部分,本文将从 Candidate 收集开始。 Candidate 分类 Candidate 分为四类 host srflx relay prflx ...

WebRTC 源码分析 一 视频从捕获到发送到网络

前言 本文是 WebRTC 系列的第一篇,我们先看一下一帧画面从捕获到发送到网络要经过哪些步骤,在此过程中逐步揭开 WebRTC 的面纱。本文就像一条藤,后续再顺着这条藤逐步分析 WebRTC 相关技术。 注意 本文基于 WebRTC M89 本文视频捕获部分基于 Android 实现。 从捕获到发送到网络的时序图如上,我将整个流程分为 4 个部分: 视频捕获 ...

Coturn 安装 & 配置

一 安装 libevent wget https://github.com/downloads/libevent/libevent/libevent-2.1.12-stable.tar.gz tar zxvf libevent-2.1.12-stable.tar.gz cd libevent-2.1.12-stable ./configure mkdir build cd build cma...