staticvoid debug_trace() { void* stack[64]; int len = backtrace(stack, std::size(stack));
// As you might imagine, we can't use an SkSpinlock here... static SkMutex lock;
{
SkAutoMutexExclusive locked(lock);
fprintf(stderr, "\n");
backtrace_symbols_fd(stack, len, 2/*stderr*/);
fprintf(stderr, "\n");
}
} #else staticvoid debug_trace() {} #endif
// Renamed from "pause" to avoid conflict with function defined in unistd.h #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2 #include <emmintrin.h> staticvoid do_pause() { _mm_pause(); } #else staticvoid do_pause() { /*spin*/ } #endif
// To act as a mutex, we need an acquire barrier when we acquire the lock.
SK_POTENTIALLY_BLOCKING_REGION_BEGIN; while (fLocked.exchange(true, std::memory_order_acquire)) {
do_pause();
}
SK_POTENTIALLY_BLOCKING_REGION_END;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.