diff options
| author | Tej Singh <singhtejinder@google.com> | 2020-02-05 15:02:49 -0800 |
|---|---|---|
| committer | Tej Singh <singhtejinder@google.com> | 2020-02-05 15:02:49 -0800 |
| commit | e86dab7a6ac7fc28b6e234e9db0b6a678990ea5e (patch) | |
| tree | d6e66a2a76a4de63474d10aa5464a9c263cd00df /core/java/android/util/StatsLog.java | |
| parent | 4f552dc3bd46300553e85572a2f8e16faac9f961 (diff) | |
Move StatsLog.java to fw-statsd.jar
Test: atest GtsStatsdHostTestCases
Bug: 146578693
Change-Id: I7244c6099d16c5c7da14060a1a5fa0c866199754
Diffstat (limited to 'core/java/android/util/StatsLog.java')
| -rw-r--r-- | core/java/android/util/StatsLog.java | 273 |
1 files changed, 0 insertions, 273 deletions
diff --git a/core/java/android/util/StatsLog.java b/core/java/android/util/StatsLog.java deleted file mode 100644 index 791073794b0e..000000000000 --- a/core/java/android/util/StatsLog.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * 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 android.util; - -import static android.Manifest.permission.DUMP; -import static android.Manifest.permission.PACKAGE_USAGE_STATS; - -import android.Manifest; -import android.annotation.NonNull; -import android.annotation.RequiresPermission; -import android.annotation.SystemApi; -import android.content.Context; -import android.os.IStatsd; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.util.proto.ProtoOutputStream; - -import com.android.internal.util.FrameworkStatsLog; - -/** - * StatsLog provides an API for developers to send events to statsd. The events can be used to - * define custom metrics inside statsd. - */ -public final class StatsLog { - private static final String TAG = "StatsLog"; - private static final boolean DEBUG = false; - private static final int EXPERIMENT_IDS_FIELD_ID = 1; - - private static IStatsd sService; - - private static Object sLogLock = new Object(); - - private StatsLog() { - } - - /** - * Logs a start event. - * - * @param label developer-chosen label. - * @return True if the log request was sent to statsd. - */ - public static boolean logStart(int label) { - synchronized (sLogLock) { - try { - IStatsd service = getIStatsdLocked(); - if (service == null) { - if (DEBUG) { - Slog.d(TAG, "Failed to find statsd when logging start"); - } - return false; - } - service.sendAppBreadcrumbAtom(label, - FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__START); - return true; - } catch (RemoteException e) { - sService = null; - if (DEBUG) { - Slog.d(TAG, "Failed to connect to statsd when logging start"); - } - return false; - } - } - } - - /** - * Logs a stop event. - * - * @param label developer-chosen label. - * @return True if the log request was sent to statsd. - */ - public static boolean logStop(int label) { - synchronized (sLogLock) { - try { - IStatsd service = getIStatsdLocked(); - if (service == null) { - if (DEBUG) { - Slog.d(TAG, "Failed to find statsd when logging stop"); - } - return false; - } - service.sendAppBreadcrumbAtom( - label, FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__STOP); - return true; - } catch (RemoteException e) { - sService = null; - if (DEBUG) { - Slog.d(TAG, "Failed to connect to statsd when logging stop"); - } - return false; - } - } - } - - /** - * Logs an event that does not represent a start or stop boundary. - * - * @param label developer-chosen label. - * @return True if the log request was sent to statsd. - */ - public static boolean logEvent(int label) { - synchronized (sLogLock) { - try { - IStatsd service = getIStatsdLocked(); - if (service == null) { - if (DEBUG) { - Slog.d(TAG, "Failed to find statsd when logging event"); - } - return false; - } - service.sendAppBreadcrumbAtom( - label, FrameworkStatsLog.APP_BREADCRUMB_REPORTED__STATE__UNSPECIFIED); - return true; - } catch (RemoteException e) { - sService = null; - if (DEBUG) { - Slog.d(TAG, "Failed to connect to statsd when logging event"); - } - return false; - } - } - } - - /** - * Logs an event for binary push for module updates. - * - * @param trainName name of install train. - * @param trainVersionCode version code of the train. - * @param options optional flags about this install. - * The last 3 bits indicate options: - * 0x01: FLAG_REQUIRE_STAGING - * 0x02: FLAG_ROLLBACK_ENABLED - * 0x04: FLAG_REQUIRE_LOW_LATENCY_MONITOR - * @param state current install state. Defined as State enums in - * BinaryPushStateChanged atom in - * frameworks/base/cmds/statsd/src/atoms.proto - * @param experimentIds experiment ids. - * @return True if the log request was sent to statsd. - */ - @RequiresPermission(allOf = {DUMP, PACKAGE_USAGE_STATS}) - public static boolean logBinaryPushStateChanged(@NonNull String trainName, - long trainVersionCode, int options, int state, - @NonNull long[] experimentIds) { - ProtoOutputStream proto = new ProtoOutputStream(); - for (long id : experimentIds) { - proto.write( - ProtoOutputStream.FIELD_TYPE_INT64 - | ProtoOutputStream.FIELD_COUNT_REPEATED - | EXPERIMENT_IDS_FIELD_ID, - id); - } - FrameworkStatsLog.write(FrameworkStatsLog.BINARY_PUSH_STATE_CHANGED, - trainName, - trainVersionCode, - (options & IStatsd.FLAG_REQUIRE_STAGING) > 0, - (options & IStatsd.FLAG_ROLLBACK_ENABLED) > 0, - (options & IStatsd.FLAG_REQUIRE_LOW_LATENCY_MONITOR) > 0, - state, - proto.getBytes(), - 0, - 0); - return true; - } - - /** - * Logs an event for watchdog rollbacks. - * - * @param rollbackType state of the rollback. - * @param packageName package name being rolled back. - * @param packageVersionCode version of the package being rolled back. - * @param rollbackReason reason the package is being rolled back. - * @param failingPackageName the package name causing the failure. - * - * @return True if the log request was sent to statsd. - * - * @hide - */ - @RequiresPermission(allOf = {DUMP, PACKAGE_USAGE_STATS}) - public static boolean logWatchdogRollbackOccurred(int rollbackType, String packageName, - long packageVersionCode, int rollbackReason, String failingPackageName) { - synchronized (sLogLock) { - try { - IStatsd service = getIStatsdLocked(); - if (service == null) { - if (DEBUG) { - Slog.d(TAG, "Failed to find statsd when logging event"); - } - return false; - } - - service.sendWatchdogRollbackOccurredAtom(rollbackType, packageName, - packageVersionCode, rollbackReason, failingPackageName); - return true; - } catch (RemoteException e) { - sService = null; - if (DEBUG) { - Slog.d(TAG, - "Failed to connect to StatsCompanionService when logging " - + "WatchdogRollbackOccurred"); - } - return false; - } - } - } - - - private static IStatsd getIStatsdLocked() throws RemoteException { - if (sService != null) { - return sService; - } - sService = IStatsd.Stub.asInterface(ServiceManager.getService("stats")); - return sService; - } - - /** - * Write an event to stats log using the raw format. - * - * @param buffer The encoded buffer of data to write. - * @param size The number of bytes from the buffer to write. - * @hide - */ - // TODO(b/144935988): Mark deprecated. - @SystemApi - public static void writeRaw(@NonNull byte[] buffer, int size) { - // TODO(b/144935988): make this no-op once clients have migrated to StatsEvent. - writeImpl(buffer, size, 0); - } - - /** - * Write an event to stats log using the raw format. - * - * @param buffer The encoded buffer of data to write. - * @param size The number of bytes from the buffer to write. - * @param atomId The id of the atom to which the event belongs. - */ - private static native void writeImpl(@NonNull byte[] buffer, int size, int atomId); - - /** - * Write an event to stats log using the raw format encapsulated in StatsEvent. - * After writing to stats log, release() is called on the StatsEvent object. - * No further action should be taken on the StatsEvent object following this call. - * - * @param statsEvent The StatsEvent object containing the encoded buffer of data to write. - * @hide - */ - @SystemApi - public static void write(@NonNull final StatsEvent statsEvent) { - writeImpl(statsEvent.getBytes(), statsEvent.getNumBytes(), statsEvent.getAtomId()); - statsEvent.release(); - } - - private static void enforceDumpCallingPermission(Context context) { - context.enforceCallingPermission(android.Manifest.permission.DUMP, "Need DUMP permission."); - } - - private static void enforcesageStatsCallingPermission(Context context) { - context.enforceCallingPermission(Manifest.permission.PACKAGE_USAGE_STATS, - "Need PACKAGE_USAGE_STATS permission."); - } -} |
