Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55dcabec authored by Atneya Nair's avatar Atneya Nair
Browse files

Sessionize STMiddleware logging

- Migrate STMiddleware to EventLogger
- Keep separate loggers for each session to prevent over-runs,
in addition to a service wide logger
- Keep a cache of recently detached session loggers

Bug: 272147641
Fixes: 274970620
Test: atest SoundTriggerMiddlewareLoggingTest
Test: Manual verification of dumpsys and logcat formatting
Test: Manual verification of dumpsys after detach
Test: Manual verification of logcat
Change-Id: I69bc716ce739b6ad69d7afb31e1699b1625ee3c0
parent 3932997b
Loading
Loading
Loading
Loading
+139 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.soundtrigger_middleware;

import static com.android.server.soundtrigger_middleware.SoundTriggerMiddlewareLogging.ServiceEvent;
import static com.android.server.soundtrigger_middleware.SoundTriggerMiddlewareLogging.SessionEvent;
import static com.android.internal.util.LatencyTracker.ACTION_SHOW_VOICE_INTERACTION;

import static com.google.common.truth.Truth.assertThat;
@@ -55,6 +57,9 @@ import java.util.Optional;

@RunWith(JUnit4.class)
public class SoundTriggerMiddlewareLoggingTest {
    private static final ServiceEvent.Type SERVICE_TYPE = ServiceEvent.Type.ATTACH;
    private static final SessionEvent.Type SESSION_TYPE = SessionEvent.Type.LOAD_MODEL;

    private FakeLatencyTracker mLatencyTracker;
    @Mock
    private BatteryStatsInternal mBatteryStatsInternal;
@@ -184,4 +189,138 @@ public class SoundTriggerMiddlewareLoggingTest {
        callback.onPhraseRecognition(0 /* modelHandle */, successEventWithKeyphraseId,
                0 /* captureSession */);
    }

    @Test
    public void serviceEventException_getStringContainsInfo() {
        String packageName = "com.android.test";
        Exception exception = new Exception("test");
        Object param1 = new Object();
        Object param2 = new Object();
        final var event = ServiceEvent.createForException(
                SERVICE_TYPE, packageName, exception, param1, param2);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SERVICE_TYPE.name());
        assertThat(stringRep).contains(packageName);
        assertThat(stringRep).contains(exception.toString());
        assertThat(stringRep).contains(param1.toString());
        assertThat(stringRep).contains(param2.toString());
        assertThat(stringRep).ignoringCase().contains("error");
    }

    @Test
    public void serviceEventExceptionNoArgs_getStringContainsInfo() {
        String packageName = "com.android.test";
        Exception exception = new Exception("test");
        final var event = ServiceEvent.createForException(
                SERVICE_TYPE, packageName, exception);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SERVICE_TYPE.name());
        assertThat(stringRep).contains(packageName);
        assertThat(stringRep).contains(exception.toString());
        assertThat(stringRep).ignoringCase().contains("error");
    }

    @Test
    public void serviceEventReturn_getStringContainsInfo() {
        String packageName = "com.android.test";
        Object param1 = new Object();
        Object param2 = new Object();
        Object retValue = new Object();
        final var event = ServiceEvent.createForReturn(
                SERVICE_TYPE, packageName, retValue, param1, param2);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SERVICE_TYPE.name());
        assertThat(stringRep).contains(packageName);
        assertThat(stringRep).contains(retValue.toString());
        assertThat(stringRep).contains(param1.toString());
        assertThat(stringRep).contains(param2.toString());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }

    @Test
    public void serviceEventReturnNoArgs_getStringContainsInfo() {
        String packageName = "com.android.test";
        Object retValue = new Object();
        final var event = ServiceEvent.createForReturn(
                SERVICE_TYPE, packageName, retValue);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SERVICE_TYPE.name());
        assertThat(stringRep).contains(packageName);
        assertThat(stringRep).contains(retValue.toString());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }

    @Test
    public void sessionEventException_getStringContainsInfo() {
        Object param1 = new Object();
        Object param2 = new Object();
        Exception exception = new Exception("test");
        final var event = SessionEvent.createForException(
                SESSION_TYPE, exception, param1, param2);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).contains(exception.toString());
        assertThat(stringRep).contains(param1.toString());
        assertThat(stringRep).contains(param2.toString());
        assertThat(stringRep).ignoringCase().contains("error");
    }

    @Test
    public void sessionEventExceptionNoArgs_getStringContainsInfo() {
        Exception exception = new Exception("test");
        final var event = SessionEvent.createForException(
                SESSION_TYPE, exception);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).contains(exception.toString());
        assertThat(stringRep).ignoringCase().contains("error");
    }

    @Test
    public void sessionEventReturn_getStringContainsInfo() {
        Object param1 = new Object();
        Object param2 = new Object();
        Object retValue = new Object();
        final var event = SessionEvent.createForReturn(
                SESSION_TYPE, retValue, param1, param2);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).contains(retValue.toString());
        assertThat(stringRep).contains(param1.toString());
        assertThat(stringRep).contains(param2.toString());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }

    @Test
    public void sessionEventReturnNoArgs_getStringContainsInfo() {
        Object retValue = new Object();
        final var event = SessionEvent.createForReturn(
                SESSION_TYPE, retValue);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).contains(retValue.toString());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }

    @Test
    public void sessionEventVoid_getStringContainsInfo() {
        Object param1 = new Object();
        Object param2 = new Object();
        final var event = SessionEvent.createForVoid(
                SESSION_TYPE, param1, param2);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).contains(param1.toString());
        assertThat(stringRep).contains(param2.toString());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }

    @Test
    public void sessionEventVoidNoArgs_getStringContainsInfo() {
        final var event = SessionEvent.createForVoid(
                SESSION_TYPE);
        final var stringRep = event.eventToString();
        assertThat(stringRep).contains(SESSION_TYPE.name());
        assertThat(stringRep).ignoringCase().doesNotContain("error");
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -44,6 +44,16 @@ class ObjectPrinter {
        return builder.toString();
    }

    /**
     * Same as {@link #print(StringBuilder, Object, int)} with default max length.
     *
     * @param builder             StringBuilder to print into.
     * @param obj                 The object to print.
     */
    static void print(@NonNull StringBuilder builder, @Nullable Object obj) {
        print(builder, obj, kDefaultMaxCollectionLength);
    }

    /**
     * A version of {@link #print(Object, int)} that uses a {@link StringBuilder}.
     *
+381 −218

File changed.

Preview size limit exceeded, changes collapsed.