| 117 | #define READ_DATA_SCOPE() ReadSerialiser &ser = reader; |
| 118 | |
| 119 | void RenderDoc::TargetControlClientThread(uint32_t version, Network::Socket *client) |
| 120 | { |
| 121 | Threading::SetCurrentThreadName("TargetControlClientThread"); |
| 122 | |
| 123 | Threading::KeepModuleAlive(); |
| 124 | |
| 125 | WriteSerialiser writer(new StreamWriter(client, Ownership::Nothing), Ownership::Stream); |
| 126 | ReadSerialiser reader(new StreamReader(client, Ownership::Nothing), Ownership::Stream); |
| 127 | |
| 128 | writer.SetStreamingMode(true); |
| 129 | reader.SetStreamingMode(true); |
| 130 | |
| 131 | rdcstr target = RenderDoc::Inst().GetCurrentTarget(); |
| 132 | uint32_t mypid = Process::GetCurrentPID(); |
| 133 | |
| 134 | { |
| 135 | WRITE_DATA_SCOPE(); |
| 136 | SCOPED_SERIALISE_CHUNK(ePacket_Handshake); |
| 137 | SERIALISE_ELEMENT(TargetControlProtocolVersion); |
| 138 | SERIALISE_ELEMENT(target); |
| 139 | SERIALISE_ELEMENT(mypid); |
| 140 | } |
| 141 | |
| 142 | if(writer.IsErrored()) |
| 143 | { |
| 144 | SAFE_DELETE(client); |
| 145 | |
| 146 | { |
| 147 | SCOPED_LOCK(RenderDoc::Inst().m_SingleClientLock); |
| 148 | RenderDoc::Inst().m_SingleClientName = ""; |
| 149 | } |
| 150 | |
| 151 | Threading::ReleaseModuleExitThread(); |
| 152 | return; |
| 153 | } |
| 154 | |
| 155 | float captureProgress = -1.0f; |
| 156 | RenderDoc::Inst().SetProgressCallback<CaptureProgress>( |
| 157 | [&captureProgress](float p) { captureProgress = p; }); |
| 158 | |
| 159 | const int pingtime = 1000; // ping every 1000ms |
| 160 | const int ticktime = 10; // tick every 10ms |
| 161 | const int progresstime = 100; // update capture progress every 100ms |
| 162 | int curtime = 0; |
| 163 | |
| 164 | RenderDoc::Inst().ValidateCaptures(); |
| 165 | |
| 166 | rdcarray<CaptureData> captures; |
| 167 | rdcarray<rdcpair<uint32_t, uint32_t> > children; |
| 168 | std::map<RDCDriver, RDCDriverStatus> drivers; |
| 169 | float prevCaptureProgress = captureProgress; |
| 170 | uint32_t prevWindows = 0; |
| 171 | |
| 172 | while(client) |
| 173 | { |
| 174 | if(RenderDoc::Inst().m_ControlClientThreadShutdown || !client->Connected()) |
| 175 | { |
| 176 | SAFE_DELETE(client); |
nothing calls this directly
no test coverage detected