From b7873e621ef45badaa70e2d285998c486920df4a Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Mon, 6 Apr 2015 00:56:30 +0200 Subject: Benchmark for in-process writing. To measure overhead of the communication to the separate process. --- tests/dummyresourcebenchmark.cpp | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'tests') diff --git a/tests/dummyresourcebenchmark.cpp b/tests/dummyresourcebenchmark.cpp index 01d9ca4..7375ff8 100644 --- a/tests/dummyresourcebenchmark.cpp +++ b/tests/dummyresourcebenchmark.cpp @@ -7,6 +7,12 @@ #include "commands.h" #include "entitybuffer.h" +#include "event_generated.h" +#include "entity_generated.h" +#include "metadata_generated.h" +#include "createentity_generated.h" +#include "dummyresource/resourcefactory.h" + static void removeFromDisk(const QString &name) { Akonadi2::Storage store(Akonadi2::Store::storageLocation(), name, Akonadi2::Storage::ReadWrite); @@ -79,6 +85,65 @@ private Q_SLOTS: qDebug() << "All processed: " << allProcessedTime << "/sec " << num*1000/allProcessedTime; qDebug() << "Query Time: " << time.elapsed() << "/sec " << num*1000/time.elapsed(); } + + void testWriteInProcess() + { + QTime time; + time.start(); + int num = 10000; + + //Actual test + Akonadi2::Pipeline pipeline("org.kde.dummy"); + QSignalSpy revisionSpy(&pipeline, SIGNAL(revisionUpdated())); + DummyResource resource; + resource.configurePipeline(&pipeline); + + for (int i = 0; i < num; i++) { + flatbuffers::FlatBufferBuilder eventFbb; + eventFbb.Clear(); + { + auto summary = eventFbb.CreateString("summary"); + Akonadi2::Domain::Buffer::EventBuilder eventBuilder(eventFbb); + eventBuilder.add_summary(summary); + auto eventLocation = eventBuilder.Finish(); + Akonadi2::Domain::Buffer::FinishEventBuffer(eventFbb, eventLocation); + } + + flatbuffers::FlatBufferBuilder localFbb; + { + auto uid = localFbb.CreateString("testuid"); + auto localBuilder = Akonadi2::Domain::Buffer::EventBuilder(localFbb); + localBuilder.add_uid(uid); + auto location = localBuilder.Finish(); + Akonadi2::Domain::Buffer::FinishEventBuffer(localFbb, location); + } + + flatbuffers::FlatBufferBuilder entityFbb; + Akonadi2::EntityBuffer::assembleEntityBuffer(entityFbb, 0, 0, eventFbb.GetBufferPointer(), eventFbb.GetSize(), localFbb.GetBufferPointer(), localFbb.GetSize()); + + flatbuffers::FlatBufferBuilder fbb; + auto type = fbb.CreateString(Akonadi2::Domain::getTypeName().toStdString().data()); + auto delta = fbb.CreateVector(entityFbb.GetBufferPointer(), entityFbb.GetSize()); + Akonadi2::Commands::CreateEntityBuilder builder(fbb); + builder.add_domainType(type); + builder.add_delta(delta); + auto location = builder.Finish(); + Akonadi2::Commands::FinishCreateEntityBuffer(fbb, location); + + const QByteArray command(reinterpret_cast(fbb.GetBufferPointer()), fbb.GetSize()); + + resource.processCommand(Akonadi2::Commands::CreateEntityCommand, command, command.size(), &pipeline); + } + auto appendTime = time.elapsed(); + + //Wait until all messages have been processed + resource.processAllMessages().exec().waitForFinished(); + + auto allProcessedTime = time.elapsed(); + + qDebug() << "Append to messagequeue " << appendTime; + qDebug() << "All processed: " << allProcessedTime << "/sec " << num*1000/allProcessedTime; + } }; QTEST_MAIN(DummyResourceBenchmark) -- cgit v1.2.3