Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
P
protobuf
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
protobuf
Commits
320d56c8
Unverified
Commit
320d56c8
authored
Apr 10, 2018
by
Yilun Chong
Committed by
GitHub
Apr 10, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4478 from BSBandme/proto2_to_proto3_tools
Add gogo benchmark
parents
5fb73f80
e3af0230
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
584 additions
and
53 deletions
+584
-53
Makefile.am
benchmarks/Makefile.am
+235
-51
__init__.py
benchmarks/python/__init__.py
+0
-0
py_benchmark.py
benchmarks/python/py_benchmark.py
+4
-2
gogo_data_scrubber.cc
benchmarks/util/gogo_data_scrubber.cc
+105
-0
protoc-gen-gogoproto.cc
benchmarks/util/protoc-gen-gogoproto.cc
+103
-0
schema_proto2_to_proto3_util.h
benchmarks/util/schema_proto2_to_proto3_util.h
+137
-0
No files found.
benchmarks/Makefile.am
View file @
320d56c8
...
@@ -25,18 +25,6 @@ make_tmp_dir:
...
@@ -25,18 +25,6 @@ make_tmp_dir:
mkdir
-p
'tmp/java/src/main/java'
mkdir
-p
'tmp/java/src/main/java'
touch
make_tmp_dir
touch
make_tmp_dir
if
USE_EXTERNAL_PROTOC
protoc_middleman
:
make_tmp_dir $(benchmarks_protoc_inputs)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--cpp_out
=
./cpp
--java_out
=
./tmp
$(benchmarks_protoc_inputs)
$(benchmarks_protoc_inputs_benchmark_wrapper)
touch
protoc_middleman
protoc_middleman2
:
make_tmp_dir $(benchmarks_protoc_inputs_proto2)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--cpp_out
=
./cpp
--java_out
=
./tmp
$(benchmarks_protoc_inputs_proto2)
touch
protoc_middleman2
else
# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
# relative to srcdir, which may not be the same as the current directory when
# relative to srcdir, which may not be the same as the current directory when
# building out-of-tree.
# building out-of-tree.
...
@@ -48,9 +36,7 @@ protoc_middleman2: make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_
...
@@ -48,9 +36,7 @@ protoc_middleman2: make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/cpp
--java_out
=
$$
oldpwd/tmp/java/src/main/java
--python_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/cpp
--java_out
=
$$
oldpwd/tmp/java/src/main/java
--python_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2)
)
touch
protoc_middleman2
touch
protoc_middleman2
endif
all_data
=
$$
(
find
$(srcdir)
-type
f
-name
"dataset.*.pb"
-not
-path
"./tmp/*"
)
all_data
=
$$
(
find
.
-type
f
-name
"dataset.*.pb"
-not
-path
"./tmp/*"
)
############# CPP RULES ##############
############# CPP RULES ##############
...
@@ -109,8 +95,7 @@ initialize_submodule:
...
@@ -109,8 +95,7 @@ initialize_submodule:
cd
$(top_srcdir)
/third_party/benchmark
&&
cmake
-DCMAKE_BUILD_TYPE
=
Release
&&
make
cd
$(top_srcdir)
/third_party/benchmark
&&
cmake
-DCMAKE_BUILD_TYPE
=
Release
&&
make
cd
$$
oldpwd
cd
$$
oldpwd
touch
initialize_submodule
touch
initialize_submodule
$(top_srcdir)/src/libprotobuf.la
:
initialize_submodule
$(top_srcdir)/third_party/benchmark/src/libbenchmark.a
:
initialize_submodule
$(top_srcdir)/third_party/benchmark/src/libbenchmark.a
:
initialize_submodule
AM_CXXFLAGS
=
$(NO_OPT_CXXFLAGS)
$(PROTOBUF_OPT_FLAG)
-Wall
-Wwrite-strings
-Woverloaded-virtual
-Wno-sign-compare
AM_CXXFLAGS
=
$(NO_OPT_CXXFLAGS)
$(PROTOBUF_OPT_FLAG)
-Wall
-Wwrite-strings
-Woverloaded-virtual
-Wno-sign-compare
...
@@ -142,7 +127,7 @@ java_benchmark_testing_files = \
...
@@ -142,7 +127,7 @@ java_benchmark_testing_files = \
java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java
java/src/main/java/com/google/protobuf/ProtoCaliperBenchmark.java
javac_middleman
:
$(java_benchmark_testing_files) protoc_middleman protoc_middleman2
javac_middleman
:
$(java_benchmark_testing_files) protoc_middleman protoc_middleman2
cp
-r
java tmp
&&
cd
tmp/java
&&
mvn clean compile assembly:single
cp
-r
$(srcdir)
/
java tmp
&&
cd
tmp/java
&&
mvn clean compile assembly:single
cd
../..
cd
../..
@
touch
javac_middleman
@
touch
javac_middleman
...
@@ -191,7 +176,7 @@ python-pure-python-benchmark: python_add_init
...
@@ -191,7 +176,7 @@ python-pure-python-benchmark: python_add_init
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-pure-python-benchmark
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-pure-python-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-pure-python-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-pure-python-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
python
\'
>>
python-pure-python-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
python
\'
>>
python-pure-python-benchmark
@
echo cp
python/py_benchmark.py tmp
>>
python-pure-python-benchmark
@
echo cp
$(srcdir)
/
python/py_benchmark.py tmp
>>
python-pure-python-benchmark
@
echo
python tmp/py_benchmark.py
'$$@'
>>
python-pure-python-benchmark
@
echo
python tmp/py_benchmark.py
'$$@'
>>
python-pure-python-benchmark
@
chmod
+x python-pure-python-benchmark
@
chmod
+x python-pure-python-benchmark
...
@@ -201,7 +186,7 @@ python-cpp-reflection-benchmark: python_add_init
...
@@ -201,7 +186,7 @@ python-cpp-reflection-benchmark: python_add_init
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-reflection-benchmark
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-reflection-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-reflection-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-reflection-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
cpp
\'
>>
python-cpp-reflection-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
cpp
\'
>>
python-cpp-reflection-benchmark
@
echo cp
python/py_benchmark.py tmp
>>
python-cpp-reflection-benchmark
@
echo cp
$(srcdir)
/
python/py_benchmark.py tmp
>>
python-cpp-reflection-benchmark
@
echo
python tmp/py_benchmark.py
'$$@'
>>
python-cpp-reflection-benchmark
@
echo
python tmp/py_benchmark.py
'$$@'
>>
python-cpp-reflection-benchmark
@
chmod
+x python-cpp-reflection-benchmark
@
chmod
+x python-cpp-reflection-benchmark
...
@@ -211,7 +196,7 @@ python-cpp-generated-code-benchmark: python_add_init libbenchmark_messages.la
...
@@ -211,7 +196,7 @@ python-cpp-generated-code-benchmark: python_add_init libbenchmark_messages.la
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-generated-code-benchmark
@
echo export
LD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-generated-code-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-generated-code-benchmark
@
echo export
DYLD_LIBRARY_PATH
=
$(top_srcdir)
/src/libprotobuf.la
>>
python-cpp-generated-code-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
cpp
\'
>>
python-cpp-generated-code-benchmark
@
echo export
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION
=
\'
cpp
\'
>>
python-cpp-generated-code-benchmark
@
echo cp
python/py_benchmark.py tmp
>>
python-cpp-generated-code-benchmark
@
echo cp
$(srcdir)
/
python/py_benchmark.py tmp
>>
python-cpp-generated-code-benchmark
@
echo
python tmp/py_benchmark.py
--cpp_generated
'$$@'
>>
python-cpp-generated-code-benchmark
@
echo
python tmp/py_benchmark.py
--cpp_generated
'$$@'
>>
python-cpp-generated-code-benchmark
@
chmod
+x python-cpp-generated-code-benchmark
@
chmod
+x python-cpp-generated-code-benchmark
...
@@ -251,43 +236,19 @@ benchmarks_protoc_inputs_proto2_message4 = \
...
@@ -251,43 +236,19 @@ benchmarks_protoc_inputs_proto2_message4 = \
datasets/google_message4/benchmark_message4_2.proto
\
datasets/google_message4/benchmark_message4_2.proto
\
datasets/google_message4/benchmark_message4_3.proto
datasets/google_message4/benchmark_message4_3.proto
if
USE_EXTERNAL_PROTOC
go_protoc_middleman
:
make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs) $(benchmarks_protoc_inputs_proto2_message1) $(benchmarks_protoc_inputs_proto2_message2) $(benchmarks_protoc_inputs_proto2_message3) $(benchmarks_protoc_inputs_proto2_message4) $(well_known_type_protoc_inputs)
go_protoc_middleman
:
make_tmp_dir $(benchmarks_protoc_inputs)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_benchmark_wrapper)
touch
protoc_middleman
go_protoc_middleman2
:
make_tmp_dir $(benchmarks_protoc_inputs_proto2_message1) $(benchmarks_protoc_inputs_proto2_message2) $(benchmarks_protoc_inputs_proto2_message3) $(benchmarks_protoc_inputs_proto2_message4)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message1)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message2)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message3)
$(PROTOC)
-I
$(srcdir)
-I
$(top_srcdir)
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message4)
touch
protoc_middleman2
else
# We have to cd to $(srcdir) before executing protoc because $(protoc_inputs) is
# relative to srcdir, which may not be the same as the current directory when
# building out-of-tree.
go_protoc_middleman
:
make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs) $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
touch
protoc_middleman
go_protoc_middleman2
:
make_tmp_dir $(top_srcdir)/src/protoc$(EXEEXT) $(benchmarks_protoc_inputs_proto2_message1) $(benchmarks_protoc_inputs_proto2_message2) $(benchmarks_protoc_inputs_proto2_message3) $(benchmarks_protoc_inputs_proto2_message4) $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message4)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
protoc_middleman2
touch
go_protoc_middleman
endif
go-benchmark
:
go_protoc_middleman
go-benchmark
:
go_protoc_middleman go_protoc_middleman2
@
echo
"Writing shortcut script go-benchmark..."
@
echo
"Writing shortcut script go-benchmark..."
@
echo
'#! /bin/sh'
>
go-benchmark
@
echo
'#! /bin/sh'
>
go-benchmark
@
echo
'cd go'
>>
go-benchmark
@
echo
'cd
$(srcdir)
/
go'
>>
go-benchmark
@
echo
'all_data=""'
>>
go-benchmark
@
echo
'all_data=""'
>>
go-benchmark
@
echo
'conf=()'
>>
go-benchmark
@
echo
'conf=()'
>>
go-benchmark
@
echo
'data_files=()'
>>
go-benchmark
@
echo
'data_files=()'
>>
go-benchmark
...
@@ -296,11 +257,211 @@ go-benchmark: go_protoc_middleman go_protoc_middleman2
...
@@ -296,11 +257,211 @@ go-benchmark: go_protoc_middleman go_protoc_middleman2
@
echo
'cd ..'
>>
go-benchmark
@
echo
'cd ..'
>>
go-benchmark
@
chmod
+x go-benchmark
@
chmod
+x go-benchmark
go
:
go_protoc_middleman go
_protoc_middleman2 go-benchmark
go
:
go_protoc_middleman go
-benchmark
./go-benchmark
$(all_data)
./go-benchmark
$(all_data)
############# GO RULES END ##############
############# GO RULES END ##############
############# GOGO RULES BEGIN ############
cpp_no_group_benchmarks_protoc_outputs_header
=
\
gogo/cpp_no_group/benchmarks.pb.h
\
gogo/cpp_no_group/datasets/google_message1/proto3/benchmark_message1_proto3.pb.h
cpp_no_group_benchmarks_protoc_outputs
=
\
gogo/cpp_no_group/benchmarks.pb.cc
\
gogo/cpp_no_group/datasets/google_message1/proto3/benchmark_message1_proto3.pb.cc
cpp_no_group_benchmarks_protoc_outputs_proto2_header
=
\
gogo/cpp_no_group/datasets/google_message1/proto2/benchmark_message1_proto2.pb.h
\
gogo/cpp_no_group/datasets/google_message2/benchmark_message2.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_1.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_2.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_3.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_4.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_5.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_6.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_7.pb.h
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_8.pb.h
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4.pb.h
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_1.pb.h
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_2.pb.h
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_3.pb.h
cpp_no_group_benchmarks_protoc_outputs_proto2
=
\
gogo/cpp_no_group/datasets/google_message1/proto2/benchmark_message1_proto2.pb.cc
\
gogo/cpp_no_group/datasets/google_message2/benchmark_message2.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_1.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_2.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_3.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_4.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_5.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_6.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_7.pb.cc
\
gogo/cpp_no_group/datasets/google_message3/benchmark_message3_8.pb.cc
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4.pb.cc
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_1.pb.cc
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_2.pb.cc
\
gogo/cpp_no_group/datasets/google_message4/benchmark_message4_3.pb.cc
$(cpp_no_group_benchmarks_protoc_outputs)
:
cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_header)
:
cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_proto2)
:
cpp_no_group_protoc_middleman
$(cpp_no_group_benchmarks_protoc_outputs_proto2_header)
:
cpp_no_group_protoc_middleman
generate_cpp_no_group_benchmark_code
:
cp
$(srcdir)
/cpp/cpp_benchmark.cc gogo/cpp_no_group/cpp_benchmark.cc
sed
-i
-e
"s/
\#
include
\"
datasets/
\#
include
\"
gogo
\/
cpp_no_group
\/
datasets/g"
gogo/cpp_no_group/cpp_benchmark.cc
sed
-i
-e
"s/
\#
include
\"
benchmarks.pb.h/
\#
include
\"
gogo
\/
cpp_no_group
\/
benchmarks.pb.h/g"
gogo/cpp_no_group/cpp_benchmark.cc
touch
generate_cpp_no_group_benchmark_code
bin_PROGRAMS
+=
cpp-no-group-benchmark
cpp_no_group_benchmark_LDADD
=
$(top_srcdir)
/src/libprotobuf.la
$(top_srcdir)
/third_party/benchmark/src/libbenchmark.a
cpp_no_group_benchmark_SOURCES
=
gogo/cpp_no_group/cpp_benchmark.cc
cpp_no_group_benchmark_CPPFLAGS
=
-I
$(top_srcdir)
/src
-I
$(srcdir)
/gogo/cpp_no_group
-I
$(top_srcdir)
/third_party/benchmark/include
# Explicit deps because BUILT_SOURCES are only done before a "make all/check"
# so a direct "make test_cpp" could fail if parallel enough.
# See: https://www.gnu.org/software/automake/manual/html_node/Built-Sources-Example.html#Recording-Dependencies-manually
gogo/cpp_no_group/cpp_no_group_benchmark-cpp_benchmark.$(OBJEXT)
:
$(cpp_no_group_benchmarks_protoc_outputs) $(cpp_no_group_benchmarks_protoc_outputs_proto2) $(cpp_no_group_benchmarks_protoc_outputs_header)
\
$(cpp_no_group_benchmarks_protoc_outputs_proto2_header) $(top_srcdir)/third_party/benchmark/src/libbenchmark.a generate_cpp_no_group_benchmark_code
gogo/cpp_no_group/cpp_benchmark.cc
:
generate_cpp_no_group_benchmark_code
nodist_cpp_no_group_benchmark_SOURCES
=
\
$(cpp_no_group_benchmarks_protoc_outputs_proto2)
\
$(cpp_no_group_benchmarks_protoc_outputs)
\
$(cpp_no_group_benchmarks_protoc_outputs_header)
\
$(cpp_no_group_benchmarks_protoc_outputs_proto2_header)
cpp_no_group
:
cpp_no_group_protoc_middleman generate_gogo_data cpp-no-group-benchmark
./cpp-no-group-benchmark
$(gogo_data)
gogo_proto_middleman
:
protoc-gen-gogoproto
mkdir
-p
"tmp/gogo_proto"
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
$(srcdir)
-I
$(top_srcdir)
--plugin
=
protoc-gen-gogoproto
--gogoproto_out
=
$$
oldpwd/tmp/gogo_proto
$(benchmarks_protoc_inputs)
$(benchmarks_protoc_inputs_benchmark_wrapper)
$(benchmarks_protoc_inputs_proto2)
)
touch
gogo_proto_middleman
new_data
=
$$
(
for
data
in
$(all_data)
;
do
echo
"tmp
$$
{data
\#
$(srcdir)
}"
;
done
| xargs
)
generate_gogo_data
:
protoc_middleman protoc_middleman2 gogo-data-scrubber
mkdir
-p
`
dirname
$(new_data)
`
./gogo-data-scrubber
$(all_data)
$(new_data)
touch
generate_gogo_data
make_tmp_dir_gogo
:
mkdir
-p
tmp/go_no_group/benchmark_code
mkdir
-p
tmp/gogofast/benchmark_code
mkdir
-p
tmp/gogofaster/benchmark_code
mkdir
-p
tmp/gogoslick/benchmark_code
touch
make_tmp_dir_gogo
go_no_group_protoc_middleman
:
make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--go_out
=
$$
oldpwd/tmp/go_no_group
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
go_no_group_protoc_middleman
cpp_no_group_protoc_middleman
:
make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--cpp_out
=
$$
oldpwd/gogo/cpp_no_group
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
cpp_no_group_protoc_middleman
gogofast_protoc_middleman
:
make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofast_out
=
$$
oldpwd/tmp/gogofast
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
gogofast_protoc_middleman
gogofaster_protoc_middleman
:
make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogofaster_out
=
$$
oldpwd/tmp/gogofaster
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
gogofaster_protoc_middleman
gogoslick_protoc_middleman
:
make_tmp_dir_gogo $(top_srcdir)/src/protoc$(EXEEXT) gogo_proto_middleman $(well_known_type_protoc_inputs)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs_benchmark_wrapper)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs_proto2_message1)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs_proto2_message2)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs_proto2_message3)
)
oldpwd
=
`
pwd
`
&&
(
cd
$(srcdir)
/tmp/gogo_proto
&&
$$
oldpwd/../src/protoc
$(EXEEXT)
-I
.
-I
$$
oldpwd/
$(top_srcdir)
/src
--gogoslick_out
=
$$
oldpwd/tmp/gogoslick
$(benchmarks_protoc_inputs_proto2_message4)
)
touch
gogoslick_protoc_middleman
gogo_data
=
$$
(
find
.
-type
f
-name
"dataset.*.pb"
-path
"./tmp/*"
)
generate-gogo-benchmark-code
:
@
echo
'#! /bin/sh'
>
generate-gogo-benchmark-code
@
echo
'cp
$(srcdir)
/go/go_benchmark_test.go tmp/$$1/benchmark_code/$$1_benchmark1_test.go'
>>
generate-gogo-benchmark-code
@
echo
'sed -i -e "s/\.\.\/tmp/../g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go'
>>
generate-gogo-benchmark-code
@
echo
'sed -i -e "s/b\.Run(\"\(.*\)\"/b.Run(\"\1\_$$1\"/g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go'
>>
generate-gogo-benchmark-code
@
echo
'if [[ $$2 == 1 ]]; then sed -i -e "s/github\.com\/golang/github.com\/gogo/g" tmp/$$1/benchmark_code/$$1_benchmark1_test.go; fi '
>>
generate-gogo-benchmark-code
@
chmod
+x generate-gogo-benchmark-code
generate_all_gogo_benchmark_code
:
generate-gogo-benchmark-code make_tmp_dir_gogo
./generate-gogo-benchmark-code go_no_group 0
./generate-gogo-benchmark-code gogofast 1
./generate-gogo-benchmark-code gogofaster 1
./generate-gogo-benchmark-code gogoslick 1
gogo-benchmark
:
@
echo
"Writing shortcut script gogo-benchmark..."
@
echo
'#! /bin/sh'
>
gogo-benchmark
@
echo
'cd tmp/$$1/benchmark_code'
>>
gogo-benchmark
@
echo
'shift'
>>
gogo-benchmark
@
echo
'all_data=""'
>>
gogo-benchmark
@
echo
'for data_file in $$@; do all_data="$$all_data ../../../$$data_file"; done'
>>
gogo-benchmark
@
echo
'go test -bench=. -- $$all_data'
>>
gogo-benchmark
@
echo
'cd ../..'
>>
gogo-benchmark
@
chmod
+x gogo-benchmark
go_no_group
:
go_no_group_protoc_middleman generate_gogo_data generate_all_gogo_benchmark_code gogo-benchmark
./gogo-benchmark go_no_group
$(gogo_data)
gogofast
:
gogofast_protoc_middleman generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
./gogo-benchmark gogofast
$(gogo_data)
gogofaster
:
gogofaster_protoc_middleman generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
./gogo-benchmark gogofaster
$(gogo_data)
gogoslick
:
gogoslick_protoc_middleman generate_gogo_data gogo-benchmark generate_all_gogo_benchmark_code
./gogo-benchmark gogoslick
$(gogo_data)
############# GOGO RULES END ############
############ UTIL RULES BEGIN ############
bin_PROGRAMS
+=
protoc-gen-gogoproto gogo-data-scrubber
protoc_gen_gogoproto_LDADD
=
$(top_srcdir)
/src/libprotobuf.la
$(top_srcdir)
/src/libprotoc.la
protoc_gen_gogoproto_SOURCES
=
util/protoc-gen-gogoproto.cc
protoc_gen_gogoproto_CPPFLAGS
=
-I
$(top_srcdir)
/src
-I
$(srcdir)
/cpp
-I
$(srcdir)
/util
gogo_data_scrubber_LDADD
=
$(top_srcdir)
/src/libprotobuf.la
gogo_data_scrubber_SOURCES
=
util/gogo_data_scrubber.cc
gogo_data_scrubber_CPPFLAGS
=
-I
$(top_srcdir)
/src
-I
$(srcdir)
/cpp
-I
$(srcdir)
/util
util/gogo_data_scrubber-gogo_data_scrubber.$(OBJEXT)
:
$(benchmarks_protoc_outputs) $(benchmarks_protoc_outputs_proto2) $(benchmarks_protoc_outputs_header) $(benchmarks_protoc_outputs_proto2_header)
nodist_gogo_data_scrubber_SOURCES
=
\
$(benchmarks_protoc_outputs)
\
$(benchmarks_protoc_outputs_proto2)
\
$(benchmarks_protoc_outputs_proto2_header)
\
$(benchmarks_protoc_outputs_header)
############ UTIL RULES END ############
MAINTAINERCLEANFILES
=
\
MAINTAINERCLEANFILES
=
\
Makefile.in
Makefile.in
...
@@ -322,7 +483,30 @@ CLEANFILES = \
...
@@ -322,7 +483,30 @@ CLEANFILES = \
python-cpp-generated-code-benchmark
\
python-cpp-generated-code-benchmark
\
go-benchmark
\
go-benchmark
\
go_protoc_middleman
\
go_protoc_middleman
\
go_protoc_middleman2
make_tmp_dir_gogo
\
gogo_proto_middleman
\
generate_gogo_data
\
go_no_group_protoc_middleman
\
go_no_group
\
go-no-group-benchmark
\
$(cpp_no_group_benchmarks_protoc_outputs_header)
\
$(cpp_no_group_benchmarks_protoc_outputs)
\
$(cpp_no_group_benchmarks_protoc_outputs_proto2_header)
\
$(cpp_no_group_benchmarks_protoc_outputs_proto2)
\
generate_all_gogo_benchmark_code
\
generate-gogo-benchmark-code
\
cpp_no_group_protoc_middleman
\
generate_cpp_no_group_benchmark_code
\
generate_gogo_benchmark_code
\
gogofast_protoc_middleman
\
gogofast
\
gogofaster_protoc_middleman
\
gogofaster
\
gogoslick_protoc_middleman
\
gogoslick
\
gogo-benchmark
\
gogo/cpp_no_group/cpp_benchmark.
*
clean-local
:
clean-local
:
-
rm
-rf
tmp/
*
-
rm
-rf
tmp/
*
benchmarks/python/__init__.py
0 → 100644
View file @
320d56c8
benchmarks/python/py_benchmark.py
View file @
320d56c8
...
@@ -144,7 +144,9 @@ if __name__ == "__main__":
...
@@ -144,7 +144,9 @@ if __name__ == "__main__":
print
"Message
%
s of dataset file
%
s"
%
\
print
"Message
%
s of dataset file
%
s"
%
\
(
result
[
"message_name"
],
result
[
"filename"
])
(
result
[
"message_name"
],
result
[
"filename"
])
print
"Average time for parse_from_benchmark:
%.2
f ns"
%
\
print
"Average time for parse_from_benchmark:
%.2
f ns"
%
\
(
result
[
"benchmarks"
][
"parse_from_benchmark"
])
(
result
[
"benchmarks"
][
\
args
.
behavior_prefix
+
"_parse_from_benchmark"
])
print
"Average time for serialize_to_benchmark:
%.2
f ns"
%
\
print
"Average time for serialize_to_benchmark:
%.2
f ns"
%
\
(
result
[
"benchmarks"
][
"serialize_to_benchmark"
])
(
result
[
"benchmarks"
][
\
args
.
behavior_prefix
+
"_serialize_to_benchmark"
])
print
""
print
""
benchmarks/util/gogo_data_scrubber.cc
0 → 100644
View file @
320d56c8
#include "benchmarks.pb.h"
#include "datasets/google_message1/proto2/benchmark_message1_proto2.pb.h"
#include "datasets/google_message1/proto3/benchmark_message1_proto3.pb.h"
#include "datasets/google_message2/benchmark_message2.pb.h"
#include "datasets/google_message3/benchmark_message3.pb.h"
#include "datasets/google_message4/benchmark_message4.pb.h"
#include "google/protobuf/message.h"
#include "google/protobuf/descriptor.h"
#include <fstream>
using
google
::
protobuf
::
FieldDescriptor
;
using
google
::
protobuf
::
Message
;
using
google
::
protobuf
::
Reflection
;
class
DataGroupStripper
{
public
:
static
void
StripMessage
(
Message
*
message
)
{
std
::
vector
<
const
FieldDescriptor
*>
set_fields
;
const
Reflection
*
reflection
=
message
->
GetReflection
();
reflection
->
ListFields
(
*
message
,
&
set_fields
);
for
(
size_t
i
=
0
;
i
<
set_fields
.
size
();
i
++
)
{
const
FieldDescriptor
*
field
=
set_fields
[
i
];
if
(
field
->
type
()
==
FieldDescriptor
::
TYPE_GROUP
)
{
reflection
->
ClearField
(
message
,
field
);
}
if
(
field
->
type
()
==
FieldDescriptor
::
TYPE_MESSAGE
)
{
if
(
field
->
is_repeated
())
{
for
(
int
j
=
0
;
j
<
reflection
->
FieldSize
(
*
message
,
field
);
j
++
)
{
StripMessage
(
reflection
->
MutableRepeatedMessage
(
message
,
field
,
j
));
}
}
else
{
StripMessage
(
reflection
->
MutableMessage
(
message
,
field
));
}
}
}
reflection
->
MutableUnknownFields
(
message
)
->
Clear
();
}
};
std
::
string
ReadFile
(
const
std
::
string
&
name
)
{
std
::
ifstream
file
(
name
.
c_str
());
GOOGLE_CHECK
(
file
.
is_open
())
<<
"Couldn't find file '"
<<
name
<<
"', please make sure you are running this command from the benchmarks"
<<
" directory.
\n
"
;
return
std
::
string
((
std
::
istreambuf_iterator
<
char
>
(
file
)),
std
::
istreambuf_iterator
<
char
>
());
}
int
main
(
int
argc
,
char
*
argv
[])
{
if
(
argc
%
2
==
0
||
argc
==
1
)
{
std
::
cerr
<<
"Usage: [input_files] [output_file_names] where "
<<
"input_files are one to one mapping to output_file_names."
<<
std
::
endl
;
return
1
;
}
for
(
int
i
=
argc
/
2
;
i
>
0
;
i
--
)
{
const
std
::
string
&
input_file
=
argv
[
i
];
const
std
::
string
&
output_file
=
argv
[
i
+
argc
/
2
];
std
::
cerr
<<
"Generating "
<<
input_file
<<
" to "
<<
output_file
<<
std
::
endl
;
benchmarks
::
BenchmarkDataset
dataset
;
Message
*
message
;
std
::
string
dataset_payload
=
ReadFile
(
input_file
);
GOOGLE_CHECK
(
dataset
.
ParseFromString
(
dataset_payload
))
<<
"Can' t parse data file "
<<
input_file
;
if
(
dataset
.
message_name
()
==
"benchmarks.proto3.GoogleMessage1"
)
{
message
=
new
benchmarks
::
proto3
::
GoogleMessage1
;
}
else
if
(
dataset
.
message_name
()
==
"benchmarks.proto2.GoogleMessage1"
)
{
message
=
new
benchmarks
::
proto2
::
GoogleMessage1
;
}
else
if
(
dataset
.
message_name
()
==
"benchmarks.proto2.GoogleMessage2"
)
{
message
=
new
benchmarks
::
proto2
::
GoogleMessage2
;
}
else
if
(
dataset
.
message_name
()
==
"benchmarks.google_message3.GoogleMessage3"
)
{
message
=
new
benchmarks
::
google_message3
::
GoogleMessage3
;
}
else
if
(
dataset
.
message_name
()
==
"benchmarks.google_message4.GoogleMessage4"
)
{
message
=
new
benchmarks
::
google_message4
::
GoogleMessage4
;
}
else
{
std
::
cerr
<<
"Unknown message type: "
<<
dataset
.
message_name
();
exit
(
1
);
}
for
(
int
i
=
0
;
i
<
dataset
.
payload_size
();
i
++
)
{
message
->
ParseFromString
(
dataset
.
payload
(
i
));
DataGroupStripper
::
StripMessage
(
message
);
dataset
.
set_payload
(
i
,
message
->
SerializeAsString
());
}
std
::
ofstream
ofs
(
output_file
);
ofs
<<
dataset
.
SerializeAsString
();
ofs
.
close
();
}
return
0
;
}
benchmarks/util/protoc-gen-gogoproto.cc
0 → 100644
View file @
320d56c8
#include "google/protobuf/compiler/code_generator.h"
#include "google/protobuf/io/zero_copy_stream.h"
#include "google/protobuf/io/printer.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
#include "schema_proto2_to_proto3_util.h"
#include "google/protobuf/compiler/plugin.h"
using
google
::
protobuf
::
FileDescriptorProto
;
using
google
::
protobuf
::
FileDescriptor
;
using
google
::
protobuf
::
DescriptorPool
;
using
google
::
protobuf
::
io
::
Printer
;
using
google
::
protobuf
::
util
::
SchemaGroupStripper
;
using
google
::
protobuf
::
util
::
SchemaAddZeroEnumValue
;
namespace
google
{
namespace
protobuf
{
namespace
compiler
{
namespace
{
string
StripProto
(
string
filename
)
{
if
(
filename
.
substr
(
filename
.
size
()
-
11
)
==
".protodevel"
)
{
// .protodevel
return
filename
.
substr
(
0
,
filename
.
size
()
-
11
);
}
else
{
// .proto
return
filename
.
substr
(
0
,
filename
.
size
()
-
6
);
}
}
DescriptorPool
new_pool_
;
}
// namespace
class
GoGoProtoGenerator
:
public
CodeGenerator
{
public
:
virtual
bool
GenerateAll
(
const
std
::
vector
<
const
FileDescriptor
*>&
files
,
const
string
&
parameter
,
GeneratorContext
*
context
,
string
*
error
)
const
{
for
(
int
i
=
0
;
i
<
files
.
size
();
i
++
)
{
for
(
auto
file
:
files
)
{
bool
can_generate
=
(
new_pool_
.
FindFileByName
(
file
->
name
())
==
nullptr
);
for
(
int
j
=
0
;
j
<
file
->
dependency_count
();
j
++
)
{
can_generate
&=
(
new_pool_
.
FindFileByName
(
file
->
dependency
(
j
)
->
name
())
!=
nullptr
);
}
for
(
int
j
=
0
;
j
<
file
->
public_dependency_count
();
j
++
)
{
can_generate
&=
(
new_pool_
.
FindFileByName
(
file
->
public_dependency
(
j
)
->
name
())
!=
nullptr
);
}
for
(
int
j
=
0
;
j
<
file
->
weak_dependency_count
();
j
++
)
{
can_generate
&=
(
new_pool_
.
FindFileByName
(
file
->
weak_dependency
(
j
)
->
name
())
!=
nullptr
);
}
if
(
can_generate
)
{
Generate
(
file
,
parameter
,
context
,
error
);
break
;
}
}
}
return
true
;
}
virtual
bool
Generate
(
const
FileDescriptor
*
file
,
const
string
&
parameter
,
GeneratorContext
*
context
,
string
*
error
)
const
{
FileDescriptorProto
new_file
;
file
->
CopyTo
(
&
new_file
);
SchemaGroupStripper
::
StripFile
(
file
,
&
new_file
);
SchemaAddZeroEnumValue
enum_scrubber
;
enum_scrubber
.
ScrubFile
(
&
new_file
);
string
filename
=
file
->
name
();
string
basename
=
StripProto
(
filename
);
std
::
vector
<
std
::
pair
<
string
,
string
>>
option_pairs
;
ParseGeneratorParameter
(
parameter
,
&
option_pairs
);
std
::
unique_ptr
<
google
::
protobuf
::
io
::
ZeroCopyOutputStream
>
output
(
context
->
Open
(
basename
+
".proto"
));
string
content
=
new_pool_
.
BuildFile
(
new_file
)
->
DebugString
();
Printer
printer
(
output
.
get
(),
'$'
);
printer
.
WriteRaw
(
content
.
c_str
(),
content
.
size
());
return
true
;
}
};
}
// namespace compiler
}
// namespace protobuf
}
// namespace google
int
main
(
int
argc
,
char
*
argv
[])
{
google
::
protobuf
::
compiler
::
GoGoProtoGenerator
generator
;
return
google
::
protobuf
::
compiler
::
PluginMain
(
argc
,
argv
,
&
generator
);
}
benchmarks/util/schema_proto2_to_proto3_util.h
0 → 100644
View file @
320d56c8
#ifndef PROTOBUF_BENCHMARKS_UTIL_SCHEMA_PROTO2_TO_PROTO3_UTIL_H_
#define PROTOBUF_BENCHMARKS_UTIL_SCHEMA_PROTO2_TO_PROTO3_UTIL_H_
#include "google/protobuf/message.h"
#include "google/protobuf/descriptor.h"
#include "google/protobuf/descriptor.pb.h"
#include <sstream>
#include <algorithm>
using
google
::
protobuf
::
Descriptor
;
using
google
::
protobuf
::
DescriptorProto
;
using
google
::
protobuf
::
FileDescriptorProto
;
using
google
::
protobuf
::
FieldDescriptorProto
;
using
google
::
protobuf
::
Message
;
using
google
::
protobuf
::
EnumValueDescriptorProto
;
namespace
google
{
namespace
protobuf
{
namespace
util
{
class
SchemaGroupStripper
{
public
:
static
void
StripFile
(
const
FileDescriptor
*
old_file
,
FileDescriptorProto
*
file
)
{
for
(
int
i
=
file
->
mutable_message_type
()
->
size
()
-
1
;
i
>=
0
;
i
--
)
{
if
(
IsMessageSet
(
old_file
->
message_type
(
i
)))
{
file
->
mutable_message_type
()
->
DeleteSubrange
(
i
,
1
);
continue
;
}
StripMessage
(
old_file
->
message_type
(
i
),
file
->
mutable_message_type
(
i
));
}
for
(
int
i
=
file
->
mutable_extension
()
->
size
()
-
1
;
i
>=
0
;
i
--
)
{
auto
field
=
old_file
->
extension
(
i
);
if
(
field
->
type
()
==
FieldDescriptor
::
TYPE_GROUP
||
IsMessageSet
(
field
->
message_type
())
||
IsMessageSet
(
field
->
containing_type
()))
{
file
->
mutable_extension
()
->
DeleteSubrange
(
i
,
1
);
}
}
}
private
:
static
bool
IsMessageSet
(
const
Descriptor
*
descriptor
)
{
if
(
descriptor
!=
nullptr
&&
descriptor
->
options
().
message_set_wire_format
())
{
return
true
;
}
return
false
;
}
static
void
StripMessage
(
const
Descriptor
*
old_message
,
DescriptorProto
*
new_message
)
{
for
(
int
i
=
new_message
->
mutable_field
()
->
size
()
-
1
;
i
>=
0
;
i
--
)
{
if
(
old_message
->
field
(
i
)
->
type
()
==
FieldDescriptor
::
TYPE_GROUP
||
IsMessageSet
(
old_message
->
field
(
i
)
->
message_type
()))
{
new_message
->
mutable_field
()
->
DeleteSubrange
(
i
,
1
);
}
}
for
(
int
i
=
new_message
->
mutable_extension
()
->
size
()
-
1
;
i
>=
0
;
i
--
)
{
auto
field_type_name
=
new_message
->
mutable_extension
(
i
)
->
type_name
();
if
(
old_message
->
extension
(
i
)
->
type
()
==
FieldDescriptor
::
TYPE_GROUP
||
IsMessageSet
(
old_message
->
extension
(
i
)
->
containing_type
())
||
IsMessageSet
(
old_message
->
extension
(
i
)
->
message_type
()))
{
new_message
->
mutable_extension
()
->
DeleteSubrange
(
i
,
1
);
}
}
for
(
int
i
=
0
;
i
<
new_message
->
mutable_nested_type
()
->
size
();
i
++
)
{
StripMessage
(
old_message
->
nested_type
(
i
),
new_message
->
mutable_nested_type
(
i
));
}
}
};
class
SchemaAddZeroEnumValue
{
public
:
SchemaAddZeroEnumValue
()
:
total_added_
(
0
)
{
}
void
ScrubFile
(
FileDescriptorProto
*
file
)
{
for
(
int
i
=
0
;
i
<
file
->
enum_type_size
();
i
++
)
{
ScrubEnum
(
file
->
mutable_enum_type
(
i
));
}
for
(
int
i
=
0
;
i
<
file
->
mutable_message_type
()
->
size
();
i
++
)
{
ScrubMessage
(
file
->
mutable_message_type
(
i
));
}
}
private
:
void
ScrubEnum
(
EnumDescriptorProto
*
enum_type
)
{
if
(
enum_type
->
value
(
0
).
number
()
!=
0
)
{
bool
has_zero
=
false
;
for
(
int
j
=
0
;
j
<
enum_type
->
value
().
size
();
j
++
)
{
if
(
enum_type
->
value
(
j
).
number
()
==
0
)
{
EnumValueDescriptorProto
temp_enum_value
;
temp_enum_value
.
CopyFrom
(
enum_type
->
value
(
j
));
enum_type
->
mutable_value
(
j
)
->
CopyFrom
(
enum_type
->
value
(
0
));
enum_type
->
mutable_value
(
0
)
->
CopyFrom
(
temp_enum_value
);
has_zero
=
true
;
break
;
}
}
if
(
!
has_zero
)
{
enum_type
->
mutable_value
()
->
Add
();
for
(
int
i
=
enum_type
->
mutable_value
()
->
size
()
-
1
;
i
>
0
;
i
--
)
{
enum_type
->
mutable_value
(
i
)
->
CopyFrom
(
*
enum_type
->
mutable_value
(
i
-
1
));
}
enum_type
->
mutable_value
(
0
)
->
set_number
(
0
);
enum_type
->
mutable_value
(
0
)
->
set_name
(
"ADDED_ZERO_VALUE_"
+
std
::
to_string
(
total_added_
++
));
}
}
}
void
ScrubMessage
(
DescriptorProto
*
message_type
)
{
for
(
int
i
=
0
;
i
<
message_type
->
mutable_enum_type
()
->
size
();
i
++
)
{
ScrubEnum
(
message_type
->
mutable_enum_type
(
i
));
}
for
(
int
i
=
0
;
i
<
message_type
->
mutable_nested_type
()
->
size
();
i
++
)
{
ScrubMessage
(
message_type
->
mutable_nested_type
(
i
));
}
}
int
total_added_
;
};
}
// namespace util
}
// namespace protobuf
}
// namespace google
#endif // PROTOBUF_BENCHMARKS_UTIL_SCHEMA_PROTO2_TO_PROTO3_UTIL_H_
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment