Sri Lanka lead Australia by 87 runs with just three wickets intact after the hosts ripped through their middle order in the final session on day three in Sydney.
The tourists had threatened a fightback after the Aussies had declared with a lead of 138 with Matthew Wade reaching a first Test century on home soil.
Sri Lanka went into tea 130-1 - only eight runs adrift - before they collapsed to 225-7 with all the home bowlers chipping in.
Michael Clarke brought the batsmen in half an hour before lunch and was soon rewarded when Tillakaratne Dilshan edged Mitchell Johnson (2-19) to third slip.
Dimuth Karunaratne and Mahela Jayawardene then took charge with an unbeaten 106 stand, the former reaching 83 after being dropped by Wade off spinner Nathan Lyon just after he passed 50.
But Karunaratne could add only a further two runs after the resumption as Sri Lanka's hopes tumbled with a flurry of wickets that, at one stage, saw them lose four for 23.
Jackson Bird had Karunaratne caught behind before Lahiru Thirimanne hooked Johnson to fine leg and Thilan Samaraweera recklessly bounded down the wicket at Lyon only to sky a chance before he had scored.
Angelo Mathews was run out following confusion with Jayawardene (60), and some excellent fielding by David Warner at mid-wicket, before the skipper offered an edge behind soon after off the tireless Peter Siddle.
It was left to the tail to build the small lead, but Dhammika Prasad nicked to Wade off Mitchell Starc.
Dinesh Chandimal (22 not out) and Rangana Herath (7no) remained thereafter, to build toward a 100-run advantage, although they plenty more work to do to tomorrow if Sri Lanka are to set a testing fourth-day chase.
Wade had earlier guided the Aussies from their overnight score of 342-6 to 432-9 declared, receiving crucial support from Siddle who struck four boundaries in a plucky 38.
Last man Bird stuck around long enough for Wade to pass three figures, finishing on 102 before Clarke's somewhat surprise decision to declare.
Who was the best cricketer of 2012?