[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ChangeLog gui/gui.cpp gui/gui.h
From: |
Sandro Santilli |
Subject: |
[Gnash-commit] gnash ChangeLog gui/gui.cpp gui/gui.h |
Date: |
Wed, 19 Sep 2007 06:36:29 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Changes by: Sandro Santilli <strk> 07/09/19 06:36:29
Modified files:
. : ChangeLog
gui : gui.cpp gui.h
Log message:
* gui/gui.{cpp,h}: draft an attempt at skipping rendering
when late of fps timer. It's experimental, and disabled
by default. Define SKIP_RENDERING_IF_LATE in gui.h to
try it out.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.4344&r2=1.4345
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gui.cpp?cvsroot=gnash&r1=1.96&r2=1.97
http://cvs.savannah.gnu.org/viewcvs/gnash/gui/gui.h?cvsroot=gnash&r1=1.62&r2=1.63
Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.4344
retrieving revision 1.4345
diff -u -b -r1.4344 -r1.4345
--- ChangeLog 19 Sep 2007 02:17:38 -0000 1.4344
+++ ChangeLog 19 Sep 2007 06:36:28 -0000 1.4345
@@ -1,3 +1,10 @@
+2007-09-19 Sandro Santilli <address@hidden>
+
+ * gui/gui.{cpp,h}: draft an attempt at skipping rendering
+ when late of fps timer. It's experimental, and disabled
+ by default. Define SKIP_RENDERING_IF_LATE in gui.h to
+ try it out.
+
2007-09-19 Markus Gothe <address@hidden>
* configure.ac: Fixed typo.
Index: gui/gui.cpp
===================================================================
RCS file: /sources/gnash/gnash/gui/gui.cpp,v
retrieving revision 1.96
retrieving revision 1.97
diff -u -b -r1.96 -r1.97
--- gui/gui.cpp 12 Sep 2007 10:57:05 -0000 1.96
+++ gui/gui.cpp 19 Sep 2007 06:36:28 -0000 1.97
@@ -37,6 +37,10 @@
#include <cstdio>
#include <cstring>
+#ifdef SKIP_RENDERING_IF_LATE
+#include <boost/timer.hpp>
+#endif
+
/// Define this to make sure each frame is fully rendered from ground up
/// even if no motion has been detected in the movie.
//#define FORCE_REDRAW 1
@@ -71,10 +75,6 @@
// as the mouse moves
//#define DEBUG_MOUSE_COORDINATES 1
-
-// Define this to N for only rendering 1/N frames
-//#define RENDER_ONE_FRAME_EVERY 50
-
namespace gnash {
Gui::Gui() :
@@ -95,6 +95,9 @@
,fps_timer(0)
,fps_timer_interval(0.0)
#endif
+#ifdef SKIP_RENDERING_IF_LATE
+ ,estimatedDisplayTime(0.001) // will grow later..
+#endif // SKIP_RENDERING_IF_LATE
{
// GNASH_REPORT_FUNCTION;
}
@@ -118,6 +121,9 @@
,fps_timer(0)
,fps_timer_interval(0.0)
#endif
+#ifdef SKIP_RENDERING_IF_LATE
+ ,estimatedDisplayTime(0.001) // will grow later..
+#endif // SKIP_RENDERING_IF_LATE
{
}
@@ -426,9 +432,10 @@
setInvalidatedRegions(changed_ranges);
#endif
+ // TODO: should this be called even if we're late ?
beforeRendering();
- // render the frame.
+ // Render the frame, if not late.
// It's up to the GUI/renderer combination
// to do any clipping, if desired.
m->display();
@@ -483,6 +490,10 @@
// GNASH_REPORT_FUNCTION;
+#ifdef SKIP_RENDERING_IF_LATE
+ boost::timer advanceTimer;
+#endif // SKIP_RENDERING_IF_LATE
+
gnash::movie_root* m = gnash::get_current_root();
#ifdef GNASH_FPS_DEBUG
@@ -507,16 +518,42 @@
#endif
-#if RENDER_ONE_FRAME_EVERY
- static unsigned call=0;
- if ( ++call % RENDER_ONE_FRAME_EVERY == 0 )
+#ifdef SKIP_RENDERING_IF_LATE
+
+ double advanceTime = advanceTimer.elapsed(); // in seconds !
+
+ double timeSlot = gui->_interval/1000.0; // seconds between advance
calls (TODO: compute once)
+
+ if ( advanceTime+gui->estimatedDisplayTime < timeSlot )
{
- call=0;
+ advanceTimer.restart();
gui->display(m);
+ double displayTime = advanceTimer.elapsed();
+
+ if ( displayTime > gui->estimatedDisplayTime)
+ {
+ //log_debug("Display took %6.6g seconds over %6.6g
available for each frame", displayTime, timeSlot);
+
+ // Don't update estimatedDisplayTime if it's bigger
then timeSlot*0.8
+ if ( displayTime < timeSlot*0.8 )
+ {
+ // TODO: check for absurdly high values, like
we can't set
+ // estimatedDisplayTime to a value higher
then FPS, or
+ // we'll simply never display...
+ gui->estimatedDisplayTime = displayTime;
}
-#else
+ }
+ }
+ else
+ {
+ //log_debug("We're unable to keep up with FPS speed:
advanceTime was %g + estimatedDisplayTime (%g) == %g, over a timeSlot of %g",
advanceTime, gui->estimatedDisplayTime, advanceTime+gui->estimatedDisplayTime,
timeSlot);
+ // TODO: increment a counter, we don't want to skip too many
frames
+ }
+#else // ndef SKIP_RENDERING_IF_LATE
+
gui->display(m);
-#endif
+
+#endif // ndef SKIP_RENDERING_IF_LATE
if ( ! gui->loops() )
{
Index: gui/gui.h
===================================================================
RCS file: /sources/gnash/gnash/gui/gui.h,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -b -r1.62 -r1.63
--- gui/gui.h 12 Sep 2007 10:57:05 -0000 1.62
+++ gui/gui.h 19 Sep 2007 06:36:28 -0000 1.63
@@ -33,6 +33,11 @@
#include <string>
+// Define the following macro if you want to skip rendering
+// when late on FPS time.
+// This is an experimental feature, so it's off by default
+//#define SKIP_RENDERING_IF_LATE
+
// Forward declarations
namespace gnash
{
@@ -339,6 +344,12 @@
#endif // def GNASH_FPS_DEBUG
+#ifdef SKIP_RENDERING_IF_LATE
+ /// Estimated max number of seconds required for a call to ::display
+ /// This should be incremented everytime we take more
+ double estimatedDisplayTime;
+#endif // SKIP_RENDERING_IF_LATE
+
};
/// Named constructors
- [Gnash-commit] gnash ChangeLog gui/gui.cpp gui/gui.h,
Sandro Santilli <=