mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
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:
committed by
Baldur Karlsson
parent
97c74415f6
commit
29207a7333
@@ -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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user