Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

All animations except for the progress bar should be disabled during export. #3870

Open
Sawuare opened this issue Oct 10, 2017 · 11 comments
Open

Comments

@Sawuare
Copy link
Member

Sawuare commented Oct 10, 2017

Examples:
• note playing indicators.
image
image
• automated parameters (knobs, faders, etc.).
• time-line position marker.
image
• mixer channels.

I don't think their animations are useful during export.
Disabling them during export will leave more processing power to more important stuff.

@Spekular
Copy link
Member

Spekular commented Oct 10, 2017 via email

@tresf
Copy link
Member

tresf commented Oct 11, 2017

Is there evidence that the power used isn't negligible? I don't entirely disagree with this, but moreso from an aesthetic standpoint in that it looks rather chaotic to have these animations play out in the background when the export window is supposedly in focus.

Then you're arguing a moot point. Please don't burden the devs with unnecessary benchmarks, they have enough work to do.

... and for the record, the UI isn't exactly innocent from a performance perspective. 🍺

@musikBear
Copy link

Would a completely blanc export-screen + a percentage display, be an option?
I also want to mention the delay between apparently finished export, and when the file has been closed: eg * render-finished indication *
#3854

@tresf
Copy link
Member

tresf commented Oct 11, 2017

Would a completely blanc export-screen + a percentage display, be an option?

Ideally, we'd lock out the UI and use a notification area. We can also leverage the platform-specific progress area in the dock.

@softrabbit
Copy link
Member

softrabbit commented Oct 11, 2017

I did some benchmarking in ProjectRenderer::run(). Basically the first example from this doc: http://pubs.opengroup.org/onlinepubs/009695399/functions/times.html inserted at the beginning and end.
Exhibit A is TobyDox-Psycho, available in your LMMS source tree, rendered with the windows like they come out of the box, i.e. the cursor scrolls out and there is only the master channel in the mixer. B is a project of mine with 10 mixer channels and the song editor zoomed out to show everything (= cursor keeps scrolling, was the thought).

Each render was done in a freshly started LMMS instance, wav format, x1 oversampling, 44100 Hz, sincfastest, 16 bits deep. Average of 3 runs unless otherwise noted. Times are in ticks (probably 100/s), but that doesn't matter, as it's the differences that matter.

Real time User System U+S %  File
2925 5660 505 100% A, cli
3243 6904 1546 137% A, gui
5134 11563 800 100%  B, cli
7236 17030 2864 161% B, gui
7216 16623 2871 158% B, gui, mixer hidden (1 run)
6977 16371 2771 155% B, gui, all editors hidden (1 run)

The numbers on repeated runs were consistent enough that I didn't bother for those last two.

This should give an idea on how much the entire GUI adds, and if disabling animations is comparable to hiding all editors (last line), I'm not sure it's worth it. Some more experimentation is needed to know for sure.

@Spekular
Copy link
Member

Spekular commented Oct 12, 2017 via email

@tresf
Copy link
Member

tresf commented Oct 12, 2017

if disabling animations is comparable to hiding all editors

Wouldn't it theoretically be closer to CLI? Hiding editors may reduce paint sequences, but the UI is still having functions and slots called.

@softrabbit
Copy link
Member

Wouldn't it theoretically be closer to CLI? Hiding editors may reduce paint sequences, but the UI is still having functions and slots called.

Could be. Depends on how much heavy lifting happens in those functions and slots, guess the reality is somewhere between those numbers.

I'm a bit surprised that the impact of hiding editors is that small, really. Probably another thing in need of some care and attention...

@softrabbit
Copy link
Member

I made some quick changes: stopped emitting the periodicupdate signal in MainWindow::timerEvent, which turned off the mixer VU meters and the position counter updating. Then added a fast exit to SongEditor::updatePosition and TimeLineWidget::updatePosition to stop the playhead from moving in the song editor. Next up was not emitting newNote in InstrumentTrack::processOutEvent which stopped the track buttons blinking.

All animation that's left now is the pianos in the piano roll editor and instrument window, and automated knobs moving, and I'm roughly down to the "all editors hidden" level from my earlier benchmark. Don't know if I'll go further on this road.

@michaelgregorius
Copy link
Contributor

Until some weeks ago I would have agreed to disable the animations during export because it seems rather strange as in: "Hey, you already know that you are in export mode so why do you bother to update the GUI?"

However, some weeks ago I have bought Bitwig and it also animates everything during export. So it seems that they also implement the export with a file device that is not bound to realtime with everything still bound to the GUI.

In a way it's also the simplest implementation because to disable animations for an "export mode" you'd have to add extra code that might also degrade over time, i.e. new features are implemented and it is forgotten to disable their animation during export.

@musikBear
Copy link

you'd have to add extra code that might also degrade over time

Yes, it would have to be a test up against the pro and the con, as in a swat-analysis, but there are SO much else that is more important -imo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants