/*
 * Copyright 2023 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GpuTools_DEFINED
#define GpuTools_DEFINED

#include "include/core/SkSurface.h"

#if defined(SK_GANESH)
#include "include/gpu/ganesh/SkSurfaceGanesh.h"
#endif

#if defined(SK_GRAPHITE)
#include "src/gpu/graphite/Surface_Graphite.h"
#endif

namespace skgpu {
// Flush any surface, even if we don't know what GPU backend it is for. This keeps the
// comparisons between Ganesh and Graphite more fair as the latter can do more batching
// unless we explicitly perform flushes.
inline void Flush(SkSurface* surface) {
#if defined(SK_GANESH)
    skgpu::ganesh::Flush(surface);
#endif
#if defined(SK_GRAPHITE)
    skgpu::graphite::Flush(surface);
#endif
}

inline void FlushAndSubmit(SkSurface* surface) {
#if defined(SK_GANESH)
    skgpu::ganesh::FlushAndSubmit(surface);
#endif
#if defined(SK_GRAPHITE)
    // Graphite doesn't have a "flush and submit" equivilent
    skgpu::graphite::Flush(surface);
#endif
}
}

#endif
