Fixing first ticks of a sensor (#5616)
* Stream is removed when the sensor is destroyed * Changing log_info to log_debug * changeslog * Changes to return some non-const objects * Changing from weak_ptr to shared_ptr for storing sessions * Split long line * Changing log priority of some messages * Make sure sensor is active when an user wants to use it (before it connects to it) * Change UE tasks to any task, and not from Game thread
This commit is contained in:
parent
5c4b37c710
commit
078cf0f824
|
@ -110,6 +110,7 @@ namespace detail {
|
|||
if (search != _stream_map.end()) {
|
||||
log_debug("Found sensor id: ", sensor_id);
|
||||
auto stream_state = search->second;
|
||||
stream_state->ForceActive();
|
||||
log_debug("Getting token from stream ", sensor_id, " on port ", stream_state->token().get_port());
|
||||
return stream_state->token();
|
||||
} else {
|
||||
|
@ -118,6 +119,7 @@ namespace detail {
|
|||
temp_token.set_stream_id(sensor_id);
|
||||
auto ptr = std::make_shared<MultiStreamState>(temp_token);
|
||||
auto result = _stream_map.emplace(std::make_pair(temp_token.get_stream_id(), ptr));
|
||||
ptr->ForceActive();
|
||||
if (!result.second) {
|
||||
log_debug("Failed to create multistream for stream ", sensor_id, " on port ", temp_token.get_port());
|
||||
}
|
||||
|
|
|
@ -58,8 +58,12 @@ namespace detail {
|
|||
}
|
||||
}
|
||||
|
||||
void ForceActive() {
|
||||
_force_active = true;
|
||||
}
|
||||
|
||||
bool AreClientsListening() {
|
||||
return (_sessions.size() > 0);
|
||||
return (_sessions.size() > 0 || _force_active);
|
||||
}
|
||||
|
||||
void ConnectSession(std::shared_ptr<Session> session) final {
|
||||
|
@ -84,6 +88,7 @@ namespace detail {
|
|||
DEBUG_ASSERT(session == _session.load());
|
||||
_session.store(nullptr);
|
||||
_sessions.clear();
|
||||
_force_active = false;
|
||||
log_warning("Last session disconnected");
|
||||
} else {
|
||||
_sessions.erase(
|
||||
|
@ -107,6 +112,7 @@ namespace detail {
|
|||
}
|
||||
}
|
||||
_sessions.clear();
|
||||
_force_active = false;
|
||||
_session.store(nullptr);
|
||||
log_debug("Disconnecting all multistream sessions");
|
||||
}
|
||||
|
@ -119,6 +125,7 @@ namespace detail {
|
|||
AtomicSharedPtr<Session> _session;
|
||||
// if there are more than one session, we use vector of sessions with mutex
|
||||
std::vector<std::shared_ptr<Session>> _sessions;
|
||||
bool _force_active {false};
|
||||
};
|
||||
|
||||
} // namespace detail
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <mutex>
|
||||
|
||||
class UCarlaSettings;
|
||||
class FFrameData;
|
||||
struct FEpisodeSettings;
|
||||
|
||||
class FCarlaEngine : private NonCopyable
|
||||
|
|
|
@ -66,7 +66,7 @@ public:
|
|||
{
|
||||
if (HeaderStr->frame != FrameNumber)
|
||||
{
|
||||
carla::log_info("Re-framing stream ", HeaderStr->sensor_type, " from ", HeaderStr->frame, " to ", FrameNumber);
|
||||
carla::log_debug("Re-framing sensor type ", HeaderStr->sensor_type, " from ", HeaderStr->frame, " to ", FrameNumber);
|
||||
HeaderStr->frame = FrameNumber;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ void FPixelReader::WritePixelsToBuffer(
|
|||
RHICmdList.GetRenderQueryResult(Query, OldAbsTime, true);
|
||||
}
|
||||
|
||||
AsyncTask(ENamedThreads::GameThread, [=, Readback=std::move(BackBufferReadback)]() mutable {
|
||||
AsyncTask(ENamedThreads::AnyNormalThreadNormalTask, [=, Readback=std::move(BackBufferReadback)]() mutable {
|
||||
{
|
||||
TRACE_CPUPROFILER_EVENT_SCOPE_STR("Wait GPU transfer");
|
||||
while (!Readback->IsReady())
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
#include "Engine/TextureRenderTarget2D.h"
|
||||
#include "Runtime/ImageWriteQueue/Public/ImagePixelData.h"
|
||||
|
||||
#include "Carla/Game/CarlaEngine.h"
|
||||
|
||||
#include <compiler/disable-ue4-macros.h>
|
||||
#include <carla/Logging.h>
|
||||
#include <carla/Buffer.h>
|
||||
|
@ -111,7 +113,7 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor, bool use16BitFormat
|
|||
if (!Sensor.IsPendingKill())
|
||||
{
|
||||
FPixelReader::Payload FuncForSending =
|
||||
[&Sensor, Conversor = std::move(Conversor)](void *LockedData, uint32 Size, uint32 Offset)
|
||||
[&Sensor, Frame = FCarlaEngine::GetFrameCounter(), Conversor = std::move(Conversor)](void *LockedData, uint32 Size, uint32 Offset)
|
||||
{
|
||||
if (Sensor.IsPendingKill()) return;
|
||||
|
||||
|
@ -127,6 +129,7 @@ void FPixelReader::SendPixelsInRenderThread(TSensor &Sensor, bool use16BitFormat
|
|||
}
|
||||
|
||||
auto Stream = Sensor.GetDataStream(Sensor);
|
||||
Stream.SetFrameNumber(Frame);
|
||||
auto Buffer = Stream.PopBufferFromPool();
|
||||
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue