Skip to content

Commit f5004f2

Browse files
If DEBUG_SCHEDULER is defined, /taskdebug also outputs how long each task takes to complete
1 parent 7970334 commit f5004f2

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

fCraft/System/Scheduler.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,12 @@ public static class Scheduler {
1818
static Thread schedulerThread,
1919
backgroundThread;
2020

21-
21+
#if DEBUG_SCHEDULER
22+
public static event EventHandler<SchedulerTaskEventArgs> TaskAdded;
23+
public static event EventHandler<SchedulerTaskEventArgs> TaskRemoved;
24+
public static event EventHandler<SchedulerTaskEventArgs> TaskExecuted;
25+
public static event EventHandler<SchedulerTaskEventArgs> TaskExecuting;
26+
#endif
2227
public static int CriticalTaskCount {
2328
get {
2429
lock( BackgroundTaskQueueLock ) {
@@ -65,6 +70,7 @@ static void MainLoop() {
6570
} else {
6671
task.IsExecuting = true;
6772
#if DEBUG_SCHEDULER
73+
task.ExecuteStart = DateTime.UtcNow;
6874
FireEvent( TaskExecuting, task );
6975
#endif
7076

@@ -82,6 +88,7 @@ static void MainLoop() {
8288
#endif
8389

8490
#if DEBUG_SCHEDULER
91+
task.ExecuteEnd = DateTime.UtcNow;
8592
FireEvent( TaskExecuted, task );
8693
#endif
8794
}
@@ -130,6 +137,7 @@ static void BackgroundLoop() {
130137
static void ExecuteBackgroundTask( SchedulerTask task ) {
131138
task.IsExecuting = true;
132139
#if DEBUG_SCHEDULER
140+
task.ExecuteStart = DateTime.UtcNow;
133141
FireEvent( TaskExecuting, task );
134142
#endif
135143

@@ -146,6 +154,7 @@ static void ExecuteBackgroundTask( SchedulerTask task ) {
146154
#endif
147155

148156
#if DEBUG_SCHEDULER
157+
task.ExecuteEnd = DateTime.UtcNow;
149158
FireEvent( TaskExecuted, task );
150159
#endif
151160
}
@@ -162,11 +171,9 @@ internal static void AddTask( [NotNull] SchedulerTask task ) {
162171
FireEvent( TaskAdded, task );
163172
if( Tasks.Add( task ) ) {
164173
UpdateCache();
165-
Logger.Log( LogType.Debug,
166-
"Scheduler.AddTask: Added {0}", task );
167-
}else{
168-
Logger.Log( LogType.Debug,
169-
"Scheduler.AddTask: Added duplicate {0}", task );
174+
Logger.Log( LogType.Debug, "Scheduler.AddTask: Added {0}", task );
175+
} else {
176+
Logger.Log( LogType.Debug, "Scheduler.AddTask: Added duplicate {0}", task );
170177
}
171178
#else
172179
if( Tasks.Add( task ) ) {
@@ -282,6 +289,10 @@ public static void PrintTasks( [NotNull] Player player ) {
282289
lock( TaskListLock ) {
283290
foreach( SchedulerTask task in Tasks ) {
284291
player.Message( task.ToString() );
292+
#if DEBUG_SCHEDULER
293+
TimeSpan delta = task.ExecuteEnd - task.ExecuteStart;
294+
player.Message( " Exceution time: {0} milliseconds", delta.TotalMilliseconds);
295+
#endif
285296
}
286297
}
287298
}

fCraft/System/SchedulerTask.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,9 @@ internal SchedulerTask( [NotNull] SchedulerCallback callback, bool isBackground,
7979
/// can be used for anything you want. </summary>
8080
public object UserState { get; set; }
8181

82-
82+
#if DEBUG_SCHEDULER
83+
public DateTime ExecuteStart, ExecuteEnd;
84+
#endif
8385
#region Run Once
8486

8587
/// <summary> Runs the task once, as quickly as possible.

0 commit comments

Comments
 (0)