Handmade Hero»Episode Guide
Adding Debug Graphs
?
?

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:11We will replace the C standard library functions at some point
0:11We will replace the C standard library functions at some point
0:11We will replace the C standard library functions at some point
2:45Recap
2:45Recap
2:45Recap
4:06Let's display the debug information in a more useful way
4:06Let's display the debug information in a more useful way
4:06Let's display the debug information in a more useful way
4:50Moving the debug code into handmade_debug.cpp
4:50Moving the debug code into handmade_debug.cpp
4:50Moving the debug code into handmade_debug.cpp
8:05Graphing the values of timers
8:05Graphing the values of timers
8:05Graphing the values of timers
8:44Displaying also the counters that have not been updated in the last frame
8:44Displaying also the counters that have not been updated in the last frame
8:44Displaying also the counters that have not been updated in the last frame
10:13We will pick the maximum value of a timer over a period of time and use it to scale its plot
10:13We will pick the maximum value of a timer over a period of time and use it to scale its plot
10:13We will pick the maximum value of a timer over a period of time and use it to scale its plot
12:34Drawing a rectangle for each counter
12:34Drawing a rectangle for each counter
12:34Drawing a rectangle for each counter
14:32Plotting the rectangles next to the text, aligned to its baseline
14:32Plotting the rectangles next to the text, aligned to its baseline
14:32Plotting the rectangles next to the text, aligned to its baseline
15:56Using the ascender height of the text as the chart height
15:56Using the ascender height of the text as the chart height
15:56Using the ascender height of the text as the chart height
16:24The debug display code needs simpler access to font information
16:24The debug display code needs simpler access to font information
16:24The debug display code needs simpler access to font information
17:38Using the relative value of the timer with respect to its maximum value to modulate the color of the rectangle
17:38Using the relative value of the timer with respect to its maximum value to modulate the color of the rectangle
17:38Using the relative value of the timer with respect to its maximum value to modulate the color of the rectangle
20:09Testing the code so far. Our heartbeat graph doesn't line up with the text
20:09Testing the code so far. Our heartbeat graph doesn't line up with the text
20:09Testing the code so far. Our heartbeat graph doesn't line up with the text
20:56Centering the timer plots with respect to the text
20:56Centering the timer plots with respect to the text
20:56Centering the timer plots with respect to the text
21:46The automatic change of scale of the timer plots is not perfect, but there's no immediate way to solve it
21:46The automatic change of scale of the timer plots is not perfect, but there's no immediate way to solve it
21:46The automatic change of scale of the timer plots is not perfect, but there's no immediate way to solve it
23:54Adjusting the plot sizes
23:54Adjusting the plot sizes
23:54Adjusting the plot sizes
25:51Some of the performance counters are never hit and they show as "null". We won't be drawing those
25:51Some of the performance counters are never hit and they show as "null". We won't be drawing those
25:51Some of the performance counters are never hit and they show as "null". We won't be drawing those
27:58We will save the platform layer debug_frame_end_info timings also as snapshots and we will display them as a stacked graph
27:58We will save the platform layer debug_frame_end_info timings also as snapshots and we will display them as a stacked graph
27:58We will save the platform layer debug_frame_end_info timings also as snapshots and we will display them as a stacked graph
29:30Moving the DEBUGGameFrameEnd function to handmade_debug.cpp
29:30Moving the DEBUGGameFrameEnd function to handmade_debug.cpp
29:30Moving the DEBUGGameFrameEnd function to handmade_debug.cpp
32:28Capturing debug_frame_end_info snapshots
32:28Capturing debug_frame_end_info snapshots
32:28Capturing debug_frame_end_info snapshots
33:55The order of the debug_frame_end_info fields is specific to the platform layer and it shouldn't be
33:55The order of the debug_frame_end_info fields is specific to the platform layer and it shouldn't be
33:55The order of the debug_frame_end_info fields is specific to the platform layer and it shouldn't be
34:57Transforming the individual debug_frame_end_info counters into an array of self-describing debug_frame_timestamps
34:57Transforming the individual debug_frame_end_info counters into an array of self-describing debug_frame_timestamps
34:57Transforming the individual debug_frame_end_info counters into an array of self-describing debug_frame_timestamps
37:01Now we can iterate over all platform timestamps and plot them as a set of stacked bars
37:01Now we can iterate over all platform timestamps and plot them as a set of stacked bars
37:01Now we can iterate over all platform timestamps and plot them as a set of stacked bars
38:50Using the inverse of our framerate (33 ms) as chart height
38:50Using the inverse of our framerate (33 ms) as chart height
38:50Using the inverse of our framerate (33 ms) as chart height
45:52Implementing RecordTimeStamp
45:52Implementing RecordTimeStamp
45:52Implementing RecordTimeStamp
50:30Testing the stacked bar chart. It's not positioned correctly
50:30Testing the stacked bar chart. It's not positioned correctly
50:30Testing the stacked bar chart. It's not positioned correctly
52:40The plot seems to be overshooting 33 ms. Let's draw a reference line to check that
52:40The plot seems to be overshooting 33 ms. Let's draw a reference line to check that
52:40The plot seems to be overshooting 33 ms. Let's draw a reference line to check that
54:16Yes, we're missing the target framerate
54:16Yes, we're missing the target framerate
54:16Yes, we're missing the target framerate
54:53Color-coding the stacked rectangles to tell them apart more easily
54:53Color-coding the stacked rectangles to tell them apart more easily
54:53Color-coding the stacked rectangles to tell them apart more easily
57:10Testing the color-coded rectangles. The plot doesn't look right
57:10Testing the color-coded rectangles. The plot doesn't look right
57:10Testing the color-coded rectangles. The plot doesn't look right
57:53We never bothered to stack the rectangles!
57:53We never bothered to stack the rectangles!
57:53We never bothered to stack the rectangles!
58:29It works now and the majority of the time is spent inside the GameUpdateAndRender function
58:29It works now and the majority of the time is spent inside the GameUpdateAndRender function
58:29It works now and the majority of the time is spent inside the GameUpdateAndRender function
59:52Q&A
🗩
59:52Q&A
🗩
59:52Q&A
🗩
1:01:41BrainCruser Doesn't the multi-core rendering screw up your timing?
🗪
1:01:41BrainCruser Doesn't the multi-core rendering screw up your timing?
🗪
1:01:41BrainCruser Doesn't the multi-core rendering screw up your timing?
🗪
1:02:37ifingerbangedurcat Can you briefly explain how it tracks how long it takes the frame to work and the render engine to work if rendering the debug is part of that work? Also a suggestion, use a key to toggle the debug display to see the game
🗪
1:02:37ifingerbangedurcat Can you briefly explain how it tracks how long it takes the frame to work and the render engine to work if rendering the debug is part of that work? Also a suggestion, use a key to toggle the debug display to see the game
🗪
1:02:37ifingerbangedurcat Can you briefly explain how it tracks how long it takes the frame to work and the render engine to work if rendering the debug is part of that work? Also a suggestion, use a key to toggle the debug display to see the game
🗪
1:05:52garlandobloom Did you get 4coder set up?
🗪
1:05:52garlandobloom Did you get 4coder set up?
🗪
1:05:52garlandobloom Did you get 4coder set up?
🗪
1:06:17ciutchism Do you ever think it's amazing how 100s of designers can screw up a project by trying to be complex when indie designers can make a better game in a few months?
🗪
1:06:17ciutchism Do you ever think it's amazing how 100s of designers can screw up a project by trying to be complex when indie designers can make a better game in a few months?
🗪
1:06:17ciutchism Do you ever think it's amazing how 100s of designers can screw up a project by trying to be complex when indie designers can make a better game in a few months?
🗪
1:09:38griggs3d07 You mentioned that the way you draw rects is not optimized. What do you want to change?
🗪
1:09:38griggs3d07 You mentioned that the way you draw rects is not optimized. What do you want to change?
🗪
1:09:38griggs3d07 You mentioned that the way you draw rects is not optimized. What do you want to change?
🗪
1:10:44Stephenlast Because you're using rendering on multiple threads, is it saying that you're spending more cycles in DrawRectangle / DrawRectangleQuickly than GameUpdateAndRender?
🗪
1:10:44Stephenlast Because you're using rendering on multiple threads, is it saying that you're spending more cycles in DrawRectangle / DrawRectangleQuickly than GameUpdateAndRender?
🗪
1:10:44Stephenlast Because you're using rendering on multiple threads, is it saying that you're spending more cycles in DrawRectangle / DrawRectangleQuickly than GameUpdateAndRender?
🗪
1:12:26Mojobojo Why are you echoing to lock.tmp in your bat file?
🗪
1:12:26Mojobojo Why are you echoing to lock.tmp in your bat file?
🗪
1:12:26Mojobojo Why are you echoing to lock.tmp in your bat file?
🗪
1:14:13jfcatalan So after "lib freedom week" we could reasonably easily boot HH off something like baremetalOS and go all "look 'ma no OS" (minus sound I guess)?
🗪
1:14:13jfcatalan So after "lib freedom week" we could reasonably easily boot HH off something like baremetalOS and go all "look 'ma no OS" (minus sound I guess)?
🗪
1:14:13jfcatalan So after "lib freedom week" we could reasonably easily boot HH off something like baremetalOS and go all "look 'ma no OS" (minus sound I guess)?
🗪
1:15:00inquarry Will HH be optimized for GPUs or are you sticking to CPU render? Will that be an arduous task or pretty straight forward?
🗪
1:15:00inquarry Will HH be optimized for GPUs or are you sticking to CPU render? Will that be an arduous task or pretty straight forward?
🗪
1:15:00inquarry Will HH be optimized for GPUs or are you sticking to CPU render? Will that be an arduous task or pretty straight forward?
🗪
1:15:32ciutchism If I have a simple app concept that I can't code myself because I'm a scrub, is there any good way to get somebody to make an app for me that is somewhat simplistic and we split profits or even I just get 10%? I don't care about the profits I just want to help develop the app
🗪
1:15:32ciutchism If I have a simple app concept that I can't code myself because I'm a scrub, is there any good way to get somebody to make an app for me that is somewhat simplistic and we split profits or even I just get 10%? I don't care about the profits I just want to help develop the app
🗪
1:15:32ciutchism If I have a simple app concept that I can't code myself because I'm a scrub, is there any good way to get somebody to make an app for me that is somewhat simplistic and we split profits or even I just get 10%? I don't care about the profits I just want to help develop the app
🗪
1:16:12SeargeDP Why are you not using visual studio to write your code? It seems to be a windows machine you are working on
🗪
1:16:12SeargeDP Why are you not using visual studio to write your code? It seems to be a windows machine you are working on
🗪
1:16:12SeargeDP Why are you not using visual studio to write your code? It seems to be a windows machine you are working on
🗪
1:16:51Close outta here
🗩
1:16:51Close outta here
🗩
1:16:51Close outta here
🗩
1:17:25Announcement: GitHub private repository now available for those who preorder the source
🗩
1:17:25Announcement: GitHub private repository now available for those who preorder the source
🗩
1:17:25Announcement: GitHub private repository now available for those who preorder the source
🗩