Workaround timing issues in Chart
When run on a VM (VBox, vmware), the timing calculations done were giving weird results (< 1ms), messing with the logic (div by zero introduced). Should take care of ticket #89.
This commit is contained in:
parent
926df420ca
commit
cdec47c927
@ -2278,7 +2278,7 @@ ChartWindow::Animation2(void *data)
|
|||||||
RefreshStarPacket(w->fSecondThreadBuffer, &w->fSpecials2, &w->fGeometry);
|
RefreshStarPacket(w->fSecondThreadBuffer, &w->fSpecials2, &w->fGeometry);
|
||||||
bigtime_t after = system_time();
|
bigtime_t after = system_time();
|
||||||
|
|
||||||
w->fSecondThreadDelay = after-before;
|
w->fSecondThreadDelay = max_c(after-before, 1);
|
||||||
|
|
||||||
release_sem(w->fSecondThreadRelease);
|
release_sem(w->fSecondThreadRelease);
|
||||||
}
|
}
|
||||||
@ -2763,6 +2763,7 @@ ChartWindow::RefreshStars(buffer *buf, float time_step)
|
|||||||
dynamic load split between the two threads, when
|
dynamic load split between the two threads, when
|
||||||
needed. */
|
needed. */
|
||||||
if (fCurrentSettings.second_thread) {
|
if (fCurrentSettings.second_thread) {
|
||||||
|
|
||||||
int32 star_threshold = (int32)((float)fStars.count * fSecondThreadThreshold + 0.5);
|
int32 star_threshold = (int32)((float)fStars.count * fSecondThreadThreshold + 0.5);
|
||||||
int32 special_threshold = (int32)((float)fSpecials.count * fSecondThreadThreshold + 0.5);
|
int32 special_threshold = (int32)((float)fSpecials.count * fSecondThreadThreshold + 0.5);
|
||||||
|
|
||||||
@ -2814,9 +2815,10 @@ ChartWindow::RefreshStars(buffer *buf, float time_step)
|
|||||||
/* calculate the new optimal split ratio depending
|
/* calculate the new optimal split ratio depending
|
||||||
of the previous one and the time used by both
|
of the previous one and the time used by both
|
||||||
threads to do their work. */
|
threads to do their work. */
|
||||||
float ratio = ((float)fSecondThreadDelay/(float)(after-before)) *
|
float ratio = ((float)fSecondThreadDelay /
|
||||||
(fSecondThreadThreshold/(1.0-fSecondThreadThreshold));
|
(float)max_c(after - before, 1))
|
||||||
fSecondThreadThreshold = ratio / (1.0+ratio);
|
* (fSecondThreadThreshold / (1.0 - fSecondThreadThreshold));
|
||||||
|
fSecondThreadThreshold = ratio / (1.0 + ratio);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
/* In single-threaded mode, nothing fancy to be done. */
|
/* In single-threaded mode, nothing fancy to be done. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user