Annotation of XNU/iokit/Kernel/IOKitDebug.cpp, revision 1.1

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: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.