Faits :
A.
A.a. A._, né en 1964, a travaillé comme nettoyeur pour le compte de B._ SA jusqu'au 31 décembre 2013. Ensuite de son licenciement pour des motifs économiques, il s'est inscrit auprès de la Caisse de chômage Unia à Genève à partir du 1er janvier 2014. Dès le 13 juillet 2015, il a été engagé comme nettoyeur pour l'entreprise C._ SA, par un contrat de durée déterminée jusqu'au 18 septembre 2015 à un taux d'activité de 88 %. A ce titre, il était assuré auprès de la Caisse nationale suisse d'assurance en cas d'accidents (ci-après: CNA) contre le risque d'accidents.
Le 20 juillet 2015, alors qu'il se rendait à son travail à vélo, l'assuré a chuté et sa tête a heurté une automobile circulant en sens inverse. Il a subi un traumatisme crânien avec perte de connaissance, une fracture déplacée vers l'intérieur de l'os pariétal gauche, un hématome épicrânien pariétal gauche, une fracture comminutive de la tête du péroné gauche ainsi qu'une fracture au niveau occipital. La CNA a pris en charge le cas. Le 31 juillet 2015, l'assuré a subi une ostéosynthèse pour la fracture de son plateau tibial gauche. L'ablation du matériel d'ostéosynthèse a eu lieu le 24 août 2016. En raison de la mauvaise évolution du genou gauche, une prothèse totale du genou a été réalisée le 22 novembre 2017. En vue d'une réadaptation intensive et d'une évaluation multidisciplinaire, A._ a séjourné à la Clinique romande de réadaptation (CRR), à Sion, du 11 juillet au 8 août 2018.
A.b. Le 2 novembre 2018, A._ a été examiné par le docteur D._, spécialiste en chirurgie orthopédique et médecin d'arrondissement auprès de la CNA. Ce praticien a retenu que l'ancienne activité n'était plus exigible, mais qu'une activité professionnelle adaptée (réalisée essentiellement en position assise, tout en permettant quelques brefs déplacements, avec un port ponctuel de charges limitées à 5 kg, sans monter sur une échelle, sans devoir s'agenouiller, sans limitation au niveau des membres supérieurs) était envisageable à la journée entière, sans baisse de rendement. Le docteur D._ a également procédé à une évaluation de l'atteinte à l'intégrité et a estimé que celle-ci s'élevait à 35 %.
Par décision du 8 mai 2019, confirmée par décision sur opposition du 18 juillet 2019, la CNA a refusé d'octroyer une rente d'invalidité à l'assuré, au motif que la comparaison des salaires sans (53'690 fr.) et avec invalidité (60'968 fr. 70) ne faisait apparaître aucune perte de capacité de gain. Elle lui a également alloué une indemnité pour atteinte à l'intégrité de 35 %.
A.c. Le 21 janvier 2016, l'assuré s'était annoncé à l'Office cantonal de l'assurance-invalidité (ci-après: l'OAI) en raison des suites de l'accident. Par décision du 17 mai 2019, l'OAI lui a accordé une rente entière du 1er juillet 2016 au 31 janvier 2019 sur la base d'un taux d'invalidité de 100 %; cependant, à partir du mois de novembre 2018, une capacité de travail de 100 % dans une activité adaptée était exigible, de sorte que le droit à la rente s'éteignait dès le 1er février 2019. Concernant la comparaison des revenus, l'OAI s'est référé tant pour le revenu sans invalidité que pour celui d'invalide aux valeurs de l'Enquête suisse sur la structure des salaires (ESS) 2014 (Tableau 1, tous secteurs confondus [total], homme, niveau de compétences 4 [recte: 1; activités simples et répétitives], actualisé à l'année 2016 au moyen de l'indice suisse nominal des salaires [ISS]), ce qui donnait un montant annuel de 67'022 fr. S'agissant du revenu sans invalidité, l'OAI a motivé l'application des valeurs statistiques par le fait que l'assuré était au chômage avant l'atteinte à la santé. Quant au revenu avec invalidité, il a opéré un abattement de 10 % sur le revenu statistique en raison des limitations fonctionnelles de l'assuré. Il en résultait un revenu avec invalidité de 60'320 fr. et, en conséquence, un degré d'invalidité de 10 %, qui excluait le droit à une rente de l'assurance-invalidité. Après avoir tenu une audience de comparution personnelle des parties le 29 janvier 2020, la Chambre des assurances sociales de la Cour de justice de la République et canton de Genève a rejeté le recours formé par l'assuré contre la décision de l'OAI (arrêt du 6 mai 2020).
B.
Par arrêt du 10 mars 2021, la Chambre des assurances sociales de la Cour de justice de la République et canton de Genève a admis le recours formé par l'assuré contre la décision sur opposition de la CNA du 18 juillet 2019 (cf. lettre A.b supra), qu'elle a réformée en ce sens que l'assuré avait droit à une rente d'invalidité de 10 % dès le 1er janvier 2019.
C.
La CNA interjette un recours en matière de droit public contre cet arrêt, en concluant à sa réforme dans le sens de la confirmation de la décision sur opposition du 18 juillet 2019.
A._ conclut au rejet du recours et sollicite, en outre, le bénéfice de l'assistance judiciaire gratuite. 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.
2.1. Le litige porte sur le point de savoir si la juridiction cantonale a violé le droit fédéral en allouant à l'intimé une rente d'invalidité fondée sur un taux de 10 % à partir du 1er janvier 2019. Est litigieux uniquement le revenu sans invalidité retenu par la cour cantonale pour la comparaison des revenus prescrite à l'<ref-law>.
2.2. S'agissant d'une procédure concernant 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.
Selon l'<ref-law>, les prestations d'assurance sont allouées en cas d'accident professionnel, d'accident non professionnel et de maladie professionnelle. Si l'assuré est invalide (<ref-law>) à 10 % au moins ensuite d'un accident, il a droit à une rente d'invalidité (<ref-law>). Pour évaluer le taux d'invalidité, le revenu que l'assuré aurait pu obtenir s'il n'était pas invalide est comparé avec celui qu'il pourrait obtenir en exerçant l'activité qui peut raisonnablement être exigée de lui après les traitements et les mesures de réadaptation, sur un marché du travail équilibré (<ref-law>; méthode ordinaire de la comparaison des revenus).
Pour déterminer le revenu sans invalidité, il convient d'é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. Partant de la présomption que l'assuré aurait continué d'exercer son activité sans la survenance de son invalidité, ce revenu se déduit en principe du salaire réalisé en dernier lieu par l'assuré avant l'atteinte à la santé, en prenant en compte également l'évolution des salaires jusqu'au moment de la naissance du droit à la rente; des exceptions ne peuvent être admises que si elles sont établies au degré de la vraisemblance prépondérante (<ref-ruling> consid. 3.3.2; <ref-ruling> consid. 5.1; <ref-ruling> consid. 4.1; <ref-ruling> consid. 4.3.1; arrêt 8C_679/2020 du 1er juillet 2021 consid. 5.1). Ainsi, si la perte de l'emploi est due à des motifs étrangers à l'invalidité, le revenu sans invalidité doit en principe être déterminé sur la base de valeurs moyennes (arrêts 9C_500/2020 du 1er mars 2021 consid. 4.1; 9C_212/2015 du 9 juin 2015 consid. 5.4 et les arrêts cités). Autrement dit, n'est pas déterminant pour la fixation du revenu hypothétique de la personne valide le salaire que la personne assurée réaliserait actuellement auprès de son ancien employeur, mais bien plutôt celui qu'elle réaliserait si elle n'était pas devenue invalide (arrêts 9C_500/2020 du 1 er mars 2021 consid. 4.1; 9C_394/2013 du 27 septembre 2013 consid. 3.3 et les références).
4.
4.1. Dans l'arrêt attaqué, la juridiction cantonale n'a pas remis en cause la stabilisation de l'état de santé de l'assuré au 31 décembre 2018 ni sa capacité de travail entière, sans baisse de rendement. Elle a également confirmé le revenu d'invalide de 60'968 fr. 70 établi par la recourante en référence aux données de l'ESS 2016 (TA1, total secteur privé, hommes, à une moyenne horaire de 41,7 heures par semaine, indexées à 2019) et en opérant un abattement de 10 %.
La cour cantonale s'est toutefois écartée du salaire sans invalidité déterminé par la recourante sur la base des informations salariales de l'ancien employeur B._ SA, au motif que les rapports de travail avec cette entreprise avaient pris fin le 31 décembre 2014 (recte: 2013) pour des raisons économiques. Les juges cantonaux ont par ailleurs considéré qu'il n'y avait pas lieu de retenir le salaire payé par C._ SA dès lors que cet emploi s'inscrivait dans le cadre d'une période de chômage et était prévu pour une période déterminée. Partant, la juridiction cantonale s'est référée aux données statistiques ressortant de l'ESS 2016, en prenant la même table TA1, ligne "total", hommes, pour fixer le revenu sans invalidité en 2019 à 67'743 fr. De la comparaison avec le revenu d'invalide résultait un taux d'invalidité de 10 %, qui ouvrait le droit à une rente d'invalidité de l'assurance-accidents selon l'<ref-law>.
4.2. Tout en reconnaissant que le revenu sans invalidité doit être déterminé sur la base des salaires statistiques, la recourante soutient que les juges cantonaux auraient apprécié les faits de manière erronée et violé le droit fédéral en appliquant la ligne "total" de la table TA1 pour déterminer ce revenu. Comme l'intimé aurait travaillé de janvier 2011 à décembre 2013 en tant que nettoyeur/personnel de service et qu'il aurait repris une activité comme employé de nettoyage le 13 juillet 2015, les premiers juges auraient dû se fonder sur le salaire de référence des branches 77, 79-82 "Activités de services admin." et retenir un montant de 56'519 fr. 65 (partant du salaire mensuel brut de 4435 fr. et compte tenu d'un horaire hebdomadaire de 42,1 heures et d'une évolution des salaires de +0.4 % en 2017, +0.2 % en 2018 et +0.3 % en 2019). Comparé au revenu d'invalide, ce salaire n'aurait laissé apparaître aucune perte de gain.
4.3. Au moment de l'accident, l'intimé était employé comme nettoyeur par C._ SA par un contrat de durée déterminée (du 13 juillet au 18 septembre 2015) dans le cadre d'un emploi en gain intermédiaire, alors qu'il était inscrit au chômage. Il avait déjà exercé cette même activité professionnelle pour le compte de B._ SA pendant environ deux ans. Après la perte de cet emploi, il s'était certes inscrit au chômage dès le 1er janvier 2014 comme nettoyeur de locaux, comme le retient la recourante. Celle-ci omet toutefois de mentionner qu'à l'inscription au chômage, il avait également signalé une expérience professionnelle de plus de trois années en tant qu'aide-peintre. En effet, l'intimé, qui ne dispose d'aucune formation particulière, avait indiqué à la recourante avoir travaillé auparavant dans différents métiers du bâtiment, au Portugal et en Suisse, ce qu'il a confirmé lors de l'audience du 29 janvier 2020 devant la cour cantonale dans le cadre de la cause l'opposant à l'assurance-invalidité.
La recourante soutient en outre que les juges cantonaux auraient considéré de manière erronée que rien ne permettait de retenir que l'intimé aurait poursuivi son activité au sein de C._ SA. Ainsi, il aurait déclaré lors de l'audience du 29 janvier 2020 que son activité chez C._ SA devait être prolongée pour une période indéterminée compte tenu de la qualité de son travail. Pourtant, le rapport de travail avec cette entreprise n'avait duré qu'une semaine au moment de l'accident et l'intimé a fait cette déclaration "aux dires des chefs de l'entreprise". Au surplus, la recourante n'avance aucun autre élément à l'appui de cette hypothèse. La conclusion de la cour cantonale selon laquelle il n'est pas établi au degré de la vraisemblance prépondérante que l'intimé aurait continué à travailler pour cette entreprise ne prête donc pas le flanc à la critique.
C'est donc à juste titre que la cour cantonale a évalué le revenu sans invalidité en se fondant sur la ligne "total" de la table TA1 des ESS et non sur la ligne 77, 79-82 ni sur le salaire que réalisait l'intimé dans son emploi intermédiaire auprès de C._ SA (cf. arrêt 8C_61/2018 du 23 mars 2018 consid. 6.3.1). Enfin, la recourante ne peut rien déduire en sa faveur du principe selon lequel l'évaluation de l'invalidité par les organes de l'assurance-invalidité n'a pas de force contraignante pour l'assureur-accidents (et vice versa, cf. <ref-ruling> et 131 V 362 consid. 2.3; arrêt 8C_374/2021 du 13 août 2021 consid. 5.6).
5.
Vu ce qui précède, le recours se révèle mal fondé et doit être rejeté. La recourante, qui succombe, supportera les frais judiciaires (<ref-law>). L'intimé a droit à une indemnité de dépens (art. 68 al. 1 et 2 LTF), ce qui rend sans objet sa demande d'assistance judiciaire.

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 une indemnité de dépens de 2800 fr. à l'intimé pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties, à la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, et à l'Office fédéral de la santé publique.
Lucerne, le 23 septembre 2021
Au nom de la Ire Cour de droit social
du Tribunal fédéral suisse
Le Président : Maillard
La Greffière : Betschart