/* * RecordSample - record a sample in a specific thread */ void RecordSample( unsigned offset, unsigned short segment, DWORD real_tid ) { samp_block *old_samples; unsigned old_sample_index; unsigned old_sample_count; thread_info *ti; DWORD tid; ti = getThreadInfo( real_tid ); if( ti == NULL ) { return; } tid = ti->index; LastSampleIndex = ti->SampleIndex; if( ti->SampleIndex == 0 ) { ti->Samples->pref.tick = CurrTick; if( CallGraphMode ) { ti->CallGraph->pref.tick = CurrTick; } } ++CurrTick; ti->Samples->d.sample.sample[ti->SampleIndex].offset = offset; ti->Samples->d.sample.sample[ti->SampleIndex].segment = segment; ti->SampleIndex++; if( CallGraphMode ) { ti->SampleCount++; } if( CallGraphMode && tid == 0 ) { old_sample_count = SampleCount; old_samples = Samples; /* since RecordCGraph isn't */ old_sample_index = SampleIndex; /* used to threads, we fool */ Samples = ti->Samples; /* it into storing the info */ SampleIndex = ti->SampleIndex; /* in the right place by */ SampleCount = ti->SampleCount; RecordCGraph(); /* changing its pointers */ ti->Samples = Samples; /* and restoring them later */ ti->SampleIndex = SampleIndex; ti->SampleCount = SampleCount; Samples = old_samples; SampleIndex = old_sample_index; SampleCount = old_sample_count; } if( ti->SampleIndex >= Margin ) { StopAndSave(); } } /* RecordSample */
static void RecordSample( unsigned offset, unsigned tid ) { samp_block *old_samples; unsigned old_sample_index; unsigned old_sample_count; if( tid > MaxThread ) { GrowArrays( tid ); } --tid; LastSampleIndex = SampleIndexP[tid]; if( SampleIndexP[tid] == 0 ) { SamplesP[tid]->pref.tick = CurrTick; if( CallGraphMode ) { CallGraphP[tid]->pref.tick = CurrTick; } } ++CurrTick; SamplesP[tid]->d.sample.sample[SampleIndexP[tid]].offset = offset; SamplesP[tid]->d.sample.sample[SampleIndexP[tid]].segment = FlatSeg; SampleIndexP[tid]++; if( CallGraphMode ) { SampleCountP[tid]++; } if( CallGraphMode && tid == 0 ) { old_sample_count = SampleCount; old_samples = Samples; /* since RecordCGraph isn't */ old_sample_index = SampleIndex; /* used to threads, we fool */ Samples = SamplesP[tid]; /* it into storing the info */ SampleIndex = SampleIndexP[tid]; /* in the right place by */ SampleCount = SampleCountP[tid]; RecordCGraph(); /* changing its pointers */ SamplesP[tid] = Samples; /* and restoring them later */ SampleIndexP[tid] = SampleIndex; SampleCountP[tid] = SampleCount; Samples = old_samples; SampleIndex = old_sample_index; SampleCount = old_sample_count; } if( SampleIndexP[tid] >= Margin ) { StopAndSave(); } }
void RecordSample( unsigned long offset, unsigned short segment ) { if( InsiderTime == 1 && SamplerOff == 0 ) { LastSampleIndex = SampleIndex; if( SampleIndex == 0 ) { Samples->pref.tick = CurrTick; if( CallGraphMode ) { CallGraph->pref.tick = CurrTick; } } ++CurrTick; Samples->d.sample.sample[ SampleIndex ].offset = offset; Samples->d.sample.sample[ SampleIndex ].segment = segment; ++SampleIndex; ++SampleCount; if( CallGraphMode ) { RecordCGraph(); } } }