Loading services/core/java/com/android/server/display/AutomaticBrightnessController.java +3 −3 Original line number Diff line number Diff line Loading @@ -535,11 +535,11 @@ class AutomaticBrightnessController { pw.println(" Idle mode active=" + mCurrentBrightnessMapper.isForIdleMode()); pw.println(); pw.println(" mActiveMapper="); mInteractiveModeBrightnessMapper.dump(pw); pw.println(" mInteractiveMapper="); mInteractiveModeBrightnessMapper.dump(pw, mHbmController.getNormalBrightnessMax()); if (mIdleModeBrightnessMapper != null) { pw.println(" mIdleMapper="); mIdleModeBrightnessMapper.dump(pw); mIdleModeBrightnessMapper.dump(pw, mHbmController.getNormalBrightnessMax()); } pw.println(); Loading services/core/java/com/android/server/display/BrightnessMappingStrategy.java +119 −3 Original line number Diff line number Diff line Loading @@ -358,7 +358,10 @@ public abstract class BrightnessMappingStrategy { */ public abstract long getShortTermModelTimeout(); public abstract void dump(PrintWriter pw); /** * Prints dump output for display dumpsys. */ public abstract void dump(PrintWriter pw, float hbmTransition); /** * We can designate a mapping strategy to be used for idle screen brightness mode. Loading Loading @@ -714,7 +717,7 @@ public abstract class BrightnessMappingStrategy { } @Override public void dump(PrintWriter pw) { public void dump(PrintWriter pw, float hbmTransition) { pw.println("SimpleMappingStrategy"); pw.println(" mSpline=" + mSpline); pw.println(" mMaxGamma=" + mMaxGamma); Loading Loading @@ -947,7 +950,7 @@ public abstract class BrightnessMappingStrategy { } @Override public void dump(PrintWriter pw) { public void dump(PrintWriter pw, float hbmTransition) { pw.println("PhysicalMappingStrategy"); pw.println(" mConfig=" + mConfig); pw.println(" mBrightnessSpline=" + mBrightnessSpline); Loading @@ -959,6 +962,8 @@ public abstract class BrightnessMappingStrategy { pw.println(" mUserBrightness=" + mUserBrightness); pw.println(" mDefaultConfig=" + mDefaultConfig); pw.println(" mBrightnessRangeAdjustmentApplied=" + mBrightnessRangeAdjustmentApplied); dumpConfigDiff(pw, hbmTransition); } @Override Loading @@ -966,6 +971,117 @@ public abstract class BrightnessMappingStrategy { return mIsForIdleMode; } /** * Prints out the default curve and how it differs from the long-term curve * and the current curve (in case the current curve includes short-term adjustments). * * @param pw The print-writer to write to. */ private void dumpConfigDiff(PrintWriter pw, float hbmTransition) { pw.println(" Difference between current config and default: "); Pair<float[], float[]> currentCurve = mConfig.getCurve(); Spline currSpline = Spline.createSpline(currentCurve.first, currentCurve.second); Pair<float[], float[]> defaultCurve = mDefaultConfig.getCurve(); Spline defaultSpline = Spline.createSpline(defaultCurve.first, defaultCurve.second); // Add the short-term curve lux point if present float[] luxes = currentCurve.first; if (mUserLux >= 0) { luxes = Arrays.copyOf(currentCurve.first, currentCurve.first.length + 1); luxes[luxes.length - 1] = mUserLux; Arrays.sort(luxes); } StringBuffer sbLux = null; StringBuffer sbNits = null; StringBuffer sbLong = null; StringBuffer sbShort = null; StringBuffer sbBrightness = null; StringBuffer sbPercent = null; StringBuffer sbPercentHbm = null; boolean needsHeaders = true; String separator = ""; for (int i = 0; i < luxes.length; i++) { float lux = luxes[i]; if (needsHeaders) { sbLux = new StringBuffer(" lux: "); sbNits = new StringBuffer(" default: "); sbLong = new StringBuffer(" long-term: "); sbShort = new StringBuffer(" current: "); sbBrightness = new StringBuffer(" current(bl): "); sbPercent = new StringBuffer(" current(%): "); sbPercentHbm = new StringBuffer(" current(%hbm): "); needsHeaders = false; } float defaultNits = defaultSpline.interpolate(lux); float longTermNits = currSpline.interpolate(lux); float shortTermNits = mBrightnessSpline.interpolate(lux); float brightness = mNitsToBrightnessSpline.interpolate(shortTermNits); String luxPrefix = (lux == mUserLux ? "^" : ""); String strLux = luxPrefix + toStrFloatForDump(lux); String strNits = toStrFloatForDump(defaultNits); String strLong = toStrFloatForDump(longTermNits); String strShort = toStrFloatForDump(shortTermNits); String strBrightness = toStrFloatForDump(brightness); String strPercent = String.valueOf( Math.round(100.0f * BrightnessUtils.convertLinearToGamma( (brightness / hbmTransition)))); String strPercentHbm = String.valueOf( Math.round(100.0f * BrightnessUtils.convertLinearToGamma(brightness))); int maxLen = Math.max(strLux.length(), Math.max(strNits.length(), Math.max(strBrightness.length(), Math.max(strPercent.length(), Math.max(strPercentHbm.length(), Math.max(strLong.length(), strShort.length())))))); String format = separator + "%" + maxLen + "s"; separator = ", "; sbLux.append(String.format(format, strLux)); sbNits.append(String.format(format, strNits)); sbLong.append(String.format(format, strLong)); sbShort.append(String.format(format, strShort)); sbBrightness.append(String.format(format, strBrightness)); sbPercent.append(String.format(format, strPercent)); sbPercentHbm.append(String.format(format, strPercentHbm)); // At 80 chars, start another row if (sbLux.length() > 80 || (i == luxes.length - 1)) { pw.println(sbLux); pw.println(sbNits); pw.println(sbLong); pw.println(sbShort); pw.println(sbBrightness); pw.println(sbPercent); if (hbmTransition < PowerManager.BRIGHTNESS_MAX) { pw.println(sbPercentHbm); } pw.println(""); needsHeaders = true; separator = ""; } } } private String toStrFloatForDump(float value) { if (value == 0.0f) { return "0"; } else if (value < 0.1f) { return String.format("%.3f", value); } else if (value < 1) { return String.format("%.2f", value); } else if (value < 10) { return String.format("%.1f", value); } else { return String.format("%d", Math.round(value)); } } private void computeNitsBrightnessSplines(float[] nits) { mNitsToBrightnessSpline = Spline.createSpline(nits, mBrightness); mBrightnessToNitsSpline = Spline.createSpline(mBrightness, nits); Loading Loading
services/core/java/com/android/server/display/AutomaticBrightnessController.java +3 −3 Original line number Diff line number Diff line Loading @@ -535,11 +535,11 @@ class AutomaticBrightnessController { pw.println(" Idle mode active=" + mCurrentBrightnessMapper.isForIdleMode()); pw.println(); pw.println(" mActiveMapper="); mInteractiveModeBrightnessMapper.dump(pw); pw.println(" mInteractiveMapper="); mInteractiveModeBrightnessMapper.dump(pw, mHbmController.getNormalBrightnessMax()); if (mIdleModeBrightnessMapper != null) { pw.println(" mIdleMapper="); mIdleModeBrightnessMapper.dump(pw); mIdleModeBrightnessMapper.dump(pw, mHbmController.getNormalBrightnessMax()); } pw.println(); Loading
services/core/java/com/android/server/display/BrightnessMappingStrategy.java +119 −3 Original line number Diff line number Diff line Loading @@ -358,7 +358,10 @@ public abstract class BrightnessMappingStrategy { */ public abstract long getShortTermModelTimeout(); public abstract void dump(PrintWriter pw); /** * Prints dump output for display dumpsys. */ public abstract void dump(PrintWriter pw, float hbmTransition); /** * We can designate a mapping strategy to be used for idle screen brightness mode. Loading Loading @@ -714,7 +717,7 @@ public abstract class BrightnessMappingStrategy { } @Override public void dump(PrintWriter pw) { public void dump(PrintWriter pw, float hbmTransition) { pw.println("SimpleMappingStrategy"); pw.println(" mSpline=" + mSpline); pw.println(" mMaxGamma=" + mMaxGamma); Loading Loading @@ -947,7 +950,7 @@ public abstract class BrightnessMappingStrategy { } @Override public void dump(PrintWriter pw) { public void dump(PrintWriter pw, float hbmTransition) { pw.println("PhysicalMappingStrategy"); pw.println(" mConfig=" + mConfig); pw.println(" mBrightnessSpline=" + mBrightnessSpline); Loading @@ -959,6 +962,8 @@ public abstract class BrightnessMappingStrategy { pw.println(" mUserBrightness=" + mUserBrightness); pw.println(" mDefaultConfig=" + mDefaultConfig); pw.println(" mBrightnessRangeAdjustmentApplied=" + mBrightnessRangeAdjustmentApplied); dumpConfigDiff(pw, hbmTransition); } @Override Loading @@ -966,6 +971,117 @@ public abstract class BrightnessMappingStrategy { return mIsForIdleMode; } /** * Prints out the default curve and how it differs from the long-term curve * and the current curve (in case the current curve includes short-term adjustments). * * @param pw The print-writer to write to. */ private void dumpConfigDiff(PrintWriter pw, float hbmTransition) { pw.println(" Difference between current config and default: "); Pair<float[], float[]> currentCurve = mConfig.getCurve(); Spline currSpline = Spline.createSpline(currentCurve.first, currentCurve.second); Pair<float[], float[]> defaultCurve = mDefaultConfig.getCurve(); Spline defaultSpline = Spline.createSpline(defaultCurve.first, defaultCurve.second); // Add the short-term curve lux point if present float[] luxes = currentCurve.first; if (mUserLux >= 0) { luxes = Arrays.copyOf(currentCurve.first, currentCurve.first.length + 1); luxes[luxes.length - 1] = mUserLux; Arrays.sort(luxes); } StringBuffer sbLux = null; StringBuffer sbNits = null; StringBuffer sbLong = null; StringBuffer sbShort = null; StringBuffer sbBrightness = null; StringBuffer sbPercent = null; StringBuffer sbPercentHbm = null; boolean needsHeaders = true; String separator = ""; for (int i = 0; i < luxes.length; i++) { float lux = luxes[i]; if (needsHeaders) { sbLux = new StringBuffer(" lux: "); sbNits = new StringBuffer(" default: "); sbLong = new StringBuffer(" long-term: "); sbShort = new StringBuffer(" current: "); sbBrightness = new StringBuffer(" current(bl): "); sbPercent = new StringBuffer(" current(%): "); sbPercentHbm = new StringBuffer(" current(%hbm): "); needsHeaders = false; } float defaultNits = defaultSpline.interpolate(lux); float longTermNits = currSpline.interpolate(lux); float shortTermNits = mBrightnessSpline.interpolate(lux); float brightness = mNitsToBrightnessSpline.interpolate(shortTermNits); String luxPrefix = (lux == mUserLux ? "^" : ""); String strLux = luxPrefix + toStrFloatForDump(lux); String strNits = toStrFloatForDump(defaultNits); String strLong = toStrFloatForDump(longTermNits); String strShort = toStrFloatForDump(shortTermNits); String strBrightness = toStrFloatForDump(brightness); String strPercent = String.valueOf( Math.round(100.0f * BrightnessUtils.convertLinearToGamma( (brightness / hbmTransition)))); String strPercentHbm = String.valueOf( Math.round(100.0f * BrightnessUtils.convertLinearToGamma(brightness))); int maxLen = Math.max(strLux.length(), Math.max(strNits.length(), Math.max(strBrightness.length(), Math.max(strPercent.length(), Math.max(strPercentHbm.length(), Math.max(strLong.length(), strShort.length())))))); String format = separator + "%" + maxLen + "s"; separator = ", "; sbLux.append(String.format(format, strLux)); sbNits.append(String.format(format, strNits)); sbLong.append(String.format(format, strLong)); sbShort.append(String.format(format, strShort)); sbBrightness.append(String.format(format, strBrightness)); sbPercent.append(String.format(format, strPercent)); sbPercentHbm.append(String.format(format, strPercentHbm)); // At 80 chars, start another row if (sbLux.length() > 80 || (i == luxes.length - 1)) { pw.println(sbLux); pw.println(sbNits); pw.println(sbLong); pw.println(sbShort); pw.println(sbBrightness); pw.println(sbPercent); if (hbmTransition < PowerManager.BRIGHTNESS_MAX) { pw.println(sbPercentHbm); } pw.println(""); needsHeaders = true; separator = ""; } } } private String toStrFloatForDump(float value) { if (value == 0.0f) { return "0"; } else if (value < 0.1f) { return String.format("%.3f", value); } else if (value < 1) { return String.format("%.2f", value); } else if (value < 10) { return String.format("%.1f", value); } else { return String.format("%d", Math.round(value)); } } private void computeNitsBrightnessSplines(float[] nits) { mNitsToBrightnessSpline = Spline.createSpline(nits, mBrightness); mBrightnessToNitsSpline = Spline.createSpline(mBrightness, nits); Loading