int Sampler::sampleSpaceCheck(bool callback_ok) { if(!samples) return 0; uint32 sampleSize = sizeof(Sample); uint32 callStackDepth = core->callStack ? core->callStack->depth() : 0; sampleSize += callStackDepth * sizeof(StackTrace::Element); sampleSize += sizeof(uint64) * 2; if( callback && callback_ok && !runningCallback && currentSample+sampleSize+samples_size/3 > (samples + samples_size) && !core->GetGC()->Collecting() && !core->GetGC()->Reaping() ) { runningCallback = true; pauseSampling(); Atom args[1] = { nullObjectAtom }; Atom ret = callback->call(0, args); if( ret == falseAtom) stopSampling(); else startSampling(); runningCallback = false; } if(currentSample + sampleSize > samples+samples_size) { /* #ifdef AVMPLUS_VERBOSE core->console << "****** Exhausted Sample Buffer *******\n"; #endif */ // exhausted buffer stopSampling(); return 0; } return 1; }
int Sampler::sampleSpaceCheck(bool callback_ok) { if(!samples) return 0; uint32_t sampleSize = sizeof(Sample); uint32_t callStackDepth = core->callStack ? core->callStack->depth() : 0; sampleSize += callStackDepth * sizeof(StackTrace::Element); sampleSize += sizeof(uint64_t) * 2; if( callback && callback_ok && !runningCallback && currentSample+sampleSize+samples_size/3 > (samples + samples_size) && !core->GetGC()->Collecting() && !core->GetGC()->Reaping() ) { runningCallback = true; pauseSampling(); Atom args[1] = { nullObjectAtom }; Atom ret = AtomConstants::falseAtom; TRY(core, kCatchAction_Ignore) { ret = callback->call(0, args); }