|
|
1.1 root 1: /*
2: * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1998 Apple Computer, Inc. All rights reserved.
24: *
25: * HISTORY
26: *
27: */
28:
29: #include <IOKit/IOKitDebug.h>
30: #include <IOKit/IOLib.h>
31: #include <IOKit/assert.h>
32: #include <IOKit/IODeviceTreeSupport.h>
33: #include <IOKit/IOService.h>
34:
35: #include <libkern/c++/OSContainers.h>
36: #include <libkern/c++/OSCPPDebug.h>
37:
38: extern "C" {
39:
40: SInt64 gIOKitDebug
41: #ifdef IOKITDEBUG
42: = IOKITDEBUG
43: #endif
44: ;
45:
46: int debug_malloc_size;
47: int debug_iomalloc_size;
48: int debug_container_malloc_size;
49: // int debug_ivars_size; // in OSObject.cpp
50:
51: void IOPrintPlane( const IORegistryPlane * plane )
52: {
53: IORegistryEntry * next;
54: IORegistryIterator * iter;
55: OSOrderedSet * all;
56: char format[] = "%xxxs";
57: IOService * service;
58:
59: iter = IORegistryIterator::iterateOver( plane );
60: assert( iter );
61: all = iter->iterateAll();
62: if( all) {
63: IOLog("Count %d\n", all->getCount() );
64: all->release();
65: } else
66: IOLog("Empty\n");
67:
68: iter->reset();
69: while( (next = iter->getNextObjectRecursive())) {
70: sprintf( format + 1, "%ds", next->getDepth( plane ));
71: IOLog( format, "");
72: if( (service = OSDynamicCast(IOService, next)))
73: IOLog("<%ld>", service->getBusyState());
74: IOLog( "%s\n", next->getName());
75: }
76: iter->release();
77: }
78:
79: void IOPrintMemory( void )
80: {
81:
82: // OSMetaClass::printInstanceCounts();
83:
84: IOLog("\n"
85: "ivar kalloc() 0x%08x\n"
86: "malloc() 0x%08x\n"
87: "containers kalloc() 0x%08x\n"
88: "IOMalloc() 0x%08x\n"
89: "----------------------------------------\n",
90: debug_ivars_size,
91: debug_malloc_size,
92: debug_container_malloc_size,
93: debug_iomalloc_size
94: );
95: }
96:
97: } /* extern "C" */
98:
99: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
100:
101: #define super OSObject
102: OSDefineMetaClassAndStructors(IOKitDiagnostics, OSObject)
103:
104: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
105:
106: OSObject * IOKitDiagnostics::diagnostics( void )
107: {
108: IOKitDiagnostics * diags;
109:
110: diags = new IOKitDiagnostics;
111: if( diags && !diags->init()) {
112: diags->release();
113: diags = 0;
114: }
115:
116: return( diags );
117: }
118:
119: void IOKitDiagnostics::updateOffset( OSDictionary * dict,
120: UInt32 value, const char * name )
121: {
122: OSNumber * off;
123:
124: off = OSNumber::withNumber( value, 32 );
125: if( !off)
126: return;
127:
128: dict->setObject( name, off );
129: off->release();
130: }
131:
132:
133: bool IOKitDiagnostics::serialize(OSSerialize *s) const
134: {
135: OSDictionary * dict;
136: bool ok;
137:
138: dict = OSDictionary::withCapacity( 5 );
139: if( !dict)
140: return( false );
141:
142: updateOffset( dict, debug_ivars_size, "Instance allocation" );
143: updateOffset( dict, debug_container_malloc_size, "Container allocation" );
144: updateOffset( dict, debug_iomalloc_size, "IOMalloc allocation" );
145:
146: dict->setObject( "Classes", OSMetaClass::getClassDictionary() );
147:
148: ok = dict->serialize( s );
149:
150: dict->release();
151:
152: return( ok );
153: }
154:
155: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.