Fix timing plots issue in simulate.

Before this change timing plots would report zeros if the render thread was faster than the physics thread, making them unreadable when slowdown was used.

PiperOrigin-RevId: 557432042
Change-Id: Ie9a18fb84cab788d11dfbede4e3052f24441b4c4
This commit is contained in:
Yuval Tassa
2023-08-16 04:02:59 -07:00
committed by Copybara-Service
parent 8ea690ed70
commit ac3ac0d28f
+23 -21
View File
@@ -326,28 +326,30 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) {
total = d->timer[mjTIMER_FORWARD].duration; total = d->timer[mjTIMER_FORWARD].duration;
number = d->timer[mjTIMER_FORWARD].number; number = d->timer[mjTIMER_FORWARD].number;
} }
number = mjMAX(1, number);
float tdata[5] = {
static_cast<float>(total/number),
static_cast<float>(d->timer[mjTIMER_POS_COLLISION].duration/number),
static_cast<float>(d->timer[mjTIMER_POS_MAKE].duration/number) +
static_cast<float>(d->timer[mjTIMER_POS_PROJECT].duration/number),
static_cast<float>(d->timer[mjTIMER_CONSTRAINT].duration/number),
0
};
tdata[4] = tdata[0] - tdata[1] - tdata[2] - tdata[3];
// update figtimer if (number) { // skip update if no measurements
int pnt = mjMIN(201, sim->figtimer.linepnt[0]+1); float tdata[5] = {
for (int n=0; n<5; n++) { static_cast<float>(total/number),
// shift data static_cast<float>(d->timer[mjTIMER_POS_COLLISION].duration/number),
for (int i=pnt-1; i>0; i--) { static_cast<float>(d->timer[mjTIMER_POS_MAKE].duration/number) +
sim->figtimer.linedata[n][2*i+1] = sim->figtimer.linedata[n][2*i-1]; static_cast<float>(d->timer[mjTIMER_POS_PROJECT].duration/number),
static_cast<float>(d->timer[mjTIMER_CONSTRAINT].duration/number),
0
};
tdata[4] = tdata[0] - tdata[1] - tdata[2] - tdata[3];
// update figtimer
int pnt = mjMIN(201, sim->figtimer.linepnt[0]+1);
for (int n=0; n<5; n++) {
// shift data
for (int i=pnt-1; i>0; i--) {
sim->figtimer.linedata[n][2*i+1] = sim->figtimer.linedata[n][2*i-1];
}
// assign new
sim->figtimer.linepnt[n] = pnt;
sim->figtimer.linedata[n][1] = tdata[n];
} }
// assign new
sim->figtimer.linepnt[n] = pnt;
sim->figtimer.linedata[n][1] = tdata[n];
} }
// get sizes: nv, nbody, nefc, sqrt(nnz), ncont, iter // get sizes: nv, nbody, nefc, sqrt(nnz), ncont, iter
@@ -361,7 +363,7 @@ void UpdateProfiler(mj::Simulate* sim, const mjModel* m, const mjData* d) {
}; };
// update figsize // update figsize
pnt = mjMIN(201, sim->figsize.linepnt[0]+1); int pnt = mjMIN(201, sim->figsize.linepnt[0]+1);
for (int n=0; n<6; n++) { for (int n=0; n<6; n++) {
// shift data // shift data
for (int i=pnt-1; i>0; i--) { for (int i=pnt-1; i>0; i--) {