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

Commit bcc0b914 authored by John Reck's avatar John Reck
Browse files

Fix performance regression in textclassifier

DeviceConfig is far too slow to be used here, so
disable it.

Test: trace calculator launch
Change-Id: I6b7ab56e4015448ee068deb49e7f6fa133fea53c
parent a3151aa9
Loading
Loading
Loading
Loading
+36 −16
Original line number Original line Diff line number Diff line
@@ -33,6 +33,10 @@ public final class ConfigParser {


    private final KeyValueListParser mParser;
    private final KeyValueListParser mParser;


    // TODO: Re-enable DeviceConfig when it has reasonable performance or just delete the
    // option of using DeviceConfig entirely.
    static final boolean ENABLE_DEVICE_CONFIG = false;

    public ConfigParser(@Nullable String textClassifierConstants) {
    public ConfigParser(@Nullable String textClassifierConstants) {
        final KeyValueListParser parser = new KeyValueListParser(',');
        final KeyValueListParser parser = new KeyValueListParser(',');
        try {
        try {
@@ -48,39 +52,55 @@ public final class ConfigParser {
     * Reads a boolean flag.
     * Reads a boolean flag.
     */
     */
    public boolean getBoolean(String key, boolean defaultValue) {
    public boolean getBoolean(String key, boolean defaultValue) {
        if (ENABLE_DEVICE_CONFIG) {
            return DeviceConfig.getBoolean(
            return DeviceConfig.getBoolean(
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    key,
                    key,
                    mParser.getBoolean(key, defaultValue));
                    mParser.getBoolean(key, defaultValue));
        } else {
            return mParser.getBoolean(key, defaultValue);
        }
    }
    }


    /**
    /**
     * Reads an integer flag.
     * Reads an integer flag.
     */
     */
    public int getInt(String key, int defaultValue) {
    public int getInt(String key, int defaultValue) {
        if (ENABLE_DEVICE_CONFIG) {
            return DeviceConfig.getInt(
            return DeviceConfig.getInt(
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    key,
                    key,
                    mParser.getInt(key, defaultValue));
                    mParser.getInt(key, defaultValue));
        } else {
            return mParser.getInt(key, defaultValue);
        }
    }
    }


    /**
    /**
     * Reads a float flag.
     * Reads a float flag.
     */
     */
    public float getFloat(String key, float defaultValue) {
    public float getFloat(String key, float defaultValue) {
        if (ENABLE_DEVICE_CONFIG) {
            return DeviceConfig.getFloat(
            return DeviceConfig.getFloat(
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    key,
                    key,
                    mParser.getFloat(key, defaultValue));
                    mParser.getFloat(key, defaultValue));
        } else {
            return mParser.getFloat(key, defaultValue);
        }
    }
    }


    /**
    /**
     * Reads a string flag.
     * Reads a string flag.
     */
     */
    public String getString(String key, String defaultValue) {
    public String getString(String key, String defaultValue) {
        if (ENABLE_DEVICE_CONFIG) {
            return DeviceConfig.getString(
            return DeviceConfig.getString(
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                    key,
                    key,
                    mParser.getString(key, defaultValue));
                    mParser.getString(key, defaultValue));
        } else {
            return mParser.getString(key, defaultValue);
        }
    }
    }
}
}
+9 −5
Original line number Original line Diff line number Diff line
@@ -197,8 +197,10 @@ public final class TextClassificationManager {
            if (mSettingsObserver != null) {
            if (mSettingsObserver != null) {
                getApplicationContext().getContentResolver()
                getApplicationContext().getContentResolver()
                        .unregisterContentObserver(mSettingsObserver);
                        .unregisterContentObserver(mSettingsObserver);
                if (ConfigParser.ENABLE_DEVICE_CONFIG) {
                    DeviceConfig.removeOnPropertyChangedListener(mSettingsObserver);
                    DeviceConfig.removeOnPropertyChangedListener(mSettingsObserver);
                }
                }
            }
        } finally {
        } finally {
            super.finalize();
            super.finalize();
        }
        }
@@ -292,11 +294,13 @@ public final class TextClassificationManager {
                    Settings.Global.getUriFor(Settings.Global.TEXT_CLASSIFIER_CONSTANTS),
                    Settings.Global.getUriFor(Settings.Global.TEXT_CLASSIFIER_CONSTANTS),
                    false /* notifyForDescendants */,
                    false /* notifyForDescendants */,
                    this);
                    this);
            if (ConfigParser.ENABLE_DEVICE_CONFIG) {
                DeviceConfig.addOnPropertyChangedListener(
                DeviceConfig.addOnPropertyChangedListener(
                        DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                        DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                        ActivityThread.currentApplication().getMainExecutor(),
                        ActivityThread.currentApplication().getMainExecutor(),
                        this);
                        this);
            }
            }
        }


        @Override
        @Override
        public void onChange(boolean selfChange) {
        public void onChange(boolean selfChange) {
+5 −0
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@ import androidx.test.runner.AndroidJUnit4;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;


@@ -58,6 +59,7 @@ public class ConfigParserTest {
    }
    }


    @Test
    @Test
    @Ignore // TODO: Re-enable once ConfigParser#ENABLE_DEVICE_CONFIG is finalized
    public void getBoolean_deviceConfig() {
    public void getBoolean_deviceConfig() {
        DeviceConfig.setProperty(
        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
@@ -77,6 +79,7 @@ public class ConfigParserTest {
    }
    }


    @Test
    @Test
    @Ignore // TODO: Re-enable once ConfigParser#ENABLE_DEVICE_CONFIG is finalized
    public void getInt_deviceConfig() {
    public void getInt_deviceConfig() {
        DeviceConfig.setProperty(
        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
@@ -94,6 +97,7 @@ public class ConfigParserTest {
    }
    }


    @Test
    @Test
    @Ignore // TODO: Re-enable once ConfigParser#ENABLE_DEVICE_CONFIG is finalized
    public void getFloat_deviceConfig() {
    public void getFloat_deviceConfig() {
        DeviceConfig.setProperty(
        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
@@ -111,6 +115,7 @@ public class ConfigParserTest {
    }
    }


    @Test
    @Test
    @Ignore // TODO: Re-enable once ConfigParser#ENABLE_DEVICE_CONFIG is finalized
    public void getString_deviceConfig() {
    public void getString_deviceConfig() {
        DeviceConfig.setProperty(
        DeviceConfig.setProperty(
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,
                DeviceConfig.NAMESPACE_TEXTCLASSIFIER,