signal(SIGVTALRM, alarmHandler);
setitimer(ITIMER_VIRTUAL, &it, 0);
-
+
unsigned int runs=0;
g_stop=false;
CPUTime dt;
{
string name("outpost.ds9a.nl");
d_size += name.length();
-
+
}
mutable int d_size;
};
}
};
-std::mutex s_testlock;
-
struct GetLockUncontendedTest
{
string getName() const
{
- return "getlock-uncontended-test";
+ return "get-lock-uncontended-test";
}
void operator()() const
{
- s_testlock.lock();
- s_testlock.unlock();
+ for (size_t idx = 0; idx < 1000; idx++) {
+ d_testlock.lock();
+ ++d_value;
+ d_testlock.unlock();
+ }
}
+private:
+ mutable std::mutex d_testlock;
+ mutable uint64_t d_value{0};
};
+struct GetUniqueLockUncontendedTest
+{
+ string getName() const
+ {
+ return "get-unique-lock-uncontended-test";
+ }
+
+ void operator()() const
+ {
+ for (size_t idx = 0; idx < 1000; idx++) {
+ std::unique_lock<decltype(d_testlock)> lock(d_testlock);
+ ++d_value;
+ }
+ }
+private:
+ mutable std::mutex d_testlock;
+ mutable uint64_t d_value{0};
+};
+
+struct GetLockGuardUncontendedTest
+{
+ string getName() const
+ {
+ return "get-lock-guard-uncontended-test";
+ }
+
+ void operator()() const
+ {
+ for (size_t idx = 0; idx < 1000; idx++) {
+ std::lock_guard<decltype(d_testlock)> lock(d_testlock);
+ ++d_value;
+ }
+ }
+private:
+ mutable std::mutex d_testlock;
+ mutable uint64_t d_value{0};
+};
+
+struct GetLockGuardedUncontendedTest
+{
+ string getName() const
+ {
+ return "get-lock-guarded-uncontended-test";
+ }
+
+ void operator()() const
+ {
+ for (size_t idx = 0; idx < 1000; idx++) {
+ ++*(d_value.lock());
+ }
+ }
+
+private:
+ mutable LockGuarded<uint64_t> d_value{0};
+};
struct StaticMemberTest
{
{
return "stringtok";
}
-
- void operator()() const
+
+ void operator()() const
{
string str("the quick brown fox jumped");
vector<string> parts;
{
return "vstringtok";
}
-
- void operator()() const
+
+ void operator()() const
{
string str("the quick brown fox jumped");
vector<pair<unsigned int, unsigned> > parts;
{
return "stringappend";
}
-
- void operator()() const
+
+ void operator()() const
{
string str;
static char i;
for(int n=0; n < 1000; ++n)
str.append(1, i);
- i++;
+ i++;
}
};
{
return "booststringappend";
}
-
- void operator()() const
+
+ void operator()() const
{
boost::container::string str;
static char i;
for(int n=0; n < 1000; ++n)
str.append(1, i);
- i++;
+ i++;
}
};
struct GenericRecordTest
{
- explicit GenericRecordTest(int records, uint16_t type, const std::string& content)
+ explicit GenericRecordTest(int records, uint16_t type, const std::string& content)
: d_records(records), d_type(type), d_content(content) {}
string getName() const
{
- return (boost::format("%d %s records") % d_records %
+ return (boost::format("%d %s records") % d_records %
DNSRecordContent::NumberToType(d_type)).str();
}
struct ParsePacketTest
{
- explicit ParsePacketTest(const vector<uint8_t>& packet, const std::string& name)
+ explicit ParsePacketTest(const vector<uint8_t>& packet, const std::string& name)
: d_packet(packet), d_name(name)
{}
MOADNSParser mdp(false, (const char*)&*d_packet.begin(), d_packet.size());
typedef map<pair<DNSName, QType>, set<DNSResourceRecord>, TCacheComp > tcache_t;
tcache_t tcache;
-
+
struct {
vector<DNSResourceRecord> d_result;
bool d_aabit;
int d_rcode;
} lwr;
- for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) {
+ for(MOADNSParser::answers_t::const_iterator i=mdp.d_answers.begin(); i!=mdp.d_answers.end(); ++i) {
DNSResourceRecord rr;
rr.qtype=i->first.d_type;
rr.qname=i->first.d_name;
-
+
rr.ttl=i->first.d_ttl;
rr.content=i->first.d_content->getZoneRepresentation(); // this should be the serialised form
lwr.d_result.push_back(rr);
struct ParsePacketBareTest
{
- explicit ParsePacketBareTest(const vector<uint8_t>& packet, const std::string& name)
+ explicit ParsePacketBareTest(const vector<uint8_t>& packet, const std::string& name)
: d_packet(packet), d_name(name)
{}
struct SimpleCompressTest
{
- explicit SimpleCompressTest(const std::string& name)
+ explicit SimpleCompressTest(const std::string& name)
: d_name(name)
{}
DNSName d_name = DNSName("www.example.com");
};
+struct SharedLockTest
+{
+ string getName() const { return "Shared lock"; }
+
+ void operator()() const {
+ for (size_t idx = 0; idx < 1000; idx++) {
+ std::shared_lock<decltype(d_lock)> lock(d_lock);
+ ++d_value;
+ }
+ }
+
+private:
+ mutable std::shared_mutex d_lock;
+ mutable uint64_t d_value;
+};
+
struct ReadWriteLockSharedTest
{
explicit ReadWriteLockSharedTest(ReadWriteLock& lock): d_lock(lock)
doRun(SimpleCompressTest("www.france.ds9a.nl"));
-
+
doRun(VectorExpandTest());
doRun(GetTimeTest());
-
+
doRun(GetLockUncontendedTest());
+ doRun(GetUniqueLockUncontendedTest());
+ doRun(GetLockGuardUncontendedTest());
+ doRun(GetLockGuardedUncontendedTest());
+ doRun(SharedLockTest());
+
{
ReadWriteLock rwlock;
doRun(ReadWriteLockSharedTest(rwlock));
}
doRun(StaticMemberTest());
-
+
doRun(ARecordTest(1));
doRun(ARecordTest(2));
doRun(ARecordTest(4));
doRun(SOARecordTest(64));
doRun(StringtokTest());
- doRun(VStringtokTest());
- doRun(StringAppendTest());
- doRun(BoostStringAppendTest());
+ doRun(VStringtokTest());
+ doRun(StringAppendTest());
+ doRun(BoostStringAppendTest());
doRun(DNSNameParseTest());
doRun(DNSNameRootTest());
{
cerr<<"Fatal: "<<e.what()<<endl;
}
-