1/*---------------------------------------------------------------------------*
2 *  comp_stats.h  *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20#ifndef __COMP_STATS_H__
21#define __COMP_STATS_H__
22
23
24
25
26#include <stdlib.h>
27#include <stdio.h>
28
29#include "pstdio.h"
30
31#ifdef _WIN32
32#include <windows.h>
33typedef __int64 CS_TIME;
34typedef __int64 CS_ACC_TIME;
35#else
36typedef clock_t CS_TIME;
37typedef unsigned long CS_ACC_TIME;
38#endif
39
40#ifdef __vxworks
41/*
42 * the reason to rename the functions is:
43 * Xanavi project required to combine S2G and Solo together, Solo has the same API
44 * duplicate function names are not allowed in VxWorks
45 */
46#define init_comp_stats init_comp_stats_esr
47#define dump_comp_stats dump_comp_stats_esr
48
49#define init_cs_clock   init_cs_clock_esr
50#define print_cs_clock  print_cs_clock_esr
51
52#define start_cs_clock  start_cs_clock_esr
53#define end_cs_clock    end_cs_clock_esr
54
55#define reset_cs_clock  reset_cs_clock_esr
56#define reset_cs_clock  reset_cs_clock_esr
57#define make_cs_clock   make_cs_clock_esr
58
59#endif
60
61/**
62 * @todo document
63 */
64typedef struct CS_CLOCK_t
65{
66  CS_TIME last;
67  CS_ACC_TIME total_time;
68  double clocks_per_msec;
69  int ncalls;
70  int item_count;
71}
72CS_CLOCK;
73
74/**
75 * @todo document
76 */
77typedef struct COMP_STATS_t
78{
79  CS_CLOCK overall_search;
80  CS_CLOCK models;
81  CS_CLOCK fsm_to_hmm;
82  CS_CLOCK hmm_to_fsm;
83  CS_CLOCK internal_hmm;
84  CS_CLOCK epsilon;
85  CS_CLOCK prune;
86  CS_CLOCK front_end;
87  CS_CLOCK word_lookup;
88  CS_CLOCK word_addition;
89  float total_time;   /*in seconds*/
90  CS_CLOCK astar;
91}
92COMP_STATS;
93
94
95void reset_cs_clock(CS_CLOCK *clock);
96void init_cs_clock(CS_CLOCK *c);
97CS_CLOCK *make_cs_clock(void);
98
99#if defined(__cplusplus) && !defined(_ASCPP)
100extern "C"
101{
102#endif
103  COMP_STATS *init_comp_stats(void);
104  void start_cs_clock(CS_CLOCK *clock);
105  void end_cs_clock(CS_CLOCK *c, int count);
106#if defined(__cplusplus) && !defined(_ASCPP)
107}
108#endif
109
110void print_cs_clock(CS_CLOCK *c, float num_seconds, PFile* fp, char *prompt, char *item_name);
111void dump_comp_stats(COMP_STATS *c, PFile* fp);
112
113#if USE_COMP_STATS
114#if defined(__cplusplus) && !defined(_ASCPP)
115extern "C"
116{
117#endif
118  extern COMP_STATS *comp_stats;
119#if defined(__cplusplus) && !defined(_ASCPP)
120}
121#endif
122#define init_comp_stats1()        init_comp_stats()
123#define reset_cs_clock1( CLK)     reset_cs_clock( CLK)
124#define init_cs_clock1( CLK)      init_cs_clock( CLK)
125#define make_cs_clock1()          make_cs_clock()
126#define start_cs_clock1( CLK)     start_cs_clock( CLK)
127#define end_cs_clock1( CLK,CNT)   end_cs_clock( CLK,CNT)
128#define print_cs_clock1( CLK, NS,FP,PR,IN)  print_cs_clock( CLK, NS,FP,PR,IN)
129#define dump_comp_stats1( CS,FP)  dump_comp_stats( CS,FP)
130
131#else /* not USE_COMP_STATS */
132
133#define init_comp_stats1()
134#define reset_cs_clock1( CLK)
135#define init_cs_clock1( CLK)
136#define make_cs_clock1()
137#define start_cs_clock1( CLK)
138#define end_cs_clock1( CLK,CNT)
139#define print_cs_clock1( CLK, NS,FP,PR,IN)
140#define dump_comp_stats1( CS,FP)
141#endif
142
143#endif
144