Dinesh Chandimal hit his maiden double century before Sri Lanka were bowled out for 554 in the second Test on Monday, with the hosts leading Australia by 190 runs.
Chandimal, who began day four on 118, finished unbeaten on 206 as he ran out of partners in the second session in Galle.
He smashed Starc for a four and two sixes to go past 200 runs as he leapt up in joy amid raucous applause from the home crowd.
Left-arm quick Mitchell Starc took four wickets while leg-spinner Mitchell Swepson took three to polish off the tail from one end.
The hosts resumed the day on 431-6 in response to Australia’s first innings total of 364 after opening batsman Pathum Nissanka was ruled out with Covid-19, becoming their sixth Sri Lanka player to get the virus during the past two weeks.
The overnight pair of Chandimal and Ramesh Mendis added 68 before Starc broke through.
Starc trapped Ramesh lbw for 29 in another inspired spell of bowling and nearly got debutant Maheesh Theekshana caught behind when the umpire gave it out but the batsman successfully reviewed.
Chandimal, who recorded his 13th Test hundred on Sunday, kept chipping away to reach 150 to applause from the crowd as he took the team to 499-8 at lunch.
He took on the opposition bowlers after lunch as he went past his previous best of 164.
Theekshana was bowled by skipper Pat Cummins and Starc rattled the stumps of Prabath Jayasuriya for nought, before Swepson got the final wicket.
Australia lead the two-match series 1-0 after a crushing opening win inside three days at the same venue.