Faits :
A.
A._, né en 1965, travaillait comme maçon au service de B._ SA. A ce titre, il était assuré contre le risque d'accident auprès de la Caisse nationale suisse d'assurance en cas d'accidents (CNA). Le 15 janvier 2014, il a été victime d'un accident de travail, lors duquel il s'est blessé au niveau de la jambe droite et du pied gauche. La CNA a pris en charge le cas.
Par décision du 28 novembre 2016, confirmée sur opposition le 16 janvier 2017, la CNA a alloué à l'assuré une rente d'invalidité fondée sur un taux d'invalidité de 11 % à compter du 1 er octobre 2016.
B.
A._ a déféré la décision sur opposition à la Cour des assurances sociales du Tribunal cantonal du Valais, en demandant l'octroi d'une rente entière d'invalidité. Par jugement du 20 août 2019, la cour cantonale a très partiellement admis le recours, a annulé les décisions de la CNA des 28 novembre 2016 et 16 janvier 2017 et a mis l'assuré au bénéfice d'une rente d'invalidité fondée sur un taux d'invalidité de 15 % dès le 1 er octobre 2016.
C.
La CNA forme un recours contre ce jugement dont elle demande l'annulation, en concluant à la confirmation de sa décision sur opposition du 16 janvier 2017.
L'intimé conclut au rejet du recours. La cour cantonale et l'Office fédéral de la santé publique ont renoncé à se déterminer.

Considérant en droit :
1.
Le recours est dirigé contre un arrêt final (<ref-law>) rendu en matière de droit public (<ref-law>) par une autorité cantonale de dernière instance (art. 86 al. 1 let. d LTF). Il a été déposé dans le délai (<ref-law>) et la forme (<ref-law>) prévus par la loi. Il est donc recevable.
2.
Le litige porte sur le taux d'incapacité de gain ouvrant le droit à une rente d'invalidité à compter du 1 er octobre 2016, singulièrement sur le revenu sans invalidité déterminant pour la comparaison des revenus prescrite à l'<ref-law> (RS 830.1).
La procédure portant sur l'octroi de prestations en espèces de l'assurance-accidents, le Tribunal fédéral n'est pas lié par les faits établis par la juridiction précédente (<ref-law>).
3.
Pour déterminer le revenu sans invalidité, il faut établir ce que l'assuré aurait, au degré de la vraisemblance prépondérante, réellement pu obtenir au moment déterminant s'il n'était pas devenu invalide. Le revenu sans invalidité doit être évalué de la manière la plus concrète possible. C'est pourquoi il se déduit en principe du salaire réalisé en dernier lieu par l'assuré avant l'atteinte à la santé, en posant la présomption qu'il aurait continué d'exercer son activité sans la survenance de son invalidité (<ref-ruling> consid. 3.3.2 p. 30; <ref-ruling> consid. 4.3.1 p. 224 et la référence). Le salaire réalisé en dernier lieu par l'assuré comprend tous les revenus d'une activité lucrative (y compris les gains accessoires, la rémunération des heures supplémentaires effectuées de manière régulière) soumis aux cotisations AVS (arrêt 8C_449/2015 du 6 avril 2016 consid. 3 et la référence).
4.
4.1. Dans la décision sur opposition, la recourante a déterminé le revenu sans invalidité en tenant compte d'un salaire horaire de 28 fr. 45, de 2174 heures de travail par an et du treizième salaire. Aussi a-t-elle considéré que l'intimé aurait perçu en 2016 un revenu sans invalidité de 67'003 fr., s'il avait pu continué à travailler à plein temps comme maçon au service de B._ SA.
4.2. Pour leur part, les juges cantonaux ont calculé le revenu sans invalidité sur la base du salaire horaire de 28 fr. 45 augmenté de 2 fr. 36 pour tenir compte du 13 e salaire (8,30 %) et d'une durée de travail de 42 heures hebdomadaires multipliées par 52 semaines par an, soit 2184 heures annuelles. A ce dernier propos, la cour cantonale a relevé que l'employeur avait annoncé 2174 heures lors d'une rencontre avec les parties le 19 octobre 2016 puis donné un autre chiffre, soit 2112 heures, lors d'un téléphone du 28 octobre 2016. Elle a donc considéré qu'il convenait plutôt de se reporter aux indications figurant dans la déclaration de sinistre du 29 janvier 2014. Enfin, les premiers juges ont ajouté au montant obtenu - de 67'289 fr. 04 ([28,45 + 2,36] x 42 x 52) - des indemnités de pause à hauteur de 2736 fr. Le revenu sans invalidité s'élevait ainsi à un total de 70'025 fr., de sorte que la comparaison avec un revenu d'invalide de 59'658 fr. aboutissait à un taux d'invalidité de 14,8 %, arrondi à 15 %.
5.
5.1. Dans son recours, la recourante reproche aux juges cantonaux d'avoir ajouté les 2736 fr. à titre d'indemnités de pause, considérant qu'ils en ont tenu compte à double. Elle fait valoir à cet égard qu'en Valais, les partenaires sociaux du secteur principal de la construction ont convenu de retenir un nombre d'heures de travail annuelles de 2174, comprenant 62 heures correspondant aux indemnités de pause. Ces dernières seraient donc déjà comprises dans le nombre d'heures annuelles. Partant, la recourante soutient qu'elle s'était basée à juste titre sur la "convention collective valaisanne de la construction (horaire 2016) ".
5.2. On ne saurait en l'espèce reprocher aux premiers juges de s'être fondés sur le nombre d'heures hebdomadaires de travail fixé par l'employeur plutôt sur la durée annuelle de travail selon la convention collective de travail citée par la recourante (dans sa teneur en vigueur en 2016), qui ne figure d'ailleurs pas dans les pièces versées au dossier de la procédure cantonale. En effet, le revenu sans invalidité doit être évalué de la manière la plus concrète possible (supra consid. 3), y compris lorsque le total des heures annuelles de travail effectivement accomplies est supérieur à la durée annuelle de 2112 heures de travail prévue dans la convention collective de travail. En outre, il ressort des décomptes de salaire figurant au dossier que les indemnités de pause étaient versées en sus de la rémunération de base, à savoir la rémunération calculée sur la base du salaire horaire, et qu'elles étaient rémunérées séparément à raison de 8 fr., puis 8 fr. 50, par jour ou unité (cf. décomptes de salaire de décembre 2013, janvier 2014, juin 2015, octobre à décembre 2016). Dans ces conditions, il n'est pas possible de retenir, à l'instar de la recourante, que les 2736 fr. ajoutés par les premiers juges - correspondant au montant annuel effectivement versé à l'intimé à titre d'indemnités de pause - étaient déjà inclus dans le revenu annuel calculé sur la base du salaire horaire. Il s'ensuit que le grief est mal fondé et doit être rejeté.
6.
La recourante, qui succombe, supportera les frais judiciaires (<ref-law>) et versera à l'intimé une indemnité de dépens réduite, dès lors que celui-ci ne s'est pas véritablement déterminé sur les arguments du recours (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 800 fr., sont mis à la charge de la recourante.
3.
La recourante versera à l'intimé la somme de 1000 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties, à la Cour des assurances sociales du Tribunal cantonal du Valais et à l'Office fédéral de la santé publique.
Lucerne, le 28 février 2020
Au nom de la Ire Cour de droit social
du Tribunal fédéral suisse
La Juge présidant : Heine
La Greffière : Castella