void FrameOrganizer::startWriters() { assertFinalized(); LogInfo("Starting writers"); for (auto& frame_catalouge_entry : m_frame_catalouge) { thread writer_thread(&FrameWriter::startWriter, frame_catalouge_entry.first); writer_thread.join(); } }
static void process_pending_data() { while (!pending_frame_data.empty()) { auto& frame_data = pending_frame_data.front(); bool finished; if (!do_gpu_queries) { finished = true; } else { // Determine if all queries have passed already finished = true; for (auto& trace_data : frame_data.data) { if (trace_data.gpu_query == -1) { // Event has been processed before continue; } if (gr_query_value_available(trace_data.gpu_query)) { trace_data.gpu_time = gr_get_query_value(trace_data.gpu_query); free_query_object(trace_data.gpu_query); trace_data.gpu_query = -1; } else { // If we are here then a query hasn't finished yet. Try again next time... finished = false; break; } } } if (finished) { std::thread writer_thread(std::bind(write_json_data, frame_data)); writer_thread.detach(); pending_frame_data.erase(pending_frame_data.begin()); } else { // GPU queries always finish in sequence so the later queries can't be finished yet break; } } }