Faits: A. P._ a travaillé en qualité de manoeuvre. Il bénéficie d'une rente d'invalidité de la CNA fondée sur une perte de gain de 23 %, consécutive à un accident de la circulation survenu le 2 juillet 2003. Le 2 juin 2004, l'assuré s'est annoncé à l'assurance-invalidité en invoquant des atteintes aux coude et genou gauches liées à l'accident. L'Office cantonal de l'assurance-invalidité du canton de Genève (l'office AI) a confié un mandat d'expertise au docteur A._, spécialiste en chirurgie orthopédique. Dans son rapport du 4 avril 2008, ce médecin a attesté que l'assuré ne pouvait plus exercer son ancienne profession, mais qu'il conservait une capacité de travail de 90 % dans une activité adaptée à son handicap. Par décision du 14 août 2008, l'office AI a alloué à l'assuré une rente entière d'invalidité du 1er mai au 31 août 2005, fondée sur un taux d'invalidité de 100 %. Cette prestation a été accordée pour une durée limitée, car l'assuré avait recouvré une capacité de travail entière dans une activité adaptée à plein temps depuis le 11 mai 2005 et le degré d'invalidité s'élevait désormais à 12 %. B. P._ a déféré cette décision au Tribunal des assurances sociales de la République et canton de Genève, en concluant principalement au maintien de la rente au-delà du 31 août 2005. Il a produit une expertise du docteur B._, spécialiste en médecine physique et rééducation (rapport du 6 octobre 2008), trois certificats du docteur M._, médecin traitant (14 décembre 2006, 16 février et 22 mai 2007), une lettre de l'Office cantonal de l'emploi (du 20 avril 2007), un avis de sortie de la Clinique X._ (du 16 février 2005), ainsi qu'une note de la CNA (du 3 juin 2005). La juridiction cantonale l'a débouté par jugement du 8 septembre 2009. C. L'assuré interjette un recours en matière de droit public contre ce jugement dont il demande l'annulation, avec suite de frais et dépens, en concluant au renvoi de la cause au tribunal cantonal pour compléter l'instruction quant à la question de sa capacité de travail effective. L'intimé conclut au rejet du recours, tandis que l'Office fédéral des assurances sociales a renoncé à se déterminer.