Skip to content

Commit

Permalink
profile: add profile_finish_ts
Browse files Browse the repository at this point in the history
"date" field in Bazel json profile is a confusing field.

- It uses Java Date.toString() output which includes local timezone
  that could be hard to parse.

- The name is misleading since users could mistook it for profile
  start time, while it actually means the finish/end time, when
  Bazel calls the writer to serialize profiling data to disk.

Add "profile_finish_ts" which has a clearer name and more consistent
value with the time unit being used in the rest of the JSON
profile(microseconds).

We shall deprecate the "date" field in a separate patch in a major
release.

Closes bazelbuild#17636.

PiperOrigin-RevId: 524817808
Change-Id: I89e144d42f0e608818507f5f9f9bc525c9dc7ac3
  • Loading branch information
sluongng authored and fweikert committed May 25, 2023
1 parent 5af526d commit 1ac06f4
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 2 deletions.
1 change: 1 addition & 0 deletions site/en/advanced/performance/json-trace-profile.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ Example:
"otherData": {
"build_id": "101bff9a-7243-4c1a-8503-9dc6ae4c3b05",
"date": "Wed Oct 26 08:22:35 CEST 2022",
"profile_finish_ts": "1677666095162000",
"output_base": "/usr/local/google/_bazel_johndoe/573d4be77eaa72b91a3dfaa497bf8cd0"
},
"traceEvents": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Date;
import java.time.Instant;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.BlockingQueue;
Expand Down Expand Up @@ -172,13 +172,15 @@ public void run() {
// The buffer size of 262144 is chosen at random.
new OutputStreamWriter(
new BufferedOutputStream(outStream, 262144), StandardCharsets.UTF_8))) {
var finishDate = Instant.now();
writer.beginObject();
writer.name("otherData");
writer.beginObject();
writer.name("bazel_version").value(BlazeVersionInfo.instance().getReleaseName());
writer.name("build_id").value(buildID.toString());
writer.name("output_base").value(outputBase);
writer.name("date").value(new Date().toString());
writer.name("date").value(finishDate.toString());
writer.name("profile_finish_ts").value(finishDate.getEpochSecond() * 1000);
writer.endObject();
writer.name("traceEvents");
writer.beginArray();
Expand Down

0 comments on commit 1ac06f4

Please sign in to comment.