/* * 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. */ #ifndef SkCycles_DEFINED #define SkCycles_DEFINED #include #include class SkCycles { public: static uint64_t Now() { #ifndef SKIA_COMPARE_VM_VS_RP { return 0ul; } #elif defined(SK_BUILD_FOR_WIN) { return 0ul; } #elif defined(SK_BUILD_FOR_IOS) { return 0ul; } #elif defined(SK_BUILD_FOR_ANDROID) { return 0ul; } #elif defined(SK_CPU_X86) { unsigned aux; return __rdtscp(&aux); } #elif defined(SK_CPU_ARM64) { int64_t cycles; asm volatile("mrs %0, cntvct_el0" : "=r"(cycles)); return cycles; } #else { return 0ul; } #endif } }; #endif // SkCycles_DEFINED