2:34Test-driven development doesn't help solving the harder problems of game programming
2:34Test-driven development doesn't help solving the harder problems of game programming
2:34Test-driven development doesn't help solving the harder problems of game programming
4:59Purpose of debug services
4:59Purpose of debug services
4:59Purpose of debug services
6:331) Coaxing bugs to the surface
6:331) Coaxing bugs to the surface
6:331) Coaxing bugs to the surface
8:002) Locating bugs that are clearly present but difficult to pinpoint
8:002) Locating bugs that are clearly present but difficult to pinpoint
8:002) Locating bugs that are clearly present but difficult to pinpoint
11:58We'll focus on versatile debug services aimed at solving difficult bugs
11:58We'll focus on versatile debug services aimed at solving difficult bugs
11:58We'll focus on versatile debug services aimed at solving difficult bugs
13:21Logs. Example of debugging framerate problems
13:21Logs. Example of debugging framerate problems
13:21Logs. Example of debugging framerate problems
15:49We could start by recording our debug timers on each frame
15:49We could start by recording our debug timers on each frame
15:49We could start by recording our debug timers on each frame
16:35Simplifying the usage of our debug timers
16:35Simplifying the usage of our debug timers
16:35Simplifying the usage of our debug timers
17:38We could combine the log and the looped live code editing replay system
17:38We could combine the log and the looped live code editing replay system
17:38We could combine the log and the looped live code editing replay system
20:01Limitations of this approach - Is not particularly good for multithreading problems
20:01Limitations of this approach - Is not particularly good for multithreading problems
20:01Limitations of this approach - Is not particularly good for multithreading problems
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
21:23Necessary components: counter log, replay system, log of memory consumption and diagramming
25:57We want all the debugging subsystems going through the same log
25:57We want all the debugging subsystems going through the same log
25:57We want all the debugging subsystems going through the same log
27:14We want to avoid having to change the code in order to debug it...
27:14We want to avoid having to change the code in order to debug it...
27:14We want to avoid having to change the code in order to debug it...
29:11...and also avoid having to remove debug calls once we're done
29:11...and also avoid having to remove debug calls once we're done
29:11...and also avoid having to remove debug calls once we're done
31:44Review of desired features for our debug system
31:44Review of desired features for our debug system
31:44Review of desired features for our debug system
32:56Will we need tuning/fiddling support?
32:56Will we need tuning/fiddling support?
32:56Will we need tuning/fiddling support?
36:40Let's start building the debug system
36:40Let's start building the debug system
36:40Let's start building the debug system
38:05The old debug cycle counters were lousy on purpose
38:05The old debug cycle counters were lousy on purpose
38:05The old debug cycle counters were lousy on purpose
43:00Improving the interface of the cycle counters
43:00Improving the interface of the cycle counters
43:00Improving the interface of the cycle counters
43:27Abusing constructor/destructor pairs to achieve that better interface
43:27Abusing constructor/destructor pairs to achieve that better interface
43:27Abusing constructor/destructor pairs to achieve that better interface
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
54:49We shouldn't need to store values anywhere to make paired calls at the beginning and end of a frame
57:11"I just kind of ruined The Variable"α
57:11"I just kind of ruined The Variable"α
57:11"I just kind of ruined The Variable"α
1:01:03Review of the inner workings of the new cycle counter interface
1:01:03Review of the inner workings of the new cycle counter interface
1:01:03Review of the inner workings of the new cycle counter interface
1:02:15Testing that the code still runs after today's changes
1:02:15Testing that the code still runs after today's changes
1:02:15Testing that the code still runs after today's changes
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:03:22SoysauceTheKid Is there a way to determine how much overhead the debug takes when it is enabled? (Or is there such a thing as debug levels?)
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:04:48Psi9 Why not use a simple template? That would remove storing the ID, e.g. template<int ID> struct timed_block {};
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:05:50insofaras Would you agree that there is a similarity between test driven development and "writing the usage code first"?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:06:32ChaiLatteQuinoa Would you consider functional programming for game development?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:01ingenero How does the StartCycleCount get stored in the struct when you don't explicitly set StartCycleCount = StartCycleCountInit or something what you did with the ID?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:08:55jfcatalan Do you get Heisenbugs, where the bug happens only when there's not any debug code running?
🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?
β🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?
β🗪
1:10:18InstantKafka So the destructor gets called right when it goes out of scope?
β🗪
1:14:08abnercoimbre Community fight
🗪
1:14:08abnercoimbre Community fight
🗪
1:14:08abnercoimbre Community fight
🗪
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩
1:14:25Close this down and wrap up another episode of Handmade Hero
🗩