• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google LLC.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrFinishCallbacks_DEFINED
9 #define GrFinishCallbacks_DEFINED
10 
11 #include "include/gpu/GrTypes.h"
12 #include "include/private/gpu/ganesh/GrTypesPriv.h"
13 
14 #include <list>
15 
16 class GrGpu;
17 
18 /**
19  * Maintains a list of callbacks to be called when work on the GPU is complete.
20  */
21 
22 class GrFinishCallbacks {
23 public:
24     GrFinishCallbacks(GrGpu* gpu);
25    ~GrFinishCallbacks();
26 
27     /**
28      * Call all the callbacks in the list. This will block until all work is done.
29      *
30      * @param doDelete        delete the contained fence object.
31      */
32     void callAll(bool doDelete);
33 
34     /**
35      * Add a new callback to the list.
36      *
37      * @param finishedProc    The function to call when GPU work is complete.
38      * @param finishedContext The context object to pass back to the callback.
39      */
40     void add(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext);
41 
42     /**
43      * Check if any GPU work is complete, and call the associated callbacks.
44      * This call is non-blocking.
45      */
46     void check();
47 
48     /**
49      * Returns true if the callback list is empty.
50      */
empty()51     bool empty() const { return fCallbacks.empty(); }
52 
53 private:
54     struct FinishCallback {
55         GrGpuFinishedProc     fCallback;
56         GrGpuFinishedContext  fContext;
57         GrFence               fFence;
58     };
59 
60     GrGpu*                    fGpu;
61     std::list<FinishCallback> fCallbacks;
62 };
63 
64 #endif
65