Add compiler timing diagnostics to mjsCompiler, printed by compile.cc
For example, `compile mujoco_menagerie/robotis_op3/scene.xml` now outputs
```
Compile 1 (cold cache):
total: 317.2 ms
assets: 284.8 ms (wall clock)
load: 616.1 ms
hull: 26.4 ms
poly: 137.8 ms
inert: 177.8 ms
bvh: 568.2 ms
octr: 1.6 ms
tex: 25.3 ms
other: 32.4 ms
Compile 2 (warm cache):
total: 79.9 ms
assets: 54.5 ms (wall clock)
load: 888.5 ms
hull: 0.0 ms
poly: 0.0 ms
inert: 0.0 ms
bvh: 0.0 ms
octr: 0.0 ms
tex: 21.4 ms
other: 25.3 ms
```
PiperOrigin-RevId: 917850214
Change-Id: Iaec86230bec0faf2e47820e20cbff61de5b2621e
This commit is contained in:
committed by
Copybara-Service
parent
f712eed4ce
commit
bdf00966f9
@@ -5612,6 +5612,7 @@ struct MjSpec {
|
||||
std::unique_ptr<MjSpec> copy();
|
||||
mjSpec* get() const;
|
||||
void set(mjSpec* ptr);
|
||||
emscripten::val timer() const;
|
||||
mjString modelname() const {
|
||||
return (ptr_ && ptr_->modelname) ? *(ptr_->modelname) : "";
|
||||
}
|
||||
@@ -8402,6 +8403,10 @@ MjSpec::~MjSpec() {
|
||||
mjSpec *MjSpec::get() const { return ptr_; }
|
||||
void MjSpec::set(mjSpec *ptr) { ptr_ = ptr; }
|
||||
|
||||
emscripten::val MjSpec::timer() const {
|
||||
return emscripten::val(emscripten::typed_memory_view(9, mjs_getTimer(ptr_)));
|
||||
}
|
||||
|
||||
std::unique_ptr<MjModel> mj_loadXML_wrapper_1(std::string filename) {
|
||||
char error[1000];
|
||||
mjModel *model = mj_loadXML(filename.c_str(), nullptr, error, sizeof(error));
|
||||
@@ -10911,6 +10916,17 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) {
|
||||
.value("mjBUTTON_LEFT", mjBUTTON_LEFT)
|
||||
.value("mjBUTTON_RIGHT", mjBUTTON_RIGHT)
|
||||
.value("mjBUTTON_MIDDLE", mjBUTTON_MIDDLE);
|
||||
enum_<mjtCTimer>("mjtCTimer")
|
||||
.value("mjCTIMER_TOTAL", mjCTIMER_TOTAL)
|
||||
.value("mjCTIMER_ASSETS", mjCTIMER_ASSETS)
|
||||
.value("mjCTIMER_TEXTURE", mjCTIMER_TEXTURE)
|
||||
.value("mjCTIMER_MESH_LOAD", mjCTIMER_MESH_LOAD)
|
||||
.value("mjCTIMER_MESH_HULL", mjCTIMER_MESH_HULL)
|
||||
.value("mjCTIMER_MESH_POLYGON", mjCTIMER_MESH_POLYGON)
|
||||
.value("mjCTIMER_MESH_INERTIA", mjCTIMER_MESH_INERTIA)
|
||||
.value("mjCTIMER_MESH_BVH", mjCTIMER_MESH_BVH)
|
||||
.value("mjCTIMER_MESH_OCTREE", mjCTIMER_MESH_OCTREE)
|
||||
.value("mjNCTIMER", mjNCTIMER);
|
||||
enum_<mjtCamLight>("mjtCamLight")
|
||||
.value("mjCAMLIGHT_FIXED", mjCAMLIGHT_FIXED)
|
||||
.value("mjCAMLIGHT_TRACK", mjCAMLIGHT_TRACK)
|
||||
@@ -12371,6 +12387,7 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) {
|
||||
.property("nupdate", &MjSolverStat::nupdate, &MjSolverStat::set_nupdate, reference());
|
||||
emscripten::class_<MjSpec>("MjSpec")
|
||||
.constructor<const MjSpec &>()
|
||||
.property("timer", &MjSpec::timer)
|
||||
.property("comment", &MjSpec::comment, &MjSpec::set_comment, reference())
|
||||
.property("compiler", &MjSpec::compiler, reference())
|
||||
.property("element", &MjSpec::element, reference())
|
||||
|
||||
@@ -176,6 +176,7 @@ _SKIPPED_GETTERS_AND_SETTERS: tuple[str, ...] = (
|
||||
"mjs_getDouble",
|
||||
"mjs_getPluginAttributes",
|
||||
"mjs_getString",
|
||||
"mjs_getTimer",
|
||||
"mjs_getUserValue",
|
||||
"mjs_setBuffer",
|
||||
"mjs_setDouble",
|
||||
|
||||
@@ -381,6 +381,9 @@ def build_struct_header(
|
||||
builder.line(f"{s}* get() const;")
|
||||
builder.line(f"void set({s}* ptr);")
|
||||
|
||||
if w == "MjSpec":
|
||||
builder.line("emscripten::val timer() const;")
|
||||
|
||||
# field declarations
|
||||
for field in wrapped_fields:
|
||||
if field.declaration and field not in member_inits:
|
||||
@@ -598,6 +601,7 @@ def _build_struct_bindings(
|
||||
#undef X_ACCESSOR""".lstrip())
|
||||
elif w == "MjSpec":
|
||||
builder.line(".constructor<const MjSpec &>()")
|
||||
builder.line('.property("timer", &MjSpec::timer)')
|
||||
elif w == "MjvScene":
|
||||
builder.line(".constructor<MjModel *, int>()")
|
||||
builder.line(".constructor<>()")
|
||||
|
||||
@@ -715,6 +715,10 @@ MjSpec::~MjSpec() {
|
||||
mjSpec *MjSpec::get() const { return ptr_; }
|
||||
void MjSpec::set(mjSpec *ptr) { ptr_ = ptr; }
|
||||
|
||||
emscripten::val MjSpec::timer() const {
|
||||
return emscripten::val(emscripten::typed_memory_view(9, mjs_getTimer(ptr_)));
|
||||
}
|
||||
|
||||
std::unique_ptr<MjModel> mj_loadXML_wrapper_1(std::string filename) {
|
||||
char error[1000];
|
||||
mjModel *model = mj_loadXML(filename.c_str(), nullptr, error, sizeof(error));
|
||||
|
||||
Reference in New Issue
Block a user