void RoutingServiceExample::RouteReceivedCallback(Eegeo::Web::IWebResponse& webResponse) { const std::vector<Byte> *responseData = webResponse.TransferResourceDataOwnership(); size_t responseSize = responseData->size(); std::string responseString(reinterpret_cast<const char*>(responseData->data()), responseSize); Eegeo_DELETE responseData; Eegeo::Routes::Webservice::JsonRouteParser resultParser(m_world.GetWorkPool()); Eegeo::Routes::Style::RouteStyle routeStyle(&m_routeThicknessPolicy, Eegeo::Routes::Style::RouteStyle::DebugStyleNone, Eegeo::Rendering::LayerIds::InteriorEntities, true); // this will asynchronously parse the result and add the resulting route to m_routeService resultParser.CreateRouteFromJSON(responseString, m_routeService, routeStyle); }
bool UBFileSystemUtils::isAZipFile(QString &filePath) { if(QFileInfo(filePath).isDir()) return false; QFile file(filePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; bool result = false; QByteArray responseArray = file.readLine(10); QString responseString(responseArray); result = responseString.startsWith("pk", Qt::CaseInsensitive); file.close(); return result; }
/***************************************************************************\ * Instance methods * \***************************************************************************/ ComponentPtr DefaultDialogComponentGenerator::getResponseComponent(DialogInterfacePtr Parent, const boost::any& Value) { std::string responseString(""); try { responseString = lexical_cast(Value); } catch (boost::bad_lexical_cast &) { std::cout<<"Unable to display response"<<std::endl; } ButtonPtr TheResponseButton = Button::Ptr::dcast(getResponseButtonPrototype()->shallowCopy()); beginEditCP(TheResponseButton, Button::TextFieldMask); TheResponseButton->setText(responseString); endEditCP(TheResponseButton, Button::TextFieldMask); return TheResponseButton; }
bool OctreeServer::handleHTTPRequest(HTTPConnection* connection, const QString& path) { #ifdef FORCE_CRASH if (connection->requestOperation() == QNetworkAccessManager::GetOperation && path == "/force_crash") { qDebug() << "About to force a crash!"; int foo; int* forceCrash = &foo; QString responseString("forcing a crash..."); connection->respond(HTTPConnection::StatusCode200, qPrintable(responseString)); delete[] forceCrash; return true; } #endif bool showStats = false; if (connection->requestOperation() == QNetworkAccessManager::GetOperation) { if (path == "/") { showStats = true; } else if (path == "/resetStats") { _octreeInboundPacketProcessor->resetStats(); resetSendingStats(); showStats = true; } } if (showStats) { quint64 checkSum; // return a 200 QString statsString("<html><doc>\r\n<pre>\r\n"); statsString += QString("<b>Your %1 Server is running... <a href='/'>[RELOAD]</a></b>\r\n").arg(getMyServerName()); tm* localtm = localtime(&_started); const int MAX_TIME_LENGTH = 128; char buffer[MAX_TIME_LENGTH]; strftime(buffer, MAX_TIME_LENGTH, "%m/%d/%Y %X", localtm); statsString += QString("Running since: %1").arg(buffer); // Convert now to tm struct for UTC tm* gmtm = gmtime(&_started); if (gmtm) { strftime(buffer, MAX_TIME_LENGTH, "%m/%d/%Y %X", gmtm); statsString += (QString(" [%1 UTM] ").arg(buffer)); } statsString += "\r\n"; quint64 now = usecTimestampNow(); const int USECS_PER_MSEC = 1000; quint64 msecsElapsed = (now - _startedUSecs) / USECS_PER_MSEC; const int MSECS_PER_SEC = 1000; const int SECS_PER_MIN = 60; const int MIN_PER_HOUR = 60; const int MSECS_PER_MIN = MSECS_PER_SEC * SECS_PER_MIN; float seconds = (msecsElapsed % MSECS_PER_MIN)/(float)MSECS_PER_SEC; int minutes = (msecsElapsed/(MSECS_PER_MIN)) % MIN_PER_HOUR; int hours = (msecsElapsed/(MSECS_PER_MIN * MIN_PER_HOUR)); statsString += "Uptime: "; if (hours > 0) { statsString += QString("%1 hour").arg(hours); if (hours > 1) { statsString += QString("s"); } } if (minutes > 0) { if (hours > 0) { statsString += QString(" "); } statsString += QString("%1 minute").arg(minutes); if (minutes > 1) { statsString += QString("s"); } } if (seconds > 0) { if (hours > 0 || minutes > 0) { statsString += QString(" "); } statsString += QString().sprintf("%.3f seconds", seconds); } statsString += "\r\n\r\n"; // display voxel file load time if (isInitialLoadComplete()) { if (isPersistEnabled()) { statsString += QString("%1 File Persist Enabled...\r\n").arg(getMyServerName()); } else { statsString += QString("%1 File Persist Disabled...\r\n").arg(getMyServerName()); } statsString += "\r\n"; quint64 msecsElapsed = getLoadElapsedTime() / USECS_PER_MSEC;; float seconds = (msecsElapsed % MSECS_PER_MIN)/(float)MSECS_PER_SEC; int minutes = (msecsElapsed/(MSECS_PER_MIN)) % MIN_PER_HOUR; int hours = (msecsElapsed/(MSECS_PER_MIN * MIN_PER_HOUR)); statsString += QString("%1 File Load Took ").arg(getMyServerName()); if (hours > 0) { statsString += QString("%1 hour").arg(hours); if (hours > 1) { statsString += QString("s"); } } if (minutes > 0) { if (hours > 0) { statsString += QString(" "); } statsString += QString("%1 minute").arg(minutes); if (minutes > 1) { statsString += QString("s"); } } if (seconds >= 0) { if (hours > 0 || minutes > 0) { statsString += QString(" "); } statsString += QString().sprintf("%.3f seconds", seconds); } statsString += "\r\n"; } else { statsString += "Voxels not yet loaded...\r\n"; } statsString += "\r\n\r\n"; statsString += "<b>Configuration:</b>\r\n"; for (int i = 1; i < _argc; i++) { statsString += _argv[i]; } statsString += "\r\n"; //one to end the config line statsString += "\r\n\r\n"; // two more for spacing // display scene stats unsigned long nodeCount = OctreeElement::getNodeCount(); unsigned long internalNodeCount = OctreeElement::getInternalNodeCount(); unsigned long leafNodeCount = OctreeElement::getLeafNodeCount(); QLocale locale(QLocale::English); const float AS_PERCENT = 100.0; statsString += "<b>Current Nodes in scene:</b>\r\n"; statsString += QString(" Total Nodes: %1 nodes\r\n").arg(locale.toString((uint)nodeCount).rightJustified(16, ' ')); statsString += QString().sprintf(" Internal Nodes: %s nodes (%5.2f%%)\r\n", locale.toString((uint)internalNodeCount).rightJustified(16, ' ').toLocal8Bit().constData(), ((float)internalNodeCount / (float)nodeCount) * AS_PERCENT); statsString += QString().sprintf(" Leaf Nodes: %s nodes (%5.2f%%)\r\n", locale.toString((uint)leafNodeCount).rightJustified(16, ' ').toLocal8Bit().constData(), ((float)leafNodeCount / (float)nodeCount) * AS_PERCENT); statsString += "\r\n"; statsString += "\r\n"; // display outbound packet stats statsString += QString("<b>%1 Outbound Packet Statistics... " "<a href='/resetStats'>[RESET]</a></b>\r\n").arg(getMyServerName()); quint64 totalOutboundPackets = OctreeSendThread::_totalPackets; quint64 totalOutboundBytes = OctreeSendThread::_totalBytes; quint64 totalWastedBytes = OctreeSendThread::_totalWastedBytes; quint64 totalBytesOfOctalCodes = OctreePacketData::getTotalBytesOfOctalCodes(); quint64 totalBytesOfBitMasks = OctreePacketData::getTotalBytesOfBitMasks(); quint64 totalBytesOfColor = OctreePacketData::getTotalBytesOfColor(); const int COLUMN_WIDTH = 19; statsString += QString(" Configured Max PPS/Client: %1 pps/client\r\n") .arg(locale.toString((uint)getPacketsPerClientPerSecond()).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Configured Max PPS/Server: %1 pps/server\r\n\r\n") .arg(locale.toString((uint)getPacketsTotalPerSecond()).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Clients Connected: %1 clients\r\n\r\n") .arg(locale.toString((uint)getCurrentClientCount()).rightJustified(COLUMN_WIDTH, ' ')); float averageLoopTime = getAverageLoopTime(); statsString += QString().sprintf(" Average packetLoop() time: %7.2f msecs\r\n", averageLoopTime); float averageInsideTime = getAverageInsideTime(); statsString += QString().sprintf(" Average 'inside' time: %9.2f usecs\r\n\r\n", averageInsideTime); int allWaitTimes = _extraLongTreeWait +_longTreeWait + _shortTreeWait + _noTreeWait; float averageTreeWaitTime = getAverageTreeWaitTime(); statsString += QString().sprintf(" Average tree lock wait time:" " %9.2f usecs samples: %12d \r\n", averageTreeWaitTime, allWaitTimes); float zeroVsTotal = (allWaitTimes > 0) ? ((float)_noTreeWait / (float)allWaitTimes) : 0.0f; statsString += QString().sprintf(" No Lock Wait:" " (%6.2f%%) samples: %12d \r\n", zeroVsTotal * AS_PERCENT, _noTreeWait); float shortVsTotal = (allWaitTimes > 0) ? ((float)_shortTreeWait / (float)allWaitTimes) : 0.0f; statsString += QString().sprintf(" Avg tree lock short wait time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageTreeShortWaitTime.getAverage(), shortVsTotal * AS_PERCENT, _shortTreeWait); float longVsTotal = (allWaitTimes > 0) ? ((float)_longTreeWait / (float)allWaitTimes) : 0.0f; statsString += QString().sprintf(" Avg tree lock long wait time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageTreeLongWaitTime.getAverage(), longVsTotal * AS_PERCENT, _longTreeWait); float extraLongVsTotal = (allWaitTimes > 0) ? ((float)_extraLongTreeWait / (float)allWaitTimes) : 0.0f; statsString += QString().sprintf(" Avg tree lock extra long wait time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n\r\n", _averageTreeExtraLongWaitTime.getAverage(), extraLongVsTotal * AS_PERCENT, _extraLongTreeWait); float averageEncodeTime = getAverageEncodeTime(); statsString += QString().sprintf(" Average encode time: %9.2f usecs\r\n", averageEncodeTime); int allEncodeTimes = _noEncode + _shortEncode + _longEncode + _extraLongEncode; float zeroVsTotalEncode = (allEncodeTimes > 0) ? ((float)_noEncode / (float)allEncodeTimes) : 0.0f; statsString += QString().sprintf(" No Encode:" " (%6.2f%%) samples: %12d \r\n", zeroVsTotalEncode * AS_PERCENT, _noEncode); float shortVsTotalEncode = (allEncodeTimes > 0) ? ((float)_shortEncode / (float)allEncodeTimes) : 0.0f; statsString += QString().sprintf(" Avg short encode time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageShortEncodeTime.getAverage(), shortVsTotalEncode * AS_PERCENT, _shortEncode); float longVsTotalEncode = (allEncodeTimes > 0) ? ((float)_longEncode / (float)allEncodeTimes) : 0.0f; statsString += QString().sprintf(" Avg long encode time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageLongEncodeTime.getAverage(), longVsTotalEncode * AS_PERCENT, _longEncode); float extraLongVsTotalEncode = (allEncodeTimes > 0) ? ((float)_extraLongEncode / (float)allEncodeTimes) : 0.0f; statsString += QString().sprintf(" Avg extra long encode time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n\r\n", _averageExtraLongEncodeTime.getAverage(), extraLongVsTotalEncode * AS_PERCENT, _extraLongEncode); float averageCompressAndWriteTime = getAverageCompressAndWriteTime(); statsString += QString().sprintf(" Average compress and write time: %9.2f usecs\r\n", averageCompressAndWriteTime); int allCompressTimes = _noCompress + _shortCompress + _longCompress + _extraLongCompress; float zeroVsTotalCompress = (allCompressTimes > 0) ? ((float)_noCompress / (float)allCompressTimes) : 0.0f; statsString += QString().sprintf(" No compression:" " (%6.2f%%) samples: %12d \r\n", zeroVsTotalCompress * AS_PERCENT, _noCompress); float shortVsTotalCompress = (allCompressTimes > 0) ? ((float)_shortCompress / (float)allCompressTimes) : 0.0f; statsString += QString().sprintf(" Avg short compress time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageShortCompressTime.getAverage(), shortVsTotalCompress * AS_PERCENT, _shortCompress); float longVsTotalCompress = (allCompressTimes > 0) ? ((float)_longCompress / (float)allCompressTimes) : 0.0f; statsString += QString().sprintf(" Avg long compress time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n", _averageLongCompressTime.getAverage(), longVsTotalCompress * AS_PERCENT, _longCompress); float extraLongVsTotalCompress = (allCompressTimes > 0) ? ((float)_extraLongCompress / (float)allCompressTimes) : 0.0f; statsString += QString().sprintf(" Avg extra long compress time:" " %9.2f usecs (%6.2f%%) samples: %12d \r\n\r\n", _averageExtraLongCompressTime.getAverage(), extraLongVsTotalCompress * AS_PERCENT, _extraLongCompress); float averagePacketSendingTime = getAveragePacketSendingTime(); statsString += QString().sprintf(" Average packet sending time: %9.2f usecs (includes node lock)\r\n", averagePacketSendingTime); float noVsTotalSend = (_averagePacketSendingTime.getSampleCount() > 0) ? ((float)_noSend / (float)_averagePacketSendingTime.getSampleCount()) : 0.0f; statsString += QString().sprintf(" Not sending:" " (%6.2f%%) samples: %12d \r\n", noVsTotalSend * AS_PERCENT, _noSend); float averageNodeWaitTime = getAverageNodeWaitTime(); statsString += QString().sprintf(" Average node lock wait time: %9.2f usecs\r\n", averageNodeWaitTime); statsString += QString().sprintf("--------------------------------------------------------------\r\n"); float encodeToInsidePercent = averageInsideTime == 0.0f ? 0.0f : (averageEncodeTime / averageInsideTime) * AS_PERCENT; statsString += QString().sprintf(" encode ratio: %5.2f%%\r\n", encodeToInsidePercent); float waitToInsidePercent = averageInsideTime == 0.0f ? 0.0f : ((averageTreeWaitTime + averageNodeWaitTime) / averageInsideTime) * AS_PERCENT; statsString += QString().sprintf(" waiting ratio: %5.2f%%\r\n", waitToInsidePercent); float compressAndWriteToInsidePercent = averageInsideTime == 0.0f ? 0.0f : (averageCompressAndWriteTime / averageInsideTime) * AS_PERCENT; statsString += QString().sprintf(" compress and write ratio: %5.2f%%\r\n", compressAndWriteToInsidePercent); float sendingToInsidePercent = averageInsideTime == 0.0f ? 0.0f : (averagePacketSendingTime / averageInsideTime) * AS_PERCENT; statsString += QString().sprintf(" sending ratio: %5.2f%%\r\n", sendingToInsidePercent); statsString += QString("\r\n"); statsString += QString(" Total Outbound Packets: %1 packets\r\n") .arg(locale.toString((uint)totalOutboundPackets).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Outbound Bytes: %1 bytes\r\n") .arg(locale.toString((uint)totalOutboundBytes).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Wasted Bytes: %1 bytes\r\n") .arg(locale.toString((uint)totalWastedBytes).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString().sprintf(" Total OctalCode Bytes: %s bytes (%5.2f%%)\r\n", locale.toString((uint)totalBytesOfOctalCodes).rightJustified(COLUMN_WIDTH, ' ').toLocal8Bit().constData(), ((float)totalBytesOfOctalCodes / (float)totalOutboundBytes) * AS_PERCENT); statsString += QString().sprintf(" Total BitMasks Bytes: %s bytes (%5.2f%%)\r\n", locale.toString((uint)totalBytesOfBitMasks).rightJustified(COLUMN_WIDTH, ' ').toLocal8Bit().constData(), ((float)totalBytesOfBitMasks / (float)totalOutboundBytes) * AS_PERCENT); statsString += QString().sprintf(" Total Color Bytes: %s bytes (%5.2f%%)\r\n", locale.toString((uint)totalBytesOfColor).rightJustified(COLUMN_WIDTH, ' ').toLocal8Bit().constData(), ((float)totalBytesOfColor / (float)totalOutboundBytes) * AS_PERCENT); statsString += "\r\n"; statsString += "\r\n"; // display inbound packet stats statsString += QString().sprintf("<b>%s Edit Statistics... <a href='/resetStats'>[RESET]</a></b>\r\n", getMyServerName()); quint64 averageTransitTimePerPacket = _octreeInboundPacketProcessor->getAverageTransitTimePerPacket(); quint64 averageProcessTimePerPacket = _octreeInboundPacketProcessor->getAverageProcessTimePerPacket(); quint64 averageLockWaitTimePerPacket = _octreeInboundPacketProcessor->getAverageLockWaitTimePerPacket(); quint64 averageProcessTimePerElement = _octreeInboundPacketProcessor->getAverageProcessTimePerElement(); quint64 averageLockWaitTimePerElement = _octreeInboundPacketProcessor->getAverageLockWaitTimePerElement(); quint64 totalElementsProcessed = _octreeInboundPacketProcessor->getTotalElementsProcessed(); quint64 totalPacketsProcessed = _octreeInboundPacketProcessor->getTotalPacketsProcessed(); float averageElementsPerPacket = totalPacketsProcessed == 0 ? 0 : totalElementsProcessed / totalPacketsProcessed; statsString += QString(" Total Inbound Packets: %1 packets\r\n") .arg(locale.toString((uint)totalPacketsProcessed).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Inbound Elements: %1 elements\r\n") .arg(locale.toString((uint)totalElementsProcessed).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString().sprintf(" Average Inbound Elements/Packet: %f elements/packet\r\n", averageElementsPerPacket); statsString += QString(" Average Transit Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageTransitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Process Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageProcessTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Wait Lock Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Process Time/Element: %1 usecs\r\n") .arg(locale.toString((uint)averageProcessTimePerElement).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Wait Lock Time/Element: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerElement).rightJustified(COLUMN_WIDTH, ' ')); int senderNumber = 0; NodeToSenderStatsMap& allSenderStats = _octreeInboundPacketProcessor->getSingleSenderStats(); for (NodeToSenderStatsMapIterator i = allSenderStats.begin(); i != allSenderStats.end(); i++) { senderNumber++; QUuid senderID = i->first; SingleSenderStats& senderStats = i->second; statsString += QString("\r\n Stats for sender %1 uuid: %2\r\n") .arg(senderNumber).arg(senderID.toString()); averageTransitTimePerPacket = senderStats.getAverageTransitTimePerPacket(); averageProcessTimePerPacket = senderStats.getAverageProcessTimePerPacket(); averageLockWaitTimePerPacket = senderStats.getAverageLockWaitTimePerPacket(); averageProcessTimePerElement = senderStats.getAverageProcessTimePerElement(); averageLockWaitTimePerElement = senderStats.getAverageLockWaitTimePerElement(); totalElementsProcessed = senderStats.getTotalElementsProcessed(); totalPacketsProcessed = senderStats.getTotalPacketsProcessed(); averageElementsPerPacket = totalPacketsProcessed == 0 ? 0 : totalElementsProcessed / totalPacketsProcessed; statsString += QString(" Total Inbound Packets: %1 packets\r\n") .arg(locale.toString((uint)totalPacketsProcessed).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Total Inbound Elements: %1 elements\r\n") .arg(locale.toString((uint)totalElementsProcessed).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString().sprintf(" Average Inbound Elements/Packet: %f elements/packet\r\n", averageElementsPerPacket); statsString += QString(" Average Transit Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageTransitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Process Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageProcessTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Wait Lock Time/Packet: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerPacket).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Process Time/Element: %1 usecs\r\n") .arg(locale.toString((uint)averageProcessTimePerElement).rightJustified(COLUMN_WIDTH, ' ')); statsString += QString(" Average Wait Lock Time/Element: %1 usecs\r\n") .arg(locale.toString((uint)averageLockWaitTimePerElement).rightJustified(COLUMN_WIDTH, ' ')); } statsString += "\r\n\r\n"; // display memory usage stats statsString += "<b>Current Memory Usage Statistics</b>\r\n"; statsString += QString().sprintf("\r\nOctreeElement size... %ld bytes\r\n", sizeof(OctreeElement)); statsString += "\r\n"; const char* memoryScaleLabel; const float MEGABYTES = 1000000.f; const float GIGABYTES = 1000000000.f; float memoryScale; if (OctreeElement::getTotalMemoryUsage() / MEGABYTES < 1000.0f) { memoryScaleLabel = "MB"; memoryScale = MEGABYTES; } else { memoryScaleLabel = "GB"; memoryScale = GIGABYTES; } statsString += QString().sprintf("Element Node Memory Usage: %8.2f %s\r\n", OctreeElement::getVoxelMemoryUsage() / memoryScale, memoryScaleLabel); statsString += QString().sprintf("Octcode Memory Usage: %8.2f %s\r\n", OctreeElement::getOctcodeMemoryUsage() / memoryScale, memoryScaleLabel); statsString += QString().sprintf("External Children Memory Usage: %8.2f %s\r\n", OctreeElement::getExternalChildrenMemoryUsage() / memoryScale, memoryScaleLabel); statsString += " -----------\r\n"; statsString += QString().sprintf(" Total: %8.2f %s\r\n", OctreeElement::getTotalMemoryUsage() / memoryScale, memoryScaleLabel); statsString += "\r\n"; statsString += "OctreeElement Children Population Statistics...\r\n"; checkSum = 0; for (int i=0; i <= NUMBER_OF_CHILDREN; i++) { checkSum += OctreeElement::getChildrenCount(i); statsString += QString().sprintf(" Nodes with %d children: %s nodes (%5.2f%%)\r\n", i, locale.toString((uint)OctreeElement::getChildrenCount(i)).rightJustified(16, ' ').toLocal8Bit().constData(), ((float)OctreeElement::getChildrenCount(i) / (float)nodeCount) * AS_PERCENT); } statsString += " ----------------------\r\n"; statsString += QString(" Total: %1 nodes\r\n") .arg(locale.toString((uint)checkSum).rightJustified(16, ' ')); #ifdef BLENDED_UNION_CHILDREN statsString += "\r\n"; statsString += "OctreeElement Children Encoding Statistics...\r\n"; statsString += QString().sprintf(" Single or No Children: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getSingleChildrenCount(), ((float)OctreeElement::getSingleChildrenCount() / (float)nodeCount) * AS_PERCENT)); statsString += QString().sprintf(" Two Children as Offset: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getTwoChildrenOffsetCount(), ((float)OctreeElement::getTwoChildrenOffsetCount() / (float)nodeCount) * AS_PERCENT)); statsString += QString().sprintf(" Two Children as External: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getTwoChildrenExternalCount(), ((float)OctreeElement::getTwoChildrenExternalCount() / (float)nodeCount) * AS_PERCENT); statsString += QString().sprintf(" Three Children as Offset: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getThreeChildrenOffsetCount(), ((float)OctreeElement::getThreeChildrenOffsetCount() / (float)nodeCount) * AS_PERCENT); statsString += QString().sprintf(" Three Children as External: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getThreeChildrenExternalCount(), ((float)OctreeElement::getThreeChildrenExternalCount() / (float)nodeCount) * AS_PERCENT); statsString += QString().sprintf(" Children as External Array: %10.llu nodes (%5.2f%%)\r\n", OctreeElement::getExternalChildrenCount(), ((float)OctreeElement::getExternalChildrenCount() / (float)nodeCount) * AS_PERCENT); checkSum = OctreeElement::getSingleChildrenCount() + OctreeElement::getTwoChildrenOffsetCount() + OctreeElement::getTwoChildrenExternalCount() + OctreeElement::getThreeChildrenOffsetCount() + OctreeElement::getThreeChildrenExternalCount() + OctreeElement::getExternalChildrenCount(); statsString += " ----------------\r\n"; statsString += QString().sprintf(" Total: %10.llu nodes\r\n", checkSum); statsString += QString().sprintf(" Expected: %10.lu nodes\r\n", nodeCount); statsString += "\r\n"; statsString += "In other news....\r\n"; statsString += QString().sprintf("could store 4 children internally: %10.llu nodes\r\n", OctreeElement::getCouldStoreFourChildrenInternally()); statsString += QString().sprintf("could NOT store 4 children internally: %10.llu nodes\r\n", OctreeElement::getCouldNotStoreFourChildrenInternally()); #endif statsString += "\r\n\r\n"; statsString += "</pre>\r\n"; statsString += "</doc></html>"; connection->respond(HTTPConnection::StatusCode200, qPrintable(statsString), "text/html"); return true; } else { // have HTTPManager attempt to process this request from the document_root return false;