Faits: A. P._, née en 1968, a travaillé en qualité d'ouvrière non qualifiée dans l'horlogerie. Le 27 janvier 2003, lors d'un accident de la circulation routière, elle a subi un traumatisme de type "coup du lapin" dont la Caisse nationale suisse d'assurance en cas d'accidents (CNA) a pris les suites en charge. Le 23 avril 2004, l'assurée a déposé une demande de prestations de l'assurance-invalidité. L'Office cantonal de l'assurance-invalidité pour le canton de Vaud (l'office AI) a recueilli les avis de deux médecins mandatés par X._, assureur pour perte de gain en cas de maladie (qui avait pris le relais de la CNA), savoir les docteurs S._, spécialiste en rhumatologie et en médecine interne (rapport du 4 novembre 2003), et C._, spécialiste en psychiatrie et psychothérapie (rapport du 27 février 2004). A la lumière de ces deux rapports médicaux, qui mettaient en évidence notamment des cervicalgies d'évolution chronique secondaires à un traumatisme par accélération, une minime uncarthrose C6-C7, un syndrome somatoforme persistant, un état dépressif majeur léger, ainsi que des traits de personnalité histrionique, l'office AI a retenu une capacité de travail entière dans l'activité habituelle (rapport final du 2 décembre 2005). Par décision du 12 mai 2006, l'office AI a fixé le degré d'invalidité à 20 % (résultant de la comparaison d'un revenu sans invalidité de 57'551 fr. avec un gain d'invalide de 46'155 fr.) et rejeté la demande de prestations. L'assurée s'est opposée à cette décision en invoquant les avis de ses médecins traitants, le docteur M._, spécialiste en médecine générale, et la doctoresse D._, spécialiste en neurologie à l'Hôpital Y._. Elle a allégué que sa capacité de travail ne dépassait pas 30 % (cf. certificat du docteur M._ du 6 juillet 2006) et a conclu à l'octroi d'une rente entière d'invalidité. L'office AI a interpellé la doctoresse D._. Dans ses rapports (des 25 mars et 24 juin 2008), elle a posé le diagnostic de status post contusion cervicale après accident de la circulation avec mécanisme de flexion extension, et attesté que la capacité de travail de sa patiente était de 50 % dans son activité habituelle depuis 2006. Quant aux docteurs F._ et T._, médecins du Service médical régional (SMR), ils ont estimé (avis médical du 18 juin 2008) que les éléments versés au dossier au-delà de la date de l'opposition n'apportaient pas la preuve d'une aggravation, et qu'en l'absence d'un changement objectivable de l'état de santé, il y avait lieu de s'en tenir à l'exigibilité fixée sur la base du dossier de X._ (c'est-à-dire des rapports des docteurs S._ et C._). Par décision du 21 juillet 2008, l'office AI a rejeté l'opposition en se fondant principalement sur l'avis du SMR. B. Par l'intermédiaire de son employeur, P._ a déféré cette décision à la Cour des assurances sociales du Tribunal cantonal du canton de Vaud. Contestant le degré de l'incapacité de travail retenue, elle a demandé à être examinée par un médecin de l'office AI (ce qui n'avait pas encore eu lieu), voire par un expert indépendant. Plus particulièrement, elle a reproché aux experts de l'AI de n'avoir pas tenu compte des derniers examens de la doctoresse D._. Par jugement du 2 octobre 2009, la juridiction cantonale a rejeté le recours. C. P._ interjette un recours en matière de droit public ainsi qu'un recours constitutionnel subsidiaire contre ce jugement dont elle demande l'annulation, avec suite de frais et dépens, en concluant principalement à l'octroi d'une demi-rente d'invalidité depuis le 1er janvier 2004, subsidiairement au renvoi de la cause à l'instance inférieure pour instruction complémentaire. L'intimé conclut implicitement au rejet du recours, tandis que l'Office fédéral des assurances sociales a renoncé à se déterminer. 