Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: base/android/java/src/org/chromium/base/EarlyTraceEvent.java

Issue 2967023002: android: Add thread time to early TraceEvent, make timings more precise. (Closed)
Patch Set: Comment. Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/android/early_trace_event_binding.cc ('k') | base/trace_event/trace_event.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 package org.chromium.base; 5 package org.chromium.base;
6 6
7 import android.annotation.SuppressLint;
8 import android.os.Build;
7 import android.os.Process; 9 import android.os.Process;
8 import android.os.StrictMode; 10 import android.os.StrictMode;
9 import android.os.SystemClock; 11 import android.os.SystemClock;
10 12
11 import org.chromium.base.annotations.JNINamespace; 13 import org.chromium.base.annotations.JNINamespace;
12 import org.chromium.base.annotations.MainDex; 14 import org.chromium.base.annotations.MainDex;
13 import org.chromium.base.annotations.SuppressFBWarnings; 15 import org.chromium.base.annotations.SuppressFBWarnings;
14 16
15 import java.io.File; 17 import java.io.File;
16 import java.util.ArrayList; 18 import java.util.ArrayList;
(...skipping 21 matching lines...) Expand all
38 @MainDex 40 @MainDex
39 public class EarlyTraceEvent { 41 public class EarlyTraceEvent {
40 // Must be kept in sync with the native kAndroidTraceConfigFile. 42 // Must be kept in sync with the native kAndroidTraceConfigFile.
41 private static final String TRACE_CONFIG_FILENAME = "/data/local/chrome-trac e-config.json"; 43 private static final String TRACE_CONFIG_FILENAME = "/data/local/chrome-trac e-config.json";
42 44
43 /** Single trace event. */ 45 /** Single trace event. */
44 @VisibleForTesting 46 @VisibleForTesting
45 static final class Event { 47 static final class Event {
46 final String mName; 48 final String mName;
47 final int mThreadId; 49 final int mThreadId;
48 final long mBeginTimeMs; 50 final long mBeginTimeNanos;
49 long mEndTimeMs; 51 final long mBeginThreadTimeMillis;
52 long mEndTimeNanos;
53 long mEndThreadTimeMillis;
50 54
51 Event(String name) { 55 Event(String name) {
52 mName = name; 56 mName = name;
53 mThreadId = Process.myTid(); 57 mThreadId = Process.myTid();
54 mBeginTimeMs = SystemClock.elapsedRealtime(); 58 mBeginTimeNanos = elapsedRealtimeNanos();
59 mBeginThreadTimeMillis = SystemClock.currentThreadTimeMillis();
55 } 60 }
56 61
57 void end() { 62 void end() {
58 assert mEndTimeMs == 0; 63 assert mEndTimeNanos == 0;
59 mEndTimeMs = SystemClock.elapsedRealtime(); 64 assert mEndThreadTimeMillis == 0;
65 mEndTimeNanos = elapsedRealtimeNanos();
66 mEndThreadTimeMillis = SystemClock.currentThreadTimeMillis();
67 }
68
69 @SuppressLint("NewApi")
70 private static long elapsedRealtimeNanos() {
71 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
72 return SystemClock.elapsedRealtimeNanos();
73 } else {
74 return SystemClock.elapsedRealtime() * 1000000;
75 }
60 } 76 }
61 } 77 }
62 78
63 // State transitions are: 79 // State transitions are:
64 // - enable(): DISABLED -> ENABLED 80 // - enable(): DISABLED -> ENABLED
65 // - disable(): ENABLED -> FINISHING 81 // - disable(): ENABLED -> FINISHING
66 // - Once there are no pending events: FINISHING -> FINISHED. 82 // - Once there are no pending events: FINISHING -> FINISHED.
67 @VisibleForTesting static final int STATE_DISABLED = 0; 83 @VisibleForTesting static final int STATE_DISABLED = 0;
68 @VisibleForTesting static final int STATE_ENABLED = 1; 84 @VisibleForTesting static final int STATE_ENABLED = 1;
69 @VisibleForTesting static final int STATE_FINISHING = 2; 85 @VisibleForTesting static final int STATE_FINISHING = 2;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 185
170 private static void maybeFinishLocked() { 186 private static void maybeFinishLocked() {
171 if (!sPendingEvents.isEmpty()) return; 187 if (!sPendingEvents.isEmpty()) return;
172 sState = STATE_FINISHED; 188 sState = STATE_FINISHED;
173 dumpEvents(sCompletedEvents); 189 dumpEvents(sCompletedEvents);
174 sCompletedEvents = null; 190 sCompletedEvents = null;
175 sPendingEvents = null; 191 sPendingEvents = null;
176 } 192 }
177 193
178 private static void dumpEvents(List<Event> events) { 194 private static void dumpEvents(List<Event> events) {
179 long nativeNowUs = TimeUtils.nativeGetTimeTicksNowUs(); 195 long nativeNowNanos = TimeUtils.nativeGetTimeTicksNowUs() * 1000;
180 long javaNowUs = SystemClock.elapsedRealtime() * 1000; 196 long javaNowNanos = Event.elapsedRealtimeNanos();
181 long offsetMs = (nativeNowUs - javaNowUs) / 1000; 197 long offsetNanos = nativeNowNanos - javaNowNanos;
182 for (Event event : events) { 198 for (Event e : events) {
183 nativeRecordEarlyEvent(event.mName, event.mBeginTimeMs + offsetMs, 199 nativeRecordEarlyEvent(e.mName, e.mBeginTimeNanos + offsetNanos,
184 event.mEndTimeMs + offsetMs, event.mThreadId); 200 e.mEndTimeNanos + offsetNanos, e.mThreadId,
201 e.mEndThreadTimeMillis - e.mBeginThreadTimeMillis);
185 } 202 }
186 } 203 }
187 204
188 private static native void nativeRecordEarlyEvent( 205 private static native void nativeRecordEarlyEvent(String name, long beginTim Nanos,
189 String name, long beginTimeMs, long endTimeMs, int threadId); 206 long endTimeNanos, int threadId, long threadDurationMillis);
190 } 207 }
OLDNEW
« no previous file with comments | « base/android/early_trace_event_binding.cc ('k') | base/trace_event/trace_event.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698