コード例 #1
0
	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;
	}
コード例 #2
0
ファイル: Sampler.cpp プロジェクト: bsdf/trx
    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);
            }