Enable Tracing on content shell for Android


BUG=166802


Review URL: https://chromiumcodereview.appspot.com/11647013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175730 0039d316-1c4b-4281-b951-d872f2087c98
parent 1e0f8d69
......@@ -187,6 +187,7 @@ Alexey Korepanov <alexkorep@gmail.com>
Mitchell Rosen <mitchellwrosen@chromium.org>
Yongsheng Zhu <yongsheng.zhu@intel.com>
Shouqun Liu <shouqun.liu@intel.com>
Kangyuan Shu <kangyuan.shu@intel.com>
Jake Helfert <jake@helfert.us>
Hongbo Min <hongbo.min@intel.com>
Anastasios Cassiotis <tom.cassiotis@gmail.com>
......
......@@ -18,6 +18,7 @@
#include "content/browser/android/sandboxed_process_launcher.h"
#include "content/browser/android/surface_texture_peer_browser_impl.h"
#include "content/browser/android/touch_point.h"
#include "content/browser/android/tracing_intent_handler.h"
#include "content/browser/android/web_contents_observer_android.h"
#include "content/browser/geolocation/location_api_adapter_android.h"
#include "content/browser/renderer_host/ime_adapter_android.h"
......@@ -46,6 +47,7 @@ base::android::RegistrationMethod kContentRegisteredMethods[] = {
{ "RegisterImeAdapter", content::RegisterImeAdapter },
{ "SandboxedProcessLauncher", content::RegisterSandboxedProcessLauncher },
{ "TouchPoint", content::RegisterTouchPoint },
{ "TracingIntentHandler", content::RegisterTracingIntentHandler },
{ "WebContentsObserverAndroid", content::RegisterWebContentsObserverAndroid },
{ "WebViewStatics", content::RegisterWebViewStatics },
};
......
// Copyright (c) 2012 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.
#include "content/browser/android/tracing_intent_handler.h"
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/logging.h"
#include "content/public/browser/trace_controller.h"
#include "jni/TracingIntentHandler_jni.h"
namespace content {
TracingIntentHandler* g_trace_intent_handler = NULL;
TracingIntentHandler::TracingIntentHandler(const FilePath& path)
: TraceSubscriberStdio(path) {
TraceController::GetInstance()->BeginTracing(this, std::string("-test*"));
}
TracingIntentHandler::~TracingIntentHandler() {
}
void TracingIntentHandler::OnEndTracingComplete() {
TraceSubscriberStdio::OnEndTracingComplete();
delete this;
}
void TracingIntentHandler::OnEndTracing() {
if (!TraceController::GetInstance()->EndTracingAsync(this)) {
delete this;
}
}
static void BeginTracing(JNIEnv* env, jclass clazz, jstring jspath) {
std::string path(base::android::ConvertJavaStringToUTF8(env, jspath));
if (g_trace_intent_handler != NULL)
return;
g_trace_intent_handler = new TracingIntentHandler(FilePath(path));
}
static void EndTracing(JNIEnv* env, jclass clazz) {
DCHECK(!g_trace_intent_handler);
g_trace_intent_handler->OnEndTracing();
g_trace_intent_handler = NULL;
}
bool RegisterTracingIntentHandler(JNIEnv* env) {
return RegisterNativesImpl(env);
}
} // namespace content
// Copyright (c) 2012 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.
#ifndef CONTENT_BROWSER_ANDROID_TRACING_INTENT_HANDLER_H
#define CONTENT_BROWSER_ANDROID_TRACING_INTENT_HANDLER_H
#include <jni.h>
#include <string>
#include "base/file_util.h"
#include "content/browser/trace_subscriber_stdio.h"
namespace content {
// Registers the TracingIntentHandler native methods.
bool RegisterTracingIntentHandler(JNIEnv* env);
class TracingIntentHandler : public TraceSubscriberStdio {
public:
explicit TracingIntentHandler(const FilePath& path);
virtual ~TracingIntentHandler();
// TraceSubscriber implementation
virtual void OnEndTracingComplete() OVERRIDE;
// IntentHandler
void OnEndTracing();
};
} // namespace content
#endif // CONTENT_BROWSER_ANDROID_TRACING_INTENT_HANDLER_H
......@@ -227,6 +227,8 @@
'browser/android/surface_texture_peer_browser_impl.h',
'browser/android/touch_point.cc',
'browser/android/touch_point.h',
'browser/android/tracing_intent_handler.cc',
'browser/android/tracing_intent_handler.h',
'browser/android/web_contents_observer_android.cc',
'browser/android/web_contents_observer_android.h',
'browser/appcache/appcache_dispatcher_host.cc',
......
......@@ -26,6 +26,7 @@
'public/android/java/src/org/chromium/content/browser/LocationProvider.java',
'public/android/java/src/org/chromium/content/browser/SandboxedProcessLauncher.java',
'public/android/java/src/org/chromium/content/browser/TouchPoint.java',
'public/android/java/src/org/chromium/content/browser/TracingIntentHandler.java',
'public/android/java/src/org/chromium/content/browser/WebContentsObserverAndroid.java',
'public/android/java/src/org/chromium/content/common/CommandLine.java',
'public/android/java/src/org/chromium/content/common/DeviceInfo.java',
......
// Copyright (c) 2012 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 org.chromium.base.JNINamespace;
/**
* Handler for tracing related intent.
*/
@JNINamespace("content")
public class TracingIntentHandler {
/**
* Begin recording trace events.
*
* @param path Specifies where the trace data will be saved when tracing is stopped.
*/
public static void beginTracing(String path) {
nativeBeginTracing(path);
}
/**
* Stop recording trace events, and dump the data to the file
*/
public static void endTracing() {
nativeEndTracing();
}
private static native void nativeBeginTracing(String path);
private static native void nativeEndTracing();
}
......@@ -68,4 +68,5 @@
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
......@@ -5,7 +5,10 @@
package org.chromium.content_shell;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
......@@ -17,6 +20,7 @@ import org.chromium.content.browser.ActivityContentVideoViewDelegate;
import org.chromium.content.browser.ContentVideoView;
import org.chromium.content.browser.ContentView;
import org.chromium.content.browser.DeviceUtils;
import org.chromium.content.browser.TracingIntentHandler;
import org.chromium.content.common.CommandLine;
import org.chromium.ui.gfx.ActivityNativeWindow;
......@@ -29,11 +33,16 @@ public class ContentShellActivity extends ChromiumActivity {
private static final String TAG = ContentShellActivity.class.getName();
private static final String ACTIVE_SHELL_URL_KEY = "activeUrl";
private static final String ACTION_START_TRACE =
"org.chromium.content_shell.action.PROFILE_START";
private static final String ACTION_STOP_TRACE =
"org.chromium.content_shell.action.PROFILE_STOP";
public static final String DEFAULT_SHELL_URL = "http://www.google.com";
public static final String COMMAND_LINE_ARGS_KEY = "commandLineArgs";
private ShellManager mShellManager;
private ActivityNativeWindow mActivityNativeWindow;
private BroadcastReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -129,6 +138,7 @@ public class ContentShellActivity extends ChromiumActivity {
if (view != null) view.onActivityPause();
super.onPause();
unregisterReceiver(mReceiver);
}
@Override
......@@ -137,6 +147,27 @@ public class ContentShellActivity extends ChromiumActivity {
ContentView view = getActiveContentView();
if (view != null) view.onActivityResume();
IntentFilter intentFilter = new IntentFilter(ACTION_START_TRACE);
intentFilter.addAction(ACTION_STOP_TRACE);
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
String extra = intent.getStringExtra("file");
if (ACTION_START_TRACE.equals(action)) {
if (extra.isEmpty()) {
Log.e(TAG, "Can not start tracing without specifing saving location");
} else {
TracingIntentHandler.beginTracing(extra);
Log.i(TAG, "start tracing");
}
} else if (ACTION_STOP_TRACE.equals(action)) {
Log.i(TAG, "stop tracing");
TracingIntentHandler.endTracing();
}
}
};
registerReceiver(mReceiver, intentFilter);
}
@Override
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment