GrDeferredProxyUploader assists with threaded generation of textures. Currently used by both software clip masks, and the software path renderer. The calling code typically needs to store some additional data (T) for use on the worker thread. GrTDeferredProxyUploader allows storing such data. The common flow is:
1) A GrTDeferredProxyUploader is created, with some payload (eg an SkPath to draw). The uploader is owned by the proxy that it's going to populate. 2) A task is created with a pointer to the uploader. A worker thread executes that task, using the payload data to allocate and fill in the fPixels pixmap. 3) The worker thread calls signalAndFreeData(), which notifies the main thread that the pixmap is ready, and then deletes the payload data (which is no longer needed). 4) In parallel to 2-3, on the main thread... Some op is created that refers to the proxy. When that op is added to an op list, the op list retains a pointer to the "deferred" proxies. 5) At flush time, the op list ensures that the deferred proxies are instantiated, then calls scheduleUpload on those proxies, which calls scheduleUpload on the uploader (below). 6) scheduleUpload defers the upload even further, by adding an ASAPUpload to the flush. 7) When the ASAP upload happens, we wait to make sure that the pixels are marked ready (from step #3 on the worker thread). Then we perform the actual upload to the texture. Finally, we call resetDeferredUploader, which deletes the uploader object, causing fPixels to be freed.
Definition at line 40 of file GrDeferredProxyUploader.h.