gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/movie_root.cpp server/mo...
Date: Wed, 09 Jan 2008 14:53:18 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  08/01/09 14:53:18

Modified files:
        .              : ChangeLog 
        server         : movie_root.cpp movie_root.h 
        server/vm      : ASHandlers.cpp 
        testsuite/misc-mtasc.all: level5.as level87.as level99.as 
        testsuite/swfdec: PASSING 

Log message:
        Implement a movie_root service to request load of movies.
        Properly postpones load and target evaluation to next advance and 

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5353&r2=1.5354
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.cpp?cvsroot=gnash&r1=1.144&r2=1.145
http://cvs.savannah.gnu.org/viewcvs/gnash/server/movie_root.h?cvsroot=gnash&r1=1.100&r2=1.101
http://cvs.savannah.gnu.org/viewcvs/gnash/server/vm/ASHandlers.cpp?cvsroot=gnash&r1=1.174&r2=1.175
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/level5.as?cvsroot=gnash&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/level87.as?cvsroot=gnash&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/misc-mtasc.all/level99.as?cvsroot=gnash&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.80&r2=1.81

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5353
retrieving revision 1.5354
diff -u -b -r1.5353 -r1.5354
--- ChangeLog   9 Jan 2008 11:41:01 -0000       1.5353
+++ ChangeLog   9 Jan 2008 14:53:17 -0000       1.5354
@@ -1,5 +1,18 @@
 2008-01-09 Sandro Santilli <address@hidden>
 
+       * server/movie_root.{cpp,h}: add a loadMovie method
+         to schedule loads for next advance, using late
+         evaluation of target path (tested, but not automated).
+       * server/vm/ASHandlers.cpp (CommonGetUrl): delegate
+         movie loads to movie_root.
+       * testsuite/misc-mtasc.all/: level5.as, level87.as,
+         level99.as: frame count at loaded movie execution
+         succeed.
+       * testsuite/swfdec/PASSING: loadvariables-5.swf
+         succeeds (no idea why..)
+
+2008-01-09 Sandro Santilli <address@hidden>
+
        * server/: as_value.cpp, movie_root.{cpp,h}:
          Add a movie_root::findCharacterByTarget() and
          use it for soft refs.

Index: server/movie_root.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.cpp,v
retrieving revision 1.144
retrieving revision 1.145
diff -u -b -r1.144 -r1.145
--- server/movie_root.cpp       9 Jan 2008 11:41:01 -0000       1.144
+++ server/movie_root.cpp       9 Jan 2008 14:53:17 -0000       1.145
@@ -219,7 +219,6 @@
                it->second = movie;
        }
 
-
        movie->set_invalidated();
        
        /// Notify placement 
@@ -981,15 +980,25 @@
        try
        {
 
-       // Execute expired timers
-       // NOTE: can throw ActionLimitException
-       executeTimers();
-
        // Advance all non-unloaded characters in the LiveChars list
        // in reverse order (last added, first advanced)
        // NOTE: can throw ActionLimitException
        advanceLiveChars(); 
 
+       // Process loadMovie requests
+       // 
+       // NOTE: should be done before executing timers,
+       //       see swfdec's test/trace/loadmovie-case-{5,6}.swf 
+       // NOTE: processing loadMovie requests after advanceLiveChars
+       //       is known to fix more tests in misc-mtasc.all/levels.swf
+       //       to be checked if it keeps the swfdec testsuite safe
+       processLoadMovieRequests();
+
+       // Execute expired timers
+       // NOTE: can throw ActionLimitException
+       executeTimers();
+
+
        cleanupUnloadedListeners();
 
        // Process queued actions
@@ -1345,7 +1354,6 @@
        {
                _processingActionLevel = 
processActionQueue(_processingActionLevel);
        }
-
 }
 
 void
