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
This commit is contained in:
Michael Lotz
2005-08-07 13:19:49 +00:00
parent 8f9dff78dc
commit 024ef0b800
7 changed files with 321 additions and 17 deletions
@@ -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;
+14
View File
@@ -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
: <boot!home!config!lib>libopenbeos.so stdc++.r4
: be stdc++.r4
:
: app
;
CommonTestLib libapptest.so
: AppKitTestAddon.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;
}
+21 -8
View File
@@ -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();
};
@@ -1,5 +1,7 @@
SubDir OBOS_TOP src tests kits interface bprintjob ;
UsePrivateHeaders interface ;
SimpleTest print_test
: PrintTestApp.cpp
PrintTestWindow.cpp
+3 -2
View File
@@ -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
+1
View File
@@ -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 ;