Summary: This project aims to improve the profiling capabilities of Apitrace on the OpenGL side by introducing new metric-collection systems and improving the profiling GUI. Goals and details: 1. Implement an abstraction system for profiling data collectors. The idea behind this is to write a general interface to different sources of profiling data. It should be capable of at least: a. Initialization/deinitialization b. Setup (basically choosing counters) c. Methods like beginQuery/endQuery in OpenGL I think this all should be added as an additional feature with the corresponding option to be passed to the compiler. 2. Implement on top of the abstraction system several backends: a. AMD_performance_monitor OpenGL extension b. INTEL_performance_query OpenGL extension c. perfkit (probably via libperf) 3. Improve existing GUI for profiling performance of traces. It should basically be extended to support new metric-collection systems. This particular task can be divided into 2: a. Signals (counters) selection for retrace b. Visualization of metrics. This is likely to be the most difficult part. Additional goals (if there is some spare time): 1. Additional GUI features. 2. CLI support for new metric-collection systems. 3. Windows/Mac support. Approximate schedule: There will be 14 weeks beginning with May 25. Week 1-2: Study existing similar solutions (like one from NVIDIA), work out a plan for the GUI design and development. Week 3-4: Write an abstraction system. Implement backends. Week 5: Rewrite existing GUI in a very simple way to allow testing for implemented backends. Week 6: Mid-term evaluations. Week 7: Implement signal selection part of the GUI. Week 8-11: Main GUI development (this one highly depends on the plan worked out in the first weeks). Week 12-13: Test and polish. Week 14: Final evaluations.