Metal: Implement EXT_disjoint_timer_query. Time-elapsed query objects allocate and deallocate storage slots in the CommandQueue. Command buffers register themselves with these slots (if active) upon allocation, and upon completion, accumulate their execution time in the slot. Query objects accurately track completion and report the total accumulated execution time for all command buffers issued while the time-elapsed query was active. Timestamp queries are not implemented. A pointer to implementation suggestions has been added to the code. Tested with the WebGL conformance test: conformance/extensions/ext-disjoint-timer-query.html Fixed: angleproject:7828 Change-Id: Ia022d0f3a52f2098bd01cf96f7cc20e3d347197e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/4226410 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Kyle Piddington <kpiddington@apple.com> Commit-Queue: Kenneth Russell <kbr@chromium.org>