// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_GL_GPU_TIMING_H_ #define UI_GL_GPU_TIMING_H_ #include <stdint.h> #include <memory> #include <queue> #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "ui/gl/gl_export.h" // The gpu_timing classes handles the abstraction of GL GPU Timing extensions // into a common set of functions. Currently the different timer extensions that // are supported are EXT_timer_query, ARB_timer_query and // EXT_disjoint_timer_query. // // Explanation of Classes: // GPUTiming - GPU Timing is a private class which is only owned by the // underlying GLContextReal class. This class handles any GL Context level // states which may need to be redistributed to users of GPUTiming. For // example, there exists only a single disjoint flag for each real GL // Context. Once the disjoint flag is checked, internally it is reset to // false. In order to support multiple virtual contexts each checking the // disjoint flag seperately, GPUTiming is in charge of checking the // disjoint flag and broadcasting out the disjoint state to all the // various users of GPUTiming (GPUTimingClient below). // GPUTimingClient - The GLContextReal holds the GPUTiming class and is the // factory that creates GPUTimingClient objects. If a user would like to // obtain various GPU times they would access CreateGPUTimingClient() from // their GLContext and use the returned object for their timing calls. // Each virtual context as well as any other classes which need GPU times // will hold one of these. When they want to time a set of GL commands they // will create GPUTimer objects. // GPUTimer - Once a user decides to time something, the user creates a new // GPUTimer object from a GPUTimingClient and issue Start() and Stop() calls // around various GL calls. Once IsAvailable() returns true, the GPU times // will be available through the various time stamp related functions. // The constructor and destructor of this object handles the actual // creation and deletion of the GL Queries within GL. namespace gl { class GLContextReal; class GPUTimingClient; class GPUTimingImpl; class QueryResult; class GPUTiming { … }; // Class to compute the amount of time it takes to fully // complete a set of GL commands class GL_EXPORT GPUTimer { … }; // GPUTimingClient contains all the gl timing logic that is not specific // to a single GPUTimer. class GL_EXPORT GPUTimingClient : public base::RefCounted<GPUTimingClient> { … }; } // namespace gl #endif // UI_GL_GPU_TIMING_H_