1 /* 2 * Copyright 2023 Google LLC 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SKSLTRACEHOOK 9 #define SKSLTRACEHOOK 10 11 #include <cstdint> 12 #include <memory> 13 #include <vector> 14 15 namespace SkSL { 16 17 struct TraceInfo; 18 19 class TraceHook { 20 public: 21 virtual ~TraceHook() = default; 22 virtual void line(int lineNum) = 0; 23 virtual void var(int slot, int32_t val) = 0; 24 virtual void enter(int fnIdx) = 0; 25 virtual void exit(int fnIdx) = 0; 26 virtual void scope(int delta) = 0; 27 }; 28 29 class Tracer : public TraceHook { 30 public: 31 static std::unique_ptr<Tracer> Make(std::vector<TraceInfo>* traceInfo); 32 33 void line(int lineNum) override; 34 void var(int slot, int32_t val) override; 35 void enter(int fnIdx) override; 36 void exit(int fnIdx) override; 37 void scope(int delta) override; 38 39 private: 40 std::vector<TraceInfo>* fTraceInfo; 41 }; 42 43 } // namespace SkSL 44 45 #endif 46