@@ -1419,6 +1427,7 @@
 void
 movie_root::executeTimers()
 {
+        log_debug("Checking %d timers for expiration", _intervalTimers.size());
        for (TimerMap::iterator it=_intervalTimers.begin(), 
itEnd=_intervalTimers.end();
                        it != itEnd; )
        {
@@ -1693,5 +1702,62 @@
        return o->to_character();
 }
 
+void
+movie_root::loadMovie(const URL& url, const std::string& target, 
movie_root::LoadMethod method)
+{
+    log_debug("movie_root::loadMovie(%s, %s)", url.str().c_str(), 
target.c_str());
+    _loadMovieRequests.push_front(LoadMovieRequest(url, target, method));
+}
+
+void
+movie_root::processLoadMovieRequest(const LoadMovieRequest& r)
+{
+    const std::string& target = r.getTarget();
+    const URL& url = r.getURL();
+    LoadMethod method = r.getMethod();
+
+    if ( target.compare(0, 6, "_level") == 0 && 
target.find_first_not_of("0123456789", 7) == string::npos )
+    {
+        unsigned int levelno = atoi(target.c_str()+6);
+        log_debug(_("processLoadMovieRequest: Testing _level loading (level 
%u)"), levelno);
+        loadLevel(levelno, url);
+        return;
+    }
+
+    character* ch = findCharacterByTarget(target);
+    if ( ! ch )
+    {
+        log_debug("Target %s of a loadMovie request doesn't exist at 
processing time", target.c_str());
+        return;
+    }
+
+    sprite_instance* sp = ch->to_movie();
+    if ( ! sp )
+    {
+        log_unimpl("loadMovie against a %s character", typeName(*ch).c_str());
+        return;
+    }
+
+    if ( method )
+    {
+        log_unimpl("loadMovie with method %s", method == 1 ? "GET" : method == 
2 ? "POST" : "UNKWNOWN");
+    }
+
+    sp->loadMovie(url);
+}
+
+void
+movie_root::processLoadMovieRequests()
+{
+    log_debug("Processing %d loadMovie requests", _loadMovieRequests.size());
+    for (LoadMovieRequests::iterator it=_loadMovieRequests.begin();
+            it != _loadMovieRequests.end(); )
+    {
+        const LoadMovieRequest& lr=*it;
+        processLoadMovieRequest(lr);
+        it = _loadMovieRequests.erase(it);
+    }
+}
+
 } // namespace gnash
 

Index: server/movie_root.h
===================================================================
RCS file: /sources/gnash/gnash/server/movie_root.h,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -b -r1.100 -r1.101
--- server/movie_root.h 9 Jan 2008 11:41:01 -0000       1.100
+++ server/movie_root.h 9 Jan 2008 14:53:17 -0000       1.101
@@ -15,7 +15,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: movie_root.h,v 1.100 2008/01/09 11:41:01 strk Exp $ */
+/* $Id: movie_root.h,v 1.101 2008/01/09 14:53:17 strk Exp $ */
 
 /// \page events_handling Handling of user events
 ///
@@ -78,6 +78,7 @@
 #include "timers.h" // for composition
 #include "asobj/Key.h"
 #include "smart_ptr.h" // for memory management
+#include "URL.h" // for loadMovie
 
 #include <vector>
 #include <list>
@@ -607,8 +608,48 @@
 
     character* findCharacterByTarget(const std::string& tgtstr) const;
 
+    /// URL access methods
+    enum LoadMethod {
+        NONE=0,
+        GET=1,
+        POST=2
+    };
+
+    /// Queue a request for loading a movie
+    void loadMovie(const URL& url, const std::string& target, LoadMethod 
method=NONE);
+
 private:
 
+    /// A load movie request
+    class LoadMovieRequest {
+    public:
+        LoadMovieRequest(const URL& u, const std::string& t, LoadMethod m)
+            :
+            _target(t),
+            _url(u),
+            _method(m)
+        {}
+
+        const std::string& getTarget() const { return _target; }
+        const URL& getURL() const { return _url; }
+        LoadMethod getMethod() const { return _method; }
+
+    private:
+        std::string _target;
+        URL _url;
+        LoadMethod _method;
+    };
+
+    /// Load movie requests
+    typedef std::list<LoadMovieRequest> LoadMovieRequests;
+    LoadMovieRequests _loadMovieRequests;
+
+    /// Process all load movie requests
+    void processLoadMovieRequests();
+
+    /// Process a single load movie request
+    void processLoadMovieRequest(const LoadMovieRequest& r);
+
     /// Listeners container
     typedef std::list< boost::intrusive_ptr<character> > CharacterList;
 

Index: server/vm/ASHandlers.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/vm/ASHandlers.cpp,v
retrieving revision 1.174
retrieving revision 1.175
diff -u -b -r1.174 -r1.175
--- server/vm/ASHandlers.cpp    26 Dec 2007 18:03:47 -0000      1.174
+++ server/vm/ASHandlers.cpp    9 Jan 2008 14:53:18 -0000       1.175
@@ -17,7 +17,7 @@
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 //
 
-/* $Id: ASHandlers.cpp,v 1.174 2007/12/26 18:03:47 strk Exp $ */
+/* $Id: ASHandlers.cpp,v 1.175 2008/01/09 14:53:18 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -2184,6 +2184,8 @@
 
        if ( loadTargetFlag )
        {
+               // TODO: always pass directly to movie_root::loadMovie ?
+
                log_msg(_("getURL2 target load"));
 
                if ( sendVarsMethod )
@@ -2195,11 +2197,13 @@
 
                if ( ! target_ch )
                {
-                       if ( target_string.compare(0, 6, "_level") == 0 && 
target_string.find_first_not_of("0123456789", 7) == string::npos )
+                       std::string s = PROPNAME(target_string);
+                       if ( s.compare(0, 6, "_level") == 0 && 
s.find_first_not_of("0123456789", 7) == string::npos )
                        {
                                unsigned int levelno = 
atoi(target_string.c_str()+6);
                                log_debug(_("Testing _level loading (level 
%u)"), levelno);
-                               VM::get().getRoot().loadLevel(levelno, url);
+                               //VM::get().getRoot().loadLevel(levelno, url);
+                               VM::get().getRoot().loadMovie(url, s); // TODO: 
add third argument for the method
                                return;
                        }
 
@@ -2215,7 +2219,9 @@
                        return;
                }
 
-               target_movie->loadMovie(url);
+               //target_movie->loadMovie(url);
+               std::string s = boost::to_lower_copy(target.to_string());
+               VM::get().getRoot().loadMovie(url, s); // TODO: add third 
argument for the method
 
                return;
        }
@@ -2227,11 +2233,13 @@
                        sendVarsMethod);
        }
 
-       if ( target_string.compare(0, 6, "_level") == 0 && 
target_string.find_first_not_of("0123456789", 7) == string::npos )
+       std::string s = PROPNAME(target_string);
+       if ( s.compare(0, 6, "_level") == 0 && 
s.find_first_not_of("0123456789", 7) == string::npos )
        {
                unsigned int levelno = atoi(target_string.c_str()+6);
                log_debug(_("Testing _level loading (level %u)"), levelno);
-               VM::get().getRoot().loadLevel(levelno, url);
+               //VM::get().getRoot().loadLevel(levelno, url);
+               VM::get().getRoot().loadMovie(url, s); // TODO: add third 
argument for the method
                return;
        }
 

Index: testsuite/misc-mtasc.all/level5.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-mtasc.all/level5.as,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- testsuite/misc-mtasc.all/level5.as  8 Jan 2008 22:48:40 -0000       1.11
+++ testsuite/misc-mtasc.all/level5.as  9 Jan 2008 14:53:18 -0000       1.12
@@ -28,7 +28,7 @@
        {
                 check_equals(mc._currentframe, 1);
 
-                xcheck_equals(_level0.frameno, 1);
+                check_equals(_level0.frameno, 1);
 
                 // Check our depth
                check_equals(mc.getDepth(), -16379);

Index: testsuite/misc-mtasc.all/level87.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-mtasc.all/level87.as,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- testsuite/misc-mtasc.all/level87.as 8 Jan 2008 22:48:40 -0000       1.3
+++ testsuite/misc-mtasc.all/level87.as 9 Jan 2008 14:53:18 -0000       1.4
@@ -61,14 +61,14 @@
 
                _level0.level87loaded = true;
 
-                       xcheck_equals(_level0.frameno, 2);
+                       check_equals(_level0.frameno, 2);
 
                // This one fails because gnash is executing code
                // in level99 before code in the first load of level87,
                // probably because it is *loading* level99 before level87,
                // which is in the order loads are requested rather then
                // reverse of it as it's common...
-                xcheck_equals(_level5._currentframe, 1);
+                check_equals(_level5._currentframe, 1);
 
                _level87.loadMovie("level87.swf");
        }

Index: testsuite/misc-mtasc.all/level99.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/misc-mtasc.all/level99.as,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- testsuite/misc-mtasc.all/level99.as 8 Jan 2008 22:48:40 -0000       1.14
+++ testsuite/misc-mtasc.all/level99.as 9 Jan 2008 14:53:18 -0000       1.15
@@ -45,7 +45,7 @@
 
                 check_equals(mc._currentframe, 1);
 
-                       xcheck_equals(_level0.frameno, 2);
+                       check_equals(_level0.frameno, 2);
 
                 // Check our depth
                check_equals(mc.getDepth(), -16285);

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -b -r1.80 -r1.81
--- testsuite/swfdec/PASSING    8 Jan 2008 12:09:09 -0000       1.80
+++ testsuite/swfdec/PASSING    9 Jan 2008 14:53:18 -0000       1.81
@@ -272,6 +272,7 @@
 loadmovie-case-5.swf:a7d492cb23eef08a115d7a667c9b5089
 loadmovie-case-6.swf:e5bc78b62bb2688bd99a57bfec7e4eb1
 loadmovie-case-7.swf:0ce485bdd81c872df4b7327c1d048936
+loadvariables-5.swf:a24997be9ca59d8da2216f9527d0279a
 loadvars-5.swf:378a93e3fc7821a72f61332dcfa6cbf7
 local.swf:12135ef5103f1b0dcc428308511b9c07
 localToGlobal-propflags-5.swf:1c41fae7e9e502de76847c85e938d1a0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]