1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef FlushFinishTracker_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define FlushFinishTracker_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/GpuTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker #include <functional> 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GrDirectContext; 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 19*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { class Context; } 20*c8dee2aaSAndroid Build Coastguard Worker #endif 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker namespace sk_gpu_test { 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker class FlushFinishTracker : public SkRefCnt { 25*c8dee2aaSAndroid Build Coastguard Worker public: FlushFinished(void * finishedContext)26*c8dee2aaSAndroid Build Coastguard Worker static void FlushFinished(void* finishedContext) { 27*c8dee2aaSAndroid Build Coastguard Worker auto tracker = static_cast<FlushFinishTracker*>(finishedContext); 28*c8dee2aaSAndroid Build Coastguard Worker tracker->setFinished(); 29*c8dee2aaSAndroid Build Coastguard Worker tracker->unref(); 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker FlushFinishedResult(void * finishedContext,skgpu::CallbackResult)32*c8dee2aaSAndroid Build Coastguard Worker static void FlushFinishedResult(void* finishedContext, skgpu::CallbackResult) { 33*c8dee2aaSAndroid Build Coastguard Worker FlushFinished(finishedContext); 34*c8dee2aaSAndroid Build Coastguard Worker } 35*c8dee2aaSAndroid Build Coastguard Worker FlushFinishTracker(GrDirectContext * context)36*c8dee2aaSAndroid Build Coastguard Worker FlushFinishTracker(GrDirectContext* context) : fContext(context) {} 37*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) FlushFinishTracker(skgpu::graphite::Context * context)38*c8dee2aaSAndroid Build Coastguard Worker FlushFinishTracker(skgpu::graphite::Context* context) : fGraphiteContext(context) {} 39*c8dee2aaSAndroid Build Coastguard Worker #endif 40*c8dee2aaSAndroid Build Coastguard Worker setFinished()41*c8dee2aaSAndroid Build Coastguard Worker void setFinished() { fIsFinished = true; } 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker void waitTillFinished(std::function<void()> tick = {}); 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker private: 46*c8dee2aaSAndroid Build Coastguard Worker GrDirectContext* fContext = nullptr; 47*c8dee2aaSAndroid Build Coastguard Worker #if defined(SK_GRAPHITE) 48*c8dee2aaSAndroid Build Coastguard Worker skgpu::graphite::Context* fGraphiteContext = nullptr; 49*c8dee2aaSAndroid Build Coastguard Worker #endif 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker // Currently we don't have the this bool be atomic cause all current uses of this class happen 52*c8dee2aaSAndroid Build Coastguard Worker // on a single thread. In other words we call flush, checkAsyncWorkCompletion, and 53*c8dee2aaSAndroid Build Coastguard Worker // waitTillFinished all on the same thread. If we ever want to support the flushing and waiting 54*c8dee2aaSAndroid Build Coastguard Worker // to happen on different threads then we should make this atomic. 55*c8dee2aaSAndroid Build Coastguard Worker bool fIsFinished = false; 56*c8dee2aaSAndroid Build Coastguard Worker }; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker } //namespace sk_gpu_test 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard Worker #endif 61