Revert "Add SkVM op trace_done
to indicate completion of debug tracing."
This reverts commit 062652067b
.
Reason for revert: design change removes need for this op
Original change's description:
> Add SkVM op `trace_done` to indicate completion of debug tracing.
>
> This op can be used to invoke a callback function and dump the log to
> disk when it is ready. SkRuntimeEffect doesn't have any other viable
> mechanisms for detecting that a paint has completed, AFAIK. We can
> wait for ~SkRTShader to occur, but there's no guarantee that this will
> happen quickly, and the SkPaint with the SkRTShader shader can be reused
> over and over again.
>
> Unlike other trace ops, this only needs a trace mask, not an execution
> mask (we are unconditionally done at the end of main).
>
> Change-Id: I6f7ee41f2005b65940d36dee892279d4f245509f
> Bug: skia:12708
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/479876
> Auto-Submit: John Stiles <johnstiles@google.com>
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Brian Osman <brianosman@google.com>
Bug: skia:12708
Change-Id: Ic4c4f5dd72541195f07ca32035267a20a82536e7
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/481577
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
This commit is contained in:
parent
b7f5278009
commit
3856a5854e
@ -270,7 +270,6 @@ namespace skvm {
|
||||
VarSlot{immB}, "=", V{z}); break;
|
||||
case Op::trace_enter: write(o, op, TraceHookID{immA}, V{x}, V{y}, FnIdx{immB}); break;
|
||||
case Op::trace_exit: write(o, op, TraceHookID{immA}, V{x}, V{y}, FnIdx{immB}); break;
|
||||
case Op::trace_done: write(o, op, TraceHookID{immA}, V{x}); break;
|
||||
|
||||
case Op::store8: write(o, op, Ptr{immA}, V{x} ); break;
|
||||
case Op::store16: write(o, op, Ptr{immA}, V{x} ); break;
|
||||
@ -395,7 +394,6 @@ namespace skvm {
|
||||
R{x}, R{y}, FnIdx{immB}); break;
|
||||
case Op::trace_exit: write(o, op, TraceHookID{immA},
|
||||
R{x}, R{y}, FnIdx{immB}); break;
|
||||
case Op::trace_done: write(o, op, TraceHookID{immA}, R{x}); break;
|
||||
|
||||
case Op::store8: write(o, op, Ptr{immA}, R{x} ); break;
|
||||
case Op::store16: write(o, op, Ptr{immA}, R{x} ); break;
|
||||
@ -671,12 +669,6 @@ namespace skvm {
|
||||
if (this->isImm(traceMask.id,~0)) { traceMask = mask; }
|
||||
(void)push(Op::trace_exit, mask.id,traceMask.id,NA,NA, traceHookID, fnIdx);
|
||||
}
|
||||
void Builder::trace_done(int traceHookID, I32 traceMask) {
|
||||
SkASSERT(traceHookID >= 0);
|
||||
SkASSERT(traceHookID < (int)fTraceHooks.size());
|
||||
if (this->isImm(traceMask.id, 0)) { return; }
|
||||
(void)push(Op::trace_done, traceMask.id,NA,NA,NA, traceHookID);
|
||||
}
|
||||
|
||||
void Builder::store8 (Ptr ptr, I32 val) { (void)push(Op::store8 , val.id,NA,NA,NA, ptr.ix); }
|
||||
void Builder::store16(Ptr ptr, I32 val) { (void)push(Op::store16, val.id,NA,NA,NA, ptr.ix); }
|
||||
@ -2665,7 +2657,6 @@ namespace skvm {
|
||||
case Op::trace_var:
|
||||
case Op::trace_enter:
|
||||
case Op::trace_exit:
|
||||
case Op::trace_done:
|
||||
/* Force this program to run in the interpreter. */
|
||||
return false;
|
||||
|
||||
@ -3604,7 +3595,6 @@ namespace skvm {
|
||||
case Op::trace_var:
|
||||
case Op::trace_enter:
|
||||
case Op::trace_exit:
|
||||
case Op::trace_done:
|
||||
/* Force this program to run in the interpreter. */
|
||||
return false;
|
||||
|
||||
@ -3976,7 +3966,6 @@ namespace skvm {
|
||||
case Op::trace_var:
|
||||
case Op::trace_enter:
|
||||
case Op::trace_exit:
|
||||
case Op::trace_done:
|
||||
/* Force this program to run in the interpreter. */
|
||||
return false;
|
||||
|
||||
|
@ -434,7 +434,7 @@ namespace skvm {
|
||||
// Order matters a little: Ops <=store128 are treated as having side effects.
|
||||
#define SKVM_OPS(M) \
|
||||
M(assert_true) \
|
||||
M(trace_line) M(trace_var) M(trace_enter) M(trace_exit) M(trace_done) \
|
||||
M(trace_line) M(trace_var) M(trace_enter) M(trace_exit) \
|
||||
M(store8) M(store16) M(store32) M(store64) M(store128) \
|
||||
M(load8) M(load16) M(load32) M(load64) M(load128) \
|
||||
M(index) \
|
||||
@ -474,11 +474,11 @@ namespace skvm {
|
||||
return Op::store8 <= op && op <= Op::index;
|
||||
}
|
||||
static inline bool is_trace(Op op) {
|
||||
return Op::trace_line <= op && op <= Op::trace_done;
|
||||
return Op::trace_line <= op && op <= Op::trace_exit;
|
||||
}
|
||||
|
||||
using Val = int;
|
||||
// We reserve an impossible Val ID as a sentinel
|
||||
// We reserve an impossibe Val ID as a sentinel
|
||||
// NA meaning none, n/a, null, nil, etc.
|
||||
static const Val NA = -1;
|
||||
|
||||
@ -611,7 +611,6 @@ namespace skvm {
|
||||
virtual void var(int slot, int32_t val) = 0;
|
||||
virtual void enter(int fnIdx) = 0;
|
||||
virtual void exit(int fnIdx) = 0;
|
||||
virtual void done() = 0;
|
||||
};
|
||||
|
||||
class Builder {
|
||||
@ -649,7 +648,6 @@ namespace skvm {
|
||||
void trace_var (int traceHookID, I32 mask, I32 traceMask, int slot, I32 val);
|
||||
void trace_enter(int traceHookID, I32 mask, I32 traceMask, int fnIdx);
|
||||
void trace_exit (int traceHookID, I32 mask, I32 traceMask, int fnIdx);
|
||||
void trace_done (int traceHookID, I32 traceMask);
|
||||
|
||||
// Store {8,16,32,64,128}-bit varying.
|
||||
void store8 (Ptr ptr, I32 val);
|
||||
|
@ -250,12 +250,6 @@ namespace SkVMInterpreterTypes {
|
||||
}
|
||||
break;
|
||||
|
||||
CASE(Op::trace_done):
|
||||
if (should_trace(immA, x, x)) {
|
||||
traceHooks[immA]->done();
|
||||
}
|
||||
break;
|
||||
|
||||
CASE(Op::index): {
|
||||
const int iota[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,
|
||||
16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
|
||||
|
@ -82,14 +82,12 @@ namespace {
|
||||
fTrace->fTraceInfo.push_back({SkSL::SkVMTraceInfo::Op::kExit,
|
||||
/*data=*/{fnIdx, 0}});
|
||||
}
|
||||
void done() override {
|
||||
// TODO(skia:12708): write the trace here
|
||||
}
|
||||
|
||||
private:
|
||||
SkSL::SkVMDebugTrace* fTrace;
|
||||
};
|
||||
} // namespace
|
||||
}
|
||||
|
||||
|
||||
namespace SkSL {
|
||||
|
||||
@ -395,10 +393,6 @@ void SkVMGenerator::writeProgram(SkSpan<skvm::Val> uniforms,
|
||||
this->setupGlobals(uniforms, device);
|
||||
size_t returnSlot = this->writeFunction(function, arguments);
|
||||
|
||||
if (fDebugTrace) {
|
||||
fBuilder->trace_done(fTraceHookID, fTraceMask);
|
||||
}
|
||||
|
||||
// Copy the value from the return slot into outReturn.
|
||||
SkASSERT(function.declaration().returnType().slotCount() == outReturn.size());
|
||||
for (size_t i = 0; i < outReturn.size(); ++i) {
|
||||
|
@ -886,7 +886,6 @@ DEF_TEST(SkVM_trace_line, r) {
|
||||
void var(int, int32_t) override { fBuffer.push_back(-9999999); }
|
||||
void enter(int) override { fBuffer.push_back(-9999999); }
|
||||
void exit(int) override { fBuffer.push_back(-9999999); }
|
||||
void done() override { fBuffer.push_back(-9999999); }
|
||||
void line(int lineNum) override { fBuffer.push_back(lineNum); }
|
||||
|
||||
std::vector<int> fBuffer;
|
||||
@ -912,7 +911,6 @@ DEF_TEST(SkVM_trace_var, r) {
|
||||
void line(int) override { fBuffer.push_back(-9999999); }
|
||||
void enter(int) override { fBuffer.push_back(-9999999); }
|
||||
void exit(int) override { fBuffer.push_back(-9999999); }
|
||||
void done() override { fBuffer.push_back(-9999999); }
|
||||
void var(int slot, int32_t val) override {
|
||||
fBuffer.push_back(slot);
|
||||
fBuffer.push_back(val);
|
||||
@ -940,7 +938,6 @@ DEF_TEST(SkVM_trace_enter_exit, r) {
|
||||
public:
|
||||
void line(int) override { fBuffer.push_back(-9999999); }
|
||||
void var(int, int32_t) override { fBuffer.push_back(-9999999); }
|
||||
void done() override { fBuffer.push_back(-9999999); }
|
||||
void enter(int fnIdx) override {
|
||||
fBuffer.push_back(fnIdx);
|
||||
fBuffer.push_back(1);
|
||||
@ -968,36 +965,12 @@ DEF_TEST(SkVM_trace_enter_exit, r) {
|
||||
REPORTER_ASSERT(r, (testTrace.fBuffer == std::vector<int>{12, 1, 56, 0}));
|
||||
}
|
||||
|
||||
DEF_TEST(SkVM_trace_done, r) {
|
||||
class TestTraceHook : public skvm::TraceHook {
|
||||
public:
|
||||
void line(int) override { fBuffer.push_back(-9999999); }
|
||||
void enter(int) override { fBuffer.push_back(-9999999); }
|
||||
void exit(int) override { fBuffer.push_back(-9999999); }
|
||||
void var(int, int32_t) override { fBuffer.push_back(-9999999); }
|
||||
void done() override { fBuffer.push_back(1); }
|
||||
|
||||
std::vector<int> fBuffer;
|
||||
};
|
||||
|
||||
skvm::Builder b;
|
||||
TestTraceHook testTrace;
|
||||
int traceHookID = b.attachTraceHook(&testTrace);
|
||||
b.trace_done(traceHookID, b.splat(0xFFFFFFFF));
|
||||
b.trace_done(traceHookID, b.splat(0x00000000));
|
||||
skvm::Program p = b.done();
|
||||
p.eval(1);
|
||||
|
||||
REPORTER_ASSERT(r, (testTrace.fBuffer == std::vector<int>{1}));
|
||||
}
|
||||
|
||||
DEF_TEST(SkVM_trace_multiple_hooks, r) {
|
||||
class TestTraceHook : public skvm::TraceHook {
|
||||
public:
|
||||
void var(int, int32_t) override { fBuffer.push_back(-9999999); }
|
||||
void enter(int) override { fBuffer.push_back(-9999999); }
|
||||
void exit(int) override { fBuffer.push_back(-9999999); }
|
||||
void done() override { fBuffer.push_back(-9999999); }
|
||||
void line(int lineNum) override { fBuffer.push_back(lineNum); }
|
||||
|
||||
std::vector<int> fBuffer;
|
||||
|
@ -48,7 +48,7 @@ F2 = float index_by_loop()
|
||||
F3 = float index_by_complex_loop()
|
||||
F4 = float index_out_of_bounds_checked()
|
||||
|
||||
54 registers, 180 instructions:
|
||||
54 registers, 179 instructions:
|
||||
0 r0 = uniform32 ptr0 0
|
||||
1 r1 = uniform32 ptr0 4
|
||||
2 r2 = uniform32 ptr0 8
|
||||
@ -225,8 +225,7 @@ loop:
|
||||
172 trace_var 0 r53 r53 $29 = r37
|
||||
173 trace_var 0 r53 r53 $30 = r41
|
||||
174 trace_var 0 r53 r53 $31 = r50
|
||||
175 trace_done 0 r53
|
||||
176 store32 ptr1 r1
|
||||
177 store32 ptr2 r37
|
||||
178 store32 ptr3 r41
|
||||
179 store32 ptr4 r50
|
||||
175 store32 ptr1 r1
|
||||
176 store32 ptr2 r37
|
||||
177 store32 ptr3 r41
|
||||
178 store32 ptr4 r50
|
||||
|
@ -37,7 +37,7 @@ $35 = c_mul_d (float, L43)
|
||||
$36 = d_mul_c (float, L44)
|
||||
F0 = half4 main(float2 xy)
|
||||
|
||||
13 registers, 61 instructions:
|
||||
13 registers, 60 instructions:
|
||||
0 r0 = uniform32 ptr0 0
|
||||
1 r1 = uniform32 ptr0 4
|
||||
2 r2 = uniform32 ptr0 8
|
||||
@ -95,8 +95,7 @@ loop:
|
||||
53 trace_line 0 r4 r4 L45
|
||||
54 trace_line 0 r4 r4 L47
|
||||
55 trace_exit 0 r4 r4 F0
|
||||
56 trace_done 0 r4
|
||||
57 store32 ptr1 r5
|
||||
58 store32 ptr2 r6
|
||||
59 store32 ptr3 r7
|
||||
60 store32 ptr4 r8
|
||||
56 store32 ptr1 r5
|
||||
57 store32 ptr2 r6
|
||||
58 store32 ptr3 r7
|
||||
59 store32 ptr4 r8
|
||||
|
@ -78,7 +78,7 @@ F8 = bool loop_operator_gt()
|
||||
F9 = bool loop_operator_eq()
|
||||
F10 = bool loop_operator_ne()
|
||||
|
||||
41 registers, 735 instructions:
|
||||
41 registers, 734 instructions:
|
||||
0 r0 = uniform32 ptr0 0
|
||||
1 r1 = uniform32 ptr0 4
|
||||
2 r2 = uniform32 ptr0 8
|
||||
@ -810,8 +810,7 @@ loop:
|
||||
727 trace_var 0 r34 r34 $11 = r33
|
||||
728 trace_var 0 r34 r34 $12 = r35
|
||||
729 trace_var 0 r34 r34 $13 = r36
|
||||
730 trace_done 0 r34
|
||||
731 store32 ptr1 r39
|
||||
732 store32 ptr2 r33
|
||||
733 store32 ptr3 r35
|
||||
734 store32 ptr4 r36
|
||||
730 store32 ptr1 r39
|
||||
731 store32 ptr2 r33
|
||||
732 store32 ptr3 r35
|
||||
733 store32 ptr4 r36
|
||||
|
@ -74,7 +74,7 @@ F7 = bool loop_operator_gt()
|
||||
F8 = bool loop_operator_eq()
|
||||
F9 = bool loop_operator_ne()
|
||||
|
||||
33 registers, 687 instructions:
|
||||
33 registers, 686 instructions:
|
||||
0 r0 = uniform32 ptr0 0
|
||||
1 r1 = uniform32 ptr0 4
|
||||
2 r2 = uniform32 ptr0 8
|
||||
@ -758,8 +758,7 @@ loop:
|
||||
679 trace_var 0 r26 r26 $11 = r25
|
||||
680 trace_var 0 r26 r26 $12 = r27
|
||||
681 trace_var 0 r26 r26 $13 = r31
|
||||
682 trace_done 0 r26
|
||||
683 store32 ptr1 r28
|
||||
684 store32 ptr2 r25
|
||||
685 store32 ptr3 r27
|
||||
686 store32 ptr4 r31
|
||||
682 store32 ptr1 r28
|
||||
683 store32 ptr2 r25
|
||||
684 store32 ptr3 r27
|
||||
685 store32 ptr4 r31
|
||||
|
@ -155,7 +155,7 @@ F5 = bool highp_param(float value)
|
||||
F6 = bool mediump_param(half value)
|
||||
F7 = bool lowp_param(half value)
|
||||
|
||||
22 registers, 246 instructions:
|
||||
22 registers, 245 instructions:
|
||||
0 r0 = uniform32 ptr0 0
|
||||
1 r1 = uniform32 ptr0 4
|
||||
2 r2 = uniform32 ptr0 8
|
||||
@ -398,8 +398,7 @@ loop:
|
||||
238 trace_var 0 r21 r21 $9 = r2
|
||||
239 trace_var 0 r21 r21 $10 = r3
|
||||
240 trace_var 0 r21 r21 $11 = r4
|
||||
241 trace_done 0 r21
|
||||
242 store32 ptr1 r1
|
||||
243 store32 ptr2 r2
|
||||
244 store32 ptr3 r3
|
||||
245 store32 ptr4 r4
|
||||
241 store32 ptr1 r1
|
||||
242 store32 ptr2 r2
|
||||
243 store32 ptr3 r3
|
||||
244 store32 ptr4 r4
|
||||
|
Loading…
Reference in New Issue
Block a user