threadprofile.c
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/************************************************************************
Copyright (C) 1999 NINTENDO CO,Ltd,
Copyright (C) 1999 MONEGI CORPORATION,
All Rights Reserved
This program is a trade secret of NINTENDO CO,Ltd and MONEGI Corp.
and it is not to be reproduced, published, disclosed to others, copied,
adapted, distributed, or displayed without the prior authorization of
NINTENDO CO,Ltd. and MONEGI Corp. Licensee agrees to attach or embed
this Notice on all copies of the program, including partial copies or
modified versions thereof.
*************************************************************************/
/************************************************************************
$Date: 2002/10/29 08:06:43 $
$Revision: 1.1.1.1 $
$Author: blythe $
************************************************************************/
#ifndef _FINALROM
#include <rdb.h>
#include <os_internal.h>
#include <os_thread.h>
#include "osint.h"
/* イニシャライズされたかどうかの判別フラグ */
u32 __osThprofFlag = 0;
/* プロファイラ本体へのcallback */
void * __osThprofFunc = NULL;
/* 前回のタイマー値保持用変数(u32) */
u32 __osThprofLastTimer;
/* プロファイル処理に入った合計カウント */
u32 __osThprofCount;
/* 各スレッド固有ワーク */
__OSThreadprofile_s thprof[THPROF_IDMAX];
/* スレッドプロファイラ実行中のローカルスタック */
u64 __osThprofHeap[THPROF_STACKSIZE];
u64 *__osThprofStack;
/* スレッドプロファイラ コールバック関数 */
/* exception.s 中で、ローカルスタックを設定して呼ぶこと */
void osThreadProfileCallback(OSThread *osthread)
{
register u32 now_time;
__OSThreadprofile_s *thprof;
now_time = osGetCount();
thprof = osthread->thprof;
/*
time は OSTime型 (u64) で累積される。
*/
thprof->time += (u64)(now_time - __osThprofLastTimer);
thprof->count++;
__osThprofCount++;
__osThprofLastTimer = now_time;
}
#endif /* #ifndef _FINALROM */