Fix VK_Leak_Check for Android

RemoteServer timedout due to VK_Leak_Check taking too long before sending commands to remote server. Spawning a worker thread to keeping the remote server connection alive fixes the disconnection issue.
This commit is contained in:
thisisjimmyfb
2025-05-26 23:15:51 -07:00
committed by Baldur Karlsson
parent 97c74415f6
commit 29207a7333
3 changed files with 60 additions and 8 deletions
+2 -2
View File
@@ -54,8 +54,8 @@ def open_capture(filename="", cap: rd.CaptureFile=None, opts: rd.ReplayOptions=N
raise ValueError("Cannot call analyse.open_capture() with capture handle for remote {}"
.format(util.get_remote_server().remote))
result, controller = util.get_remote_server().remote.OpenCapture(rd.RemoteServer.NoPreference,
filename, opts, None)
result, controller = util.get_remote_server().OpenCapture(rd.RemoteServer.NoPreference,
filename, opts, None)
if result == rd.ResultCode.Succeeded:
api = util.get_remote_server().remote.DriverName()
+56 -4
View File
@@ -7,7 +7,7 @@ from .logging import log
from pathlib import Path
import os
import re
import threading
from time import sleep
from abc import ABC, abstractmethod
@@ -82,7 +82,26 @@ class RemoteServer(ABC):
def retrieve_comms_log(self, timeout):
pass
@abstractmethod
def Ping(self):
pass
@abstractmethod
def OpenCapture(self):
pass
@abstractmethod
def CloseCapture(self, controller):
pass
@abstractmethod
def ExecuteAndInject(self):
pass
@abstractmethod
def CopyCaptureFromRemote(self, src, dst, progress_callback):
pass
class AndroidRemoteServer(RemoteServer):
# Android app IDs for the server
ADRD_SERVER_APP64 = 'org.renderdoc.renderdoccmd.arm64'
@@ -176,11 +195,20 @@ class AndroidRemoteServer(RemoteServer):
self.remote = remote
log.print("Connected!")
# spawn a thread to keep connection alive
self.mutex = threading.Lock()
self.pingThread = threading.Thread(target=self.PingThread)
self.pingThread.start()
return remote
def disconnect(self):
self.remote.ShutdownConnection()
self.remote = None
# wait for thread completion
self.pingThread.join()
def shutdown(self):
# If we running over ADB, close down the server. This will involve first establishing a
@@ -255,7 +283,7 @@ class AndroidRemoteServer(RemoteServer):
log.print("Running package:'{}' cmd:'{}' with env:'{}'".format(
package_and_activity, cmdline, envmods))
res = util.get_remote_server().remote.ExecuteAndInject(
res = util.get_remote_server().ExecuteAndInject(
package_and_activity, "", args, envmods, opts)
if res.result != rd.ResultCode.Succeeded:
@@ -311,7 +339,7 @@ class AndroidRemoteServer(RemoteServer):
dst = os.path.join(dst, latestlog)
src = os.path.join(src, latestlog)
log.print(f"Copying remote server log from '{src}' to '{dst}'")
self.remote.CopyCaptureFromRemote(src, dst, None)
self.CopyCaptureFromRemote(src, dst, None)
return dst
@@ -328,8 +356,32 @@ class AndroidRemoteServer(RemoteServer):
dst = os.path.join(util.get_tmp_dir(), 'RenderDoc_Server.log')
log.print("Copying remote server comms log from '{}' to '{}'".format(src, dst))
self.remote.CopyCaptureFromRemote(src, dst, None)
self.CopyCaptureFromRemote(src, dst, None)
return dst
def PingThread(self):
while self.remote is not None:
self.Ping()
sleep(0.175)
def Ping(self):
with self.mutex:
return self.remote.Ping()
def OpenCapture(self, proxyid, logfile, replayOptions, progressCallback):
with self.mutex:
return self.remote.OpenCapture(proxyid, logfile, replayOptions, progressCallback)
def CloseCapture(self, controller):
with self.mutex:
return self.remote.CloseCapture(controller)
def ExecuteAndInject(self, app, workingDir, cmdLine, env, captureOptions):
with self.mutex:
return self.remote.ExecuteAndInject(app, workingDir, cmdLine, env, captureOptions)
def CopyCaptureFromRemote(self, src, dst, progressCallback):
with self.mutex:
return self.remote.CopyCaptureFromRemote(src, dst, progressCallback)
+2 -2
View File
@@ -553,7 +553,7 @@ class TestCase:
if self.controller is not None:
if not util.get_remote_server() is None:
util.get_remote_server().remote.CloseCapture(self.controller)
util.get_remote_server().CloseCapture(self.controller)
else:
self.controller.Shutdown()
@@ -814,7 +814,7 @@ class TestCase:
dest = util.get_tmp_path(self.capture_filename.split('/')[-1])
log.print("Copying remote capture from '{}' to '{}'".format(self.capture_filename, dest))
util.get_remote_server().remote.CopyCaptureFromRemote(self.capture_filename, dest, None)
util.get_remote_server().CopyCaptureFromRemote(self.capture_filename, dest, None)
return dest
def check_export(self, capture_filename):