//===========================================================================// // File: evtstat.cpp // // Project: MUNGA Brick: Event Manager // // Contents: interface specification of event manager // //---------------------------------------------------------------------------// // Date Who Modification // // -------- --- ---------------------------------------------------------- // // 05/15/96 ECH Initial coding. // //---------------------------------------------------------------------------// // Copyright (C) 1994-1995, Virtual World Entertainment, Inc. // // PROPRIETARY AND CONFIDENTIAL // //===========================================================================// #include #pragma hdrstop #if !defined(EVTSTAT_HPP) # include #endif #if !defined(APP_HPP) # include #endif #if !defined(REGISTRY_HPP) # include #endif #if !defined(ENTITY_HPP) # include #endif //############################################################################# //########################## EventStatistics ############################ //############################################################################# // //############################################################################# //############################################################################# // EventStatistics::EventStatistics( ClassID class_ID, Receiver::MessageID message_ID ): classID(class_ID), messageID(message_ID), eventCount(0) { } //############################################################################# //######################## EventStatisticsManager ####################### //############################################################################# EventStatisticsManager event_statistics_manager; // //############################################################################# //############################################################################# // EventStatisticsManager::EventStatisticsManager(): eventStatisticsSocket(NULL, True) { printedReport = False; } // //############################################################################# //############################################################################# // void EventStatisticsManager::Maintain(Event *event) { Check(this); Check(event); // // If the application is not running then it is not time to collect // statistics yet // Check(application); if (application->GetApplicationState() != Application::RunningMission) return; // // Add statistics for this event // ClassID class_ID; Receiver::MessageID message_ID; long index_value; EventStatistics *event_statistics; message_ID = event->messageToSend->messageID; class_ID = event->targetReceiver.GetCurrent()->GetClassID(); index_value = class_ID * 1000 + message_ID; // HACK to create unique key if ((event_statistics = eventStatisticsSocket.Find(index_value)) == NULL) { event_statistics = new EventStatistics(class_ID, message_ID); eventStatisticsSocket.AddValue(event_statistics, index_value); } Check(event_statistics); event_statistics->eventCount++; } // //############################################################################# //############################################################################# // void EventStatisticsManager::Report() { Check(this); // // Print Report // TableIteratorOf iterator(&eventStatisticsSocket); EventStatistics *event_statistics; DEBUG_STREAM << "EventStatisticsManager::Report - event_count=" << iterator.GetSize() << "\n"; while ((event_statistics = iterator.ReadAndNext()) != NULL) { Check(event_statistics); Registry *registry; Entity::SharedData *shared_data; Derivation *derivation; Receiver::MessageHandlerSet *handlers; DEBUG_STREAM << "EventStatisticsManager::Report -\t"; DEBUG_STREAM << event_statistics->classID << "\t"; DEBUG_STREAM << event_statistics->messageID << "\t"; DEBUG_STREAM << event_statistics->eventCount << "\t"; Check(application); if ((registry = application->GetRegistry()) != NULL) { Check(registry); shared_data = registry->GetStaticData(event_statistics->classID); if (shared_data != NULL) { Check(shared_data); derivation = shared_data->derivedClasses; Check(derivation); handlers = shared_data->activeMessageHandlers; Check(handlers); DEBUG_STREAM << derivation->className << "::" << handlers->GetName(event_statistics->messageID) << "\t"; } } DEBUG_STREAM << "\n"; } iterator.DeletePlugs(); }