That was two goals on seven shots for the homeside.
Edmonton got the first powerplay of the game at 6:44 and Markstrom made an absolute 10-bell save-of-the-year candidate when he got his left leg out to stop a doorstep tip by Kailer Yamamoto on a slap pass from Duncan Keith.
There was a melee after the save and Evander Kane earned an extra two minutes leading to some 4-on-4 action and then what would have been 1:44 of Flames man-up time.
The box started filling up after that, though, with more 4-on-4 and then more than a minute of Edmonton PP time.
Mikael Backlund had a dandy of a chance after Yamamoto spun and fell trying to exit the Oilers zone, the Flames centre grabbing the puck and skating in alone but losing the handle as he tried to deke Smith.
Edmonton got on the board with 6:22 left in the first after a long shift in Calgary's zone, Connor McDavid feeding it to Keith as he skated in from the point and found twine with a low shot.
The Oilers thought they tied it with three and change left in the frame after a scramble in the Flames crease, the red light coming on but the official waiving it off as he had lost sight of the puck. It was reviewed and the call stood.
Markstrom made a handful of big stops as Edmonton pressed to finish out the first.
The Oilers started the second with 1:09 of powerplay time and right as it ended, Edmonton was called for too many men.
Toffoli cashed in, scoring at 2:04 off a great feed from Lindholm. However, after two more offsetting minors, the Oilers looked to get one back some 30 seconds after, Markstrom making a save on McDavid but Leon Draisaitl backhanding the rebound in. Flames head coach Darryl Sutter challenged citing goaltending interference by the Oilers captain and after review, it was overturned keeping it 3-1.