Annotation of parser3/src/targets/cgi/pa_pool.C, revision 1.8
1.4 paf 1: /** @file
2: Parser: CGI memory manager impl.
3:
1.1 paf 4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
1.4 paf 5:
1.1 paf 6: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
7:
1.8 ! parser 8: $Id: pa_pool.C,v 1.7 2001/05/15 14:31:58 parser Exp $
1.1 paf 9: */
10:
11: #include <stdlib.h>
12:
13: #include "pa_pool.h"
14:
1.6 parser 15: #include "pa_sapi.h"
16: #include "pa_common.h"
1.7 parser 17: #include <typeinfo.h>
18: #include "pa_value.h"
19:
20: #include "pa_array.h"
21: #include "pa_common.h"
22: #include "pa_dir.h"
23: #include "pa_exception.h"
24: #include "pa_exec.h"
25: #include "pa_globals.h"
26: #include "pa_hash.h"
27: #include "pa_opcode.h"
28: #include "pa_pool.h"
29: #include "pa_request.h"
30: #include "pa_sapi.h"
31: #include "pa_socks.h"
32: #include "pa_sql_connection.h"
33: #include "pa_sql_driver_manager.h"
34: #include "pa_stack.h"
35: #include "pa_string.h"
36: #include "pa_table.h"
37: #include "pa_threads.h"
38: #include "pa_types.h"
39: #include "pa_version.h"
40:
41: #include "pa_valiased.h"
42: #include "pa_value.h"
43: #include "pa_vbool.h"
44: #include "pa_vclass.h"
45: #include "pa_vcode_frame.h"
46: #include "pa_vcookie.h"
47: #include "pa_vdouble.h"
48: #include "pa_venv.h"
49: #include "pa_vfile.h"
50: #include "pa_vform.h"
51: #include "pa_vhash.h"
52: #include "pa_vimage.h"
53: #include "pa_vint.h"
54: #include "pa_vjunction.h"
55: #include "pa_vmethod_frame.h"
56: #include "pa_vobject.h"
57: #include "pa_vrequest.h"
58: #include "pa_vresponse.h"
59: #include "pa_vstateless_class.h"
60: #include "pa_vstateless_object.h"
61: #include "pa_vstring.h"
62: #include "pa_vtable.h"
63: #include "pa_vunknown.h"
64: #include "pa_wcontext.h"
65: #include "pa_wwrapper.h"
66:
1.6 parser 67: #define MALLOC_STAT_MAXSIZE (0x400*0x400)
1.7 parser 68: #define MALLOC_STAT_PLACES 10
69:
70: int malloc_times[MALLOC_STAT_PLACES][MALLOC_STAT_MAXSIZE];
71: int malloc_places[MALLOC_STAT_PLACES];
1.6 parser 72:
73: void log_pool_stats(Pool& pool) {
1.7 parser 74: #define ST(type_name) \
75: SAPI::log(pool, \
76: "%4d %s", \
77: sizeof(type_name), #type_name);
78: ST(Value);
79: ST( Array);
80: ST(Exception);
81: ST(ffblk);
82: ST(Hash);
83: ST(Junction);
84: ST(Method);
85: ST(Methoded);
86: ST(Methoded_array);
87: ST(MethodParams);
88: ST(Operation);
89: ST(Origin);
90: ST(Pool);
91: ST(Pooled);
92: ST(Request);
93: ST(SAPI);
94: ST(SQL_Connection);
95: ST(SQL_Driver);
96: ST(SQL_Driver_manager);
97: ST(SQL_Driver_services);
98: ST(Stack);
99: ST(String);
100: ST(Table);
101: ST(Temp_alias);
102: ST(Temp_exception);
103: ST(Temp_lang);
104: ST(Temp_method);
105: ST(VAliased);
106: ST(Value);
107: ST(VBool);
108: ST(VClass);
109: ST(VCodeFrame);
110: ST(VCookie);
111: ST(VDouble);
112: ST(VEnv);
113: ST(VFile);
114: ST(VForm);
115: ST(VHash);
116: ST(VImage);
117: ST(VInt);
118: ST(VJunction);
119: ST(VMethodFrame);
120: ST(VObject);
121: ST(VRequest);
122: ST(VResponse);
123: ST(VStateless_class);
124: ST(VStateless_object);
125: ST(VString);
126: ST(VTable);
127: ST(VUnknown);
128: ST(WContext);
129: ST(WWrapper);
130:
131:
132: for(int place=0; place<MALLOC_STAT_PLACES; place++)
133: if(malloc_places[place]) {
134: SAPI::log(pool,
135: "place:times %10d:%10d",
136: place,
137: malloc_places[place]);
138: int total_size=0, total_times=0;
139: for(int i=0; i<MALLOC_STAT_MAXSIZE; i++)
140: if(malloc_times[place][i]) {
141: total_size+=i*malloc_times[place][i];
142: total_times+=malloc_times[place][i];
143: SAPI::log(pool,
144: "%10d*%10d=%10d",
145: i,
146: malloc_times[place][i],
147: i*malloc_times[place][i]);
148: }
1.6 parser 149: SAPI::log(pool,
1.7 parser 150: "total %d/%d",
151: total_size,
152: total_times);
153: }
1.6 parser 154: }
1.5 parser 155:
1.7 parser 156: void *Pool::real_malloc(size_t size, int place) {
157: int index=min(MALLOC_STAT_MAXSIZE-1, size);
1.8 ! parser 158: /* if(size==497688) {
! 159: _asm {
! 160: int 3;
! 161: };
! 162: }*/
1.7 parser 163: /*if(size==132 && type_name)
164: SAPI::log(*this, "type_name:%s", type_name);*/
165: malloc_times[place][index]++;
166: malloc_places[place]++;
1.1 paf 167: return ::malloc(size);
168: }
169:
170: void *Pool::real_calloc(size_t size) {
171: return ::calloc(size, 1);
172: }
E-mail: