[svn] commit: r586 - /branches/parkinglot/src/bin/parkinglot/builtin_bench.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jan 28 09:25:17 UTC 2010
Author: jinmei
Date: Thu Jan 28 09:25:16 2010
New Revision: 586
Log:
added a test case
Modified:
branches/parkinglot/src/bin/parkinglot/builtin_bench.cc
Modified: branches/parkinglot/src/bin/parkinglot/builtin_bench.cc
==============================================================================
--- branches/parkinglot/src/bin/parkinglot/builtin_bench.cc (original)
+++ branches/parkinglot/src/bin/parkinglot/builtin_bench.cc Thu Jan 28 09:25:16 2010
@@ -16,8 +16,10 @@
#include <sys/time.h>
+#include <algorithm>
#include <iostream>
#include <sstream>
+#include <vector>
#include <dns/cpp/buffer.h>
#include <dns/cpp/messagerenderer.h>
@@ -54,25 +56,83 @@
return (result.tv_sec + result.tv_usec / 1000000.0);
}
+void
+buildAuthors(vector<string>& authors)
+{
+ authors.push_back("Han Feng");
+ authors.push_back("Kazunori Fujiwara");
+ authors.push_back("Michael Graff");
+ authors.push_back("Evan Hunt");
+ authors.push_back("Jelte Jansen");
+ authors.push_back("Jin Jian");
+ authors.push_back("JINMEI Tatuya");
+ authors.push_back("Naoki Kambe");
+ authors.push_back("Shane Kerr");
+ authors.push_back("Zhang Likun");
+ authors.push_back("Jeremy C. Reed");
+}
+
+struct RdataInserterFromText
+{
+ RdataInserterFromText(RRsetPtr rrset) : rrset_(rrset) {}
+ void operator()(const string& author)
+ {
+ rrset_->addRdata(generic::TXT(author));
+ }
+ RRsetPtr rrset_;
+};
+
inline RRsetPtr
-getNormalRRset()
+getNormalRRset(const vector<string>& authors)
{
RRsetPtr rrset = RRsetPtr(new RRset(authors_name, RRClass::CH(),
RRType::TXT(), RRTTL(0)));
- rrset->addRdata(generic::TXT("Han Feng"));
- rrset->addRdata(generic::TXT("Kazunori Fujiwara"));
- rrset->addRdata(generic::TXT("Michael Graff"));
- rrset->addRdata(generic::TXT("Evan Hunt"));
- rrset->addRdata(generic::TXT("Jelte Jansen"));
- rrset->addRdata(generic::TXT("Jin Jian"));
- rrset->addRdata(generic::TXT("JINMEI Tatuya"));
- rrset->addRdata(generic::TXT("Naoki Kambe"));
- rrset->addRdata(generic::TXT("Shane Kerr"));
- rrset->addRdata(generic::TXT("Zhang Likun"));
- rrset->addRdata(generic::TXT("Jeremy C. Reed"));
+ for_each(authors.begin(), authors.end(), RdataInserterFromText(rrset));
return (rrset);
}
+
+struct RdataInserterFromWire
+{
+ RdataInserterFromWire(RRsetPtr rrset) : rrset_(rrset) {}
+ void operator()(const OutputBuffer& buffer)
+ {
+ InputBuffer b(buffer.getData(), buffer.getLength());
+ rrset_->addRdata(RdataPtr(new generic::TXT(b, buffer.getLength())));
+ }
+ RRsetPtr rrset_;
+};
+
+inline RRsetPtr
+getNormalRRset(const vector<OutputBuffer>& buffers)
+{
+ RRsetPtr rrset = RRsetPtr(new RRset(authors_name, RRClass::CH(),
+ RRType::TXT(), RRTTL(0)));
+ for_each(buffers.begin(), buffers.end(), RdataInserterFromWire(rrset));
+
+ return (rrset);
+}
+
+inline OutputBuffer
+txtToWire(const string& txt)
+{
+ OutputBuffer buffer(0);
+ generic::TXT(txt).toWire(buffer);
+ return (buffer);
+}
+
+struct WireDataInserter
+{
+ WireDataInserter(vector<OutputBuffer>& buffers) : buffers_(buffers)
+ {}
+ void operator()(const string& author)
+ {
+ OutputBuffer buffer(0);
+ generic::TXT(author).toWire(buffer);
+ buffers_.push_back(buffer);
+ }
+ vector<OutputBuffer>& buffers_;
+};
void
showResult(const struct timeval& tv_begin, const struct timeval& tv_end,
@@ -93,6 +153,9 @@
istringstream(argv[1]) >> dec >> iteration;
}
+ vector<string> authors;
+ buildAuthors(authors);
+
struct timeval tv_begin, tv_end;
OutputBuffer buffer(512);
MessageRenderer renderer(buffer);
@@ -117,7 +180,7 @@
//
// Benchmark for rendering a general purpose RRset of the same content
//
- RRsetPtr rrset_normal = getNormalRRset();
+ RRsetPtr rrset_normal = getNormalRRset(authors);
gettimeofday(&tv_begin, NULL);
for (int i = 0; i < iteration; ++i) {
renderer.clear();
@@ -136,14 +199,15 @@
}
//
- // Benchmark for rendering a general purpose RRset of the same content
- //
- gettimeofday(&tv_begin, NULL);
- for (int i = 0; i < iteration; ++i) {
- renderer.clear();
- renderer.skip(12);
- renderer.writeName(authors_name);
- getNormalRRset()->toWire(renderer);
+ // Benchmark for rendering a general purpose RRset of the same content,
+ // create RRset from text every time
+ //
+ gettimeofday(&tv_begin, NULL);
+ for (int i = 0; i < iteration; ++i) {
+ renderer.clear();
+ renderer.skip(12);
+ renderer.writeName(authors_name);
+ getNormalRRset(authors)->toWire(renderer);
}
gettimeofday(&tv_end, NULL);
showResult(tv_begin, tv_end, iteration,
@@ -156,5 +220,29 @@
return (1);
}
+ //
+ // Benchmark for rendering a general purpose RRset of the same content,
+ // create RRset from wire data every time
+ //
+ vector<OutputBuffer> buffers;
+ for_each(authors.begin(), authors.end(), WireDataInserter(buffers));
+ gettimeofday(&tv_begin, NULL);
+ for (int i = 0; i < iteration; ++i) {
+ renderer.clear();
+ renderer.skip(12);
+ renderer.writeName(authors_name);
+ getNormalRRset(buffers)->toWire(renderer);
+ }
+ gettimeofday(&tv_end, NULL);
+ showResult(tv_begin, tv_end, iteration,
+ "Rendered normal RRset with fromWire");
+
+ // Confirm the two sets of output are identical.
+ if (data.size() != buffer.getLength() ||
+ memcmp(&data[0], buffer.getData(), buffer.getLength())) {
+ cerr << "Rendered data mismatch" << endl;
+ return (1);
+ }
+
return (0);
}
More information about the bind10-changes
mailing list