At tea on the third day, Sri Lanka were 162 for three -- still a huge 235 runs behind England's first innings 498 for nine declared, which featured Moeen Ali's Test-best 155 not out.
But at least they had stopped the rot after becoming the first side since New Zealand in England back in 1958 to be bowled out for under 120 in three successive Test innings after being dismissed for 101 in reply to England's commanding first innings score.
But come Sunday's tea interval, Silva was 57 not out and Angelo Mathews, the Sri Lanka captain, 35 not out, with their unbroken fourth-wicket stand so far worth 62.
Sri Lanka's first-innings batting raised questions over whether a schedule with just two warm-up fixtures against Second Division county sides was sufficient preparation for a Test campaign early in an English season.
More From This Section
The fact their top order then appeared, at last, to be adjusting to batting under grey skies in the second innings -- albeit some two-thirds of the way through the series -- emphasised the point.
But the final ball of the same over saw Anderson square up Mendis (26) with a good length delivery that cut away and wicket-keeper Jonny Bairstow held a simple catch.
Mendis's exit brought in Lahiru Thirimanne, promoted after his first-innings 19.
Thirimanne hit off-spinner Ali for two fours in three balls.
But Ali had the last laugh, beating the left-hander on the outside edge with a classic off-break that bowled Thirimanne for 13.
Sri Lanka's 100 for three almost became 100 for four when Mathews, on nought, edged Anderson just short of Root in the slips.
Mathews then clipped Stuart Broad through mid-wicket for four and cut him to the point rope before he took the tourists to 150 with a slogged six off Ali.
Sunday saw Sri Lanka, 91 for eight overnight in their first innings, soon dismissed for 101.
Just three legitimate balls into Sunday's play, paceman Broad had tailender Suranga Lakmal caught behind for a duck.
Thirimanne was last man out when he skied Anderson to point.
Broad took four for 40, Woakes -- only playing this match because fellow all-rounder Ben Stokes was injured -- three for nine and Anderson three for 36.