| /* |
| * Copyright 2020 Google LLC. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef GrGLFinishCallbacks_DEFINED |
| #define GrGLFinishCallbacks_DEFINED |
| |
| #include "include/gpu/ganesh/gl/GrGLTypes.h" |
| #include "src/gpu/RefCntedCallback.h" |
| |
| #include <list> |
| |
| class GrGLGpu; |
| |
| /** |
| * Maintains a list of callbacks to be called when work on the GPU is complete. |
| */ |
| |
| class GrGLFinishCallbacks { |
| public: |
| GrGLFinishCallbacks(GrGLGpu* gpu); |
| ~GrGLFinishCallbacks(); |
| |
| /** |
| * Call all the callbacks in the list. This will block until all work is done. |
| * |
| * @param doDelete delete the contained fence object. |
| */ |
| void callAll(bool doDelete); |
| |
| /** |
| * Add a new callback to the list. |
| * |
| * @param finishedProc The function to call when GPU work is complete. |
| * @param finishedContext The context object to pass back to the callback. |
| * @param timerQuery A timer query to get the result from when finished. |
| */ |
| void add(skgpu::AutoCallback, GrGLint timerQeury = 0); |
| |
| /** |
| * Check if any GPU work is complete, and call the associated callbacks. |
| * This call is non-blocking. |
| */ |
| void check(); |
| |
| /** |
| * Returns true if the callback list is empty. |
| */ |
| bool empty() const { return fCallbacks.empty(); } |
| |
| private: |
| struct FinishCallback { |
| skgpu::AutoCallback fCallback; |
| GrGLsync fSync; |
| GrGLint fTimerQuery; |
| }; |
| |
| GrGLGpu* fGpu; |
| std::list<FinishCallback> fCallbacks; |
| }; |
| |
| #endif // GrGLFinishCallbacks |