| Index: base/android/java/src/org/chromium/base/EarlyTraceEvent.java
|
| diff --git a/base/android/java/src/org/chromium/base/EarlyTraceEvent.java b/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
|
| index 727fc7ac0329ba65efc2271c18dbc9c0323c80be..4a40791f21f8abebaff531e390f00f1837ba9832 100644
|
| --- a/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
|
| +++ b/base/android/java/src/org/chromium/base/EarlyTraceEvent.java
|
| @@ -4,6 +4,8 @@
|
|
|
| package org.chromium.base;
|
|
|
| +import android.annotation.SuppressLint;
|
| +import android.os.Build;
|
| import android.os.Process;
|
| import android.os.StrictMode;
|
| import android.os.SystemClock;
|
| @@ -45,18 +47,32 @@ public class EarlyTraceEvent {
|
| static final class Event {
|
| final String mName;
|
| final int mThreadId;
|
| - final long mBeginTimeMs;
|
| - long mEndTimeMs;
|
| + final long mBeginTimeNanos;
|
| + final long mBeginThreadTimeMillis;
|
| + long mEndTimeNanos;
|
| + long mEndThreadTimeMillis;
|
|
|
| Event(String name) {
|
| mName = name;
|
| mThreadId = Process.myTid();
|
| - mBeginTimeMs = SystemClock.elapsedRealtime();
|
| + mBeginTimeNanos = elapsedRealtimeNanos();
|
| + mBeginThreadTimeMillis = SystemClock.currentThreadTimeMillis();
|
| }
|
|
|
| void end() {
|
| - assert mEndTimeMs == 0;
|
| - mEndTimeMs = SystemClock.elapsedRealtime();
|
| + assert mEndTimeNanos == 0;
|
| + assert mEndThreadTimeMillis == 0;
|
| + mEndTimeNanos = elapsedRealtimeNanos();
|
| + mEndThreadTimeMillis = SystemClock.currentThreadTimeMillis();
|
| + }
|
| +
|
| + @SuppressLint("NewApi")
|
| + private static long elapsedRealtimeNanos() {
|
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
| + return SystemClock.elapsedRealtimeNanos();
|
| + } else {
|
| + return SystemClock.elapsedRealtime() * 1000000;
|
| + }
|
| }
|
| }
|
|
|
| @@ -176,15 +192,16 @@ public class EarlyTraceEvent {
|
| }
|
|
|
| private static void dumpEvents(List<Event> events) {
|
| - long nativeNowUs = TimeUtils.nativeGetTimeTicksNowUs();
|
| - long javaNowUs = SystemClock.elapsedRealtime() * 1000;
|
| - long offsetMs = (nativeNowUs - javaNowUs) / 1000;
|
| - for (Event event : events) {
|
| - nativeRecordEarlyEvent(event.mName, event.mBeginTimeMs + offsetMs,
|
| - event.mEndTimeMs + offsetMs, event.mThreadId);
|
| + long nativeNowNanos = TimeUtils.nativeGetTimeTicksNowUs() * 1000;
|
| + long javaNowNanos = Event.elapsedRealtimeNanos();
|
| + long offsetNanos = nativeNowNanos - javaNowNanos;
|
| + for (Event e : events) {
|
| + nativeRecordEarlyEvent(e.mName, e.mBeginTimeNanos + offsetNanos,
|
| + e.mEndTimeNanos + offsetNanos, e.mThreadId,
|
| + e.mEndThreadTimeMillis - e.mBeginThreadTimeMillis);
|
| }
|
| }
|
|
|
| - private static native void nativeRecordEarlyEvent(
|
| - String name, long beginTimeMs, long endTimeMs, int threadId);
|
| + private static native void nativeRecordEarlyEvent(String name, long beginTimNanos,
|
| + long endTimeNanos, int threadId, long threadDurationMillis);
|
| }
|
|
|