Handmade Hero»Episode Guide
Platform Layer Debug Events
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
00:08Recap and plan for today
00:08Recap and plan for today
00:08Recap and plan for today
01:56Removing the obsolete debug_frame_end_info
01:56Removing the obsolete debug_frame_end_info
01:56Removing the obsolete debug_frame_end_info
02:15In place of that, we could have an array of counters for the platform layer translation unit
02:15In place of that, we could have an array of counters for the platform layer translation unit
02:15In place of that, we could have an array of counters for the platform layer translation unit
03:05But we can also write directly to the GlobalDebugTable
03:05But we can also write directly to the GlobalDebugTable
03:05But we can also write directly to the GlobalDebugTable
05:14Introducing manual_timed_block to have more flexibility recording events
05:14Introducing manual_timed_block to have more flexibility recording events
05:14Introducing manual_timed_block to have more flexibility recording events
08:28Implementing BEGIN_BLOCK and END_BLOCK
08:28Implementing BEGIN_BLOCK and END_BLOCK
08:28Implementing BEGIN_BLOCK and END_BLOCK
09:02Naming blocks so that we can pair BEGIN_ and END_BLOCKs
09:02Naming blocks so that we can pair BEGIN_ and END_BLOCKs
09:02Naming blocks so that we can pair BEGIN_ and END_BLOCKs
09:50We want to avoid creating scopes for the only purpose of timing what's inside
09:50We want to avoid creating scopes for the only purpose of timing what's inside
09:50We want to avoid creating scopes for the only purpose of timing what's inside
10:13Let's write the usage code first
10:13Let's write the usage code first
10:13Let's write the usage code first
13:30Naming also the END_BLOCKs
13:30Naming also the END_BLOCKs
13:30Naming also the END_BLOCKs
15:03Implementing the named BEGIN_BLOCK
15:03Implementing the named BEGIN_BLOCK
15:03Implementing the named BEGIN_BLOCK
18:34Implementing the named END_BLOCK
18:34Implementing the named END_BLOCK
18:34Implementing the named END_BLOCK
19:47Renaming TIMED_BLOCK as TIMED_FUNCTION
19:47Renaming TIMED_BLOCK as TIMED_FUNCTION
19:47Renaming TIMED_BLOCK as TIMED_FUNCTION
20:57Making the code compile after all the changes to the debug system
20:57Making the code compile after all the changes to the debug system
20:57Making the code compile after all the changes to the debug system
22:58Reintroducing TIMED_BLOCK and consolidating it with TIMED_FUNCTION
22:58Reintroducing TIMED_BLOCK and consolidating it with TIMED_FUNCTION
22:58Reintroducing TIMED_BLOCK and consolidating it with TIMED_FUNCTION
26:00There's a compilation problem related to BEGIN_BLOCK
26:00There's a compilation problem related to BEGIN_BLOCK
26:00There's a compilation problem related to BEGIN_BLOCK
27:32Debugging the macro by commenting parts of it out
27:32Debugging the macro by commenting parts of it out
27:32Debugging the macro by commenting parts of it out
28:06The problem was one of conflicting names
28:06The problem was one of conflicting names
28:06The problem was one of conflicting names
28:56Grabbing the GlobalDebugTable at DLL-load time
28:56Grabbing the GlobalDebugTable at DLL-load time
28:56Grabbing the GlobalDebugTable at DLL-load time
30:13Changing the type of the global debug table to be a pointer
30:13Changing the type of the global debug table to be a pointer
30:13Changing the type of the global debug table to be a pointer
32:08Introducing a placeholder GlobalDebugTable in the platform layer
32:08Introducing a placeholder GlobalDebugTable in the platform layer
32:08Introducing a placeholder GlobalDebugTable in the platform layer
33:00The program crashes
33:00The program crashes
33:00The program crashes
34:55We did not initialize the counter inside the timed_block constructor
34:55We did not initialize the counter inside the timed_block constructor
34:55We did not initialize the counter inside the timed_block constructor
35:06Testing the last changes. The platform layer writes now to a separate debug memory
35:06Testing the last changes. The platform layer writes now to a separate debug memory
35:06Testing the last changes. The platform layer writes now to a separate debug memory
35:31Hooking up the debug table from the game code after loading the game DLL
35:31Hooking up the debug table from the game code after loading the game DLL
35:31Hooking up the debug table from the game code after loading the game DLL
36:55The debug array could also live in the platform layer side, but that option would have its own problems
36:55The debug array could also live in the platform layer side, but that option would have its own problems
36:55The debug array could also live in the platform layer side, but that option would have its own problems
38:57The sharing of the debug_table could be better
38:57The sharing of the debug_table could be better
38:57The sharing of the debug_table could be better
40:10The platform counters still don't show up in the visualization
40:10The platform counters still don't show up in the visualization
40:10The platform counters still don't show up in the visualization
40:59We were not printing the platform layer records yet!
40:59We were not printing the platform layer records yet!
40:59We were not printing the platform layer records yet!
41:44Adding the RecordCount per translation unit to the debug table
41:44Adding the RecordCount per translation unit to the debug table
41:44Adding the RecordCount per translation unit to the debug table
46:02Figuring out the platform layer record count
46:02Figuring out the platform layer record count
46:02Figuring out the platform layer record count
47:42Testing again
47:42Testing again
47:42Testing again
48:37The Win32Loop closes after DEBUGFrameEnd is invoked, so its value is incorrect
48:37The Win32Loop closes after DEBUGFrameEnd is invoked, so its value is incorrect
48:37The Win32Loop closes after DEBUGFrameEnd is invoked, so its value is incorrect
50:25We want to have a way of establishing frame boundaries
50:25We want to have a way of establishing frame boundaries
50:25We want to have a way of establishing frame boundaries
51:20Introducing FRAME_MARKER
51:20Introducing FRAME_MARKER
51:20Introducing FRAME_MARKER
52:13New debug_event_type: DebugEvent_FrameMarker
52:13New debug_event_type: DebugEvent_FrameMarker
52:13New debug_event_type: DebugEvent_FrameMarker
54:14Testing it
54:14Testing it
54:14Testing it
55:10(Blackboard) Structure and plans for the debug log. We want to keep a history longer than one frame
55:10(Blackboard) Structure and plans for the debug log. We want to keep a history longer than one frame
55:10(Blackboard) Structure and plans for the debug log. We want to keep a history longer than one frame
57:02We need to allocate more memory. Maybe it should come from the platform layer
57:02We need to allocate more memory. Maybe it should come from the platform layer
57:02We need to allocate more memory. Maybe it should come from the platform layer
58:10Is the amount of data we want to keep in the static section going to be a problem?
58:10Is the amount of data we want to keep in the static section going to be a problem?
58:10Is the amount of data we want to keep in the static section going to be a problem?
59:33Instead of two ping-pong arrays, we have now sixty-four
59:33Instead of two ping-pong arrays, we have now sixty-four
59:33Instead of two ping-pong arrays, we have now sixty-four
1:00:30Now we can look across frames and we don't need the snapshots anymore
1:00:30Now we can look across frames and we don't need the snapshots anymore
1:00:30Now we can look across frames and we don't need the snapshots anymore
1:01:20Not as good as a circular buffer but it will do
1:01:20Not as good as a circular buffer but it will do
1:01:20Not as good as a circular buffer but it will do
1:02:43Q&A
🗩
1:02:43Q&A
🗩
1:02:43Q&A
🗩
1:03:11Hotspur_ Are you going to start the hardware renderer before starting on game logic? Or are you going to wait until software doesn't cut it? Or are you waiting for Vulkan?
🗪
1:03:11Hotspur_ Are you going to start the hardware renderer before starting on game logic? Or are you going to wait until software doesn't cut it? Or are you waiting for Vulkan?
🗪
1:03:11Hotspur_ Are you going to start the hardware renderer before starting on game logic? Or are you going to wait until software doesn't cut it? Or are you waiting for Vulkan?
🗪
1:04:09TheiBurley Do you just use the blue line selector and green cursor to make it easier to follow on stream, or is that how you normally like it? I feel like it would get fatiguing on the eyes
🗪
1:04:09TheiBurley Do you just use the blue line selector and green cursor to make it easier to follow on stream, or is that how you normally like it? I feel like it would get fatiguing on the eyes
🗪
1:04:09TheiBurley Do you just use the blue line selector and green cursor to make it easier to follow on stream, or is that how you normally like it? I feel like it would get fatiguing on the eyes
🗪
1:04:34elxenoaizd When do you think it is a good idea to use somebody else's library / system instead of implementing our own? (e.g. Do you use anything from the C standard library?)
🗪
1:04:34elxenoaizd When do you think it is a good idea to use somebody else's library / system instead of implementing our own? (e.g. Do you use anything from the C standard library?)
🗪
1:04:34elxenoaizd When do you think it is a good idea to use somebody else's library / system instead of implementing our own? (e.g. Do you use anything from the C standard library?)
🗪
1:07:08cubercaleb Missed the first half of the stream, are you saving the past 60 frames into a buffer?
🗪
1:07:08cubercaleb Missed the first half of the stream, are you saving the past 60 frames into a buffer?
🗪
1:07:08cubercaleb Missed the first half of the stream, are you saving the past 60 frames into a buffer?
🗪
1:07:40elxenoaizd If a miracle happens and C++ starts doing things right and addresses the issues in the implementations of most of their features, would you use their features like templates etc., or stick to metaprogramming etc.?
🗪
1:07:40elxenoaizd If a miracle happens and C++ starts doing things right and addresses the issues in the implementations of most of their features, would you use their features like templates etc., or stick to metaprogramming etc.?
🗪
1:07:40elxenoaizd If a miracle happens and C++ starts doing things right and addresses the issues in the implementations of most of their features, would you use their features like templates etc., or stick to metaprogramming etc.?
🗪
1:08:02JamesWidman In the debug display, are we going to see something like Brendan Gregg's flame graphs (where function call depth is represented on the Y axis)?
🗪
1:08:02JamesWidman In the debug display, are we going to see something like Brendan Gregg's flame graphs (where function call depth is represented on the Y axis)?
🗪
1:08:02JamesWidman In the debug display, are we going to see something like Brendan Gregg's flame graphs (where function call depth is represented on the Y axis)?
🗪
1:08:27insofaras I think a lot of people would like to see how to write a hardware renderer, myself includedα
🗪
1:08:27insofaras I think a lot of people would like to see how to write a hardware renderer, myself includedα
🗪
1:08:27insofaras I think a lot of people would like to see how to write a hardware renderer, myself includedα
🗪
1:10:33CaptainKraft Getting good at writing game engines: make lots of them or work on a few larger ones and continue improving them?
🗪
1:10:33CaptainKraft Getting good at writing game engines: make lots of them or work on a few larger ones and continue improving them?
🗪
1:10:33CaptainKraft Getting good at writing game engines: make lots of them or work on a few larger ones and continue improving them?
🗪
1:12:07Close it down
🗩
1:12:07Close it down
🗩
1:12:07Close it down
🗩