Added to enable/disable log for DisplayModeDirector

Added to enable/disable log for DisplayModeDirector dynamically

Bug: 176018998
Test: enable DMD logging with
  $adb shell cmd display dmd-logging-enable
This should start logging the collected for DMD.
You can filter it with :
  $adb logcat | grep 'DisplayModeDirector'

Change-Id: I66478dda66d5d89193ef1838ab3afca94bf72313
Merged-In: I66478dda66d5d89193ef1838ab3afca94bf72313
This commit is contained in:
raylinhsu
2021-01-11 11:56:27 +08:00
committed by Raylin Hsu
parent e3b7b329c9
commit f6247e3d30
3 changed files with 77 additions and 10 deletions

View File

@@ -1484,6 +1484,14 @@ public final class DisplayManagerService extends SystemService {
} }
} }
void setDisplayModeDirectorLoggingEnabled(boolean enabled) {
synchronized (mSyncRoot) {
if (mDisplayModeDirector != null) {
mDisplayModeDirector.setLoggingEnabled(enabled);
}
}
}
void setAmbientColorTemperatureOverride(float cct) { void setAmbientColorTemperatureOverride(float cct) {
if (mDisplayPowerController != null) { if (mDisplayPowerController != null) {
synchronized (mSyncRoot) { synchronized (mSyncRoot) {

View File

@@ -54,6 +54,10 @@ class DisplayManagerShellCommand extends ShellCommand {
return setDisplayWhiteBalanceLoggingEnabled(true); return setDisplayWhiteBalanceLoggingEnabled(true);
case "dwb-logging-disable": case "dwb-logging-disable":
return setDisplayWhiteBalanceLoggingEnabled(false); return setDisplayWhiteBalanceLoggingEnabled(false);
case "dmd-logging-enable":
return setDisplayModeDirectorLoggingEnabled(true);
case "dmd-logging-disable":
return setDisplayModeDirectorLoggingEnabled(false);
case "dwb-set-cct": case "dwb-set-cct":
return setAmbientColorTemperatureOverride(); return setAmbientColorTemperatureOverride();
default: default:
@@ -80,6 +84,10 @@ class DisplayManagerShellCommand extends ShellCommand {
pw.println(" Enable display white-balance logging."); pw.println(" Enable display white-balance logging.");
pw.println(" dwb-logging-disable"); pw.println(" dwb-logging-disable");
pw.println(" Disable display white-balance logging."); pw.println(" Disable display white-balance logging.");
pw.println(" dmd-logging-enable");
pw.println(" Enable display mode director logging.");
pw.println(" dmd-logging-disable");
pw.println(" Disable display mode director logging.");
pw.println(" dwb-set-cct CCT"); pw.println(" dwb-set-cct CCT");
pw.println(" Sets the ambient color temperature override to CCT (use -1 to disable)."); pw.println(" Sets the ambient color temperature override to CCT (use -1 to disable).");
pw.println(); pw.println();
@@ -132,6 +140,11 @@ class DisplayManagerShellCommand extends ShellCommand {
return 0; return 0;
} }
private int setDisplayModeDirectorLoggingEnabled(boolean enabled) {
mService.setDisplayModeDirectorLoggingEnabled(enabled);
return 0;
}
private int setAmbientColorTemperatureOverride() { private int setAmbientColorTemperatureOverride() {
String cctText = getNextArg(); String cctText = getNextArg();
if (cctText == null) { if (cctText == null) {

View File

@@ -66,7 +66,7 @@ import java.util.Objects;
*/ */
public class DisplayModeDirector { public class DisplayModeDirector {
private static final String TAG = "DisplayModeDirector"; private static final String TAG = "DisplayModeDirector";
private static final boolean DEBUG = false; private boolean mLoggingEnabled;
private static final int MSG_REFRESH_RATE_RANGE_CHANGED = 1; private static final int MSG_REFRESH_RATE_RANGE_CHANGED = 1;
private static final int MSG_LOW_BRIGHTNESS_THRESHOLDS_CHANGED = 2; private static final int MSG_LOW_BRIGHTNESS_THRESHOLDS_CHANGED = 2;
@@ -147,6 +147,14 @@ public class DisplayModeDirector {
} }
public void setLoggingEnabled(boolean loggingEnabled) {
if (mLoggingEnabled == loggingEnabled) {
return;
}
mLoggingEnabled = loggingEnabled;
mBrightnessObserver.setLoggingEnabled(loggingEnabled);
}
@NonNull @NonNull
private SparseArray<Vote> getVotesLocked(int displayId) { private SparseArray<Vote> getVotesLocked(int displayId) {
SparseArray<Vote> displayVotes = mVotesByDisplay.get(displayId); SparseArray<Vote> displayVotes = mVotesByDisplay.get(displayId);
@@ -248,7 +256,7 @@ public class DisplayModeDirector {
availableModes = filterModes(modes, primarySummary); availableModes = filterModes(modes, primarySummary);
if (availableModes.length > 0) { if (availableModes.length > 0) {
if (DEBUG) { if (mLoggingEnabled) {
Slog.w(TAG, "Found available modes=" + Arrays.toString(availableModes) Slog.w(TAG, "Found available modes=" + Arrays.toString(availableModes)
+ " with lowest priority considered " + " with lowest priority considered "
+ Vote.priorityToString(lowestConsideredPriority) + Vote.priorityToString(lowestConsideredPriority)
@@ -261,7 +269,7 @@ public class DisplayModeDirector {
break; break;
} }
if (DEBUG) { if (mLoggingEnabled) {
Slog.w(TAG, "Couldn't find available modes with lowest priority set to " Slog.w(TAG, "Couldn't find available modes with lowest priority set to "
+ Vote.priorityToString(lowestConsideredPriority) + Vote.priorityToString(lowestConsideredPriority)
+ " and with the following constraints: " + " and with the following constraints: "
@@ -283,7 +291,7 @@ public class DisplayModeDirector {
Math.min(appRequestSummary.minRefreshRate, primarySummary.minRefreshRate); Math.min(appRequestSummary.minRefreshRate, primarySummary.minRefreshRate);
appRequestSummary.maxRefreshRate = appRequestSummary.maxRefreshRate =
Math.max(appRequestSummary.maxRefreshRate, primarySummary.maxRefreshRate); Math.max(appRequestSummary.maxRefreshRate, primarySummary.maxRefreshRate);
if (DEBUG) { if (mLoggingEnabled) {
Slog.i(TAG, Slog.i(TAG,
String.format("App request range: [%.0f %.0f]", String.format("App request range: [%.0f %.0f]",
appRequestSummary.minRefreshRate, appRequestSummary.minRefreshRate,
@@ -310,7 +318,7 @@ public class DisplayModeDirector {
for (Display.Mode mode : supportedModes) { for (Display.Mode mode : supportedModes) {
if (mode.getPhysicalWidth() != summary.width if (mode.getPhysicalWidth() != summary.width
|| mode.getPhysicalHeight() != summary.height) { || mode.getPhysicalHeight() != summary.height) {
if (DEBUG) { if (mLoggingEnabled) {
Slog.w(TAG, "Discarding mode " + mode.getModeId() + ", wrong size" Slog.w(TAG, "Discarding mode " + mode.getModeId() + ", wrong size"
+ ": desiredWidth=" + summary.width + ": desiredWidth=" + summary.width
+ ": desiredHeight=" + summary.height + ": desiredHeight=" + summary.height
@@ -325,7 +333,7 @@ public class DisplayModeDirector {
// comparison. // comparison.
if (refreshRate < (summary.minRefreshRate - FLOAT_TOLERANCE) if (refreshRate < (summary.minRefreshRate - FLOAT_TOLERANCE)
|| refreshRate > (summary.maxRefreshRate + FLOAT_TOLERANCE)) { || refreshRate > (summary.maxRefreshRate + FLOAT_TOLERANCE)) {
if (DEBUG) { if (mLoggingEnabled) {
Slog.w(TAG, "Discarding mode " + mode.getModeId() Slog.w(TAG, "Discarding mode " + mode.getModeId()
+ ", outside refresh rate bounds" + ", outside refresh rate bounds"
+ ": minRefreshRate=" + summary.minRefreshRate + ": minRefreshRate=" + summary.minRefreshRate
@@ -425,7 +433,7 @@ public class DisplayModeDirector {
} }
private void updateVoteLocked(int displayId, int priority, Vote vote) { private void updateVoteLocked(int displayId, int priority, Vote vote) {
if (DEBUG) { if (mLoggingEnabled) {
Slog.i(TAG, "updateVoteLocked(displayId=" + displayId Slog.i(TAG, "updateVoteLocked(displayId=" + displayId
+ ", priority=" + Vote.priorityToString(priority) + ", priority=" + Vote.priorityToString(priority)
+ ", vote=" + vote + ")"); + ", vote=" + vote + ")");
@@ -446,7 +454,7 @@ public class DisplayModeDirector {
} }
if (votes.size() == 0) { if (votes.size() == 0) {
if (DEBUG) { if (mLoggingEnabled) {
Slog.i(TAG, "No votes left for display " + displayId + ", removing."); Slog.i(TAG, "No votes left for display " + displayId + ", removing.");
} }
mVotesByDisplay.remove(displayId); mVotesByDisplay.remove(displayId);
@@ -1148,6 +1156,7 @@ public class DisplayModeDirector {
private boolean mShouldObserveAmbientLowChange; private boolean mShouldObserveAmbientLowChange;
private boolean mShouldObserveDisplayHighChange; private boolean mShouldObserveDisplayHighChange;
private boolean mShouldObserveAmbientHighChange; private boolean mShouldObserveAmbientHighChange;
private boolean mLoggingEnabled;
private SensorManager mSensorManager; private SensorManager mSensorManager;
private Sensor mLightSensor; private Sensor mLightSensor;
@@ -1276,6 +1285,14 @@ public class DisplayModeDirector {
mDeviceConfigDisplaySettings.startListening(); mDeviceConfigDisplaySettings.startListening();
} }
public void setLoggingEnabled(boolean loggingEnabled) {
if (mLoggingEnabled == loggingEnabled) {
return;
}
mLoggingEnabled = loggingEnabled;
mLightSensorListener.setLoggingEnabled(loggingEnabled);
}
public void onRefreshRateSettingChangedLocked(float min, float max) { public void onRefreshRateSettingChangedLocked(float min, float max) {
boolean changeable = (max - min > 1f && max > 60f); boolean changeable = (max - min > 1f && max > 60f);
if (mRefreshRateChangeable != changeable) { if (mRefreshRateChangeable != changeable) {
@@ -1552,7 +1569,7 @@ public class DisplayModeDirector {
vote = Vote.forRefreshRates(mRefreshRateInHighZone, mRefreshRateInHighZone); vote = Vote.forRefreshRates(mRefreshRateInHighZone, mRefreshRateInHighZone);
} }
if (DEBUG) { if (mLoggingEnabled) {
Slog.d(TAG, "Display brightness " + mBrightness + ", ambient lux " + mAmbientLux Slog.d(TAG, "Display brightness " + mBrightness + ", ambient lux " + mAmbientLux
+ ", Vote " + vote); + ", Vote " + vote);
} }
@@ -1581,6 +1598,11 @@ public class DisplayModeDirector {
@VisibleForTesting @VisibleForTesting
public void setDefaultDisplayState(int state) { public void setDefaultDisplayState(int state) {
if (mLoggingEnabled) {
Slog.d(TAG, "setDefaultDisplayState: mDefaultDisplayState = "
+ mDefaultDisplayState + ", state = " + state);
}
if (mDefaultDisplayState != state) { if (mDefaultDisplayState != state) {
mDefaultDisplayState = state; mDefaultDisplayState = state;
updateSensorStatus(); updateSensorStatus();
@@ -1592,13 +1614,28 @@ public class DisplayModeDirector {
return; return;
} }
if (mLoggingEnabled) {
Slog.d(TAG, "updateSensorStatus: mShouldObserveAmbientLowChange = "
+ mShouldObserveAmbientLowChange + ", mShouldObserveAmbientHighChange = "
+ mShouldObserveAmbientHighChange);
Slog.d(TAG, "updateSensorStatus: mLowPowerModeEnabled = "
+ mLowPowerModeEnabled + ", mRefreshRateChangeable = "
+ mRefreshRateChangeable);
}
if ((mShouldObserveAmbientLowChange || mShouldObserveAmbientHighChange) if ((mShouldObserveAmbientLowChange || mShouldObserveAmbientHighChange)
&& isDeviceActive() && !mLowPowerModeEnabled && mRefreshRateChangeable) { && isDeviceActive() && !mLowPowerModeEnabled && mRefreshRateChangeable) {
mSensorManager.registerListener(mLightSensorListener, mSensorManager.registerListener(mLightSensorListener,
mLightSensor, LIGHT_SENSOR_RATE_MS * 1000, mHandler); mLightSensor, LIGHT_SENSOR_RATE_MS * 1000, mHandler);
if (mLoggingEnabled) {
Slog.d(TAG, "updateSensorStatus: registerListener");
}
} else { } else {
mLightSensorListener.removeCallbacks(); mLightSensorListener.removeCallbacks();
mSensorManager.unregisterListener(mLightSensorListener); mSensorManager.unregisterListener(mLightSensorListener);
if (mLoggingEnabled) {
Slog.d(TAG, "updateSensorStatus: unregisterListener");
}
} }
} }
@@ -1612,16 +1649,25 @@ public class DisplayModeDirector {
final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS; final private static int INJECT_EVENTS_INTERVAL_MS = LIGHT_SENSOR_RATE_MS;
private float mLastSensorData; private float mLastSensorData;
private long mTimestamp; private long mTimestamp;
private boolean mLoggingEnabled;
public void dumpLocked(PrintWriter pw) { public void dumpLocked(PrintWriter pw) {
pw.println(" mLastSensorData: " + mLastSensorData); pw.println(" mLastSensorData: " + mLastSensorData);
pw.println(" mTimestamp: " + formatTimestamp(mTimestamp)); pw.println(" mTimestamp: " + formatTimestamp(mTimestamp));
} }
public void setLoggingEnabled(boolean loggingEnabled) {
if (mLoggingEnabled == loggingEnabled) {
return;
}
mLoggingEnabled = loggingEnabled;
}
@Override @Override
public void onSensorChanged(SensorEvent event) { public void onSensorChanged(SensorEvent event) {
mLastSensorData = event.values[0]; mLastSensorData = event.values[0];
if (DEBUG) { if (mLoggingEnabled) {
Slog.d(TAG, "On sensor changed: " + mLastSensorData); Slog.d(TAG, "On sensor changed: " + mLastSensorData);
} }