/* * Copyright 2020 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "tools/gpu/FlushFinishTracker.h" #include "include/gpu/GrDirectContext.h" #include "src/core/SkTraceEvent.h" #ifdef SK_GRAPHITE_ENABLED #include "include/gpu/graphite/Context.h" #endif #include namespace sk_gpu_test { void FlushFinishTracker::waitTillFinished() { TRACE_EVENT0("skia.gpu", TRACE_FUNC); auto begin = std::chrono::steady_clock::now(); auto end = begin; while (!fIsFinished && (end - begin) < std::chrono::seconds(2)) { if (fContext) { fContext->checkAsyncWorkCompletion(); } else { #ifdef SK_GRAPHITE_ENABLED SkASSERT(fGraphiteContext); fGraphiteContext->checkAsyncWorkCompletion(); #else SkDEBUGFAIL("No valid context"); #endif } end = std::chrono::steady_clock::now(); } if (!fIsFinished) { SkDebugf("WARNING: Wait failed for flush sync. Timings might not be accurate.\n"); } } } //namespace sk_gpu_test