syntax = "proto3"; package spark; import "spark/spark.proto"; option java_package = "me.lucko.spark.proto"; option java_outer_classname = "SparkSamplerProtos"; message SamplerData { SamplerMetadata metadata = 1; repeated ThreadNode threads = 2; map class_sources = 3; // optional map method_sources = 4; // optional map line_sources = 5; // optional } message SamplerMetadata { CommandSenderMetadata creator = 1; int64 start_time = 2; int32 interval = 3; ThreadDumper thread_dumper = 4; DataAggregator data_aggregator = 5; string comment = 6; PlatformMetadata platform_metadata = 7; PlatformStatistics platform_statistics = 8; SystemStatistics system_statistics = 9; map server_configurations = 10; int64 end_time = 11; int32 number_of_ticks = 12; map sources = 13; map extra_platform_metadata = 14; message ThreadDumper { Type type = 1; repeated int64 ids = 2; // optional repeated string patterns = 3; // optional enum Type { ALL = 0; SPECIFIC = 1; REGEX = 2; } } message DataAggregator { Type type = 1; ThreadGrouper thread_grouper = 2; int64 tick_length_threshold = 3; // optional int32 number_of_included_ticks = 4; // optional enum Type { SIMPLE = 0; TICKED = 1; } enum ThreadGrouper { BY_NAME = 0; BY_POOL = 1; AS_ONE = 2; } } message SourceMetadata { string name = 1; string version = 2; } } message ThreadNode { string name = 1; double time = 2; repeated StackTraceNode children = 3; } message StackTraceNode { double time = 1; repeated StackTraceNode children = 2; string class_name = 3; string method_name = 4; int32 parent_line_number = 5; // optional int32 line_number = 6; // optional string method_desc = 7; // optional }