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

#include "src/sksl/tracing/SkSLDebugInfo.h"
#include "src/sksl/tracing/SkSLTraceHook.h"

namespace SkSL {

std::unique_ptr<Tracer> Tracer::Make(std::vector<TraceInfo>* traceInfo) {
    auto hook = std::make_unique<Tracer>();
    hook->fTraceInfo = traceInfo;
    return hook;
}

void Tracer::line(int lineNum) {
    fTraceInfo->push_back({TraceInfo::Op::kLine, /*data=*/{lineNum, 0}});
}
void Tracer::var(int slot, int32_t val) {
    fTraceInfo->push_back({TraceInfo::Op::kVar, /*data=*/{slot, val}});
}
void Tracer::enter(int fnIdx) {
    fTraceInfo->push_back({TraceInfo::Op::kEnter, /*data=*/{fnIdx, 0}});
}
void Tracer::exit(int fnIdx) {
    fTraceInfo->push_back({TraceInfo::Op::kExit, /*data=*/{fnIdx, 0}});
}
void Tracer::scope(int delta) {
    fTraceInfo->push_back({TraceInfo::Op::kScope, /*data=*/{delta, 0}});
}

}  // namespace SkSL
