Shikhar Dhawan smashed a career-best 190 during a brilliant Indian batting assault on the opening day of the first Test against Sri Lanka on Wednesday.

Dhawan struck 31 boundaries in a blazing 168-ball knock and Cheteshwar Pujara joined in with an unbeaten 144 to take the visitors to 399-3 at stumps.

The hosts toiled in the Galle field and suffered a major blow when all-rounder Asela Gunaratne broke his thumb trying a catch. He is expected to miss the rest of the three-Test series.

Dhawan and Pujara put on 253 for the second wicket -- India's highest second-wicket stand against Sri Lanka -- after skipper Virat Kohli won the toss and chose to bat under an overcast sky.

Kohli himself went for three when he tried to pull a chest-high delivery from paceman Nuwan Pradeep (3-64). He nicked behind instead to Niroshan Dickwella.

Pradeep's appeal was initially turned down but the decision was overturned by the TV umpire when replays showed the ball had grazed Kohli's bat.

It was a blow but no major problem for India as Dhawan took the opening day honours, celebrating his return to Test cricket with a breathtaking array of shots.

It was the second time he had scored a century in a single Test session, having made 187 on his debut against Australia -- including 106 in one session.

Dhawan scored 126 off just 90 balls between lunch and tea, leaving Virender Sehwag as the only other Indian batsman to score more runs in a single session.

The 31-year-old got a standing ovation from teammates in the dressing room upon completing his fifth Test century.

The century was especially sweet for Dhawan, who was made to sit out of India's last 11 Tests following a dip in form.

Dhawan's last Test century was at the same venue, during India's 2015 tour of the island nation. India lost the Galle match but went on to win the remaining two games to pocket the series 2-1.

Dhawan was so close to a maiden double century but gave a simple catch off Pradeep to Angelo Mathews at mid-off.

The hosts squandered a golden chance to dismiss Dhawan in his thirties when Gunaratne dropped the batsman at second slip. He broke his thumb on his already heavily strapped left wrist.

Medics rushed to attend to Gunaratne, who was writhing in pain before walking off the ground. Gunaratne was “rushed into Colombo for specialist evaluation”, said the Sri Lankan board.

Dhawan toyed with the toothless Sri Lankan attack, once hitting new skipper Rangana Herath for two boundaries on the trot.

But the Indians had been given an early jolt when Dhawan's opening partner Abhinav Mukund edged Pradeep behind to Dickwella in the eighth over.

Mukund, who opened the batting after Lokesh Rahul was ruled out with illness, made 12.

India handed a Test cap to all-rounder Hardik Pandya and Sri Lanka brought in batsman Danushka Gunathilaka for his debut.