A strong morning from England's bowlers put the visitors in control after Ben Foakes reached his first test 100.
Resuming on 87 not out, Foakes reached his century after 200 balls before England were eventually bowled out for 342.
James Anderson and Sam Curran were good with the new ball, taking a wicket each before the spinners took control. Early wickets for Jack Leach and Moeen Ali ensured England had Sri Lanka 42-4 at lunch.
Some middle-order resistance briefly halted England's charge, but England's bowling attack will have been pleased with their work having bowled Sri Lanka out for 203.
England then survived a tricky little session before the close of play to finish the day 38-0, leading by 177.
England's perfect morning
Leach fell early on for 15 as he edged Dilruwan Perera to slip to give the Sri Lanka man his five-wicket haul, but Foakes carried on from his work yesterday, eventually reaching his century as he punched Suranga Lakmal back down the ground for four.
Foakes eventually fell shortly after trying to take Lamal over extra cover but he could only find Dhananjaya de Silva in the deep to bring the England innings to an end with 342 on the board.
It was then the England bowlers time to shine. As he so often does, Anderson set the tone striking with just his second delivery. Dimuth Karunaratne knicked behind and despite a review from the Sri Lankan opener, he was sent on his way with a clear spike on Ultra-Edge.
Curran was the next man to get in the wickets, he trapped Kaushal Silva plumb in front, the opener being dismissed for just one.
Leach came into the attack and was on the mark immediately and was aptly rewarded as Kusal Mendis edged to slip where Ben Stokes took a sharp catch low to the ground.
Ali then topped off the perfect start for England as he bowled de Silva round his legs for 14 leaving Sri Lanka reeling at the break with the score just 42-4.
Sri Lanka's middle order puts up a fight
Angelo Mathews and Dinesh Chandimal came together after lunch and set about rebuilding the home side's innings.
They were rewarded for their efforts as they put on 75 runs together before Adil Rashid finally made the breakthrough as the injured Chandimal tried to run at the leg-spinner but was done by turn and bounce leaving Foakes to complete a simple stumping.
Having made his fifty before tea, Ali then got the better of Mathews as he found his glove and the ball looped to Keaton Jennings at short leg.
Niroshan Dickwella came to the crease and was entertaining but couldn't truly trouble England as he went for 28 driving Ali to the diving Jos Buttler at short cover.
Ali then removed Akila Dananjaya for a duck as he feathered behind where Foakes continued his stunning debut taking a good catch. Leach got his second as Perera drove to Buttler again at extra cover for 21.
Rangana Herath was welcomed to the crease with a guard of honour from England, but he wouldn't stay for long however as he was left not-out for when Lakmal top-edged Rashid to Anderson. Sri Lanka were bowled out for 203, trailing England by 139.