India rammed home their day-one advantage with a dominant performance again on day two in Galle
Match Report:
ScorecardMathews resists as India take control
Paceman Mohammed Shami picked up two wickets in the same over and Umesh Yadav got rid of opener Dimuth Karunaratne after India posted a commanding 600 all out in their first innings.
Former captain Angelo Mathews was not out on 54 with Dilruwan Perera on six when stumps were drawn for the day, with Sri Lanka still trailing by 446 runs with five wickets in hand.
Indian batsman Cheteshwar Pujara, who struck a solid 153, said he was pleased that India had lived up to its billing as the number one Test side in the world.
"We would like to maintain that standard. We have scored enough runs, and we've got five wickets today. We are very well poised at this stage.
"I think the key for us, even in the last season, was that we've bowled really well. Our bowlers are bowling good lines and lengths," he said referring to India's 10 wins in the last 13 Tests.
Sri Lanka opener Upul Tharanga struck a defiant 64 off 93 balls but was run out thanks to quick fielding by Abhinav Mukund.
Mukund also took a fine diving catch to send back Niroshan Dickwella (eight) and reduce the hosts to a shaky 5-143.
Yadav gave his side an early breakthrough after the Indian lower-order batsmen scored at a quick pace despite losing wickets at regular intervals.
Yadav had Karunaratne trapped leg before and although the batsman went for a review, the decision was upheld after replays showed the ball pitching on the middle stump.
Shami then dismissed debutant Danushka Gunathilaka for 16 and Ajantha Mendis for a duck in the space of four balls.
Mathews, who quit as captain after Sri Lanka's recent one-day series defeat to Zimbabwe at home, tried to steady the innings and had faced 91 deliveries so far.
Earlier, paceman Nuwan Pradeep clinched his maiden five-wicket Test haul, putting the brakes on India's free scoring.
Pradeep (6-132) dismissed Cheteshwar Pujara for 153, triggering a batting collapse which saw the tourists lose four wickets in a lively first session after resuming the day at 399-3.
"Though I didn't start well, I thought I got better as I kept bowling. I got some rhythm," said Pradeep who last played a Test in January.
"We came to the match with a plan. But the way the match went and given the state of the pitch, we had to change our plans.
"A lot of our plans didn't work... But cricket is like that, at least we could get them out for 600."
Pujara hit 13 fours in his 265-ball knock to match his previous Test best of 153 against South Africa at Johannesburg in 2013.
Hardik Pandya struck a half-century on debut as India's last two wickets added a quickfire 83 runs in 71 balls to lift the side from 8-517.
Shami hit Rangana Herath for three sixes while Pandya lofted Pradeep for as many sixes in an attacking batting display by India's lower order batsmen.
Ajinkya Rahane (57) looked solid but was sent back to the pavilion after Karunaratne dived for a low catch on his right off fast bowler Lahiru Kumara.
Ravichandran Ashwin and Wriddhiman Saha struck back with a sixth-wicket stand of 59, but India's counter-attack unravelled as Sri Lanka dismissed the duo in the space of six balls.
Ashwin (47) fell short of a half-century while Saha (16) became the first victim of skipper Herath (1-159).
Things got worse for Sri Lanka, with doctors confirming that allrounder Asela Gunaratne was out for the remainder of the Test series with injury.
Gunaratne suffered multiple fractures on his left thumb while trying to take a catch off Shikhar Dhawan on the first day of the match Wednesday.
"Medical experts have indicated Gunaratne will be out of action for a minimum of 6-8 weeks, and will be returned to full mobility under a strictly managed rehabilitation regime over the period," it said in a statement.