Joe Root posted his highest score as captain of England before Sri Lanka mustered some overdue resistance to frustrate the tourists on day three of the first Test in Galle.

Skipper Root progressed from his overnight 168 not out to make 228 in England's 421 all out, which gave them a 286-run first innings lead after Sri Lanka's pitiful 135 total.

Only once before has Root bettered that score for England, when he made 254 against Pakistan at Old Trafford five years ago.

On that occasion, England swept to a 330-run victory, and they may yet win this clash with Sri Lanka by a comfortable margin, but they found the going difficult for large parts of Saturday.

The hosts reached stumps on 156-2 to trim their deficit to 130 runs and, while England need not panic, they will hope to find more penetration with their bowling on Sunday.

England rattled on from 320-4 at the start of play until their final six wickets fell for 49 runs.

Asitha Fernando triggered that slump with the new ball when he had Jos Buttler caught behind for 30 and bowled Sam Curran next delivery.

Moments after Root brought up his fourth Test double century with a boundary through midwicket, he and Dom Bess got in a muddle that saw the junior partner run out without scoring.

Veteran off-spinner Dilruwan Perera (4-109) prised out Jack Leach and Mark Wood, before Stuart Broad, batting at 11, found the ropes from successive balls.

Root understandably looked to hit out but a heave at Perera meant a Test best would prove beyond him, the captain caught just inside the deep midwicket boundary.

Kusal Perera and Lahiru Thirimanne continued the Sri Lanka fightback as they put on 101 for the first wicket, before the former fell for 62, slashing at a wide delivery from Curran and finding Leach at third man.

Sri Lanka kept plugging away, Kusal Mendis avoiding what would have been a fifth successive duck before he fell for 15 in the closing moments of the day, Leach finding some turn and drawing a faint edge through to Buttler.