Use separate LogBuffer for QS config changes

There are a lot of messages logged in the QSLog LogBuffer. In some bugreports, the configChanged logs were not there anymore, as it was being overridden by others. We could have increased the size of the buffer, but using another separate one only for config changes increases the chances of having the logs we care about in bugreports.

Bug: 272012567
Test: Checked bugreport after adding this new logbuffer
Change-Id: I816b354a2530b54f418a13d0e2a309388a9146ec
This commit is contained in:
Nicolo' Mazzucato
2023-03-17 10:26:15 +00:00
parent 4626fa48c4
commit 778468a9ca
4 changed files with 83 additions and 14 deletions

View File

@@ -152,6 +152,14 @@ public class LogModule {
return factory.create("QSLog", 700 /* maxSize */, false /* systrace */);
}
/** Provides a logging buffer for logs related to Quick Settings configuration. */
@Provides
@SysUISingleton
@QSConfigLog
public static LogBuffer provideQSConfigLogBuffer(LogBufferFactory factory) {
return factory.create("QSConfigLog", 100 /* maxSize */, true /* systrace */);
}
/** Provides a logging buffer for {@link com.android.systemui.broadcast.BroadcastDispatcher} */
@Provides
@SysUISingleton

View File

@@ -0,0 +1,33 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.log.dagger;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import com.android.systemui.plugins.log.LogBuffer;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import javax.inject.Qualifier;
/** A {@link LogBuffer} for QS configuration changed messages. */
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface QSConfigLog {
}

View File

@@ -91,16 +91,19 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
new QSPanel.OnConfigurationChangedListener() {
@Override
public void onConfigurationChange(Configuration newConfig) {
mQSLogger.logOnConfigurationChanged(
/* lastOrientation= */ mLastOrientation,
/* newOrientation= */ newConfig.orientation,
/* containerName= */ mView.getDumpableTag());
boolean previousSplitShadeState = mShouldUseSplitNotificationShade;
final boolean previousSplitShadeState = mShouldUseSplitNotificationShade;
final int previousOrientation = mLastOrientation;
mShouldUseSplitNotificationShade =
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
mLastOrientation = newConfig.orientation;
mQSLogger.logOnConfigurationChanged(
/* oldOrientation= */ previousOrientation,
/* newOrientation= */ mLastOrientation,
/* oldShouldUseSplitShade= */ previousSplitShadeState,
/* newShouldUseSplitShade= */ mShouldUseSplitNotificationShade,
/* containerName= */ mView.getDumpableTag());
switchTileLayoutIfNeeded();
onConfigurationChanged();
if (previousSplitShadeState != mShouldUseSplitNotificationShade) {

View File

@@ -16,8 +16,12 @@
package com.android.systemui.qs.logging
import android.content.res.Configuration.ORIENTATION_LANDSCAPE
import android.content.res.Configuration.ORIENTATION_PORTRAIT
import android.content.res.Configuration.Orientation
import android.service.quicksettings.Tile
import android.view.View
import com.android.systemui.log.dagger.QSConfigLog
import com.android.systemui.log.dagger.QSLog
import com.android.systemui.plugins.log.ConstantStringsLogger
import com.android.systemui.plugins.log.ConstantStringsLoggerImpl
@@ -32,8 +36,12 @@ import javax.inject.Inject
private const val TAG = "QSLog"
class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) :
ConstantStringsLogger by ConstantStringsLoggerImpl(buffer, TAG) {
class QSLogger
@Inject
constructor(
@QSLog private val buffer: LogBuffer,
@QSConfigLog private val configChangedBuffer: LogBuffer,
) : ConstantStringsLogger by ConstantStringsLoggerImpl(buffer, TAG) {
fun logException(@CompileTimeConstant logMsg: String, ex: Exception) {
buffer.log(TAG, ERROR, {}, { logMsg }, exception = ex)
@@ -264,19 +272,28 @@ class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) :
}
fun logOnConfigurationChanged(
lastOrientation: Int,
newOrientation: Int,
@Orientation oldOrientation: Int,
@Orientation newOrientation: Int,
newShouldUseSplitShade: Boolean,
oldShouldUseSplitShade: Boolean,
containerName: String
) {
buffer.log(
configChangedBuffer.log(
TAG,
DEBUG,
{
str1 = containerName
int1 = lastOrientation
int1 = oldOrientation
int2 = newOrientation
bool1 = oldShouldUseSplitShade
bool2 = newShouldUseSplitShade
},
{ "configuration change: $str1 orientation was $int1, now $int2" }
{
"config change: " +
"$str1 orientation=${toOrientationString(int2)} " +
"(was ${toOrientationString(int1)}), " +
"splitShade=$bool2 (was $bool1)"
}
)
}
@@ -353,3 +370,11 @@ class QSLogger @Inject constructor(@QSLog private val buffer: LogBuffer) :
}
}
}
private inline fun toOrientationString(@Orientation orientation: Int): String {
return when (orientation) {
ORIENTATION_LANDSCAPE -> "land"
ORIENTATION_PORTRAIT -> "port"
else -> "undefined"
}
}