diff --git a/src/tests/ProtoBuf.cpp b/src/tests/ProtoBuf.cpp new file mode 100644 index 000000000..682ab026d --- /dev/null +++ b/src/tests/ProtoBuf.cpp @@ -0,0 +1,213 @@ +#include +#include "Timer.h" +#include "Message.h" +#include "PacketDataStream.h" +#include "ProtoBuf.pb.h" + +int main(int argc, char **argv) { + QCoreApplication a(argc, argv); + Timer t; + + unsigned char buff[1024]; + + Authenticate apb; + + QString n = QLatin1String("My Name"); + QString p = QLatin1String("My Password"); + + int v; + + t.restart(); + for (int i=0;i<1000000;++i) { + MessageServerAuthenticate ma; + Message *m = &ma; + ma.uiSession = 1; + ma.iVersion = -1; + ma.qsUsername = n; + ma.qsPassword = p; + + PacketDataStream out(buff, 256); + m->messageToNetwork(out); + + PacketDataStream in(buff, out.size()); + delete m->networkToMessage(in); + + v = out.size(); + } + printf("MsgBased : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + Authenticate apb; + apb.set_version(-1); + apb.set_name(n.toStdString()); + apb.set_pw(p.toStdString()); + + std::string str; + + Universal u; + u.set_session(1); + * (u.mutable_authenticate()) = apb; + + u.SerializeToString(&str); + u.ParseFromString(str); + + const Authenticate &a = u.authenticate(); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + + + v = str.length(); + } + printf("ProtoBuf : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + Universal u; + u.set_session(1); + Authenticate *apb = u.mutable_authenticate(); + apb->set_version(-1); + apb->set_name(n.toStdString()); + apb->set_pw(p.toStdString()); + + std::string str; + + u.SerializeToString(&str); + u.ParseFromString(str); + + const Authenticate &a = u.authenticate(); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + + v = str.length(); + } + printf("PBDirect : %8lld %d\n", t.elapsed(), v); + + std::string sn = n.toStdString(); + std::string sp = p.toStdString(); + + t.restart(); + for (int i=0;i<1000000;++i) { + Universal u; + u.set_session(1); + Authenticate *apb = u.mutable_authenticate(); + apb->set_version(-1); + apb->set_name(sn); + apb->set_pw(sp); + + std::string str; + + u.SerializeToString(&str); + u.ParseFromString(str); + + const Authenticate &a = u.authenticate(); + + std::string nn = a.name(); + std::string np = a.pw(); + + v = str.length(); + } + printf("PBStdStr : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + Universal u; + u.set_session(1); + Authenticate *apb = u.mutable_authenticate(); + apb->set_version(-1); + apb->set_name(n.toStdString()); + apb->set_pw(p.toStdString()); + + std::string str; + + v = u.ByteSize(); + + u.SerializeToArray(buff, v); + u.ParseFromArray(buff, v); + + const Authenticate &a = u.authenticate(); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + } + printf("PBArray : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + Universal u; + u.set_session(1); + Authenticate *apb = u.MutableExtension(extauth); + apb->set_version(-1); + apb->set_name(n.toStdString()); + apb->set_pw(p.toStdString()); + + std::string str; + + v = u.ByteSize(); + + u.SerializeToArray(buff, v); + u.ParseFromArray(buff, v); + + const Authenticate &a = u.GetExtension(extauth); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + } + printf("PBExt : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + LongUniversal u; + u.set_session(1); + Authenticate *apb = u.mutable_z(); + apb->set_version(-1); + apb->set_name(n.toStdString()); + apb->set_pw(p.toStdString()); + + std::string str; + + v = u.ByteSize(); + + u.SerializeToArray(buff, v); + u.ParseFromArray(buff, v); + + const Authenticate &a = u.z(); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + } + printf("PBLong : %8lld %d\n", t.elapsed(), v); + + LongUniversal u; + t.restart(); + for (int i=0;i<1000000;++i) { + u.Clear(); + u.set_session(1); + Authenticate *apb = u.mutable_z(); + apb->set_version(-1); + apb->set_name(n.toStdString()); + apb->set_pw(p.toStdString()); + + std::string str; + + v = u.ByteSize(); + + u.SerializeToArray(buff, v); + u.ParseFromArray(buff, v); + + const Authenticate &a = u.z(); + + QString qn = QString::fromStdString(a.name()); + QString qp = QString::fromStdString(a.pw()); + } + printf("PBCache : %8lld %d\n", t.elapsed(), v); + + t.restart(); + for (int i=0;i<1000000;++i) { + QString nn = QString::fromStdString(n.toStdString()); + QString np = QString::fromStdString(p.toStdString()); + } + printf("QString : %8lld %d\n", t.elapsed(), v); +} diff --git a/src/tests/ProtoBuf.pro b/src/tests/ProtoBuf.pro new file mode 100644 index 000000000..352ac8795 --- /dev/null +++ b/src/tests/ProtoBuf.pro @@ -0,0 +1,18 @@ +TEMPLATE =app +CONFIG += qt thread warn_on release qtestlib no_keywords +LANGUAGE = C++ +TARGET = ProtoBuf +HEADERS = Message.h +PROTOS = ProtoBuf.proto +SOURCES = ProtoBuf.cpp Timer.cpp Message.cpp ProtoBuf.pb.cc +VPATH += .. proto +INCLUDEPATH += .. ../murmur ../mumble proto +LIBS += -lboost_signals -lprotobuf +QMAKE_CXXFLAGS *= -O3 + +protoc.output = ${QMAKE_FILE_BASE}.pb.cc ${QMAKE_FILE_BASE}.pb.h +protoc.commands = protoc ${QMAKE_FILE_NAME} --cpp_out=. +protoc.input = PROTOS +protoc.CONFIG *= no_link target_predeps + +QMAKE_EXTRA_COMPILERS *= protoc diff --git a/src/tests/ProtoBuf.proto b/src/tests/ProtoBuf.proto new file mode 100644 index 000000000..7b03151de --- /dev/null +++ b/src/tests/ProtoBuf.proto @@ -0,0 +1,55 @@ +option optimize_for = SPEED; + +message Authenticate { + required sint32 version = 1; + required string name = 2; + optional string pw = 3; +} + +message SomethingElse { + required sint32 thingy = 1; +} + +message Universal { + extensions 5 to max; + required uint32 session = 1; + optional Authenticate authenticate = 2; + optional SomethingElse somethingelse = 3; +} + +extend Universal { + optional Authenticate extauth = 5; + optional SomethingElse extelse = 6; +} + +message LongUniversal { + required uint32 session = 1; + optional Authenticate authenticate = 2; + optional SomethingElse somethingelse = 3; + optional Authenticate a = 4; + optional Authenticate b = 5; + optional Authenticate c = 6; + optional Authenticate d = 7; + optional Authenticate e = 8; + optional Authenticate f = 9; + optional Authenticate g = 10; + optional Authenticate h = 11; + optional Authenticate i = 12; + optional Authenticate j = 13; + optional Authenticate k = 14; + optional Authenticate l = 15; + optional Authenticate m = 16; + optional Authenticate n = 17; + optional Authenticate o = 18; + optional Authenticate p = 19; + optional Authenticate q = 20; + optional Authenticate r = 21; + optional Authenticate s = 22; + optional Authenticate t = 23; + optional Authenticate u = 24; + optional Authenticate v = 25; + optional Authenticate w = 26; + optional Authenticate x = 27; + optional Authenticate y = 28; + optional Authenticate z = 29; +}