Avoid re-extracting DataPtrs when forwarding values between Futures (#57433)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/57433
In a bunch of cases we need to "forward" between one future and another, typically because we need to convert the type of the data (e.g., from Message to PyObject). In most of these cases the DataPtrs of the value don't change, and yet the new future must re-extract them from scratch. By allowing the user to obtain the vector of extracted DataPtrs from the old future, we can allow them to "shortcut" this step.
Also, this change is a requirement for the next PR to work, since the next PR would otherwise cause us to attempt extracting DataPtrs from Message instances, which doesn't work (because Message is a custom class), but thanks to this PR we actually skip that.
ghstack-source-id: 128184663
Test Plan: CI
Reviewed By: mrshenli
Differential Revision: D28118298
fbshipit-source-id: 70e333ea6a4f8d4d9a86514c350028d412469ee1