13
0

temporal: always use Temporal::reset() for superclock and TempoMap default values

Make sure all code paths that use Temporal will initialize and reset it
properly. Some code paths (in tet runners) doesn't use Sessions, so
Temporal::reset() has to be invoked directly.

Just set the static superclock variable to 0 as initial value.
TempoMap will still be initialized early as a singleton, but we
introduce a new constructor so it is created empty (and thus not really
usable until Temporal::reset() or similar has populated it).

We can thus drop the static initialization of superclock. The default
superclock rate of 282240000 will now only live in Temporal::reset().

With this change there should no longer be any uninitialized use of
superclock_ticks_per_second(), and there should not be any problems for
DEBUG_EARLY_SCTS_USE to catch. (It is however broken in other ways -
that will be fixed next.)
This commit is contained in:
Mads Kiilerich 2022-06-18 21:09:14 +02:00 committed by Paul Davis
parent 622876c8ab
commit 91314b68a5
6 changed files with 8 additions and 6 deletions

View File

@ -11,6 +11,7 @@
#include "pbd/debug.h" #include "pbd/debug.h"
#include "ardour/ardour.h" #include "ardour/ardour.h"
#include "temporal/types.h"
#include "test_ui.h" #include "test_ui.h"
static const char* localedir = LOCALEDIR; static const char* localedir = LOCALEDIR;
@ -51,6 +52,8 @@ main(int argc, char* argv[])
CPPUNIT_ASSERT (ARDOUR::init (true, localedir)); CPPUNIT_ASSERT (ARDOUR::init (true, localedir));
Temporal::reset();
TestUI* test_ui = new TestUI(); TestUI* test_ui = new TestUI();
CppUnit::TestResult testresult; CppUnit::TestResult testresult;

View File

@ -19,7 +19,7 @@
#include "temporal/superclock.h" #include "temporal/superclock.h"
#ifndef COMPILER_MSVC #ifndef COMPILER_MSVC
Temporal::superclock_t Temporal::_superclock_ticks_per_second = 282240000 ; /* 2^10 * 3^2 * 5^4 * 7^2 */ Temporal::superclock_t Temporal::_superclock_ticks_per_second = 0;
#endif #endif
int Temporal::most_recent_engine_sample_rate = 48000; /* have to pick something as a default */ int Temporal::most_recent_engine_sample_rate = 48000; /* have to pick something as a default */

View File

@ -4373,7 +4373,7 @@ TempoMap::ramped_twist_tempi (TempoPoint& unused, TempoPoint& focus, TempoPoint&
void void
TempoMap::init () TempoMap::init ()
{ {
WritableSharedPtr new_map (new TempoMap (Tempo (120, 4), Meter (4, 4))); WritableSharedPtr new_map (new TempoMap ());
_map_mgr.init (new_map); _map_mgr.init (new_map);
fetch (); fetch ();
} }

View File

@ -32,7 +32,7 @@ typedef int64_t superclock_t;
#ifndef COMPILER_MSVC #ifndef COMPILER_MSVC
extern superclock_t _superclock_ticks_per_second; extern superclock_t _superclock_ticks_per_second;
#else #else
static superclock_t _superclock_ticks_per_second = 282240000; /* 2^10 * 3^2 * 5^4 * 7^2 */ static superclock_t _superclock_ticks_per_second = 0;
#endif #endif
extern bool scts_set; extern bool scts_set;

View File

@ -792,6 +792,7 @@ class /*LIBTEMPORAL_API*/ TempoMap : public PBD::StatefulDestructible
/* and now on with the rest of the show ... */ /* and now on with the rest of the show ... */
public: public:
LIBTEMPORAL_API TempoMap () {}
LIBTEMPORAL_API TempoMap (Tempo const& initial_tempo, Meter const& initial_meter); LIBTEMPORAL_API TempoMap (Tempo const& initial_tempo, Meter const& initial_meter);
LIBTEMPORAL_API TempoMap (TempoMap const&); LIBTEMPORAL_API TempoMap (TempoMap const&);
LIBTEMPORAL_API TempoMap (XMLNode const&, int version); LIBTEMPORAL_API TempoMap (XMLNode const&, int version);

View File

@ -51,9 +51,7 @@ main(int argc, char* argv[])
if (!PBD::init ()) return 1; if (!PBD::init ()) return 1;
Temporal::init (); Temporal::init ();
// TempoMap::SharedPtr tmap = TempoMap::write_copy (); /* get writable copy of current tempo map */ Temporal::reset();
// change it
// TempoMap::update (tmap); /* update the global tempo map manager */
CppUnit::TestResult testresult; CppUnit::TestResult testresult;