In a medium saucepan, combine the whole milk, heavy cream, granulated sugar, cocoa powder, cornstarch, and salt. Whisk together until smooth.
Place the saucepan over medium heat and cook, stirring constantly, until the mixture begins to thicken and bubble, about 5-7 minutes.
In a separate bowl, whisk the egg yolks. Gradually add a small amount of the hot chocolate mixture to the egg yolks, whisking constantly to temper the eggs.
Pour the tempered egg yolk mixture back into the saucepan with the remaining chocolate mixture. Continue to cook, stirring constantly, for another 2-3 minutes until thickened.
Remove from heat and stir in the vanilla extract and semi-sweet chocolate chips until melted and smooth.
Pour the budino into individual serving cups or bowls. Cover with plastic wrap, pressing it directly onto the surface to prevent a skin from forming.
Refrigerate for at least 4 hours or until set.
Serve chilled, topped with whipped cream and chocolate shavings if desired.