blob: 4bb2397b62b5b08bee926680c9b434ea282887fd [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.android_webview;
import android.os.Trace;
/**
* An alternative to @{TraceEvent} that allows us to trace events before native
* initialization for WebView.
*
* Note that TraceEvent / EarlyTraceEvent cannot be used before native initialization since
* it directly purges to the kernel debug message but that method does not allow tracing events
* to be written *after* the event occurrence.
*/
public class ScopedSysTraceEvent implements AutoCloseable {
/**
* Factory used to support the "try with resource" construct.
* Note that currently this is the only allowed pattern. However, this requires heap allocation
* so we may consider calling Trace.beginSection() / endSection() directly if it should be used
* repeatedly.
*
* @param name Trace event name.
* @return a {@ScopedSysTraceEvent}, or null if tracing is not enabled.
*/
public static ScopedSysTraceEvent scoped(String name) {
return new ScopedSysTraceEvent(name);
}
/**
* Constructor used to support the "try with resource" construct.
*/
private ScopedSysTraceEvent(String name) {
Trace.beginSection(name);
}
@Override
public void close() {
Trace.endSection();
}
}