| // Copyright 2013 The Flutter 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 io.flutter.util; |
| |
| import androidx.annotation.NonNull; |
| import androidx.tracing.Trace; |
| |
| public final class TraceSection implements AutoCloseable { |
| /** |
| * Factory used to support the try-with-resource construct. |
| * |
| * <p>To get scoped trace events, use the try-with-resource construct, for instance: |
| * |
| * <pre>{@code |
| * try (TraceSection e = TraceSection.scoped("MyTraceEvent")) { |
| * // code. |
| * } |
| * }</pre> |
| */ |
| public static TraceSection scoped(String name) { |
| return new TraceSection(name); |
| } |
| |
| /** Constructor used to support the try-with-resource construct. */ |
| private TraceSection(String name) { |
| begin(name); |
| } |
| |
| @Override |
| public void close() { |
| end(); |
| } |
| |
| private static String cropSectionName(@NonNull String sectionName) { |
| return sectionName.length() < 124 ? sectionName : sectionName.substring(0, 124) + "..."; |
| } |
| |
| /** |
| * Wraps Trace.beginSection to ensure that the line length stays below 127 code units. |
| * |
| * @param sectionName The string to display as the section name in the trace. |
| */ |
| public static void begin(@NonNull String sectionName) { |
| Trace.beginSection(cropSectionName(sectionName)); |
| } |
| |
| /** Wraps Trace.endSection. */ |
| public static void end() throws RuntimeException { |
| Trace.endSection(); |
| } |
| |
| /** |
| * Wraps Trace.beginAsyncSection to ensure that the line length stays below 127 code units. |
| * |
| * @param sectionName The string to display as the section name in the trace. |
| * @param cookie Unique integer defining the section. |
| */ |
| public static void beginAsyncSection(String sectionName, int cookie) { |
| Trace.beginAsyncSection(cropSectionName(sectionName), cookie); |
| } |
| |
| /** Wraps Trace.endAsyncSection to ensure that the line length stays below 127 code units. */ |
| public static void endAsyncSection(String sectionName, int cookie) { |
| Trace.endAsyncSection(cropSectionName(sectionName), cookie); |
| } |
| } |