Index: content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java b/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java |
deleted file mode 100644 |
index e405922df3b2ee1bc72a73527653f26e9e06280b..0000000000000000000000000000000000000000 |
--- a/content/public/android/java/src/org/chromium/content/browser/TracingControllerAndroid.java |
+++ /dev/null |
@@ -1,272 +0,0 @@ |
-// Copyright 2013 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.content.browser; |
- |
-import android.content.BroadcastReceiver; |
-import android.content.Context; |
-import android.content.Intent; |
-import android.content.IntentFilter; |
-import android.os.Environment; |
-import android.text.TextUtils; |
-import android.util.Log; |
-import android.widget.Toast; |
- |
-import org.chromium.base.CalledByNative; |
-import org.chromium.base.JNINamespace; |
-import org.chromium.base.TraceEvent; |
-import org.chromium.content.R; |
- |
-import java.io.File; |
-import java.text.SimpleDateFormat; |
-import java.util.Date; |
-import java.util.Locale; |
-import java.util.TimeZone; |
- |
-/** |
- * Controller for Chrome's tracing feature. |
- * |
- * We don't have any UI per se. Just call startTracing() to start and |
- * stopTracing() to stop. We'll report progress to the user with Toasts. |
- * |
- * If the host application registers this class's BroadcastReceiver, you can |
- * also start and stop the tracer with a broadcast intent, as follows: |
- * <ul> |
- * <li>To start tracing: am broadcast -a org.chromium.content_shell_apk.GPU_PROFILER_START |
- * <li>Add "-e file /foo/bar/xyzzy" to log trace data to a specific file. |
- * <li>To stop tracing: am broadcast -a org.chromium.content_shell_apk.GPU_PROFILER_STOP |
- * </ul> |
- * Note that the name of these intents change depending on which application |
- * is being traced, but the general form is [app package name].GPU_PROFILER_{START,STOP}. |
- */ |
-@JNINamespace("content") |
-public class TracingControllerAndroid { |
- |
- private static final String TAG = "TracingControllerAndroid"; |
- |
- private static final String ACTION_START = "GPU_PROFILER_START"; |
- private static final String ACTION_STOP = "GPU_PROFILER_STOP"; |
- private static final String FILE_EXTRA = "file"; |
- private static final String CATEGORIES_EXTRA = "categories"; |
- private static final String RECORD_CONTINUOUSLY_EXTRA = "continuous"; |
- private static final String DEFAULT_CHROME_CATEGORIES_PLACE_HOLDER = |
- "_DEFAULT_CHROME_CATEGORIES"; |
- |
- private final Context mContext; |
- private final TracingBroadcastReceiver mBroadcastReceiver; |
- private final TracingIntentFilter mIntentFilter; |
- private boolean mIsTracing; |
- |
- // We might not want to always show toasts when we start the profiler, especially if |
- // showing the toast impacts performance. This gives us the chance to disable them. |
- private boolean mShowToasts = true; |
- |
- private String mFilename; |
- |
- public TracingControllerAndroid(Context context) { |
- mContext = context; |
- mBroadcastReceiver = new TracingBroadcastReceiver(); |
- mIntentFilter = new TracingIntentFilter(context); |
- } |
- |
- /** |
- * Get a BroadcastReceiver that can handle profiler intents. |
- */ |
- public BroadcastReceiver getBroadcastReceiver() { |
- return mBroadcastReceiver; |
- } |
- |
- /** |
- * Get an IntentFilter for profiler intents. |
- */ |
- public IntentFilter getIntentFilter() { |
- return mIntentFilter; |
- } |
- |
- /** |
- * Register a BroadcastReceiver in the given context. |
- */ |
- public void registerReceiver(Context context) { |
- context.registerReceiver(getBroadcastReceiver(), getIntentFilter()); |
- } |
- |
- /** |
- * Unregister the GPU BroadcastReceiver in the given context. |
- * @param context |
- */ |
- public void unregisterReceiver(Context context) { |
- context.unregisterReceiver(getBroadcastReceiver()); |
- } |
- |
- /** |
- * Returns true if we're currently profiling. |
- */ |
- public boolean isTracing() { |
- return mIsTracing; |
- } |
- |
- /** |
- * Returns the path of the current output file. Null if isTracing() false. |
- */ |
- public String getOutputPath() { |
- return mFilename; |
- } |
- |
- /** |
- * Start profiling to a new file in the Downloads directory. |
- * |
- * Calls #startTracing(String, boolean, String, boolean) with a new timestamped filename. |
- * @see #startTracing(String, boolean, String, boolean) |
- */ |
- public boolean startTracing(boolean showToasts, String categories, |
- boolean recordContinuously) { |
- mShowToasts = showToasts; |
- String state = Environment.getExternalStorageState(); |
- if (!Environment.MEDIA_MOUNTED.equals(state)) { |
- logAndToastError( |
- mContext.getString(R.string.profiler_no_storage_toast)); |
- return false; |
- } |
- |
- // Generate a hopefully-unique filename using the UTC timestamp. |
- // (Not a huge problem if it isn't unique, we'll just append more data.) |
- SimpleDateFormat formatter = new SimpleDateFormat( |
- "yyyy-MM-dd-HHmmss", Locale.US); |
- formatter.setTimeZone(TimeZone.getTimeZone("UTC")); |
- File dir = Environment.getExternalStoragePublicDirectory( |
- Environment.DIRECTORY_DOWNLOADS); |
- File file = new File( |
- dir, "chrome-profile-results-" + formatter.format(new Date())); |
- |
- return startTracing(file.getPath(), showToasts, categories, recordContinuously); |
- } |
- |
- /** |
- * Start profiling to the specified file. Returns true on success. |
- * |
- * Only one TracingControllerAndroid can be running at the same time. If another profiler |
- * is running when this method is called, it will be cancelled. If this |
- * profiler is already running, this method does nothing and returns false. |
- * |
- * @param filename The name of the file to output the profile data to. |
- * @param showToasts Whether or not we want to show toasts during this profiling session. |
- * When we are timing the profile run we might not want to incur extra draw overhead of showing |
- * notifications about the profiling system. |
- * @param categories Which categories to trace. See TracingControllerAndroid::BeginTracing() |
- * (in content/public/browser/trace_controller.h) for the format. |
- * @param recordContinuously Record until the user ends the trace. The trace buffer is fixed |
- * size and we use it as a ring buffer during recording. |
- */ |
- public boolean startTracing(String filename, boolean showToasts, String categories, |
- boolean recordContinuously) { |
- mShowToasts = showToasts; |
- if (isTracing()) { |
- // Don't need a toast because this shouldn't happen via the UI. |
- Log.e(TAG, "Received startTracing, but we're already tracing"); |
- return false; |
- } |
- // Lazy initialize the native side, to allow construction before the library is loaded. |
- if (mNativeTracingControllerAndroid == 0) { |
- mNativeTracingControllerAndroid = nativeInit(); |
- } |
- if (!nativeStartTracing(mNativeTracingControllerAndroid, filename, categories, |
- recordContinuously)) { |
- logAndToastError(mContext.getString(R.string.profiler_error_toast)); |
- return false; |
- } |
- |
- logAndToastInfo(mContext.getString(R.string.profiler_started_toast) + ": " + categories); |
- TraceEvent.setEnabledToMatchNative(); |
- mFilename = filename; |
- mIsTracing = true; |
- return true; |
- } |
- |
- /** |
- * Stop profiling. This won't take effect until Chrome has flushed its file. |
- */ |
- public void stopTracing() { |
- if (isTracing()) { |
- nativeStopTracing(mNativeTracingControllerAndroid); |
- } |
- } |
- |
- /** |
- * Called by native code when the profiler's output file is closed. |
- */ |
- @CalledByNative |
- protected void onTracingStopped() { |
- if (!isTracing()) { |
- // Don't need a toast because this shouldn't happen via the UI. |
- Log.e(TAG, "Received onTracingStopped, but we aren't tracing"); |
- return; |
- } |
- |
- logAndToastInfo( |
- mContext.getString(R.string.profiler_stopped_toast, mFilename)); |
- TraceEvent.setEnabledToMatchNative(); |
- mIsTracing = false; |
- mFilename = null; |
- } |
- |
- @Override |
- protected void finalize() { |
- if (mNativeTracingControllerAndroid != 0) { |
- nativeDestroy(mNativeTracingControllerAndroid); |
- mNativeTracingControllerAndroid = 0; |
- } |
- } |
- |
- void logAndToastError(String str) { |
- Log.e(TAG, str); |
- if (mShowToasts) Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show(); |
- } |
- |
- void logAndToastInfo(String str) { |
- Log.i(TAG, str); |
- if (mShowToasts) Toast.makeText(mContext, str, Toast.LENGTH_SHORT).show(); |
- } |
- |
- private static class TracingIntentFilter extends IntentFilter { |
- TracingIntentFilter(Context context) { |
- addAction(context.getPackageName() + "." + ACTION_START); |
- addAction(context.getPackageName() + "." + ACTION_STOP); |
- } |
- } |
- |
- class TracingBroadcastReceiver extends BroadcastReceiver { |
- @Override |
- public void onReceive(Context context, Intent intent) { |
- if (intent.getAction().endsWith(ACTION_START)) { |
- String categories = intent.getStringExtra(CATEGORIES_EXTRA); |
- if (TextUtils.isEmpty(categories)) { |
- categories = nativeGetDefaultCategories(); |
- } else { |
- categories = categories.replaceFirst( |
- DEFAULT_CHROME_CATEGORIES_PLACE_HOLDER, nativeGetDefaultCategories()); |
- } |
- boolean recordContinuously = |
- intent.getStringExtra(RECORD_CONTINUOUSLY_EXTRA) != null; |
- String filename = intent.getStringExtra(FILE_EXTRA); |
- if (filename != null) { |
- startTracing(filename, true, categories, recordContinuously); |
- } else { |
- startTracing(true, categories, recordContinuously); |
- } |
- } else if (intent.getAction().endsWith(ACTION_STOP)) { |
- stopTracing(); |
- } else { |
- Log.e(TAG, "Unexpected intent: " + intent); |
- } |
- } |
- } |
- |
- private long mNativeTracingControllerAndroid; |
- private native long nativeInit(); |
- private native void nativeDestroy(long nativeTracingControllerAndroid); |
- private native boolean nativeStartTracing(long nativeTracingControllerAndroid, String filename, |
- String categories, boolean recordContinuously); |
- private native void nativeStopTracing(long nativeTracingControllerAndroid); |
- private native String nativeGetDefaultCategories(); |
-} |