/* * Copyright 2022 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * This is an experimental (and probably temporary) solution that allows * to compare performance SkVM blitters vs RasterPipeline blitters. * In addition to measuring performance (which is questionable) it also produces * other counts (pixels, scanlines) and more detailed traces that * can explain the current results (SkVM is slower) and help improve it. * The entire code is hidden under build flag skia_compare_vm_vs_rp=true * and will not appear at all without it. * * In order to collect the tracing information SkVM Blitters should run with SKVM_BLITTER_TRACE_ON * and RasterPipeline Blitters with RASTER_PIPELINE_BLITTER_TRACE_ON. */ #ifndef SkBlitterTrace_DEFINED #define SkBlitterTrace_DEFINED #include #include #include "src/utils/SkBlitterTraceCommon.h" #ifdef SKIA_COMPARE_VM_VS_RP #if !defined(SK_BLITTER_TRACE_IS_SKVM) && !defined(SK_BLITTER_TRACE_IS_RASTER_PIPELINE) #error "One blitter trace type should be defined if we have flag skia_compare_vm_vs_rp flag = true." #endif #if defined(SK_BLITTER_TRACE_IS_SKVM) && defined(SK_BLITTER_TRACE_IS_RASTER_PIPELINE) #error "Only one blitter trace type should be defined." #endif #ifdef SK_BLITTER_TRACE_IS_SKVM SkBlitterTrace gSkVMBlitterTrace("VM", false); #define SK_BLITTER_TRACE_STEP(name, trace, scanlines, pixels) \ SkBlitterTrace::Step name(trace ? &gSkVMBlitterTrace : nullptr, \ #name, \ scanlines, \ pixels) #endif #ifdef SK_BLITTER_TRACE_IS_RASTER_PIPELINE SkBlitterTrace gSkRPBlitterTrace("RP", false); #define SK_BLITTER_TRACE_STEP(name, trace, scanlines, pixels) \ SkBlitterTrace::Step name(trace ? &gSkRPBlitterTrace : nullptr, \ #name, \ scanlines, \ pixels) #endif #define SK_BLITTER_TRACE_STEP_ACCUMULATE(step, pixels) \ step.add(/*scanlines=*/0, /*pixels=*/run) #else #define INITIATE_BLITTER_TRACE(type) SK_BLITTER_TRACE_NO_CODE #define SK_BLITTER_TRACE_STEP(name, trace, scanlines, pixels) SK_BLITTER_TRACE_NO_CODE #define SK_BLITTER_TRACE_STEP_ACCUMULATE(step, pixels) SK_BLITTER_TRACE_NO_CODE #endif #endif // SkBlitterTrace_DEFINED