When switching context, make a remote connection in the render manager

This commit is contained in:
baldurk
2016-08-03 17:53:20 +02:00
parent 5beb4eb1c9
commit b1fcea3c3e
3 changed files with 60 additions and 25 deletions
+3 -16
View File
@@ -451,15 +451,7 @@ namespace renderdocui.Code
}
}
// loading a local log, no remote replay
public void LoadLogfile(string logFile, bool temporary)
{
LoadLogfile(-1, "", logFile, temporary);
}
// when loading a log while replaying remotely, provide the proxy renderer that will be used
// as well as the hostname to replay on.
public void LoadLogfile(int proxyRenderer, string replayHost, string logFile, bool temporary)
{
m_LogFile = logFile;
@@ -511,7 +503,7 @@ namespace renderdocui.Code
thread.Start();
// this function call will block until the log is either loaded, or there's some failure
m_Renderer.Init(proxyRenderer, replayHost, logFile);
m_Renderer.Init(logFile);
// if the renderer isn't running, we hit a failure case so display an error message
if (!m_Renderer.Running)
@@ -520,13 +512,8 @@ namespace renderdocui.Code
if (m_Renderer.InitException.Data.Contains("status"))
errmsg = ((ReplayCreateStatus)m_Renderer.InitException.Data["status"]).Str();
if(proxyRenderer >= 0)
MessageBox.Show(String.Format("{0}\nFailed to transfer and replay on remote host {1}: {2}.\n\n" +
"Check diagnostic log in Help menu for more details.", logFile, replayHost, errmsg),
"Error opening log", MessageBoxButtons.OK, MessageBoxIcon.Error);
else
MessageBox.Show(String.Format("{0}\nFailed to open file for replay: {1}.\n\n" +
"Check diagnostic log in Help menu for more details.", logFile, errmsg),
MessageBox.Show(String.Format("{0}\nFailed to open file for replay: {1}.\n\n" +
"Check diagnostic log in Help menu for more details.", logFile, errmsg),
"Error opening log", MessageBoxButtons.OK, MessageBoxIcon.Error);
progressThread = false;
+37 -9
View File
@@ -61,10 +61,9 @@ namespace renderdocui.Code
private AutoResetEvent m_WakeupEvent = new AutoResetEvent(false);
private Thread m_Thread;
private int m_ProxyRenderer = -1;
private string m_ReplayHost;
private string m_Logfile;
private bool m_Running;
private RemoteServer m_Remote;
private List<InvokeHandle> m_renderQueue;
@@ -78,13 +77,11 @@ namespace renderdocui.Code
m_renderQueue = new List<InvokeHandle>();
}
public void Init(int proxyRenderer, string replayHost, string logfile)
public void Init(string logfile)
{
if(Running)
return;
m_ProxyRenderer = proxyRenderer;
m_ReplayHost = replayHost;
m_Logfile = logfile;
LoadProgress = 0.0f;
@@ -104,6 +101,26 @@ namespace renderdocui.Code
set { m_Running = value; m_WakeupEvent.Set(); }
}
public void ConnectToRemoteServer(string hostname)
{
InitException = null;
try
{
m_Remote = StaticExports.CreateRemoteServer(hostname, 0);
}
catch (ApplicationException ex)
{
InitException = ex;
}
}
public void DisconnectFromRemoteServer()
{
if (m_Remote != null)
m_Remote.ShutdownConnection();
}
public ApplicationException InitException = null;
public void CloseThreadSync()
@@ -161,16 +178,27 @@ namespace renderdocui.Code
////////////////////////////////////////////
// Internals
private void CreateReplayRenderer(ref ReplayRenderer renderer)
private ReplayRenderer CreateReplayRenderer()
{
renderer = StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
if (m_Remote != null)
return m_Remote.OpenCapture(-1, m_Logfile, ref LoadProgress);
else
return StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
}
private void DestroyReplayRenderer(ReplayRenderer renderer)
{
if (m_Remote != null)
m_Remote.CloseCapture(renderer);
else
renderer.Shutdown();
}
private void RunThread()
{
try
{
ReplayRenderer renderer = StaticExports.CreateReplayRenderer(m_Logfile, ref LoadProgress);
ReplayRenderer renderer = CreateReplayRenderer();
if(renderer != null)
{
System.Diagnostics.Debug.WriteLine("Renderer created");
@@ -223,7 +251,7 @@ namespace renderdocui.Code
m_renderQueue.Clear();
}
renderer.Shutdown();
DestroyReplayRenderer(renderer);
}
}
catch (ApplicationException ex)
+20
View File
@@ -257,6 +257,8 @@ namespace renderdocui.Windows
public void OnLogfileClosed()
{
contextChooser.Enabled = true;
statusText.Text = "";
statusIcon.Image = null;
statusProgress.Visible = false;
@@ -342,6 +344,9 @@ namespace renderdocui.Windows
public void OnLogfileLoaded()
{
// don't allow changing context while log is open
contextChooser.Enabled = false;
LogHasErrors = (m_Core.DebugMessages.Count > 0);
m_MessageTick = new System.Threading.Timer(MessageCheck, this as object, 500, System.Threading.Timeout.Infinite);
@@ -584,6 +589,9 @@ namespace renderdocui.Windows
prefix += " - ";
}
if (m_RemoteHost != null)
prefix += String.Format("Remote: {0} - ", m_RemoteHost.Hostname);
Text = prefix + "RenderDoc ";
if(OfficialVersion)
Text += VersionString;
@@ -910,9 +918,13 @@ namespace renderdocui.Windows
contextChooser.Image = global::renderdocui.Properties.Resources.house;
contextChooser.Text = "Replay Context: Local";
m_Core.Renderer.DisconnectFromRemoteServer();
m_RemoteHost = null;
statusText.Text = "";
SetTitle();
}
else
{
@@ -927,6 +939,8 @@ namespace renderdocui.Windows
m_RemoteHost = host;
SetTitle();
statusText.Text = "Checking remote server status...";
Thread th = Helpers.NewThread(new ThreadStart(() =>
@@ -964,6 +978,12 @@ namespace renderdocui.Windows
}
}
if (host.ServerRunning)
{
m_Core.Renderer.DisconnectFromRemoteServer();
m_Core.Renderer.ConnectToRemoteServer(host.Hostname);
}
this.BeginInvoke(new Action(() =>
{
contextChooser.Image = host.ServerRunning