OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/android/trace_event_binding.h" | 5 #include "base/android/trace_event_binding.h" |
6 | 6 |
7 #include <jni.h> | 7 #include <jni.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 | 10 |
| 11 #include "base/android/jni_string.h" |
11 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
12 #include "base/trace_event/trace_event.h" | 13 #include "base/trace_event/trace_event.h" |
13 #include "base/trace_event/trace_event_impl.h" | 14 #include "base/trace_event/trace_event_impl.h" |
14 #include "jni/TraceEvent_jni.h" | 15 #include "jni/TraceEvent_jni.h" |
15 | 16 |
16 namespace base { | 17 namespace base { |
17 namespace android { | 18 namespace android { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 const char kJavaCategory[] = "Java"; | 22 const char kJavaCategory[] = "Java"; |
22 const char kToplevelCategory[] = "toplevel"; | 23 const char kToplevelCategory[] = "toplevel"; |
23 const char kLooperDispatchMessage[] = "Looper.dispatchMessage"; | 24 const char kLooperDispatchMessage[] = "Looper.dispatchMessage"; |
24 | 25 |
25 // Boilerplate for safely converting Java data to TRACE_EVENT data. | 26 // Boilerplate for safely converting Java data to TRACE_EVENT data. |
26 class TraceEventDataConverter { | 27 class TraceEventDataConverter { |
27 public: | 28 public: |
28 TraceEventDataConverter(JNIEnv* env, | 29 TraceEventDataConverter(JNIEnv* env, jstring jname, jstring jarg) |
29 jstring jname, | |
30 jstring jarg) | |
31 : env_(env), | 30 : env_(env), |
32 jname_(jname), | 31 jname_(jname), |
33 jarg_(jarg), | 32 jarg_(jarg), |
34 name_(env->GetStringUTFChars(jname, NULL)), | 33 name_(ConvertJavaStringToUTF8(env, jname)), |
35 arg_(jarg ? env->GetStringUTFChars(jarg, NULL) : NULL) { | 34 has_arg_(jarg != nullptr), |
36 } | 35 arg_(jarg ? ConvertJavaStringToUTF8(env, jarg) : "") {} |
37 ~TraceEventDataConverter() { | 36 ~TraceEventDataConverter() { |
38 env_->ReleaseStringUTFChars(jname_, name_); | |
39 if (jarg_) | |
40 env_->ReleaseStringUTFChars(jarg_, arg_); | |
41 } | 37 } |
42 | 38 |
43 // Return saves values to pass to TRACE_EVENT macros. | 39 // Return saves values to pass to TRACE_EVENT macros. |
44 const char* name() { return name_; } | 40 const char* name() { return name_.c_str(); } |
45 const char* arg_name() { return arg_ ? "arg" : NULL; } | 41 const char* arg_name() { return has_arg_ ? "arg" : nullptr; } |
46 const char* arg() { return arg_; } | 42 const char* arg() { return has_arg_ ? arg_.c_str() : nullptr; } |
47 | 43 |
48 private: | 44 private: |
49 JNIEnv* env_; | 45 JNIEnv* env_; |
50 jstring jname_; | 46 jstring jname_; |
51 jstring jarg_; | 47 jstring jarg_; |
52 const char* name_; | 48 std::string name_; |
53 const char* arg_; | 49 bool has_arg_; |
| 50 std::string arg_; |
54 | 51 |
55 DISALLOW_COPY_AND_ASSIGN(TraceEventDataConverter); | 52 DISALLOW_COPY_AND_ASSIGN(TraceEventDataConverter); |
56 }; | 53 }; |
57 | 54 |
58 class TraceEnabledObserver | 55 class TraceEnabledObserver |
59 : public trace_event::TraceLog::EnabledStateObserver { | 56 : public trace_event::TraceLog::EnabledStateObserver { |
60 public: | 57 public: |
61 void OnTraceLogEnabled() override { | 58 void OnTraceLogEnabled() override { |
62 JNIEnv* env = base::android::AttachCurrentThread(); | 59 JNIEnv* env = base::android::AttachCurrentThread(); |
63 base::android::Java_TraceEvent_setEnabled(env, true); | 60 base::android::Java_TraceEvent_setEnabled(env, true); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 TraceEventDataConverter converter(env, jname, nullptr); | 136 TraceEventDataConverter converter(env, jname, nullptr); |
140 TRACE_EVENT_COPY_ASYNC_END0(kJavaCategory, converter.name(), jid); | 137 TRACE_EVENT_COPY_ASYNC_END0(kJavaCategory, converter.name(), jid); |
141 } | 138 } |
142 | 139 |
143 bool RegisterTraceEvent(JNIEnv* env) { | 140 bool RegisterTraceEvent(JNIEnv* env) { |
144 return RegisterNativesImpl(env); | 141 return RegisterNativesImpl(env); |
145 } | 142 } |
146 | 143 |
147 } // namespace android | 144 } // namespace android |
148 } // namespace base | 145 } // namespace base |
OLD | NEW |