| // Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8.experimental.startup.instrumentation; |
| |
| import static com.android.tools.r8.utils.SystemPropertyUtils.getSystemPropertyForDevelopment; |
| import static com.android.tools.r8.utils.SystemPropertyUtils.parseSystemPropertyForDevelopmentOrDefault; |
| |
| public class StartupInstrumentationOptions { |
| |
| /** |
| * When enabled, each method will be instrumented to notify the startup InstrumentationServer that |
| * it has been executed. |
| * |
| * <p>This will also inject the startup runtime library (i.e., the InstrumentationServer) into the |
| * app. |
| */ |
| private boolean enableStartupInstrumentation = |
| parseSystemPropertyForDevelopmentOrDefault( |
| "com.android.tools.r8.startup.instrumentation.instrument", false); |
| |
| /** |
| * Specifies the synthetic context of the startup runtime library. When this is set, the startup |
| * runtime library will only be injected into the app when the synthetic context is in the |
| * program. This can be used to avoid that the startup runtime library is injected multiple times |
| * in presence of separate compilation. |
| * |
| * <p>Example synthetic context: "app.tivi.home.MainActivity". |
| * |
| * <p>Note that this is only meaningful when {@link #enableStartupInstrumentation} is set to true. |
| */ |
| private String startupInstrumentationServerSyntheticContext = |
| getSystemPropertyForDevelopment( |
| "com.android.tools.r8.startup.instrumentation.instrumentationserversyntheticcontext"); |
| |
| /** |
| * Specifies the logcat tag that should be used by the InstrumentationServer when logging events. |
| * |
| * <p>When a logcat tag is not specified, the InstrumentationServer will not print events to |
| * logcat. Instead, the startup events must be obtained by requesting the InstrumentationServer to |
| * write the events to a file. |
| */ |
| private String startupInstrumentationTag = |
| getSystemPropertyForDevelopment( |
| "com.android.tools.r8.startup.instrumentation.instrumentationtag"); |
| |
| public boolean hasStartupInstrumentationServerSyntheticContext() { |
| return startupInstrumentationServerSyntheticContext != null; |
| } |
| |
| public String getStartupInstrumentationServerSyntheticContext() { |
| return startupInstrumentationServerSyntheticContext; |
| } |
| |
| public StartupInstrumentationOptions setStartupInstrumentationServerSyntheticContext( |
| String startupInstrumentationServerSyntheticContext) { |
| this.startupInstrumentationServerSyntheticContext = |
| startupInstrumentationServerSyntheticContext; |
| return this; |
| } |
| |
| public boolean hasStartupInstrumentationTag() { |
| return startupInstrumentationTag != null; |
| } |
| |
| public String getStartupInstrumentationTag() { |
| return startupInstrumentationTag; |
| } |
| |
| public StartupInstrumentationOptions setStartupInstrumentationTag( |
| String startupInstrumentationTag) { |
| this.startupInstrumentationTag = startupInstrumentationTag; |
| return this; |
| } |
| |
| public boolean isStartupInstrumentationEnabled() { |
| return enableStartupInstrumentation; |
| } |
| |
| public StartupInstrumentationOptions setEnableStartupInstrumentation() { |
| enableStartupInstrumentation = true; |
| return this; |
| } |
| } |