It still remains hard to profile PhysX when you are developing a UE4 project. Of course you can use
Heat Maps(For Linux) or
StreamLines(for Android) to get very in-depth performance data like:
This tools can really help a lot to find performance hotspots. But pvd should be used if you want to digging into PhysX since measuring scope performance is pretty common during performance profile.
UE4 handles PVD using
GPhysXVisualDebugger, which is created in
InitGamePhysCore function. You need to call
PvdConnect function by console command to connect to
PhysX Visual Debugger running on your local machine like:
pvd connect localhost
But there is a huge limitation with this method—You cannot easily collect PVD data on dedicated server or mobile device.
Obviously, it would be much better to streaming pvd data to a file, which can be loaded later in
Instead of simply creating two functions to handle connection, we choose to create two Global Parameters,
GDisconnectFromPVD since we want to handle pvd connection in
You may also handle connection in other stages as well. But I still recommend
PVD is known as easy to crash.
And there is a hint: We might want to name our file by date like:
FString TextToSave = FDateTime::Now().ToString();
So, we can connect to
PVD file like:
PxPvdTransport* transport = PxDefaultPvdFileTransportCreate(TCHAR_TO_ANSI(*TextToSave));
PxPvdInstrumentationFlag::eALL means streaming everything, which includes profile, memory and even all visualized debug data, to your file. Hence this cause a very large file, and it is very easy to crash during loading this file.
Thus, I personally recommend to specify
PxPvdInstrumentationFlag::ePROFILE only when creating PVD file.
And as for disconnecting from PVD, we simply call:
And it’s done!
Personally, I love to specify two timers to manually handle
PVD connections by
FParse::Value(FCommandLine::Get(), TEXT("-PVDTimer="), Value).
Try to avoid connecting to
PVD at start to prevent crash. Sigh…