South Africa pacers Lutho Sipamla and Wiaan Mulder claimed two wickets each to skittle Sri Lanka for 180 as the hosts wrapped up an innings and 45 runs victory on day four of the first Test in Centurion.
Sri Lanka resumed their second innings, trailing behind South Africa's handsome 241-run lead by a significant margin of 176 runs and two batsmen back in the hut.
Their hopes of saving the Test virtually over when intimidating opener Kusal Perera perished for an impressive score of 64 on a lively pitch assisting seam bowlers.
Perera, who was the hero of Sri Lanka's stunning one-wicket win last year in Durban, batted well for his fifth half-century as he adopted a positive approach and readily punished bowlers straying from their lines.
Perera was removed courtesy of a snorter from Anrich Nortje as the ball viciously leapt outside off-stump. The umpired gave a not-out verdict, which was overturned on review with replays showing the ball faintly tickling the bat.
Throughout the match, Sri Lanka were troubled by frequent injury blows to their bowling attack while they missed out on the services of all-rounder Dhananjaya de Silva in their second innings.
De Silva's injury concern poses a genuine problem to their preparations for the home series against England that begins on January 14.
In contrast to Sri Lanka's dynamic batting performance in the first innings that enabled them to post 396, they succumbed to the scoreboard pressure in their second outing on the 22 yards strip.
Mulder, who showed his brilliant control over the ball in the first innings, generated movement off the surface to create numerous chances on the fourth morning.
His potent seam bowling accounted for the prized scalp of Dinesh Chandimal before Niroshan Dickwella edged one to wicketkeeper Quinton de Kock.
For some time, Dasun Shanaka offered solid defensive play in his 35-ball stay at the crease but he became Sipamla's first victim on day four when he popped up a catch to de Kock.
South Africa required just three more wickets for a comprehensive win following lunch and thus opted to introduce spinner Keshav Maharaj and part-timer Aiden Markram in a bid to raise their slow over-rate.
This ploy fed Wanindu Hasaranga a series of boundaries, allowing him to rack up a Test fifty on debut in only 46 balls.
Hasaranga's swift knock was ultimately cut short by Sipamla, spelling the end of Sri Lanka's innings after 46.1 overs.