skia2/tools/gpu/FlushFinishTracker.h
Jim Van Verth 3871479bdb [graphite] Move all graphite classes under skgpu::graphite.
Change-Id: I484067cb1f6025dc9e6770c51c99bfc2c5925652
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/528365
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
2022-04-08 00:42:37 +00:00

59 lines
1.6 KiB
C++

/*
* 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 FlushFinishTracker_DEFINED
#define FlushFinishTracker_DEFINED
#include "include/core/SkRefCnt.h"
#include "include/gpu/GpuTypes.h"
class GrDirectContext;
#ifdef SK_GRAPHITE_ENABLED
namespace skgpu::graphite { class Context; }
#endif
namespace sk_gpu_test {
class FlushFinishTracker : public SkRefCnt {
public:
static void FlushFinished(void* finishedContext) {
auto tracker = static_cast<FlushFinishTracker*>(finishedContext);
tracker->setFinished();
tracker->unref();
}
static void FlushFinishedResult(void* finishedContext, skgpu::CallbackResult) {
FlushFinished(finishedContext);
}
FlushFinishTracker(GrDirectContext* context) : fContext(context) {}
#ifdef SK_GRAPHITE_ENABLED
FlushFinishTracker(skgpu::graphite::Context* context) : fGraphiteContext(context) {}
#endif
void setFinished() { fIsFinished = true; }
void waitTillFinished();
private:
GrDirectContext* fContext = nullptr;
#ifdef SK_GRAPHITE_ENABLED
skgpu::graphite::Context* fGraphiteContext = nullptr;
#endif
// Currently we don't have the this bool be atomic cause all current uses of this class happen
// on a single thread. In other words we call flush, checkAsyncWorkCompletion, and
// waitTillFinished all on the same thread. If we ever want to support the flushing and waiting
// to happen on different threads then we should make this atomic.
bool fIsFinished = false;
};
} //namespace sk_gpu_test
#endif