summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chet Haase <chet@google.com> 2012-04-03 16:15:34 -0700
committer Chet Haase <chet@google.com> 2012-04-04 07:49:06 -0700
commit09280606dc5dc1b8f12f9317cf6922772b7d10a7 (patch)
tree1402a7bf86b070afe4f0818a5d91371efd4199c1
parent21aec19d3041fe040004dd32eef0cfd1bafd6fb6 (diff)
Enhanced frame profiling from gfxinfo
You can now set the max number of frames being tracked by the gfxinfo profiling data by doing 'adb shell setprop hwui.profil.maxframes #'. Also, running gfxinfo automatically resets the data so that any set of frame data always starts from the beginning. Change-Id: I87ae3fb4d580741a1b2fba75be4ec540de7c52a4
-rw-r--r--core/java/android/view/HardwareRenderer.java31
1 files changed, 28 insertions, 3 deletions
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index 9ef262144d66..b8c692a037bf 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -87,7 +87,7 @@ public abstract class HardwareRenderer {
/**
* System property used to enable or disable hardware rendering profiling.
* The default value of this property is assumed to be false.
- *
+ *
* When profiling is enabled, the adb shell dumpsys gfxinfo command will
* output extra information about the time taken to execute by the last
* frames.
@@ -99,6 +99,20 @@ public abstract class HardwareRenderer {
static final String PROFILE_PROPERTY = "hwui.profile";
/**
+ * System property used to specify the number of frames to be used
+ * when doing hardware rendering profiling.
+ * The default value of this property is #PROFILE_MAX_FRAMES.
+ *
+ * When profiling is enabled, the adb shell dumpsys gfxinfo command will
+ * output extra information about the time taken to execute by the last
+ * frames.
+ *
+ * Possible values:
+ * "60", to set the limit of frames to 60
+ */
+ static final String PROFILE_MAXFRAMES_PROPERTY = "hwui.profile.maxframes";
+
+ /**
* System property used to debug EGL configuration choice.
*
* Possible values:
@@ -134,7 +148,7 @@ public abstract class HardwareRenderer {
/**
* Number of frames to profile.
*/
- private static final int PROFILE_MAX_FRAMES = 120;
+ private static final int PROFILE_MAX_FRAMES = 64;
/**
* Number of floats per profiled frame.
@@ -579,7 +593,13 @@ public abstract class HardwareRenderer {
}
if (mProfileEnabled) {
- mProfileData = new float[PROFILE_MAX_FRAMES * PROFILE_FRAME_DATA_COUNT];
+ property = SystemProperties.get(PROFILE_MAXFRAMES_PROPERTY,
+ Integer.toString(PROFILE_MAX_FRAMES));
+ int maxProfileFrames = Integer.valueOf(property);
+ mProfileData = new float[maxProfileFrames * PROFILE_FRAME_DATA_COUNT];
+ for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
+ mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
+ }
} else {
mProfileData = null;
}
@@ -596,9 +616,14 @@ public abstract class HardwareRenderer {
if (mProfileEnabled) {
pw.printf("\n\tDraw\tProcess\tExecute\n");
for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
+ if (mProfileData[i] < 0) {
+ break;
+ }
pw.printf("\t%3.2f\t%3.2f\t%3.2f\n", mProfileData[i], mProfileData[i + 1],
mProfileData[i + 2]);
+ mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
}
+ mProfileCurrentFrame = mProfileData.length;
}
}