|  | /* | 
|  | * 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 GrFinishCallbacks_DEFINED | 
|  | #define GrFinishCallbacks_DEFINED | 
|  |  | 
|  | #include "include/gpu/GrTypes.h" | 
|  | #include "include/private/GrTypesPriv.h" | 
|  |  | 
|  | #include <list> | 
|  |  | 
|  | class GrGpu; | 
|  |  | 
|  | /** | 
|  | * Maintains a list of callbacks to be called when work on the GPU is complete. | 
|  | */ | 
|  |  | 
|  | class GrFinishCallbacks { | 
|  | public: | 
|  | GrFinishCallbacks(GrGpu* gpu); | 
|  | ~GrFinishCallbacks(); | 
|  |  | 
|  | /** | 
|  | * 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. | 
|  | */ | 
|  | void add(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext); | 
|  |  | 
|  | /** | 
|  | * 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 { | 
|  | GrGpuFinishedProc     fCallback; | 
|  | GrGpuFinishedContext  fContext; | 
|  | GrFence               fFence; | 
|  | }; | 
|  |  | 
|  | GrGpu*                    fGpu; | 
|  | std::list<FinishCallback> fCallbacks; | 
|  | }; | 
|  |  | 
|  | #endif |