git-svn-id: svn://db.shs.com.ru/libs@559 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -7,31 +7,6 @@
|
||||
#include "pichunkstream.h"
|
||||
#include "ccm_piintrospector.h"
|
||||
|
||||
#include <cxxabi.h>
|
||||
const QString demangle(const char * name) {
|
||||
int status = -4;
|
||||
char * res = abi::__cxa_demangle(name, NULL, NULL, &status);
|
||||
QString ret((status == 0) ? res : name);
|
||||
free(res);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
enum ColumnContainers {
|
||||
ccType,
|
||||
ccCount,
|
||||
ccItems,
|
||||
ccBytesAllocated,
|
||||
ccBytesUsed,
|
||||
};
|
||||
|
||||
enum ColumnObjects {
|
||||
coClassName,
|
||||
coName,
|
||||
coParents,
|
||||
coQueuedEvents,
|
||||
};
|
||||
|
||||
|
||||
QPIIntrospector::QPIIntrospector(QWidget * parent): EMainWindow(parent), peer("__introspection_client__") {
|
||||
setupUi(this);
|
||||
@@ -48,16 +23,19 @@ QPIIntrospector::QPIIntrospector(QWidget * parent): EMainWindow(parent), peer("_
|
||||
CONNECTU(&peer, peerConnectedEvent, this, reqProcPIEvents);
|
||||
CONNECTU(&peer, peerDisconnectedEvent, this, reqProcPIEvents);
|
||||
CONNECTU(&peer, dataReceivedEvent, this, reqProcPIEvents);
|
||||
session.addEntry(this);
|
||||
session.addEntry(tabWidgetMain);
|
||||
PICodeInfo::EnumInfo * ei = PICodeInfo::enumsInfo->value("PIIntrospection::InfoTypes");
|
||||
if (ei) {
|
||||
piForeachC (PICodeInfo::EnumeratorInfo & e, ei->members) {
|
||||
QCheckBox * cb = new QCheckBox(PI2QString(e.name.mid(2)));
|
||||
cb->setObjectName(QString("checkRequest%1").arg(e.value));
|
||||
cb->setProperty("__value__", e.value);
|
||||
layoutRequestFlags->addWidget(cb);
|
||||
session.addEntry(cb);
|
||||
}
|
||||
}
|
||||
//startTimer(100);
|
||||
session.addEntry(this);
|
||||
session.load();
|
||||
peer.start();
|
||||
}
|
||||
@@ -123,53 +101,13 @@ void QPIIntrospector::showInfo(const PIIntrospection::ProcessInfo & info) {
|
||||
}
|
||||
|
||||
|
||||
void QPIIntrospector::showContainers(const PIMap<uint, PIIntrospectionContainers::Type> & data, const PIMap<uint, PIString> & typenames) {
|
||||
int vpos = treeContainers->verticalScrollBar()->value();
|
||||
treeContainers->clear();
|
||||
for (auto i = data.constBegin(); i != data.constEnd(); ++i) {
|
||||
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||
ti->setText(ccType, demangle(typenames.value(i.key(), PIString::fromNumber(i.key())).dataAscii()));
|
||||
ti->setText(ccCount, QString::number(i.value().count));
|
||||
ti->setText(ccItems, QString::number(i.value().items));
|
||||
ti->setText(ccBytesAllocated, PI2QString(PIString::readableSize(i.value().bytes_allocated)));
|
||||
ti->setText(ccBytesUsed, PI2QString(PIString::readableSize(i.value().bytes_used)));
|
||||
treeContainers->addTopLevelItem(ti);
|
||||
}
|
||||
treeContainers->verticalScrollBar()->setValue(vpos);
|
||||
}
|
||||
|
||||
|
||||
void QPIIntrospector::showObjects(const PIVector<PIIntrospection::ObjectInfo> & objects) {
|
||||
QHash<QString, int> stat;
|
||||
|
||||
int vpos = treeObjects->verticalScrollBar()->value();
|
||||
treeObjects->clear();
|
||||
piForeachC (PIIntrospection::ObjectInfo & i, objects) {
|
||||
stat[PI2QString(i.classname)]++;
|
||||
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||
ti->setText(coClassName, PI2QString(i.classname));
|
||||
ti->setText(coName, PI2QString(i.name));
|
||||
ti->setText(coParents, PI2QString(i.parents.join(":")));
|
||||
ti->setText(coQueuedEvents, QString::number(i.queued_events));
|
||||
treeObjects->addTopLevelItem(ti);
|
||||
}
|
||||
treeObjects->verticalScrollBar()->setValue(vpos);
|
||||
|
||||
vpos = treeObjectsStat->verticalScrollBar()->value();
|
||||
treeObjectsStat->clear();
|
||||
for (auto i = stat.constBegin(); i != stat.constEnd(); ++i) {
|
||||
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||
ti->setText(0, i.key());
|
||||
ti->setText(1, QString::number(i.value()));
|
||||
treeObjectsStat->addTopLevelItem(ti);
|
||||
}
|
||||
treeObjectsStat->verticalScrollBar()->setValue(vpos);
|
||||
}
|
||||
|
||||
|
||||
void QPIIntrospector::on_listApp_currentRowChanged(int r) {
|
||||
if (r < 0) cur_server.clear();
|
||||
else cur_server = Q2PIString(listApp->item(r)->text());
|
||||
PIString cs;
|
||||
if (r < 0) cs.clear();
|
||||
else cs = Q2PIString(listApp->item(r)->text());
|
||||
if (cur_server != cs)
|
||||
widgetContainers->clear();
|
||||
cur_server = cs;
|
||||
}
|
||||
|
||||
|
||||
@@ -195,13 +133,13 @@ void QPIIntrospector::peerReceived(const PIString & from, const PIByteArray & da
|
||||
PIMap<uint, PIIntrospectionContainers::Type> data;
|
||||
PIMap<uint, PIString> typenames;
|
||||
PIIntrospection::unpackContainers(pba, data, typenames);
|
||||
showContainers(data, typenames);
|
||||
widgetContainers->showContainers(data, typenames);
|
||||
} break;
|
||||
case 4: {
|
||||
cs.get(pba);
|
||||
PIVector<PIIntrospection::ObjectInfo> objects;
|
||||
PIIntrospection::unpackObjects(pba, objects);
|
||||
showObjects(objects);
|
||||
widgetObjects->showObjects(objects);
|
||||
} break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user