blob: 2e75423102c54eaaf6a60c05f7af5d23e785a0db [file] [log] [blame]
/*
* Copyright 2021 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "tools/graphite/GraphiteTestContext.h"
#include "include/gpu/graphite/Context.h"
#include "include/gpu/graphite/GraphiteTypes.h"
#include "include/gpu/graphite/Recording.h"
#include "src/core/SkTraceEvent.h"
#include "src/gpu/graphite/Caps.h"
#include "src/gpu/graphite/ContextPriv.h"
#include "tools/gpu/FlushFinishTracker.h"
namespace skiatest::graphite {
GraphiteTestContext::GraphiteTestContext() {}
GraphiteTestContext::~GraphiteTestContext() {}
void GraphiteTestContext::submitRecordingAndWaitOnSync(skgpu::graphite::Context* context,
skgpu::graphite::Recording* recording) {
TRACE_EVENT0("skia.gpu", TRACE_FUNC);
SkASSERT(context);
SkASSERT(recording);
if (fFinishTrackers[fCurrentFlushIdx]) {
fFinishTrackers[fCurrentFlushIdx]->waitTillFinished([this] { tick(); });
}
fFinishTrackers[fCurrentFlushIdx].reset(new sk_gpu_test::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();
skgpu::graphite::InsertRecordingInfo info;
info.fRecording = recording;
info.fFinishedContext = fFinishTrackers[fCurrentFlushIdx].get();
info.fFinishedProc = sk_gpu_test::FlushFinishTracker::FlushFinishedResult;
context->insertRecording(info);
context->submit(skgpu::graphite::SyncToCpu::kNo);
fCurrentFlushIdx = (fCurrentFlushIdx + 1) % std::size(fFinishTrackers);
}
void GraphiteTestContext::syncedSubmit(skgpu::graphite::Context* context) {
skgpu::graphite::SyncToCpu sync = context->priv().caps()->allowCpuSync()
? skgpu::graphite::SyncToCpu::kYes
: skgpu::graphite::SyncToCpu::kNo;
context->submit(sync);
if (sync == skgpu::graphite::SyncToCpu::kNo) {
while (context->hasUnfinishedGpuWork()) {
this->tick();
context->checkAsyncWorkCompletion();
}
}
}
} // namespace skiatest::graphite