It was so one-sided that there was talk of a third-innings declaration in the fifth session of the match.
Jasprit Bumrah completed his first five-for at home, Rishabh Pant casually knocked off the fastest Test fifty by an Indian, and Shreyas Iyer scored his second half-century of the match to bury Sri Lanka under a mountainous deficit.
Five-and-a-half hours of Sri Lanka’s bowling – improved but still lacking the control needed to exploit helpful conditions – were bookended by incisive half-hour spells of Indian bowling, which brought them five wickets.
The first half hour took care of the four remaining Sri Lankan first-innings wickets; the last, under lights with a new pink ball, accounted for Lahiru Thirimanne in the second innings.
Sri Lanka must have started the day hoping to keep India out in the middle for some time, but they didn’t even last six overs.
It was long enough for Bumrah to complete a five-wicket haul in a fifth different country.
He preyed on the short-ball weakness of Lasith Embuldeniya before following Niroshan Dickwella with a short ball that took his glove.
At the other end, R Ashwin took out two wickets with carrom balls.
Asked to bat for 35 minutes before stumps, Sri Lanka faced the wrath of Bumrah again.
Thirimanne, who fell to his awayswinger in the first innings, got a full, fast inswinger this time, three ball into the innings.
They have lost 31 wickets in 167.5 overs in this series, but Sri Lanka’s batting has been made to look much worse than it is by India’s bowlers; their five-man attack for this Test match has 1051 wickets at a combined average of 24.13.
Give them conditions where the ball is seaming and swinging in the evening session, and turning and going up and down in the afternoon, and it’s your worst nightmare.
All you can hope for is for your bowlers to give you half a chance, but Sri Lanka’s bowlers continued to waste the conditions.
They continued to either overpitch or let the batters play risk-free shots off the back foot.
So while there were unplayable deliveries every now and then, Karunaratne couldn’t afford too many catching men.
India’s batters did their bit with a positive approach.
Rohit Sharma’s counter to the conditions was the reverse-sweep to go with the sweep.
He played three reverse-sweeps in this innings of 46; in the rest of his international career, he has played only seven.
Hanuma Vihari was quick with his footwork in his second score in the 30s: he would press right forward, but drop back the moment the ball was even a touch short.
Iyer did the same but with the added gift of boundary-hitting at will.
And then there was Pant, who took India’s attacking approach to its extreme.
The fear he strikes in the hearts of bowlers and captains showed in how he walked out to a deep square leg, a deep midwicket and a long-on on this pitch.
He didn’t care, though.
The second ball he faced, he jumped out of the crease and launched Praveen Jayawickrama over deep midwicket.
It didn’t matter that Jayawickrama was in the middle of an improved display despite an injured knee.
It was he who bowled the shooter to get Virat Kohli out this time.
Pant was not going to wait for any such misbehaviour.
Do unto others before they do unto you.
Dhananjaya de Silva takes the ball away from the left-hander, but Pant still hit him for a four and a six to reach 20 off seven.
The sixes took him to No. 8 on the six-hitters’ list for India.
There was nothing frenetic about the Pant innings. A reverse-sweep here, a lap sweep there; a bowling error now, a charge to a seam bowler then.
The fifty came up with a pristine cover drive all along the floor against the turn just as Jayawickrama pitched too close to him.
It was the 28th ball he faced, two fewer than Kapil Dev took in setting the previous India record.
When he tried to celebrate it with a six and ended up skying one, Pant left India with a lead 327 just before the dinner break.
A declaration at that point was not entirely out of question, especially knowing that the night session brought the Indian quicks into play on the first evening too.
However, India decided to bat on.
Iyer used the time to once again ease his way to within striking distance of a century, a landmark he missed in the first innings as he ran out of partners.
Once Iyer got out lbw to one that didn’t turn as much as expected, India let Mohammed Shami have some fun with the bat before putting Sri Lanka in again.
Following that Bumrah strike in the first over, Ashwin nearly had Kusal Mendis with the last ball of the day, but the bat-pad just lobbed wide of short leg.
Just one final reminder of what awaits the batters on the third afternoon.