Skip to content

Commit 40a26b6

Browse files
authored
Merge pull request #131 from michaelwoerister/remove_serialization_sink_trait
Remove the SerializationSink trait
2 parents 38e462d + 4303a6d commit 40a26b6

14 files changed

+221
-376
lines changed

analyzeme/benches/serialization_bench.rs

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,17 @@
33
extern crate test;
44

55
use analyzeme::testing_common;
6-
use measureme::{FileSerializationSink, MmapSerializationSink};
76

87
#[bench]
9-
fn bench_file_serialization_sink(bencher: &mut test::Bencher) {
8+
fn bench_serialization_sink(bencher: &mut test::Bencher) {
109
bencher.iter(|| {
11-
testing_common::run_serialization_bench::<FileSerializationSink>(
12-
"file_serialization_sink_test",
13-
500_000,
14-
1,
15-
);
10+
testing_common::run_serialization_bench("serialization_sink_test", 500_000, 1);
1611
});
1712
}
1813

1914
#[bench]
20-
fn bench_mmap_serialization_sink(bencher: &mut test::Bencher) {
15+
fn bench_serialization_sink_8_threads(bencher: &mut test::Bencher) {
2116
bencher.iter(|| {
22-
testing_common::run_serialization_bench::<MmapSerializationSink>(
23-
"mmap_serialization_sink_test",
24-
500_000,
25-
1,
26-
);
27-
});
28-
}
29-
30-
#[bench]
31-
fn bench_file_serialization_sink_8_threads(bencher: &mut test::Bencher) {
32-
bencher.iter(|| {
33-
testing_common::run_serialization_bench::<FileSerializationSink>(
34-
"file_serialization_sink_test",
35-
50_000,
36-
8,
37-
);
38-
});
39-
}
40-
41-
#[bench]
42-
fn bench_mmap_serialization_sink_8_threads(bencher: &mut test::Bencher) {
43-
bencher.iter(|| {
44-
testing_common::run_serialization_bench::<MmapSerializationSink>(
45-
"mmap_serialization_sink_test",
46-
50_000,
47-
8,
48-
);
17+
testing_common::run_serialization_bench("serialization_sink_test_8_threads", 50_000, 8);
4918
});
5019
}

analyzeme/src/profiling_data.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use measureme::file_header::{
66
read_file_header, write_file_header, CURRENT_FILE_FORMAT_VERSION, FILE_HEADER_SIZE,
77
FILE_MAGIC_EVENT_STREAM,
88
};
9-
use measureme::ByteVecSink;
109
use measureme::{EventId, ProfilerFiles, RawEvent, SerializationSink, StringTableBuilder};
1110
use serde::{Deserialize, Deserializer};
1211
use std::error::Error;
@@ -200,17 +199,17 @@ impl<'a> DoubleEndedIterator for ProfilerEventIterator<'a> {
200199
/// implementation might not be efficient, which why it should only be used for
201200
/// writing tests and other things that are not performance sensitive.
202201
pub struct ProfilingDataBuilder {
203-
event_sink: ByteVecSink,
204-
string_table_data_sink: Arc<ByteVecSink>,
205-
string_table_index_sink: Arc<ByteVecSink>,
206-
string_table: StringTableBuilder<ByteVecSink>,
202+
event_sink: SerializationSink,
203+
string_table_data_sink: Arc<SerializationSink>,
204+
string_table_index_sink: Arc<SerializationSink>,
205+
string_table: StringTableBuilder,
207206
}
208207

209208
impl ProfilingDataBuilder {
210209
pub fn new() -> ProfilingDataBuilder {
211-
let event_sink = ByteVecSink::new();
212-
let string_table_data_sink = Arc::new(ByteVecSink::new());
213-
let string_table_index_sink = Arc::new(ByteVecSink::new());
210+
let event_sink = SerializationSink::new_in_memory();
211+
let string_table_data_sink = Arc::new(SerializationSink::new_in_memory());
212+
let string_table_index_sink = Arc::new(SerializationSink::new_in_memory());
214213

215214
// The first thing in every file we generate must be the file header.
216215
write_file_header(&event_sink, FILE_MAGIC_EVENT_STREAM);

analyzeme/src/stringtable.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,13 +243,13 @@ impl StringTable {
243243
#[cfg(test)]
244244
mod tests {
245245
use super::*;
246-
use measureme::{ByteVecSink, StringComponent, StringTableBuilder};
246+
use measureme::{SerializationSink, StringComponent, StringTableBuilder};
247247
use std::sync::Arc;
248248

249249
#[test]
250250
fn simple_strings() {
251-
let data_sink = Arc::new(ByteVecSink::new());
252-
let index_sink = Arc::new(ByteVecSink::new());
251+
let data_sink = Arc::new(SerializationSink::new_in_memory());
252+
let index_sink = Arc::new(SerializationSink::new_in_memory());
253253

254254
let expected_strings = &[
255255
"abc",
@@ -289,8 +289,8 @@ mod tests {
289289

290290
#[test]
291291
fn composite_string() {
292-
let data_sink = Arc::new(ByteVecSink::new());
293-
let index_sink = Arc::new(ByteVecSink::new());
292+
let data_sink = Arc::new(SerializationSink::new_in_memory());
293+
let index_sink = Arc::new(SerializationSink::new_in_memory());
294294

295295
let expected_strings = &[
296296
"abc", // 0

analyzeme/src/testing_common.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::timestamp::Timestamp;
22
use crate::{Event, ProfilingData};
3-
use measureme::{EventId, EventIdBuilder, Profiler, SerializationSink, StringId};
3+
use measureme::{EventId, EventIdBuilder, Profiler, StringId};
44
use rustc_hash::FxHashMap;
55
use std::borrow::Cow;
66
use std::default::Default;
@@ -36,12 +36,12 @@ impl ExpectedEvent {
3636
}
3737

3838
// Generate some profiling data. This is the part that would run in rustc.
39-
fn generate_profiling_data<S: SerializationSink>(
39+
fn generate_profiling_data(
4040
filestem: &Path,
4141
num_stacks: usize,
4242
num_threads: usize,
4343
) -> Vec<Event<'static>> {
44-
let profiler = Arc::new(Profiler::<S>::new(Path::new(filestem)).unwrap());
44+
let profiler = Arc::new(Profiler::new(Path::new(filestem)).unwrap());
4545

4646
let event_id_virtual = EventId::from_label(StringId::new_virtual(42));
4747
let event_id_builder = EventIdBuilder::new(&profiler);
@@ -187,26 +187,19 @@ fn collect_events_per_thread<'a>(
187187
per_thread
188188
}
189189

190-
pub fn run_serialization_bench<S: SerializationSink>(
191-
file_name_stem: &str,
192-
num_events: usize,
193-
num_threads: usize,
194-
) {
190+
pub fn run_serialization_bench(file_name_stem: &str, num_events: usize, num_threads: usize) {
195191
let filestem = mk_filestem(file_name_stem);
196-
generate_profiling_data::<S>(&filestem, num_events, num_threads);
192+
generate_profiling_data(&filestem, num_events, num_threads);
197193
}
198194

199-
pub fn run_end_to_end_serialization_test<S: SerializationSink>(
200-
file_name_stem: &str,
201-
num_threads: usize,
202-
) {
195+
pub fn run_end_to_end_serialization_test(file_name_stem: &str, num_threads: usize) {
203196
let filestem = mk_filestem(file_name_stem);
204-
let expected_events = generate_profiling_data::<S>(&filestem, 10_000, num_threads);
197+
let expected_events = generate_profiling_data(&filestem, 10_000, num_threads);
205198
process_profiling_data(&filestem, &expected_events);
206199
}
207200

208-
fn pseudo_invocation<S: SerializationSink>(
209-
profiler: &Profiler<S>,
201+
fn pseudo_invocation(
202+
profiler: &Profiler,
210203
random: usize,
211204
thread_id: u32,
212205
recursions_left: usize,

analyzeme/tests/serialization.rs

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,11 @@
11
use analyzeme::testing_common::run_end_to_end_serialization_test;
2-
use measureme::{FileSerializationSink, MmapSerializationSink};
32

43
#[test]
5-
fn test_file_serialization_sink_1_thread() {
6-
run_end_to_end_serialization_test::<FileSerializationSink>(
7-
"file_serialization_sink_test_1_thread",
8-
1,
9-
);
4+
fn test_serialization_sink_1_thread() {
5+
run_end_to_end_serialization_test("serialization_sink_test_1_thread", 1);
106
}
117

128
#[test]
13-
fn test_file_serialization_sink_8_threads() {
14-
run_end_to_end_serialization_test::<FileSerializationSink>(
15-
"file_serialization_sink_test_8_threads",
16-
8,
17-
);
18-
}
19-
20-
#[test]
21-
fn test_mmap_serialization_sink_1_thread() {
22-
run_end_to_end_serialization_test::<MmapSerializationSink>(
23-
"mmap_serialization_sink_test_1_thread",
24-
1,
25-
);
26-
}
27-
28-
#[test]
29-
fn test_mmap_serialization_sink_8_threads() {
30-
run_end_to_end_serialization_test::<MmapSerializationSink>(
31-
"mmap_serialization_sink_test_8_threads",
32-
8,
33-
);
9+
fn test_serialization_sink_8_threads() {
10+
run_end_to_end_serialization_test("serialization_sink_test_8_threads", 8);
3411
}

measureme/Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,3 @@ travis-ci = { repository = "rust-lang/measureme" }
1515
[dependencies]
1616
rustc-hash = "1.0.1"
1717
parking_lot = "0.11.0"
18-
19-
[target.'cfg(not(target_arch="wasm32"))'.dependencies]
20-
memmap = "0.7"

measureme/src/event_id.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{Profiler, SerializationSink, StringComponent, StringId};
1+
use crate::{Profiler, StringComponent, StringId};
22

33
/// Event IDs are strings conforming to the following grammar:
44
///
@@ -53,12 +53,12 @@ impl EventId {
5353
}
5454
}
5555

56-
pub struct EventIdBuilder<'p, S: SerializationSink> {
57-
profiler: &'p Profiler<S>,
56+
pub struct EventIdBuilder<'p> {
57+
profiler: &'p Profiler,
5858
}
5959

60-
impl<'p, S: SerializationSink> EventIdBuilder<'p, S> {
61-
pub fn new(profiler: &Profiler<S>) -> EventIdBuilder<'_, S> {
60+
impl<'p> EventIdBuilder<'p> {
61+
pub fn new(profiler: &Profiler) -> EventIdBuilder<'_> {
6262
EventIdBuilder { profiler }
6363
}
6464

measureme/src/file_header.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
//! All binary files generated by measureme have a simple file header that
22
//! consists of a 4 byte file magic string and a 4 byte little-endian version
33
//! number.
4-
5-
use crate::serialization::SerializationSink;
4+
use crate::SerializationSink;
65
use std::convert::TryInto;
76
use std::error::Error;
87

@@ -15,7 +14,7 @@ pub const FILE_MAGIC_STRINGTABLE_INDEX: &[u8; 4] = b"MMSI";
1514
/// rely on this size to be `8`.
1615
pub const FILE_HEADER_SIZE: usize = 8;
1716

18-
pub fn write_file_header<S: SerializationSink>(s: &S, file_magic: &[u8; 4]) {
17+
pub fn write_file_header(s: &SerializationSink, file_magic: &[u8; 4]) {
1918
// The implementation here relies on FILE_HEADER_SIZE to have the value 8.
2019
// Let's make sure this assumption cannot be violated without being noticed.
2120
assert_eq!(FILE_HEADER_SIZE, 8);
@@ -54,11 +53,11 @@ pub fn strip_file_header(data: &[u8]) -> &[u8] {
5453
#[cfg(test)]
5554
mod tests {
5655
use super::*;
57-
use crate::serialization::ByteVecSink;
56+
use crate::SerializationSink;
5857

5958
#[test]
6059
fn roundtrip() {
61-
let data_sink = ByteVecSink::new();
60+
let data_sink = SerializationSink::new_in_memory();
6261

6362
write_file_header(&data_sink, FILE_MAGIC_EVENT_STREAM);
6463

@@ -72,7 +71,7 @@ mod tests {
7271

7372
#[test]
7473
fn invalid_magic() {
75-
let data_sink = ByteVecSink::new();
74+
let data_sink = SerializationSink::new_in_memory();
7675
write_file_header(&data_sink, FILE_MAGIC_STRINGTABLE_DATA);
7776
let mut data = data_sink.into_bytes();
7877

@@ -83,7 +82,7 @@ mod tests {
8382

8483
#[test]
8584
fn other_version() {
86-
let data_sink = ByteVecSink::new();
85+
let data_sink = SerializationSink::new_in_memory();
8786

8887
write_file_header(&data_sink, FILE_MAGIC_STRINGTABLE_INDEX);
8988

0 commit comments

Comments
 (0)