/* * 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 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 fCallbacks; }; #endif // GrGLFinishCallbacks