Skip to content

Commit

Permalink
update xml_benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
bbbgan committed Jul 7, 2023
1 parent 509e150 commit 9a74434
Show file tree
Hide file tree
Showing 3 changed files with 2,100 additions and 1,739 deletions.
57 changes: 33 additions & 24 deletions benchmark/xml_bench.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,57 +27,66 @@ struct filelists_t {
REFLECTION(filelists_t, package);
// ************ struct for sample_rss.xml ****************

struct skip_t {
std::string_view skip;
};
REFLECTION(skip_t, skip);
struct item_t {
std::string_view title;
std::optional<std::string_view> description;
std::string_view link;
skip_t description;
std::string_view pubDate;
std::optional<std::string_view> enclosure;
std::string_view guid;
std::string_view itunes_explicit;
std::optional<std::string_view> dc_creator;
std::string_view media_thumbnail;
std::string_view media_content;
std::string_view itunes_author;
std::string_view itunes_subtitle;
std::string_view itunes_summary;
skip_t itunes_summary;
std::string_view itunes_explicit;
std::string_view itunes_duration;
std::string_view dc_creator;
std::string_view author;
std::optional<std::string_view> media_thumbnail;
std::optional<std::string_view> media_content;
std::string_view itunes_keywords;
};
REFLECTION(item_t, title, description, pubDate, enclosure, guid,
itunes_explicit, dc_creator, media_thumbnail, media_content,
itunes_subtitle, itunes_summary, itunes_keywords)
REFLECTION(item_t, title, link, description, pubDate, enclosure, guid,
itunes_author, itunes_subtitle, itunes_summary, itunes_explicit,
itunes_duration, dc_creator, author, media_thumbnail, media_content,
itunes_keywords);

struct itunes_owner_t {
std::string_view itunes_email;
struct image_t {
std::string_view link;
std::string_view url;
std::string_view title;
};
REFLECTION(itunes_owner_t, itunes_email);
REFLECTION(image_t, link, url, title);

struct channel_t {
std::string_view title;
std::string_view link;
std::optional<std::string_view> description;
std::string_view description;
std::string_view generator;
std::string_view docs;
std::string_view language;
std::optional<std::string_view> pubDate;
std::optional<std::string_view> lastBuildDate;
std::string_view pubDate;
std::string_view lastBuildDate;
image_t image;
std::string_view itunes_author;
std::string_view itunes_subtitle;
std::string_view itunes_summary;
std::string_view itunes_keywords;
std::string_view itunes_image;
std::optional<std::string_view> itunes_image;
std::string_view itunes_explicit;
std::string_view itunes_block;
std::optional<std::string_view> xmlns_feedburner;
std::string_view media_thumbnail;
std::string_view media_keywords;
std::string_view media_category;
itunes_owner_t itunes_owner;
std::vector<item_t> item;
std::string_view media_credit;
std::string_view media_rating;
std::string_view media_description;
};
REFLECTION(channel_t, title, link, description, generator, docs, language,
pubDate, lastBuildDate, itunes_author, itunes_subtitle,
pubDate, lastBuildDate, image, itunes_author, itunes_subtitle,
itunes_summary, itunes_keywords, itunes_image, itunes_explicit,
itunes_block, xmlns_feedburner, media_thumbnail, media_keywords,
media_category, itunes_owner, item);
itunes_block, item, media_credit, media_rating, media_description);

struct rss_t {
channel_t channel;
Expand Down
57 changes: 33 additions & 24 deletions benchmark/xml_benchmark.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#include "../rapidxml/rapidxml.hpp"
#include "xml_bench.hpp"

class ScopedTimer {
Expand Down Expand Up @@ -39,52 +40,59 @@ std::string xml_file_content(const std::string &filename) {
file.read(content.data(), content.size());
return content;
}
const int iterations = 1000;
void bench_de_sample_filelists() {

void test_deserialize() {
int iterations = 1000;

std::cout << "============ deserialize rpm_filelists.xml ===============\n";
std::string xmlfilelist = xml_file_content("../data/rpm_filelists.xml");
{

ScopedTimer timer("test deserialize rpm_filelists.xml");
ScopedTimer timer("rapidxml fastest parse rpm_filelists.xml");
for (int i = 0; i < iterations; ++i) {
rapidxml::xml_document<> doc;
doc.parse<rapidxml::parse_fastest>(xmlfilelist.data());
}
}
{
ScopedTimer timer("iguana_xml deserialize rpm_filelists.xml");
for (int i = 0; i < iterations; ++i) {
filelists_t filelist;
iguana::from_xml(filelist, xmlfilelist.begin(), xmlfilelist.end());
}
}
// std::cout << "============ deserialize sample_rss.xml ===============\n";

// std::string xmlrss = xml_file_content("../data/sample_rss.xml");
// {
}

// ScopedTimer timer("test deserialize sample_rss.xml");
// for (int i = 0; i < iterations; ++i) {
// rss_t rss;
// iguana::from_xml<true>(rss, xmlrss.begin(), xmlrss.end());
// assert(rss.channel.item.size() == 99);
// }
// }
void bench_de_sample_rss() {
std::string xmlrss = xml_file_content("../data/sample_rss.xml");
{
ScopedTimer timer("rapidxml fastest parse sample_rss.xml");
for (int i = 0; i < iterations; ++i) {
rapidxml::xml_document<> doc;
doc.parse<rapidxml::parse_fastest>(xmlrss.data());
}
}
{
ScopedTimer timer("iguana_xml deserialize sample_rss.xml");
for (int i = 0; i < iterations; ++i) {
rss_t rss;
iguana::from_xml(rss, xmlrss.begin(), xmlrss.end());
}
}
}

void bench_num() {
int iterations = 1000;
std::cout << "============ deserialize bench_num.xml ===============\n";
std::string xmlnum = xml_file_content("../data/bench_num.xml");
{
ScopedTimer timer("test deserialize bench_num.xml");
ScopedTimer timer("iguana_xml deserialize bench_num.xml");
for (int i = 0; i < iterations; ++i) {
store_t s;
iguana::from_xml(s, xmlnum);
}
}
std::cout << "============ serialize bench_num.xml ===============\n";
store_t store;
iguana::from_xml(store, xmlnum);
std::string ss;
ss.reserve(xmlnum.size());
{
ScopedTimer timer("test serialize bench_num.xml");
ScopedTimer timer("iguana_xml serialize bench_num.xml");
for (int i = 0; i < iterations; ++i) {
iguana::to_xml(store, ss);
ss.clear();
Expand All @@ -93,6 +101,7 @@ void bench_num() {
}

int main() {
test_deserialize();
bench_num();
bench_de_sample_filelists();
bench_de_sample_rss();
// bench_num();
}
Loading

0 comments on commit 9a74434

Please sign in to comment.