Sri Lanka lost eight wickets in a disastrous final session as England took a 96-run first-innings lead in the third and final cricket Test on Saturday.
Legspinner Adil Rashid (5-49) and all-rounder Ben Stokes (3-30) helped to bowl Sri Lanka out for 240 after the hosts went to tea on 183-2 at Sinhalese Sports Club.
Play was stopped early on Day 2 due to bad light with England 3-0 in their second innings after four overs as openers Rory Burns and Keaton Jennings extended the lead to 99.
England scored 336 in their first innings.
A 142-run stand for the second wicket between Dimuth Karunaratne (83) and Dhananjaya de Silva (73) had put Sri Lanka in control, but Rashid dismissed both batsmen either side of tea as England suddenly came back into the match.
Rashid finished with his career-best test figures and was well backed up by Ben Stokes, who used the short ball to good effect.
"The plan for me was to do what I've been doing — be attacking, bowl my variations, try and get the ball spinning both ways, get the batsmen playing certain shots," Rashid said. "It worked out perfectly, Stokes at one end bowling nice and aggressive and me at the other end mixing it up, bowling my variations. It just happened very quickly."
Both players bowled unchanged to trouble Sri Lanka and there was some excellent catching by England with Jennings at short leg and wicketkeeper Ben Foakes being the standouts.
Jennings took four catches at short leg while Foakes had three catches as England chased a 3-0 series sweep.
"(Jennings) reads the game well. He's alert. He practices hard in the morning and he gets his rewards," Rashid said. "It's nice having him in there for the spinners."
Sri Lanka's best session in the series came in the afternoon as De Silva and Karunaratne put on the highest partnership in the series so far.
De Silva was dismissed four overs before tea when he flicked one straight to Jennings at short leg. The same combination brought Karunaratne's downfall in the first over after tea and Sri Lanka failed to stop the slide.
Karunaratne was earlier dropped on two by captain Joe Root at first slip while De Silva was put down on 42 by Root in the same position.
Karunaratne was hit on the chest by a rising delivery from Stokes in the last over before tea. The batsman needed medical attention but carried on.
Stokes bowled an unchanged spell of 10 overs either side of tea and claimed the prize wicket of Angelo Mathews (5) as Foakes dived forward to take a good catch.
Niroshan Dickwella (5) and Dilruwan Perera (0) also were caught behind off Stokes as Sri Lanka lost wickets in a rush.
From 173-1, Sri Lanka were bowled out for 240, collapsing from 222-5 to 224-9.
"Our batting was very weak. But even more than that they bowled really well with a plan," De Silva said. "They dried up the boundaries and bowled aggressively. If we had played to a better plan, we wouldn't have crashed like this."
England have an insurmountable 2-0 lead in the three-match series. They won the first Test in Galle by 211 runs and the second game at Kandy by 57 runs.