Handmade Hero»Episode Guide
Building a Profile Tree
?
?

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)
0:11Set the stage for the day
0:11Set the stage for the day
0:11Set the stage for the day
0:32Problem #1: No fast way to get out the profiling information for the previous frame
0:32Problem #1: No fast way to get out the profiling information for the previous frame
0:32Problem #1: No fast way to get out the profiling information for the previous frame
1:06Problem #2: In order to print out the profile view we need some concept of the nesting of calls inside one another
1:06Problem #2: In order to print out the profile view we need some concept of the nesting of calls inside one another
1:06Problem #2: In order to print out the profile view we need some concept of the nesting of calls inside one another
4:01Blackboard: Profile Queries
4:01Blackboard: Profile Queries
4:01Blackboard: Profile Queries
6:43Hype the new version of 4coder
6:43Hype the new version of 4coder
6:43Hype the new version of 4coder
7:52handmade_debug.cpp: Enable the profiler
7:52handmade_debug.cpp: Enable the profiler
7:52handmade_debug.cpp: Enable the profiler
8:12Run the game and hit an InvalidCodePath as we overflow the PushBuffer of the renderer
8:12Run the game and hit an InvalidCodePath as we overflow the PushBuffer of the renderer
8:12Run the game and hit an InvalidCodePath as we overflow the PushBuffer of the renderer
14:25handmade_debug.cpp: Disable the profiler
14:25handmade_debug.cpp: Disable the profiler
14:25handmade_debug.cpp: Disable the profiler
15:02handmade_debug.h: Add StoredEventCount, ProfileBlockCount and DataBlockCount to debug_frame
15:02handmade_debug.h: Add StoredEventCount, ProfileBlockCount and DataBlockCount to debug_frame
15:02handmade_debug.h: Add StoredEventCount, ProfileBlockCount and DataBlockCount to debug_frame
16:32handmade_debug.cpp: Increment these values in StoreEvent and CollateDebugRecords
16:32handmade_debug.cpp: Increment these values in StoreEvent and CollateDebugRecords
16:32handmade_debug.cpp: Increment these values in StoreEvent and CollateDebugRecords
17:37handmade_debug.cpp: Print out these values
17:37handmade_debug.cpp: Print out these values
17:37handmade_debug.cpp: Print out these values
18:45Run the game and see what those numbers look like
18:45Run the game and see what those numbers look like
18:45Run the game and see what those numbers look like
21:40Consider how to process this data
21:40Consider how to process this data
21:40Consider how to process this data
24:31handmade_debug.h: Introduce debug_profile_node
24:31handmade_debug.h: Introduce debug_profile_node
24:31handmade_debug.h: Introduce debug_profile_node
30:01handmade_debug.cpp: Make DrawProfileIn take a debug_profile_node and work through how to use it
30:01handmade_debug.cpp: Make DrawProfileIn take a debug_profile_node and work through how to use it
30:01handmade_debug.cpp: Make DrawProfileIn take a debug_profile_node and work through how to use it
39:15handmade_debug.cpp: Make the DrawProfileIn call in DEBUGDrawElement take RootProfileNode
39:15handmade_debug.cpp: Make the DrawProfileIn call in DEBUGDrawElement take RootProfileNode
39:15handmade_debug.cpp: Make the DrawProfileIn call in DEBUGDrawElement take RootProfileNode
43:55handmade_debug.h: Use debug_stored_events in debug_profile_node
43:55handmade_debug.h: Use debug_stored_events in debug_profile_node
43:55handmade_debug.h: Use debug_stored_events in debug_profile_node
47:25Be Mr Cheesy - Mr Cheesepants, Cheese manα
47:25Be Mr Cheesy - Mr Cheesepants, Cheese manα
47:25Be Mr Cheesy - Mr Cheesepants, Cheese manα
48:03handmade_debug.cpp: Set debug_stored_event *Node to the result of StoreEvent (via *StoredEvent) and then immediately rewrite it
48:03handmade_debug.cpp: Set debug_stored_event *Node to the result of StoreEvent (via *StoredEvent) and then immediately rewrite it
48:03handmade_debug.cpp: Set debug_stored_event *Node to the result of StoreEvent (via *StoredEvent) and then immediately rewrite it
59:54Run the game and see that we're never adding anything to the RootProfileNode
59:54Run the game and see that we're never adding anything to the RootProfileNode
59:54Run the game and see that we're never adding anything to the RootProfileNode
1:00:34handmade_debug.cpp: Conditionally set the ParentEvent in BeginBlock
1:00:34handmade_debug.cpp: Conditionally set the ParentEvent in BeginBlock
1:00:34handmade_debug.cpp: Conditionally set the ParentEvent in BeginBlock
1:05:21handmade_debug.cpp: Setup the children in BeginBlock
1:05:21handmade_debug.cpp: Setup the children in BeginBlock
1:05:21handmade_debug.cpp: Setup the children in BeginBlock
1:06:35Debugger: Step into DrawProfileIn and inspect the RootEvent
1:06:35Debugger: Step into DrawProfileIn and inspect the RootEvent
1:06:35Debugger: Step into DrawProfileIn and inspect the RootEvent
1:08:06handmade_debug.cpp: Correctly set the Node's Duration
1:08:06handmade_debug.cpp: Correctly set the Node's Duration
1:08:06handmade_debug.cpp: Correctly set the Node's Duration
1:10:48Run the game and admire the bizarre results
1:10:48Run the game and admire the bizarre results
1:10:48Run the game and admire the bizarre results
1:11:11Q&A
🗩
1:11:11Q&A
🗩
1:11:11Q&A
🗩
1:11:51insobot Need to find a whole os is that we get a taste again... For some! Implementing merge?
🗪
1:11:51insobot Need to find a whole os is that we get a taste again... For some! Implementing merge?
🗪
1:11:51insobot Need to find a whole os is that we get a taste again... For some! Implementing merge?
🗪
1:12:00grumpygiant256 Will the day-counter overflow tomorrow, or will The Variable provide more bits for us?
🗪
1:12:00grumpygiant256 Will the day-counter overflow tomorrow, or will The Variable provide more bits for us?
🗪
1:12:00grumpygiant256 Will the day-counter overflow tomorrow, or will The Variable provide more bits for us?
🗪
1:12:17desuused How are you going to celebrate Handmade Hero episode 0xFF?
🗪
1:12:17desuused How are you going to celebrate Handmade Hero episode 0xFF?
🗪
1:12:17desuused How are you going to celebrate Handmade Hero episode 0xFF?
🗪
1:13:23cubercaleb Soon enough we will need 10 bits to store the day counter!
🗪
1:13:23cubercaleb Soon enough we will need 10 bits to store the day counter!
🗪
1:13:23cubercaleb Soon enough we will need 10 bits to store the day counter!
🗪
1:14:40cubercaleb We may even need 11 bits!
🗪
1:14:40cubercaleb We may even need 11 bits!
🗪
1:14:40cubercaleb We may even need 11 bits!
🗪
1:15:00guitarm87 How long will it take me to get your "flow" of coding? 40 years?
🗪
1:15:00guitarm87 How long will it take me to get your "flow" of coding? 40 years?
🗪
1:15:00guitarm87 How long will it take me to get your "flow" of coding? 40 years?
🗪
1:15:24fartasanelk What kind of data is the profiler intended to display?
🗪
1:15:24fartasanelk What kind of data is the profiler intended to display?
🗪
1:15:24fartasanelk What kind of data is the profiler intended to display?
🗪
1:16:26ravicavus Do you know what the total line count is at?
🗪
1:16:26ravicavus Do you know what the total line count is at?
🗪
1:16:26ravicavus Do you know what the total line count is at?
🗪
1:16:55cubercaleb Will you be able to turn on / off profiling for certain functions with the debug UI?
🗪
1:16:55cubercaleb Will you be able to turn on / off profiling for certain functions with the debug UI?
🗪
1:16:55cubercaleb Will you be able to turn on / off profiling for certain functions with the debug UI?
🗪
1:17:36theinternetftw A big part of the slow startup for me is that the ModeArena is cleared to zero by default at the moment. That's about 256MB
🗪
1:17:36theinternetftw A big part of the slow startup for me is that the ModeArena is cleared to zero by default at the moment. That's about 256MB
🗪
1:17:36theinternetftw A big part of the slow startup for me is that the ModeArena is cleared to zero by default at the moment. That's about 256MB
🗪
1:18:39win32_handmade.cpp: Set GlobalRenderingType to software
1:18:39win32_handmade.cpp: Set GlobalRenderingType to software
1:18:39win32_handmade.cpp: Set GlobalRenderingType to software
1:20:07Run the game and witness a very slow fade
1:20:07Run the game and witness a very slow fade
1:20:07Run the game and witness a very slow fade
1:21:11build.bat: Stop linking with opengl32.lib
1:21:11build.bat: Stop linking with opengl32.lib
1:21:11build.bat: Stop linking with opengl32.lib
1:22:02win32_handmade.cpp: Switch back to OpenGL and witness a longer startup
1:22:02win32_handmade.cpp: Switch back to OpenGL and witness a longer startup
1:22:02win32_handmade.cpp: Switch back to OpenGL and witness a longer startup
1:22:48Wind down, wrap it up
🗩
1:22:48Wind down, wrap it up
🗩
1:22:48Wind down, wrap it up
🗩
1:23:47Anticipate new 4coder
🗩
1:23:47Anticipate new 4coder
🗩
1:23:47Anticipate new 4coder
🗩