From c42320d537142585fb1fd2aecf6d20a5d7daa8bb Mon Sep 17 00:00:00 2001 From: John Stiles Date: Thu, 23 Mar 2023 08:45:35 -0400 Subject: [PATCH] Move Tracer into shared code. 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 Reviewed-by: Brian Osman Auto-Submit: John Stiles Commit-Queue: John Stiles --- gn/sksl.gni | 1 + public.bzl | 1 + src/sksl/codegen/SkSLVMCodeGenerator.cpp | 38 ++---------------------- src/sksl/tracing/BUILD.bazel | 1 + src/sksl/tracing/SkSLTraceHook.cpp | 35 ++++++++++++++++++++++ src/sksl/tracing/SkSLTraceHook.h | 18 +++++++++++ 6 files changed, 58 insertions(+), 36 deletions(-) create mode 100644 src/sksl/tracing/SkSLTraceHook.cpp diff --git a/gn/sksl.gni b/gn/sksl.gni index a481e28bcc2e..92200f67cdc8 100644 --- a/gn/sksl.gni +++ b/gn/sksl.gni @@ -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", diff --git a/public.bzl b/public.bzl index a57286b9ccfe..be7eedf0bdb9 100644 --- a/public.bzl +++ b/public.bzl @@ -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", diff --git a/src/sksl/codegen/SkSLVMCodeGenerator.cpp b/src/sksl/codegen/SkSLVMCodeGenerator.cpp index 3332258ba7f5..33eab93b9a41 100644 --- a/src/sksl/codegen/SkSLVMCodeGenerator.cpp +++ b/src/sksl/codegen/SkSLVMCodeGenerator.cpp @@ -65,7 +65,6 @@ #include "src/sksl/tracing/SkVMDebugTrace.h" #include -#include #include #include #include @@ -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 Make(SkSL::SkVMDebugTrace* trace) { - auto hook = std::make_unique(); - 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 { @@ -455,7 +421,7 @@ void SkVMGenerator::setupGlobals(SkSpan 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.) diff --git a/src/sksl/tracing/BUILD.bazel b/src/sksl/tracing/BUILD.bazel index 8e404c5060dc..66c53b30e714 100644 --- a/src/sksl/tracing/BUILD.bazel +++ b/src/sksl/tracing/BUILD.bazel @@ -26,6 +26,7 @@ skia_filegroup( name = "srcs", srcs = [ "SkRPDebugTrace.cpp", + "SkSLTraceHook.cpp", "SkVMDebugTrace.cpp", ":enabled_srcs", ], diff --git a/src/sksl/tracing/SkSLTraceHook.cpp b/src/sksl/tracing/SkSLTraceHook.cpp new file mode 100644 index 000000000000..c394f7e0a7c9 --- /dev/null +++ b/src/sksl/tracing/SkSLTraceHook.cpp @@ -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::Make(std::vector* traceInfo) { + auto hook = std::make_unique(); + 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 diff --git a/src/sksl/tracing/SkSLTraceHook.h b/src/sksl/tracing/SkSLTraceHook.h index 8fff345976dc..404e1be22953 100644 --- a/src/sksl/tracing/SkSLTraceHook.h +++ b/src/sksl/tracing/SkSLTraceHook.h @@ -9,9 +9,13 @@ #define SKSLTRACEHOOK #include +#include +#include namespace SkSL { +struct TraceInfo; + class TraceHook { public: virtual ~TraceHook() = default; @@ -22,6 +26,20 @@ class TraceHook { virtual void scope(int delta) = 0; }; +class Tracer : public TraceHook { +public: + static std::unique_ptr Make(std::vector* 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* fTraceInfo; +}; + } // namespace SkSL #endif