Split debug key function into sync and async parts (wrt the game logic thread), paving the way for GraphicsLock and GameClock lock removal
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@3759 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
Changes towards version 0.8:
|
||||
- Split debug key function into sync and async parts, paving the way
|
||||
for GraphicsLock removal - Alex
|
||||
- PageUp/PageDown now add/remove 10 fuel in the shipyard, from
|
||||
Scott A. Colcord, Nic
|
||||
- Annihigate flash thread - SvdB
|
||||
|
||||
+3
-9
@@ -157,22 +157,16 @@ UnlockGameClock (void)
|
||||
BOOLEAN
|
||||
GameClockRunning (void)
|
||||
{
|
||||
SIZE prev_tick, cur_tick;
|
||||
SIZE day_in_ticks;
|
||||
|
||||
if (!clock_mutex)
|
||||
return FALSE;
|
||||
|
||||
LockMutex (clock_mutex);
|
||||
prev_tick = GLOBAL (GameClock.tick_count);
|
||||
day_in_ticks = GLOBAL (GameClock.day_in_ticks);
|
||||
UnlockMutex (clock_mutex);
|
||||
|
||||
SleepThread (ONE_SECOND / 5);
|
||||
|
||||
LockMutex (clock_mutex);
|
||||
cur_tick = GLOBAL (GameClock.tick_count);
|
||||
UnlockMutex (clock_mutex);
|
||||
|
||||
return cur_tick != prev_tick;
|
||||
return day_in_ticks != 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+5
-13
@@ -275,6 +275,11 @@ UpdateInputState (void)
|
||||
|
||||
if (CurrentInputState.menu[KEY_EXIT])
|
||||
ExitRequested = TRUE;
|
||||
|
||||
#if defined(DEBUG) || defined(USE_DEBUG_KEY)
|
||||
if (PulsedInputState.menu[KEY_DEBUG])
|
||||
debugKeyPressedSynchronous ();
|
||||
#endif
|
||||
}
|
||||
|
||||
InputFrameCallback *
|
||||
@@ -365,19 +370,6 @@ DoInput (void *pInputState, BOOLEAN resetInput)
|
||||
|
||||
UpdateInputState ();
|
||||
|
||||
#ifdef DEBUG
|
||||
if (doInputDebugHook != NULL)
|
||||
{
|
||||
void (*saveDebugHook) (void);
|
||||
saveDebugHook = doInputDebugHook;
|
||||
doInputDebugHook = NULL;
|
||||
// No further debugHook calls unless the called
|
||||
// function resets doInputDebugHook.
|
||||
(*saveDebugHook) ();
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if DEMO_MODE || CREATE_JOURNAL
|
||||
if (ArrowInput != DemoInput)
|
||||
#endif
|
||||
|
||||
@@ -352,7 +352,8 @@ CalcLifeChance (const PLANET_INFO *PlanetInfoPtr)
|
||||
void
|
||||
DoPlanetaryAnalysis (SYSTEM_INFO *SysInfoPtr, PLANET_DESC *pPlanetDesc)
|
||||
{
|
||||
assert (pPlanetDesc->data_index != HIERARCHY_STARBASE);
|
||||
assert ((pPlanetDesc->data_index & ~WORLD_TYPE_SPECIAL)
|
||||
< NUMBER_OF_PLANET_TYPES);
|
||||
|
||||
RandomContext_SeedRandom (SysGenRNG, pPlanetDesc->rand_seed);
|
||||
|
||||
|
||||
+11
-3
@@ -105,6 +105,7 @@ BackgroundInitKernel (DWORD TimeOut)
|
||||
}
|
||||
}
|
||||
|
||||
// Executes on the main() thread
|
||||
void
|
||||
SignalStopMainThread (void)
|
||||
{
|
||||
@@ -113,6 +114,7 @@ SignalStopMainThread (void)
|
||||
TaskSwitch ();
|
||||
}
|
||||
|
||||
// Executes on the main() thread
|
||||
void
|
||||
ProcessUtilityKeys (void)
|
||||
{
|
||||
@@ -132,12 +134,18 @@ ProcessUtilityKeys (void)
|
||||
}
|
||||
|
||||
#if defined(DEBUG) || defined(USE_DEBUG_KEY)
|
||||
if (ImmediateInputState.menu[KEY_DEBUG])
|
||||
{ // Only call the debug func on the rising edge of
|
||||
// ImmediateInputState[KEY_DEBUG] so it does not execute repeatedly.
|
||||
// This duplicates the PulsedInputState somewhat, but we cannot
|
||||
// use PulsedInputState here because it is meant for another thread.
|
||||
static int debugKeyState;
|
||||
|
||||
if (ImmediateInputState.menu[KEY_DEBUG] && debugKeyState == 0)
|
||||
{
|
||||
// clear ImmediateInputState so we don't repeat this next frame
|
||||
FlushInput ();
|
||||
debugKeyPressed ();
|
||||
}
|
||||
debugKeyState = ImmediateInputState.menu[KEY_DEBUG];
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
}
|
||||
|
||||
|
||||
+32
-13
@@ -72,11 +72,12 @@ static void dumpPlanetTypeCallback (int index, const PlanetFrame *planet,
|
||||
BOOLEAN instantMove = FALSE;
|
||||
BOOLEAN disableInteractivity = FALSE;
|
||||
void (* volatile debugHook) (void) = NULL;
|
||||
void (* volatile doInputDebugHook) (void) = NULL;
|
||||
|
||||
|
||||
// Must be called on the Starcon2Main thread.
|
||||
// This function is called synchronously wrt the game logic thread.
|
||||
void
|
||||
debugKeyPressed (void)
|
||||
debugKeyPressedSynchronous (void)
|
||||
{
|
||||
// State modifying:
|
||||
equipShip ();
|
||||
@@ -107,28 +108,36 @@ debugKeyPressed (void)
|
||||
// SET_GAME_STATE (MELNORME_CREDIT1, 100);
|
||||
// GLOBAL_SIS (ResUnits) = 100000;
|
||||
|
||||
// Informational:
|
||||
// dumpEvents (stderr);
|
||||
|
||||
// Graphical and textual:
|
||||
// debugContexts();
|
||||
}
|
||||
|
||||
// Can be called on any thread, but usually on main()
|
||||
// This function is called asynchronously wrt the game logic thread,
|
||||
// which means locking applies. Use carefully.
|
||||
// TODO: Once game logic thread is purged of graphics and clock locks,
|
||||
// this function may not call graphics and game clock functions at all.
|
||||
void
|
||||
debugKeyPressed (void)
|
||||
{
|
||||
// Tests
|
||||
// Scale_PerfTest ();
|
||||
|
||||
// Informational:
|
||||
// dumpStrings (stdout);
|
||||
// dumpEvents (stderr);
|
||||
// dumpPlanetTypes(stderr);
|
||||
// debugHook = dumpUniverseToFile;
|
||||
// This will cause dumpUniverseToFile to be called from the
|
||||
// main loop. Calling it from here would give threading
|
||||
// Starcon2Main loop. Calling it from here would give threading
|
||||
// problems.
|
||||
// debugHook = tallyResourcesToFile;
|
||||
// This will cause tallyResourcesToFile to be called from the
|
||||
// main loop. Calling it from here would give threading
|
||||
// Starcon2Main loop. Calling it from here would give threading
|
||||
// problems.
|
||||
|
||||
// Graphical and textual:
|
||||
//doInputDebugHook = debugContexts;
|
||||
// This will cause debugContexts to be called from the
|
||||
// Starcon2Main thread, from DoInput(). Calling it from here
|
||||
// would give threading problems.
|
||||
|
||||
// Interactive:
|
||||
// uio_debugInteractive(stdin, stdout, stderr);
|
||||
}
|
||||
@@ -137,6 +146,9 @@ debugKeyPressed (void)
|
||||
|
||||
// Fast forwards to the next event.
|
||||
// If skipHEE is set, HYPERSPACE_ENCOUNTER_EVENTs are skipped.
|
||||
// Must be called from the Starcon2Main thread.
|
||||
// TODO: GraphicsLock and LockGameClock may be removed since it is only
|
||||
// supposed to be called synchronously wrt the game logic thread.
|
||||
void
|
||||
forwardToNextEvent (BOOLEAN skipHEE)
|
||||
{
|
||||
@@ -596,6 +608,8 @@ forAllMoons (STAR_DESC *star, SOLARSYS_STATE *system, PLANET_DESC *planet,
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Must be called from the Starcon2Main thread.
|
||||
// TODO: LockGameClock may be removed
|
||||
void
|
||||
UniverseRecurse (UniverseRecurseArg *universeRecurseArg)
|
||||
{
|
||||
@@ -728,10 +742,13 @@ moonRecurse (STAR_DESC *star, SOLARSYS_STATE *system, PLANET_DESC *planet,
|
||||
if (universeRecurseArg->moonFunc != NULL)
|
||||
{
|
||||
system->pOrbitalDesc = moon;
|
||||
if (moon->data_index != HIERARCHY_STARBASE && moon->data_index != SA_MATRA)
|
||||
{
|
||||
DoPlanetaryAnalysis (&system->SysInfo, moon);
|
||||
// When GenerateDefaultFunctions is used as genFuncs,
|
||||
// generateOrbital will also call DoPlanetaryAnalysis,
|
||||
// but with other GenerateFunctions this is not guaranteed.
|
||||
}
|
||||
(*system->genFuncs->generateOrbital) (system, moon);
|
||||
(*universeRecurseArg->moonFunc) (
|
||||
moon, universeRecurseArg->arg);
|
||||
@@ -745,6 +762,7 @@ typedef struct
|
||||
FILE *out;
|
||||
} DumpUniverseArg;
|
||||
|
||||
// Must be called from the Starcon2Main thread.
|
||||
void
|
||||
dumpUniverse (FILE *out)
|
||||
{
|
||||
@@ -763,7 +781,7 @@ dumpUniverse (FILE *out)
|
||||
UniverseRecurse (&universeRecurseArg);
|
||||
}
|
||||
|
||||
// Must be called from the main thread.
|
||||
// Must be called from the Starcon2Main thread.
|
||||
void
|
||||
dumpUniverseToFile (void)
|
||||
{
|
||||
@@ -1146,6 +1164,7 @@ struct TallyResourcesArg
|
||||
COUNT bioCount;
|
||||
};
|
||||
|
||||
// Must be called from the Starcon2Main thread.
|
||||
void
|
||||
tallyResources (FILE *out)
|
||||
{
|
||||
@@ -1164,7 +1183,7 @@ tallyResources (FILE *out)
|
||||
UniverseRecurse (&universeRecurseArg);
|
||||
}
|
||||
|
||||
// Must be called from the main thread.
|
||||
// Must be called from the Starcon2Main thread.
|
||||
void
|
||||
tallyResourcesToFile (void)
|
||||
{
|
||||
|
||||
+13
-10
@@ -33,19 +33,19 @@ extern BOOLEAN disableInteractivity;
|
||||
// Starcon2Main thread, in the main game loop.
|
||||
extern void (* volatile debugHook) (void);
|
||||
|
||||
// If a function is assigned to this, it will be called from the
|
||||
// Starcon2Main thread, in doInput().
|
||||
extern void (* volatile doInputDebugHook) (void);
|
||||
|
||||
|
||||
// Called when the debug key (symbol 'Debug' in the keys.cfg) is pressed.
|
||||
// Called on the main() thread when the debug key (symbol 'Debug' in the
|
||||
// keys.cfg) is pressed
|
||||
void debugKeyPressed (void);
|
||||
// Called on the Starcon2Main() thread when the debug key (symbol 'Debug'
|
||||
// in the keys.cfg) is pressed.
|
||||
void debugKeyPressedSynchronous (void);
|
||||
|
||||
// Forward time to the next event. If skipHEE is set, the event named
|
||||
// HYPERSPACE_ENCOUNTER_EVENT, which normally occurs every game day,
|
||||
// is skipped.
|
||||
// is skipped. Must be called on the Starcon2Main thread.
|
||||
void forwardToNextEvent (BOOLEAN skipHEE);
|
||||
// Generate a list of all events in the event queue.
|
||||
// Must be called on the Starcon2Main thread.
|
||||
void dumpEvents (FILE *out);
|
||||
// Describe one event.
|
||||
void dumpEvent (FILE *out, const EVENT *eventPtr);
|
||||
@@ -102,11 +102,13 @@ typedef struct
|
||||
// User data.
|
||||
} UniverseRecurseArg;
|
||||
// Recurse through all systems, planets, and moons in the universe.
|
||||
// Must be called on the Starcon2Main thread.
|
||||
void UniverseRecurse (UniverseRecurseArg *universeRecurseArg);
|
||||
|
||||
// Describe the entire universe.
|
||||
// Describe the entire universe. Must be called on the Starcon2Main thread.
|
||||
void dumpUniverse (FILE *out);
|
||||
// Describe the entire universe, output to a file "./PlanetInfo".
|
||||
// Must be called on the Starcon2Main thread.
|
||||
void dumpUniverseToFile (void);
|
||||
// Describe one star system.
|
||||
void dumpSystem (FILE *out, const STAR_DESC *star,
|
||||
@@ -137,9 +139,10 @@ void generateBioIndex(const SOLARSYS_STATE *system,
|
||||
const PLANET_DESC *world, COUNT bio[]);
|
||||
|
||||
// Tally the resources for each star system.
|
||||
// Must be called on the Starcon2Main thread.
|
||||
void tallyResources (FILE *out);
|
||||
// Tally the resources for each star system, output to a file
|
||||
// "./ResourceTally".
|
||||
// "./ResourceTally". Must be called on the Starcon2Main thread.
|
||||
void tallyResourcesToFile (void);
|
||||
|
||||
|
||||
@@ -186,7 +189,7 @@ void dumpStrings(FILE *out);
|
||||
|
||||
|
||||
// Graphically and textually show all the contexts.
|
||||
// Should be called from debugHook.
|
||||
// Must be called on the Starcon2Main thread.
|
||||
void debugContexts (void);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user