Skip to content

Commit

Permalink
Move Tracer into shared code.
Browse files Browse the repository at this point in the history
Nothing here was SkVM-specific, except for the reference to a
`SkVMDebugTrace*`. The class now targets the vector inside the
debug trace, and would be safe to share with RP.

Change-Id: I82ac24993fc834ef16a6844372939e2097138bb6
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/660558
Reviewed-by: John Stiles <[email protected]>
Reviewed-by: Brian Osman <[email protected]>
Auto-Submit: John Stiles <[email protected]>
Commit-Queue: John Stiles <[email protected]>
  • Loading branch information
johnstiles-google authored and SkCQ committed Mar 23, 2023
1 parent 3d15a45 commit c42320d
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 36 deletions.
1 change: 1 addition & 0 deletions gn/sksl.gni
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ skia_sksl_sources = [
"$_src/sksl/tracing/SkRPDebugTrace.cpp",
"$_src/sksl/tracing/SkRPDebugTrace.h",
"$_src/sksl/tracing/SkSLDebugInfo.h",
"$_src/sksl/tracing/SkSLTraceHook.cpp",
"$_src/sksl/tracing/SkSLTraceHook.h",
"$_src/sksl/tracing/SkVMDebugTrace.cpp",
"$_src/sksl/tracing/SkVMDebugTrace.h",
Expand Down
1 change: 1 addition & 0 deletions public.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -1620,6 +1620,7 @@ BASE_SRCS_ALL = [
"src/sksl/tracing/SkRPDebugTrace.cpp",
"src/sksl/tracing/SkRPDebugTrace.h",
"src/sksl/tracing/SkSLDebugInfo.h",
"src/sksl/tracing/SkSLTraceHook.cpp",
"src/sksl/tracing/SkSLTraceHook.h",
"src/sksl/tracing/SkVMDebugTrace.cpp",
"src/sksl/tracing/SkVMDebugTrace.h",
Expand Down
38 changes: 2 additions & 36 deletions src/sksl/codegen/SkSLVMCodeGenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@
#include "src/sksl/tracing/SkVMDebugTrace.h"

#include <algorithm>
#include <cstdint>
#include <functional>
#include <iterator>
#include <memory>
Expand All @@ -81,40 +80,7 @@ namespace {
static FastF32 operator*(skvm::F32 y) { return {y}; }
static skvm::F32 operator*(skvm::F32 x, FastF32 y) { return fast_mul(x, y.val); }
static skvm::F32 operator*(float x, FastF32 y) { return fast_mul(x, y.val); }

class SkSLTracer : public SkSL::TraceHook {
public:
static std::unique_ptr<SkSLTracer> Make(SkSL::SkVMDebugTrace* trace) {
auto hook = std::make_unique<SkSLTracer>();
hook->fTrace = trace;
return hook;
}

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

private:
SkSL::SkVMDebugTrace* fTrace;
};
} // namespace
}

namespace SkSL {

Expand Down Expand Up @@ -455,7 +421,7 @@ void SkVMGenerator::setupGlobals(SkSpan<skvm::Val> uniforms, skvm::Coord device)
fDebugTrace->setSource(*fProgram.fSource);

// Create a trace hook and attach it to the builder.
fDebugTrace->fTraceHook = SkSLTracer::Make(fDebugTrace);
fDebugTrace->fTraceHook = SkSL::Tracer::Make(&fDebugTrace->fTraceInfo);
fTraceHookID = fBuilder->attachTraceHook(fDebugTrace->fTraceHook.get());

// The SkVM blitter generates centered pixel coordinates. (0.5, 1.5, 2.5, 3.5, etc.)
Expand Down
1 change: 1 addition & 0 deletions src/sksl/tracing/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ skia_filegroup(
name = "srcs",
srcs = [
"SkRPDebugTrace.cpp",
"SkSLTraceHook.cpp",
"SkVMDebugTrace.cpp",
":enabled_srcs",
],
Expand Down
35 changes: 35 additions & 0 deletions src/sksl/tracing/SkSLTraceHook.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* 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
18 changes: 18 additions & 0 deletions src/sksl/tracing/SkSLTraceHook.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@
#define SKSLTRACEHOOK

#include <cstdint>
#include <memory>
#include <vector>

namespace SkSL {

struct TraceInfo;

class TraceHook {
public:
virtual ~TraceHook() = default;
Expand All @@ -22,6 +26,20 @@ class TraceHook {
virtual void scope(int delta) = 0;
};

class Tracer : public TraceHook {
public:
static std::unique_ptr<Tracer> Make(std::vector<TraceInfo>* traceInfo);

void line(int lineNum) override;
void var(int slot, int32_t val) override;
void enter(int fnIdx) override;
void exit(int fnIdx) override;
void scope(int delta) override;

private:
std::vector<TraceInfo>* fTraceInfo;
};

} // namespace SkSL

#endif

0 comments on commit c42320d

Please sign in to comment.