Dimuth Karunaratne's century provided the platform for Sri Lanka to build a commanding 411-run lead over Zimbabwe by the end of the fourth day of the first Test.
The tourists resumed in Harare 169 ahead on 5-0, having survived the three overs before stumps the previous day.
Karunaratne had made a half century in Sri Lanka's first-innings 537, and on this occasion he turned a good start into a score of real substance as Zimbabwe continued to chip out wickets at the other end.
The opener made 110 from 173 balls, his fourth Test hundred including seven fours, while a fifth-wicket stand of 94 with Dhananjaya de Silva (64) helped the tourists to 247-6 before bad light and rain brought a premature end to proceedings early in the final session.
Debutant Carl Mumba (4-50) was the pick of the Zimbabwe bowlers, but Sri Lanka's dominant position means the hosts will be tasked with a tough rearguard action on day five to avoid going 1-0 down in the two-Test series.
Karunaratne lost opening partner Kaushal Silva early on, chopping on from Mumba for seven, before Kusal Perera (17) was held at slip off Malcolm Waller (1-17).
Mumba removed Kusal Mendis (19) on the stroke of lunch, and soon after the resumption the same bowler had Upul Tharanga - centurion in the first innings - caught behind for just one.
De Silva finally provided Karunaratne with some support, seeing his partner to three figures before the opener pushed a soft caught and bowled chance back to Chris Mpofu (1-42).
After bringing up his own fifty from 65 balls, De Silva perished driving Mumba to point, with the weather permitting just four more deliveries.