From 024ef0b800ce2281a286423cc7baf9734116231b Mon Sep 17 00:00:00 2001 From: Michael Lotz Date: Sun, 7 Aug 2005 13:19:49 +0000 Subject: [PATCH] Fixing and adding more BMessage speed tests. Previously messages weren't written at all. This shows that Message2 is actually much faster than the R5 version in flattening. The current implementation is sometimes a lot faster than Message2 though but doesn't scale that well. Added libmessagetest.so to test specifically the BMessage implementation. Fixing some other unit tests along the way - quite many of them are borken. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13911 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../add-ons/media/plugins/musepack/main.cpp | 2 +- src/tests/kits/app/Jamfile | 14 + .../kits/app/bmessage/MessageSpeedTest.cpp | 285 +++++++++++++++++- .../kits/app/bmessage/MessageSpeedTest.h | 29 +- src/tests/kits/interface/bprintjob/Jamfile | 2 + src/tests/servers/app/painter/Jamfile | 5 +- src/tests/servers/input/prefs/Jamfile | 1 + 7 files changed, 321 insertions(+), 17 deletions(-) diff --git a/src/tests/add-ons/media/plugins/musepack/main.cpp b/src/tests/add-ons/media/plugins/musepack/main.cpp index 07a134dff3..201b685f6a 100644 --- a/src/tests/add-ons/media/plugins/musepack/main.cpp +++ b/src/tests/add-ons/media/plugins/musepack/main.cpp @@ -173,7 +173,7 @@ namespace media { status_t MediaExtractor::GetNextChunk(int32 stream, - void **chunkBuffer, int32 *chunkSize, + const void **chunkBuffer, size_t *chunkSize, media_header *mediaHeader) { return B_ERROR; diff --git a/src/tests/kits/app/Jamfile b/src/tests/kits/app/Jamfile index 92fdb1d911..b877682da0 100644 --- a/src/tests/kits/app/Jamfile +++ b/src/tests/kits/app/Jamfile @@ -17,6 +17,20 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) broster ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) broster testapps ] ; SEARCH_SOURCE += [ FDirName $(SUBDIR) common ] ; +CommonTestLib libmessagetest.so + : MessageTestAddon.cpp + MessageTest.cpp + MessageConstructTest.cpp + MessageDestructTest.cpp + MessageOpAssignTest.cpp + MessageEasyFindTest.cpp + MessageSpeedTest.cpp + : libopenbeos.so stdc++.r4 + : be stdc++.r4 + : + : app +; + CommonTestLib libapptest.so : AppKitTestAddon.cpp diff --git a/src/tests/kits/app/bmessage/MessageSpeedTest.cpp b/src/tests/kits/app/bmessage/MessageSpeedTest.cpp index f420ce37bd..0309baf11c 100644 --- a/src/tests/kits/app/bmessage/MessageSpeedTest.cpp +++ b/src/tests/kits/app/bmessage/MessageSpeedTest.cpp @@ -107,6 +107,29 @@ void TMessageSpeedTest::MessageSpeedTestLookup500Int32() << length << "usec" << endl; } //------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestLookup5000Int32() +{ + srand(time(NULL)); + + BMessage message; + + for (int32 i=0; i<5000; i++){ + BString string; + string << i; + message.AddInt32(string.String(),i); + } + BString search; + search << rand()%5000; + const char *string = search.String(); + int32 res; + + bigtime_t stamp = real_time_clock_usecs(); + message.FindInt32(string,&res); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to find a data in a message containing 5000 datas = " + << length << "usec" << endl; +} +//------------------------------------------------------------------------------ void TMessageSpeedTest::MessageSpeedTestRead500Int32() { srand(time(NULL)); @@ -135,7 +158,7 @@ void TMessageSpeedTest::MessageSpeedTestFlatten5Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); bigtime_t stamp = real_time_clock_usecs(); message.Flatten(&file); bigtime_t length = real_time_clock_usecs() - stamp; @@ -156,7 +179,7 @@ void TMessageSpeedTest::MessageSpeedTestFlatten50Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); bigtime_t stamp = real_time_clock_usecs(); message.Flatten(&file); bigtime_t length = real_time_clock_usecs() - stamp; @@ -176,7 +199,7 @@ void TMessageSpeedTest::MessageSpeedTestFlatten500Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); bigtime_t stamp = real_time_clock_usecs(); message.Flatten(&file); bigtime_t length = real_time_clock_usecs() - stamp; @@ -188,6 +211,118 @@ void TMessageSpeedTest::MessageSpeedTestFlatten500Int32() entry.Remove(); } //------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestFlatten5000Int32() +{ + BMessage message; + + for (int32 i=0; i<5000; i++) + message.AddInt32("data",i); + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + bigtime_t stamp = real_time_clock_usecs(); + message.Flatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to flatten a message containing 5000 Int32 = " + << length << "usec. Giving " << length/5000 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestFlatten5IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<5; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + bigtime_t stamp = real_time_clock_usecs(); + message.Flatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to flatten a message containing 5 individual Int32 fields = " + << length << "usec. Giving " << length/5 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestFlatten50IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<50; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + bigtime_t stamp = real_time_clock_usecs(); + message.Flatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to flatten a message containing 50 individual Int32 fields = " + << length << "usec. Giving " << length/50 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestFlatten500IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<500; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + bigtime_t stamp = real_time_clock_usecs(); + message.Flatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to flatten a message containing 500 individual Int32 fields = " + << length << "usec. Giving " << length/500 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestFlatten5000IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<5000; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + bigtime_t stamp = real_time_clock_usecs(); + message.Flatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to flatten a message containing 5000 individual Int32 fields = " + << length << "usec. Giving " << length/5000 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ void TMessageSpeedTest::MessageSpeedTestUnflatten5Int32() { BMessage message; @@ -196,7 +331,7 @@ void TMessageSpeedTest::MessageSpeedTestUnflatten5Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); message.Flatten(&file); BMessage rebuilt; @@ -219,7 +354,7 @@ void TMessageSpeedTest::MessageSpeedTestUnflatten50Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); message.Flatten(&file); BMessage rebuilt; @@ -242,7 +377,7 @@ void TMessageSpeedTest::MessageSpeedTestUnflatten500Int32() message.AddInt32("data",i); BEntry entry("/tmp/bmessagetest"); - BFile file(&entry,B_READ_WRITE); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); message.Flatten(&file); BMessage rebuilt; @@ -257,6 +392,133 @@ void TMessageSpeedTest::MessageSpeedTestUnflatten500Int32() entry.Remove(); } //------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestUnflatten5000Int32() +{ + BMessage message; + + for (int32 i=0; i<5000; i++) + message.AddInt32("data",i); + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + message.Flatten(&file); + + BMessage rebuilt; + bigtime_t stamp = real_time_clock_usecs(); + rebuilt.Unflatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to unflatten a message containing 5000 Int32 = " + << length << "usec. Giving " << length/5000 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestUnflatten5IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<5; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + message.Flatten(&file); + + BMessage rebuilt; + bigtime_t stamp = real_time_clock_usecs(); + rebuilt.Unflatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to unflatten a message containing 5 individual Int32 fields = " + << length << "usec. Giving " << length/50 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestUnflatten50IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<50; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + message.Flatten(&file); + + BMessage rebuilt; + bigtime_t stamp = real_time_clock_usecs(); + rebuilt.Unflatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to unflatten a message containing 50 individual Int32 fields = " + << length << "usec. Giving " << length/50 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestUnflatten500IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<500; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + message.Flatten(&file); + + BMessage rebuilt; + bigtime_t stamp = real_time_clock_usecs(); + rebuilt.Unflatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to unflatten a message containing 500 individual Int32 fields = " + << length << "usec. Giving " << length/500 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ +void TMessageSpeedTest::MessageSpeedTestUnflatten5000IndividualInt32() +{ + BMessage message; + + for (int32 i=0; i<5000; i++) { + BString name = "data"; + name << i; + message.AddInt32(name.String(),i); + } + + BEntry entry("/tmp/bmessagetest"); + BFile file(&entry,B_READ_WRITE|B_CREATE_FILE); + message.Flatten(&file); + + BMessage rebuilt; + bigtime_t stamp = real_time_clock_usecs(); + rebuilt.Unflatten(&file); + bigtime_t length = real_time_clock_usecs() - stamp; + cout << "TMessageSpeedTest::Time to unflatten a message containing 5000 individual Int32 fields = " + << length << "usec. Giving " << length/5000 << "usec per data" << endl; + + //delete the file + file.Unset(); + entry.Remove(); +} +//------------------------------------------------------------------------------ TestSuite* TMessageSpeedTest::Suite() { TestSuite* suite = new TestSuite("BMessage::Test of Performance"); @@ -265,13 +527,24 @@ TestSuite* TMessageSpeedTest::Suite() ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestLookup5Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestLookup50Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestLookup500Int32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestLookup5000Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestRead500Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten5Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten50Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten500Int32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten5000Int32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten5IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten50IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten500IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestFlatten5000IndividualInt32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten5Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten50Int32); ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten500Int32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten5000Int32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten5IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten50IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten500IndividualInt32); + ADD_TEST4(BMessage, suite, TMessageSpeedTest, MessageSpeedTestUnflatten5000IndividualInt32); return suite; } diff --git a/src/tests/kits/app/bmessage/MessageSpeedTest.h b/src/tests/kits/app/bmessage/MessageSpeedTest.h index 60e9e681ef..148289dcd6 100644 --- a/src/tests/kits/app/bmessage/MessageSpeedTest.h +++ b/src/tests/kits/app/bmessage/MessageSpeedTest.h @@ -24,23 +24,36 @@ class TMessageSpeedTest : public TestCase public: TMessageSpeedTest() {;} TMessageSpeedTest(std::string name) : TestCase(name) {;} - + void MessageSpeedTestCreate5Int32(); - + void MessageSpeedTestLookup5Int32(); void MessageSpeedTestLookup50Int32(); void MessageSpeedTestLookup500Int32(); - + void MessageSpeedTestLookup5000Int32(); + void MessageSpeedTestRead500Int32(); - void MessageSpeedTestFlatten5Int32(); - void MessageSpeedTestFlatten50Int32(); + void MessageSpeedTestFlatten5Int32(); + void MessageSpeedTestFlatten50Int32(); void MessageSpeedTestFlatten500Int32(); - + void MessageSpeedTestFlatten5000Int32(); + + void MessageSpeedTestFlatten5IndividualInt32(); + void MessageSpeedTestFlatten50IndividualInt32(); + void MessageSpeedTestFlatten500IndividualInt32(); + void MessageSpeedTestFlatten5000IndividualInt32(); + void MessageSpeedTestUnflatten5Int32(); void MessageSpeedTestUnflatten50Int32(); - void MessageSpeedTestUnflatten500Int32(); - + void MessageSpeedTestUnflatten500Int32(); + void MessageSpeedTestUnflatten5000Int32(); + + void MessageSpeedTestUnflatten5IndividualInt32(); + void MessageSpeedTestUnflatten50IndividualInt32(); + void MessageSpeedTestUnflatten500IndividualInt32(); + void MessageSpeedTestUnflatten5000IndividualInt32(); + static TestSuite* Suite(); }; diff --git a/src/tests/kits/interface/bprintjob/Jamfile b/src/tests/kits/interface/bprintjob/Jamfile index 44bde12831..175b30d6ff 100644 --- a/src/tests/kits/interface/bprintjob/Jamfile +++ b/src/tests/kits/interface/bprintjob/Jamfile @@ -1,5 +1,7 @@ SubDir OBOS_TOP src tests kits interface bprintjob ; +UsePrivateHeaders interface ; + SimpleTest print_test : PrintTestApp.cpp PrintTestWindow.cpp diff --git a/src/tests/servers/app/painter/Jamfile b/src/tests/servers/app/painter/Jamfile index c87230a219..84959018ad 100644 --- a/src/tests/servers/app/painter/Jamfile +++ b/src/tests/servers/app/painter/Jamfile @@ -1,6 +1,7 @@ SubDir OBOS_TOP src tests servers app painter ; UseLibraryHeaders agg ; +UsePrivateHeaders interface ; UsePrivateHeaders [ FDirName servers app ] ; UseHeaders [ FDirName $(OBOS_TOP) src servers app drawing ] ; UseHeaders [ FDirName $(OBOS_TOP) src servers app drawing Painter ] ; @@ -20,9 +21,9 @@ SimpleTest Painter : #agg_font_freetype.cpp AGGTextRenderer.cpp FontFamily.cpp - FontManager.cpp + #FontManager.cpp FontServer.cpp - TextRenderer.cpp + #TextRenderer.cpp PatternHandler.cpp RGBColor.cpp ServerFont.cpp diff --git a/src/tests/servers/input/prefs/Jamfile b/src/tests/servers/input/prefs/Jamfile index 08845541b7..9f3211e4f4 100644 --- a/src/tests/servers/input/prefs/Jamfile +++ b/src/tests/servers/input/prefs/Jamfile @@ -3,6 +3,7 @@ SubDir OBOS_TOP src tests servers input prefs ; UsePrivateHeaders interface ; UsePrivateHeaders app ; UsePrivateHeaders input ; +UsePrivateHeaders [ FDirName servers app ] ; AddResources KeymapTest : Keymap.rdef ;