vm: add primitives to lift sample data to factor
parent
3dd17537eb
commit
e10c3183c8
|
@ -94,5 +94,46 @@ void factor_vm::primitive_sampling_profiler()
|
||||||
set_sampling_profiler(to_boolean(ctx->pop()));
|
set_sampling_profiler(to_boolean(ctx->pop()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void factor_vm::primitive_get_samples()
|
||||||
|
{
|
||||||
|
if (sampling_profiler_p || samples.empty()) {
|
||||||
|
ctx->push(false_object);
|
||||||
|
} else {
|
||||||
|
data_root<array> samples_array(allot_array(samples.size(), false_object),this);
|
||||||
|
std::vector<profiling_sample>::const_iterator from_iter = samples.begin();
|
||||||
|
cell to_i = 0;
|
||||||
|
|
||||||
|
for (; from_iter != samples.end(); ++from_iter, ++to_i)
|
||||||
|
{
|
||||||
|
data_root<array> sample(allot_array(4, false_object),this);
|
||||||
|
|
||||||
|
set_array_nth(sample.untagged(),0,from_unsigned_cell(from_iter->sample_count));
|
||||||
|
set_array_nth(sample.untagged(),1,from_unsigned_cell(from_iter->gc_sample_count));
|
||||||
|
set_array_nth(sample.untagged(),2,allot_alien((void*)from_iter->ctx));
|
||||||
|
|
||||||
|
cell callstack_size = from_iter->callstack_end - from_iter->callstack_begin;
|
||||||
|
data_root<array> callstack(allot_array(callstack_size,false_object),this);
|
||||||
|
|
||||||
|
std::vector<code_block*>::const_iterator
|
||||||
|
callstacks_begin = sample_callstacks.begin(),
|
||||||
|
c_from_iter = callstacks_begin + from_iter->callstack_begin,
|
||||||
|
c_from_iter_end = callstacks_begin + from_iter->callstack_end;
|
||||||
|
cell c_to_i = 0;
|
||||||
|
|
||||||
|
for (; c_from_iter != c_from_iter_end; ++c_from_iter, ++c_to_i)
|
||||||
|
set_array_nth(callstack.untagged(),c_to_i,(*c_from_iter)->owner);
|
||||||
|
|
||||||
|
set_array_nth(sample.untagged(),3,callstack.value());
|
||||||
|
|
||||||
|
set_array_nth(samples_array.untagged(),to_i,sample.value());
|
||||||
|
}
|
||||||
|
ctx->push(samples_array.value());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void factor_vm::primitive_clear_samples()
|
||||||
|
{
|
||||||
|
clear_samples();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,6 +198,8 @@ struct factor_vm
|
||||||
void end_sampling_profiler();
|
void end_sampling_profiler();
|
||||||
void set_sampling_profiler(bool sampling);
|
void set_sampling_profiler(bool sampling);
|
||||||
void primitive_sampling_profiler();
|
void primitive_sampling_profiler();
|
||||||
|
void primitive_get_samples();
|
||||||
|
void primitive_clear_samples();
|
||||||
|
|
||||||
// errors
|
// errors
|
||||||
void general_error(vm_error_type error, cell arg1, cell arg2);
|
void general_error(vm_error_type error, cell arg1, cell arg2);
|
||||||
|
|
Loading…
Reference in New Issue