Galle: India captain Virat Kohli completed his 17th Test ton on Saturday and then let his bowlers demolish injury-hit Sri Lanka to claim a 304-run victory inside four days in the first Test.

It was India's biggest winning margin in Sri Lanka and showed just why they are the top-ranked Test side in the world.

Set a daunting 550 to win, Dimuth Karunaratne made 97 for Sri Lanka, but after his departure in the final session their hopes sank in Galle.

With all-rounder Asela Gunaratne and stand-in captain Rangana Herath unable to bat through injury, Sri Lanka called it a day with eight wickets down and the total on 245.

India's captain Virat Kohli leaves the ground with his teammates after their win in the first Test. AP

Ravindra Jadeja and Ravichandran Ashwin each took three wickets for the dominant tourists.

Kohli modestly called it a "clinical performance" after his side scored 600 in the first innings and then restricted Sri Lanka to 291.

India lost the opening match in Galle two years ago, but went on to take the series 2-1 and then return to number one in the Test rankings in the following months.

"We are a more experienced side now. We are playing more consistent cricket and that shows," Kohli said after the big win.

The captain reached an unbeaten 103 at the start of the day before declaring India's second innings on 240-3. He then gave his bowlers the job of grinding down the home side.

Karunaratne's stubborn 208-ball innings took him past 2,500 career Test runs but there was not enough support at the other end.

Mohammed Shami forced Karunaratne's fellow opener Upul Tharanga to play the ball onto his stumps for 10. Danushka Gunathilaka went for two, giving an easy catch to Cheteshwar Pujara at short square leg two overs later.

Kusal Mendis made a promising 36 before he made the thinnest of touches to wicketkeeper Wriddhiman Saha. The TV umpire gave it out after a Kohli appeal.

Former Sri Lanka skipper Angelo Mathews, with two to his name, gave the easiest of catches to Hardik Pandya as he skipped down the wicket looking for a big hit.

Wicketkeeper Niroshan Dickwella made 67 and his 101 partnership with Karunaratne raised Sri Lankan hopes for a while, before he was also caught behind.

That brought in Dilruwan Perera, top scorer in Sri Lanka's first innings with 92. But Karunaratne paid the price for a rare rash shot and was bowled by Ashwin, who is now on 275 Test wickets.

Nuwan Pradeep and Lahiru Kumara went within three overs, leaving Dilruwan stranded on 21.

India's brilliant first innings -- in which Shikhar Dhawan scored 190 and Pujara 153 -- broke Sri Lanka on the first day.