blob: 4c1c4b68bbbd572223c5e3dcdede3cf632667360 [file] [log] [blame]
/*
* Copyright 2013-present Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may obtain
* a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.facebook.buck.event;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import javax.annotation.Nullable;
/**
* Json format for Chrome Trace events that can be viewed in chrome://tracing.
* https://code.google.com/p/trace-viewer/wiki/TraceEventFormat
*/
@JsonInclude(Include.NON_NULL)
public class ChromeTraceEvent {
public enum Phase {
BEGIN("B"),
END("E"),
IMMEDIATE("I"),
COUNTER("C"),
ASYNC_START("S"),
ASYNC_FINISH("F"),
OBJECT_SNAPSHOT("O"),
OBJECT_NEW("N"),
OBJECT_DELETE("D"),
METADATA("M");
private final String phase;
Phase(String phase) {
this.phase = phase;
}
@JsonValue
String getPhase() {
return phase;
}
}
private final String category;
private final String name;
private final Phase phase;
private final long processId;
private final long threadId;
private final long microTime;
@Nullable
private final ImmutableMap<String, String> args;
public ChromeTraceEvent(@JsonProperty("cat") String category,
@JsonProperty("name") String name,
@JsonProperty("ph") Phase phase,
@JsonProperty("pid") long processId,
@JsonProperty("tid") long threadId,
@JsonProperty("ts") long microTime,
@JsonProperty("args") Map<String, String> args) {
this.category = Preconditions.checkNotNull(category);
this.name = Preconditions.checkNotNull(name);
this.phase = Preconditions.checkNotNull(phase);
this.processId = processId;
this.threadId = threadId;
this.microTime = microTime;
this.args = ImmutableMap.copyOf(args);
}
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("ph")
public Phase getPhase() {
return phase;
}
@JsonProperty("pid")
public long getProcessId() {
return processId;
}
@JsonProperty("tid")
public long getThreadId() {
return threadId;
}
@JsonProperty("ts")
public long getMicroTime() {
return microTime;
}
@JsonProperty("args")
public Map<String, String> getArgs() {
return args;
}
@JsonProperty("cat")
public String getCategory() {
return category;
}
}