renderdoc流程分析

启动

  1. Renderdoc qt进程启动时,开了一个m_RemoteProbe线程,进行轮循并adb forward连接remote端

将PC端的数据,转发到手机端的server端口

  1. Install renderdoc apk

  1. Launch render apk

由于2中启动时传的command name是 remoteserver,因此会走到

自此apk进程为server端已经创建好

重放:

client端:

  1. 拷贝rdc文件

  1. Load rdc文件

server端:

  1. 拷贝rdc文件

  1. Load rdc文件

  1. 创建rdc driver

WrappedOpenGLGLReplay

  1. 重放draw call

抓流:

server:

Client:

补充

android有两个服务端,第一个是renderdoc.apk,第二个是目标apk,目标apk通过此函数来创建server tcp,并与client交互

Egl hook流程:

  1. 入口

  1. 该函数是由宏定义,具体位置:

GL.function在图1处赋值,为实际的gl函数地址

编译:

  1. PC端编译
cd renderdoc-1.13
mkdir build
cd build
cmake ..
cmake --build . -j 16
  1. Android编译
#!/bin/bash
 
rootDir=$( pwd )
echo "rootDir:"$rootDir
 
#build host
export PATH=/usr/local/opt/qt@5/bin:$PATH
rm -rf build
mkdir -p build
cd ./build
cmake -G Ninja .. -DCMAKE_PREFIX_PATH=$(brew --prefix qt5)
ninja
cd $rootDir
 
#build apk
rm -rf build-android
mkdir -p build-android
cd $rootDir
cd ./build-android
cmake -DBUILD_ANDROID=On -DANDROID_ABI=armeabi-v7a  ..
make -j8
rm CMakeCache.txt
rm cmake_install.cmake
cmake -DBUILD_ANDROID=On -DANDROID_ABI=arm64-v8a ..
make -j8