/* * Copyright 2016 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "tools/gpu/TestContext.h" #include "include/gpu/GrDirectContext.h" #include "src/core/SkTraceEvent.h" #include "tools/gpu/FlushFinishTracker.h" #include "tools/gpu/GpuTimer.h" namespace sk_gpu_test { TestContext::TestContext() : fGpuTimer(nullptr) {} TestContext::~TestContext() { // Subclass should call teardown. SkASSERT(!fGpuTimer); } sk_sp TestContext::makeContext(const GrContextOptions&) { return nullptr; } void TestContext::makeNotCurrent() const { this->onPlatformMakeNotCurrent(); } void TestContext::makeCurrent() const { this->onPlatformMakeCurrent(); } SkScopeExit TestContext::makeCurrentAndAutoRestore() const { auto asr = SkScopeExit(this->onPlatformGetAutoContextRestore()); this->makeCurrent(); return asr; } void TestContext::flushAndWaitOnSync(GrDirectContext* context) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); SkASSERT(context); if (fFinishTrackers[fCurrentFlushIdx]) { fFinishTrackers[fCurrentFlushIdx]->waitTillFinished(); } fFinishTrackers[fCurrentFlushIdx].reset(new FlushFinishTracker(context)); // We add an additional ref to the current flush tracker here. This ref is owned by the finish // callback on the flush call. The finish callback will unref the tracker when called. fFinishTrackers[fCurrentFlushIdx]->ref(); GrFlushInfo flushInfo; flushInfo.fFinishedProc = FlushFinishTracker::FlushFinished; flushInfo.fFinishedContext = fFinishTrackers[fCurrentFlushIdx].get(); context->flush(flushInfo); context->submit(); fCurrentFlushIdx = (fCurrentFlushIdx + 1) % SK_ARRAY_COUNT(fFinishTrackers); } void TestContext::testAbandon() { } void TestContext::teardown() { fGpuTimer.reset(); } } // namespace sk_gpu_test