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

#include "include/private/base/SkAPI.h"

class SkCanvas;
class SkSurface;

namespace skcpu {
class Recorder;
}

class SK_API SkRecorder {
public:
    SkRecorder() = default;
    virtual ~SkRecorder() = default;
    SkRecorder(const SkRecorder&) = delete;
    SkRecorder(SkRecorder&&) = delete;
    SkRecorder& operator=(const SkRecorder&) = delete;

    enum class Type {
        kCPU,
        kGanesh,
        kGraphite,
    };

    virtual Type type() const = 0;

    virtual skcpu::Recorder* cpuRecorder() = 0;

private:

    /**
    * Attempts to create and return an SkCaptureCanvas that wraps the provided base canvas.
    * Returns nullptr if capture is not enabled.
    */
    virtual SkCanvas* makeCaptureCanvas(SkCanvas*) = 0;
    virtual void createCaptureBreakpoint(SkSurface*) = 0;

    friend class SkSurface_Base; // for capture functionality
};

#endif