Skip to content

Change viewer update rate to 1.0Hz#239

Merged
iory merged 2 commits into
iory:masterfrom
708yamaguchi:update-rate
Dec 31, 2021
Merged

Change viewer update rate to 1.0Hz#239
iory merged 2 commits into
iory:masterfrom
708yamaguchi:update-rate

Conversation

@708yamaguchi
Copy link
Copy Markdown
Contributor

When I use TrimeshSceneViewer, CPU usage is over 300% even when I don't click viewer.

cpu_dt_0

After I change the duration from 1 / 30 to 1.0 / 30, CPU usage is still high.

cpu_dt_003

After I change the duration from 1 / 30 to 1.0, CPU usage is low when I don't click viewer.

cpu_dt_1

Setting the duration to 1.0 did not seem to decrease the responsiveness of the viewer to clicks. (I am sorry if I misunderstand pyglet.clock.schedule_interval)

Test code (trimesh_scene_viewer.py)

#!/usr/bin/env python

import time
import skrobot

viewer = skrobot.viewers.TrimeshSceneViewer(resolution=(640, 480))
plane = skrobot.model.Box(
    extents=(2, 2, 0.01), face_colors=(0.75, 0.75, 0.75)
)
viewer.add(plane)
viewer.show()

print('==> Press [q] to close window')
while not viewer.has_exit:
    time.sleep(1)

Comment thread skrobot/viewers/_trimesh.py Outdated

self._redraw = True
pyglet.clock.schedule_interval(self.on_update, 1 / 30)
pyglet.clock.schedule_interval(self.on_update, 1.0)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!
How about making this a variable and making it an argument of the TrimeshSceneViewer class?

Copy link
Copy Markdown
Contributor Author

@708yamaguchi 708yamaguchi Dec 31, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your review!

I updated in e979d50 (#239)

@iory iory merged commit 128cd1a into iory:master Dec 31, 2021
iory added a commit that referenced this pull request Jun 2, 2026
The default was lowered to 1Hz in #239 because rendering ran on every
refresh tick, pushing idle CPU usage over 300%. Now that rendering is
skipped when nothing changed, 30Hz no longer causes that, so restore
the original 30Hz default for smooth interaction out of the box.
iory added a commit that referenced this pull request Jun 2, 2026
* Skip rendering in viewers when nothing changed

PyrenderViewer and TrimeshSceneViewer re-rendered the scene on every
refresh tick (e.g. 30 times per second) even when nothing had changed,
keeping the CPU busy on a fully static view. Skip rendering entirely
when self._redraw is False.

Also force a redraw in TrimeshSceneViewer.save_image so the captured
frame is freshly rendered rather than a potentially stale buffer.

* Set default viewer update_interval back to 30Hz

The default was lowered to 1Hz in #239 because rendering ran on every
refresh tick, pushing idle CPU usage over 300%. Now that rendering is
skipped when nothing changed, 30Hz no longer causes that, so restore
the original 30Hz default for smooth interaction out of the box.

* docs: update viewer update_interval default to 30Hz

Reflect the new 1/30 default and note that the viewer only re-renders
when the scene changes, so 30Hz no longer keeps the CPU busy on a
static view.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants