Working on profiler
parent
e2f270be70
commit
2b37b76d65
|
@ -1,6 +1,12 @@
|
||||||
IN: temporary
|
IN: temporary
|
||||||
USING: tools.profiler tools.test kernel memory math threads
|
USING: tools.profiler tools.test kernel memory math threads
|
||||||
alien tools.profiler.private ;
|
alien tools.profiler.private sequences ;
|
||||||
|
|
||||||
|
[ t ] [
|
||||||
|
\ length profile-counter
|
||||||
|
10 [ { } length drop ] times
|
||||||
|
\ length profile-counter =
|
||||||
|
] unit-test
|
||||||
|
|
||||||
[ ] [ [ 10 [ data-gc ] times ] profile ] unit-test
|
[ ] [ [ 10 [ data-gc ] times ] profile ] unit-test
|
||||||
|
|
||||||
|
@ -26,3 +32,13 @@ alien tools.profiler.private ;
|
||||||
] profile
|
] profile
|
||||||
|
|
||||||
[ 1 ] [ \ foobar profile-counter ] unit-test
|
[ 1 ] [ \ foobar profile-counter ] unit-test
|
||||||
|
|
||||||
|
: fooblah { } [ ] each ;
|
||||||
|
|
||||||
|
: foobaz fooblah fooblah ;
|
||||||
|
|
||||||
|
[ foobaz ] profile
|
||||||
|
|
||||||
|
[ 1 ] [ \ foobaz profile-counter ] unit-test
|
||||||
|
|
||||||
|
[ 2 ] [ \ fooblah profile-counter ] unit-test
|
||||||
|
|
|
@ -36,7 +36,7 @@ void *get_rel_symbol(F_REL *rel, CELL literals_start)
|
||||||
return undefined_symbol;
|
return undefined_symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CELL xt_offset;
|
bool profiling_p_;
|
||||||
|
|
||||||
/* Compute an address to store at a relocation */
|
/* Compute an address to store at a relocation */
|
||||||
INLINE CELL compute_code_rel(F_REL *rel,
|
INLINE CELL compute_code_rel(F_REL *rel,
|
||||||
|
@ -56,10 +56,9 @@ INLINE CELL compute_code_rel(F_REL *rel,
|
||||||
return CREF(words_start,REL_ARGUMENT(rel));
|
return CREF(words_start,REL_ARGUMENT(rel));
|
||||||
case RT_XT:
|
case RT_XT:
|
||||||
word = untag_word(get(CREF(words_start,REL_ARGUMENT(rel))));
|
word = untag_word(get(CREF(words_start,REL_ARGUMENT(rel))));
|
||||||
if(word->compiledp == F)
|
return (CELL)word->code
|
||||||
return (CELL)word->code + sizeof(F_COMPILED);
|
+ sizeof(F_COMPILED)
|
||||||
else
|
+ (profiling_p_ ? 0 : word->code->profiler_prologue);
|
||||||
return (CELL)word->code + sizeof(F_COMPILED) + xt_offset;
|
|
||||||
case RT_XT_PROFILING:
|
case RT_XT_PROFILING:
|
||||||
word = untag_word(get(CREF(words_start,REL_ARGUMENT(rel))));
|
word = untag_word(get(CREF(words_start,REL_ARGUMENT(rel))));
|
||||||
return (CELL)word->code + sizeof(F_COMPILED);
|
return (CELL)word->code + sizeof(F_COMPILED);
|
||||||
|
@ -140,7 +139,7 @@ void relocate_code_block(F_COMPILED *relocating, CELL code_start,
|
||||||
{
|
{
|
||||||
if(reloc_start != literals_start)
|
if(reloc_start != literals_start)
|
||||||
{
|
{
|
||||||
xt_offset = (profiling_p() ? 0 : relocating->profiler_prologue);
|
profiling_p_ = profiling_p();
|
||||||
|
|
||||||
F_REL *rel = (F_REL *)reloc_start;
|
F_REL *rel = (F_REL *)reloc_start;
|
||||||
F_REL *rel_end = (F_REL *)literals_start;
|
F_REL *rel_end = (F_REL *)literals_start;
|
||||||
|
|
|
@ -8,13 +8,13 @@ bool profiling_p(void)
|
||||||
void profiling_word(F_WORD *word)
|
void profiling_word(F_WORD *word)
|
||||||
{
|
{
|
||||||
/* If we just enabled the profiler, reset call count */
|
/* If we just enabled the profiler, reset call count */
|
||||||
// if(profiling_p())
|
if(profiling_p())
|
||||||
// word->counter = tag_fixnum(0);
|
word->counter = tag_fixnum(0);
|
||||||
//
|
|
||||||
// if(word->compiledp == F)
|
if(word->compiledp == F)
|
||||||
// default_word_xt(word);
|
default_word_xt(word);
|
||||||
// else
|
else
|
||||||
// set_word_xt(word,word->code);
|
set_word_xt(word,word->code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_profiling(bool profiling)
|
void set_profiling(bool profiling)
|
||||||
|
|
Loading…
Reference in New Issue