Ravichandran Ashwin took two wickets after making a half-century as India inflicted more torment on Sri Lanka on day two of the second Test in Colombo.
Cheteshwar Pujara (133) and Ajinkya Rahane (132) put India in a strong position at 344-3 at stumps on day one and the tourists piled on the runs before Virat Kohli declared on 622-9 on Friday.
Ashwin, Wriddhiman Saha and Ravindra Jadeja all passed 50 as Sri Lanka - missing hamstring injury victim Nuwan Pradeep - were made to suffer in the field at the Sinhalese Sports Club.
All-rounder Ashwin did further damage by getting rid of openers Upul Tharanga and Dimuth Karunaratne to reduce Sri Lanka to 50-2 at the close, trailing by a mammoth 572 runs.
Sri Lanka went out for the morning session without Pradeep, who is expected to bat, but were buoyed by the early dismissal of the prolific Pujara, Dimuth Karunaratne taking his first Test victim after a successful review for leg before in the second over of the day.
Malinda Pushpakumara (2-156) also had a maiden Test scalp when he deceived Rahane, who was stumped to end a 222-ball knock which yielded 14 boundaries.
The entertaining Ashwin (54) played some expansive shots and brought up his half-century with a swagger by launching Rangana Herath for six over long-off after lunch, but the spinner responded by cleaning him up with the next ball.
At 451-6 Sri Lanka would have been hopeful of wrapping up the innings in quick time, but Saha (67) and Jadeja (70 not out) combined for an eighth-wicket stand of 72.
Saha showed his liking for spin, sweeping and using his feet expertly, while the dangerous Jadeja struck Herath for two sixes in as many balls as India amassed another huge total.
Wicketkeeper-batsman Saha was stumped off Herath, who finished with figures of 4-154 after also ending a cameo from Mohammed Shami, but not before the paceman had struck him over the ropes twice.
Jadeja hit Herath for another six prior to Kohli ending the innings with 20 overs for Sri Lanka to face in a testing passage of play stumps were drawn.
Ashwin struck in the second over of the hosts' reply, courtesy of a sharp catch from KL Rahul at short leg, to send Tharanga on his way without scoring and Karunaratne (25) was taken by Rahane at first slip.
Kusal Mendis and captain Dinesh Chandimal hung in there, but they will resume on Saturday facing a major task to try and frustrate India as the top-ranked side smell a series victory.