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.